From 4f10fb502f7132228b69ef35d08f1a8f30b40959 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=9D=8F=E9=BB=91?= Date: Sun, 18 Feb 2018 00:49:04 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=88=E6=9C=AC=E6=9B=B4=E6=96=B0=E8=87=B3?= =?UTF-8?q?=203.55?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增:ItemUtils 工具新增 isNull() 方法 新增:SpecialItem 工具类 新增:SpecialItemResult 枚举类 新增:AbstractSpecialItem 接口类 新增:Language2Value 对象新增 asString() 方法获取语言文本 新增:ITabooLibraryModule 接口类 新增:TabooLibraryModule 工具类 新增:TLM 框架大致完成。 新增:TLM 框架首个模块 TimeCycle 完成。 修复:Language2 的文本集合类型不再会移除第一条内容了。 --- src/main/src/me/skymc/taboolib/Main.java | 13 ++ .../skymc/taboolib/inventory/ItemUtils.java | 4 + .../speciaitem/AbstractSpecialItem.java | 46 +++++ .../inventory/speciaitem/SpecialItem.java | 181 ++++++++++++++++++ .../speciaitem/SpecialItemResult.java | 39 ++++ .../string/language2/Language2Value.java | 60 ++++-- src/main/src/me/skymc/tlm/TLM.java | 72 +++++++ .../src/me/skymc/tlm/command/TLMCommands.java | 66 +++++++ .../skymc/tlm/module/ITabooLibraryModule.java | 22 +++ .../skymc/tlm/module/TabooLibraryModule.java | 100 ++++++++++ .../skymc/tlm/module/sub/ModuleTimeCycle.java | 114 +++++++++++ src/resources/TLM/TimeCycle.yml | 35 ++++ src/resources/module.yml | 4 + 13 files changed, 737 insertions(+), 19 deletions(-) create mode 100644 src/main/src/me/skymc/taboolib/inventory/speciaitem/AbstractSpecialItem.java create mode 100644 src/main/src/me/skymc/taboolib/inventory/speciaitem/SpecialItem.java create mode 100644 src/main/src/me/skymc/taboolib/inventory/speciaitem/SpecialItemResult.java create mode 100644 src/main/src/me/skymc/tlm/TLM.java create mode 100644 src/main/src/me/skymc/tlm/command/TLMCommands.java create mode 100644 src/main/src/me/skymc/tlm/module/ITabooLibraryModule.java create mode 100644 src/main/src/me/skymc/tlm/module/TabooLibraryModule.java create mode 100644 src/main/src/me/skymc/tlm/module/sub/ModuleTimeCycle.java create mode 100644 src/resources/TLM/TimeCycle.yml create mode 100644 src/resources/module.yml diff --git a/src/main/src/me/skymc/taboolib/Main.java b/src/main/src/me/skymc/taboolib/Main.java index 9ca8deb..a18f523 100644 --- a/src/main/src/me/skymc/taboolib/Main.java +++ b/src/main/src/me/skymc/taboolib/Main.java @@ -36,6 +36,7 @@ import me.skymc.taboolib.economy.EcoUtils; import me.skymc.taboolib.entity.EntityUtils; import me.skymc.taboolib.fileutils.ConfigUtils; import me.skymc.taboolib.inventory.ItemUtils; +import me.skymc.taboolib.inventory.speciaitem.SpecialItem; import me.skymc.taboolib.javashell.JavaShell; import me.skymc.taboolib.listener.ListenerPlayerCommand; import me.skymc.taboolib.listener.ListenerPlayerQuit; @@ -50,6 +51,9 @@ import me.skymc.taboolib.string.language2.Language2; import me.skymc.taboolib.support.SupportPlaceholder; import me.skymc.taboolib.team.TagUtils; import me.skymc.taboolib.timecycle.TimeCycleManager; +import me.skymc.tlm.TLM; +import me.skymc.tlm.command.TLMCommands; +import me.skymc.tlm.module.TabooLibraryModule; import me.skymc.taboolib.nms.item.DabItemUtils; import me.skymc.taboolib.other.NumberUtils; import me.skymc.taboolib.permission.PermissionUtils; @@ -168,6 +172,7 @@ public class Main extends JavaPlugin implements Listener { // 注册指令 getCommand("taboolib").setExecutor(new MainCommands()); getCommand("language2").setExecutor(new Language2Command()); + getCommand("taboolibrarymodule").setExecutor(new TLMCommands()); // 注册监听 registerListener(); @@ -209,6 +214,10 @@ public class Main extends JavaPlugin implements Listener { if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) { new SupportPlaceholder(getInst(), "taboolib").hook(); } + // 载入 SpecialItem 接口 + SpecialItem.getInst().loadItems(); + // 载入 TLM 接口 + TLM.getInst(); } }.runTask(this); } @@ -227,6 +236,10 @@ public class Main extends JavaPlugin implements Listener { PlayerDataManager.saveAllPlayers(false, true); // 结束脚本 JavaShell.javaShellCancel(); + // 注销 SpecialItem 接口 + SpecialItem.getInst().unloadItems(); + // 注销 TLM 接口 + TabooLibraryModule.getInst().unloadModules(); // 结束数据库储存方法 if (getStorageType() == StorageType.SQL) { diff --git a/src/main/src/me/skymc/taboolib/inventory/ItemUtils.java b/src/main/src/me/skymc/taboolib/inventory/ItemUtils.java index 71b24c1..b22b457 100644 --- a/src/main/src/me/skymc/taboolib/inventory/ItemUtils.java +++ b/src/main/src/me/skymc/taboolib/inventory/ItemUtils.java @@ -188,6 +188,10 @@ public class ItemUtils { return i; } + public static boolean isNull(ItemStack item) { + return item == null || item.getType().equals(Material.AIR); + } + public static boolean isName(ItemStack i, String a) { if (!isNamed(i) || i.getItemMeta() == null || i.getItemMeta().getDisplayName() == null || !i.getItemMeta().getDisplayName().equals(a)) { return false; diff --git a/src/main/src/me/skymc/taboolib/inventory/speciaitem/AbstractSpecialItem.java b/src/main/src/me/skymc/taboolib/inventory/speciaitem/AbstractSpecialItem.java new file mode 100644 index 0000000..6099af0 --- /dev/null +++ b/src/main/src/me/skymc/taboolib/inventory/speciaitem/AbstractSpecialItem.java @@ -0,0 +1,46 @@ +package me.skymc.taboolib.inventory.speciaitem; + +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.Plugin; + +/** + * @author sky + * @since 2018217 8:35:42 + */ +public abstract interface AbstractSpecialItem { + + /** + * ӿڱ + */ + default void onEnable() {} + + /** + * ӿڱж + */ + default void onDisable() {} + + /** + * ȡʶ + * + * @return String + */ + abstract String getName(); + + /** + * ȡ + * + * @return {@link Plugin} + */ + abstract Plugin getPlugin(); + + /** + * Ƿе¼ + * + * @param player + * @param currentItem Ʒ + * @param cursorItem Ʒ + * @return {@link SpecialItemResult[]} + */ + abstract SpecialItemResult[] isCorrectClick(Player player, ItemStack currentItem, ItemStack cursorItem); +} diff --git a/src/main/src/me/skymc/taboolib/inventory/speciaitem/SpecialItem.java b/src/main/src/me/skymc/taboolib/inventory/speciaitem/SpecialItem.java new file mode 100644 index 0000000..575a78f --- /dev/null +++ b/src/main/src/me/skymc/taboolib/inventory/speciaitem/SpecialItem.java @@ -0,0 +1,181 @@ +package me.skymc.taboolib.inventory.speciaitem; + +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.server.PluginDisableEvent; +import org.bukkit.plugin.Plugin; + +import lombok.Getter; +import me.skymc.taboolib.Main; +import me.skymc.taboolib.inventory.ItemUtils; +import me.skymc.taboolib.message.MsgUtils; + +/** + * @author sky + * @since 2018217 8:34:12 + */ +public class SpecialItem implements Listener { + + private static SpecialItem specialItem = null; + + private final List ITEM_DATA = new CopyOnWriteArrayList<>(); + + @Getter + private boolean isLoaded; + + /** + * 췽 + */ + private SpecialItem() { + + } + + /** + * ȡ߶ + * + * @return {@link SpecialItem} + */ + public static SpecialItem getInst() { + if (specialItem == null) { + synchronized (SpecialItem.class) { + if (specialItem == null) { + specialItem = new SpecialItem(); + // ע + Bukkit.getPluginManager().registerEvents(specialItem, Main.getInst()); + } + } + } + return specialItem; + } + + /** + * עӿ + * + * @param item ӿڶ + */ + public void register(AbstractSpecialItem item) { + if (contains(item.getName())) { + MsgUtils.warn("ƷӿѴ, &4" + item.getName() + " &cǷظ"); + } + else { + ITEM_DATA.add(item); + if (isLoaded) { + item.onEnable(); + } + } + } + + /** + * עӿ + * + * @param name ע + */ + public void cancel(String name) { + for (AbstractSpecialItem specialitem : ITEM_DATA) { + if (specialitem.getName() != null && specialitem.getName().equals(specialitem)) { + specialitem.onDisable(); + ITEM_DATA.remove(specialitem); + } + } + } + + /** + * עӿ + * + * @param plugin ע + */ + public void cancel(Plugin plugin) { + for (AbstractSpecialItem specialitem : ITEM_DATA) { + if (specialitem.getPlugin() != null && specialitem.getPlugin().equals(plugin)) { + specialitem.onDisable(); + ITEM_DATA.remove(specialitem); + } + } + } + + /** + * жǷ + * + * @param name ע + * @return boolean + */ + public boolean contains(String name) { + for (AbstractSpecialItem specialitem : ITEM_DATA) { + if (specialitem.getName().equals(name)) { + return true; + } + } + return false; + } + + /** + * עӿ + */ + public void loadItems() { + ITEM_DATA.forEach(x -> x.onEnable()); + isLoaded = true; + } + + /** + * עעӿ + */ + public void unloadItems() { + ITEM_DATA.forEach(x -> x.onDisable()); + ITEM_DATA.clear(); + } + + @EventHandler + public void onDisable(PluginDisableEvent e) { + cancel(e.getPlugin()); + } + + @EventHandler (priority = EventPriority.MONITOR) + public void click(InventoryClickEvent e) { + if (e.isCancelled()) { + return; + } + if (ItemUtils.isNull(e.getCurrentItem()) || ItemUtils.isNull(e.getCursor())) { + return; + } + Player player = (Player) e.getWhoClicked(); + for (AbstractSpecialItem specialitem : ITEM_DATA) { + for (SpecialItemResult result : specialitem.isCorrectClick(player, e.getCurrentItem(), e.getCursor())) { + if (result == SpecialItemResult.CANCEL) { + e.setCancelled(true); + } + else if (result == SpecialItemResult.BREAK) { + return; + } + else if (result == SpecialItemResult.REMOVE_ITEM_CURRENT) { + e.setCurrentItem(null); + } + else if (result == SpecialItemResult.REMOVE_ITEM_CURSOR) { + e.getWhoClicked().setItemOnCursor(null); + } + else if (result == SpecialItemResult.REMOVE_ITEM_CURRENT_AMOUNT_1) { + if (e.getCurrentItem().getAmount() > 1) { + e.getCurrentItem().setAmount(e.getCurrentItem().getAmount() - 1); + } + else { + e.setCurrentItem(null); + } + } + else if (result == SpecialItemResult.REMOVE_ITEM_CURSOR_AMOUNT_1) { + if (e.getCursor().getAmount() > 1) { + e.getCursor().setAmount(e.getCursor().getAmount() - 1); + } + else { + e.getWhoClicked().setItemOnCursor(null); + } + } + } + } + } +} diff --git a/src/main/src/me/skymc/taboolib/inventory/speciaitem/SpecialItemResult.java b/src/main/src/me/skymc/taboolib/inventory/speciaitem/SpecialItemResult.java new file mode 100644 index 0000000..d292934 --- /dev/null +++ b/src/main/src/me/skymc/taboolib/inventory/speciaitem/SpecialItemResult.java @@ -0,0 +1,39 @@ +package me.skymc.taboolib.inventory.speciaitem; + +/** + * @author sky + * @since 2018217 8:55:36 + */ +public enum SpecialItemResult { + + /** + * ֹͣӿڼ + */ + BREAK, + + /** + * ȡ¼ + */ + CANCEL, + + /** + * ƳƷ + */ + REMOVE_ITEM_CURRENT, + + /** + * ƳƷ + */ + REMOVE_ITEM_CURSOR, + + /** + * ƳһƷ + */ + REMOVE_ITEM_CURRENT_AMOUNT_1, + + /** + * ƳһƷ + */ + REMOVE_ITEM_CURSOR_AMOUNT_1; + +} diff --git a/src/main/src/me/skymc/taboolib/string/language2/Language2Value.java b/src/main/src/me/skymc/taboolib/string/language2/Language2Value.java index 92e6c1a..af5eddb 100644 --- a/src/main/src/me/skymc/taboolib/string/language2/Language2Value.java +++ b/src/main/src/me/skymc/taboolib/string/language2/Language2Value.java @@ -9,6 +9,8 @@ import java.util.Map.Entry; import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; import lombok.Getter; @@ -38,7 +40,7 @@ public class Language2Value { private LinkedHashMap placeholder = new LinkedHashMap<>(); @Getter - private boolean enablePlaceholderAPI; + private boolean enablePlaceholderAPI = false; /** * 췽 @@ -63,6 +65,14 @@ public class Language2Value { // ȡ String type = languageValue.get(0).toLowerCase(); + // Ƿע + boolean isType = true; + + // ǷPAPI + if (type.contains("[papi]")) { + enablePlaceholderAPI = true; + } + // ж if (type.contains("[json]")) { languageType = Language2Type.JSON; @@ -75,18 +85,13 @@ public class Language2Value { } else { languageType = Language2Type.TEXT; + isType = false; } - // ǷPAPI - if (type.contains("[papi]")) { - enablePlaceholderAPI = true; + // ǷҪɾע + if (isType) { + languageValue.remove(0); } - else { - enablePlaceholderAPI = false; - } - - // ɾ - languageValue.remove(0); } else { // ı @@ -108,24 +113,18 @@ public class Language2Value { public void send(Player player) { // if (languageType == Language2Type.TITLE) { - // ʶı - Language2Title title = new Language2Title(this); // ı - title.send(player); + new Language2Title(this).send(player); } // else if (languageType == Language2Type.ACTION) { - // ʶı - Language2Action action = new Language2Action(this); // ı - action.send(player); + new Language2Action(this).send(player); } // JSON else if (languageType == Language2Type.JSON) { - // ʶı - Language2Json json = new Language2Json(this, player); // ı - json.send(player); + new Language2Json(this, player).send(player); } else { // ı @@ -186,6 +185,29 @@ public class Language2Value { } } + /** + * ȡı + * + * @return + */ + public String asString() { + // + if (languageType == Language2Type.TITLE) { + return new Language2Title(this).getTitle(); + } + // + else if (languageType == Language2Type.ACTION) { + return new Language2Action(this).getText(); + } + // JSON + else if (languageType == Language2Type.JSON) { + return new Language2Json(this, null).getText().toString(); + } + else { + return languageValue.size() == 0 ? ChatColor.DARK_RED + "[]" : languageValue.get(0); + } + } + /** * 滻 * diff --git a/src/main/src/me/skymc/tlm/TLM.java b/src/main/src/me/skymc/tlm/TLM.java new file mode 100644 index 0000000..c4b7592 --- /dev/null +++ b/src/main/src/me/skymc/tlm/TLM.java @@ -0,0 +1,72 @@ +package me.skymc.tlm; + +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.FileConfiguration; + +import lombok.Getter; +import me.skymc.taboolib.Main; +import me.skymc.taboolib.fileutils.ConfigUtils; +import me.skymc.taboolib.message.MsgUtils; +import me.skymc.tlm.module.TabooLibraryModule; +import me.skymc.tlm.module.sub.ModuleTimeCycle; + +/** + * @author sky + * @since 2018217 10:28:05 + */ +public class TLM { + + private static TLM inst = null; + + @Getter + private FileConfiguration config; + + /** + * 췽 + */ + private TLM() { + // ļ + reloadConfig(); + // ģ + if (isEnableModule("TimeCycle")) { + TabooLibraryModule.getInst().register(new ModuleTimeCycle()); + } + // ģ + TabooLibraryModule.getInst().loadModules(); + // ʾ + MsgUtils.send(" &f" + TabooLibraryModule.getInst().getSize() + " &7 &fTLM &7ģ"); + } + + /** + * ȡ TLM + * + * @return TLM + */ + public static TLM getInst() { + if (inst == null) { + synchronized (TLM.class) { + if (inst == null) { + inst = new TLM(); + } + } + } + return inst; + } + + /** + * ļ + */ + public void reloadConfig() { + config = ConfigUtils.saveDefaultConfig(Main.getInst(), "module.yml"); + } + + /** + * ģǷ + * + * @param name + * @return boolean + */ + private boolean isEnableModule(String name) { + return config.getStringList("EnableModule").contains(name); + } +} diff --git a/src/main/src/me/skymc/tlm/command/TLMCommands.java b/src/main/src/me/skymc/tlm/command/TLMCommands.java new file mode 100644 index 0000000..6cf9c9e --- /dev/null +++ b/src/main/src/me/skymc/tlm/command/TLMCommands.java @@ -0,0 +1,66 @@ +package me.skymc.tlm.command; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; + +import me.skymc.taboolib.TabooLib; +import me.skymc.taboolib.message.MsgUtils; +import me.skymc.tlm.TLM; +import me.skymc.tlm.module.ITabooLibraryModule; +import me.skymc.tlm.module.TabooLibraryModule; + +/** + * @author sky + * @since 2018218 12:02:08 + */ +public class TLMCommands implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if (args.length == 0) { + sender.sendMessage("f"); + sender.sendMessage("bl----- 3lTaooLibraryModule Commands bl-----"); + sender.sendMessage("f"); + sender.sendMessage("7 /tlm list f- 8гģ"); + sender.sendMessage("7 /tlm reload [ģ/TLM/ALL] f- 8ļ"); + sender.sendMessage("f"); + } + else if (args[0].equalsIgnoreCase("reload")) { + if (args.length != 2) { + MsgUtils.send(sender, "&4"); + } + + else if (args[1].equalsIgnoreCase("tlm")) { + TLM.getInst().reloadConfig(); + MsgUtils.send(sender, "&fTLM &7ļء"); + } + + else if (args[1].equalsIgnoreCase("all")) { + TabooLibraryModule.getInst().reloadConfig(); + MsgUtils.send(sender, "ģļء"); + } + + else { + ITabooLibraryModule module = TabooLibraryModule.getInst().valueOf(args[1]); + if (module == null) { + MsgUtils.send(sender, "&4ģ &c" + args[1] + " &4ڡ"); + } + else { + TabooLibraryModule.getInst().reloadConfig(module, true); + MsgUtils.send(sender, "ģ &f" + args[1] + " &7ļء"); + } + } + } + else if (args[0].equalsIgnoreCase("list")) { + sender.sendMessage("f"); + sender.sendMessage("bl----- 3lTaooLibraryModule Modules bl-----"); + sender.sendMessage("f"); + for (ITabooLibraryModule module : TabooLibraryModule.getInst().keySet()) { + sender.sendMessage("f - 8" + module.getName()); + } + sender.sendMessage("f"); + } + return true; + } +} diff --git a/src/main/src/me/skymc/tlm/module/ITabooLibraryModule.java b/src/main/src/me/skymc/tlm/module/ITabooLibraryModule.java new file mode 100644 index 0000000..3e7d81b --- /dev/null +++ b/src/main/src/me/skymc/tlm/module/ITabooLibraryModule.java @@ -0,0 +1,22 @@ +package me.skymc.tlm.module; + +import org.bukkit.configuration.file.FileConfiguration; + +/** + * @author sky + * @since 2018217 11:22:42 + */ +public abstract interface ITabooLibraryModule { + + default void onEnable() {} + + default void onDisable() {} + + default void onReload() {}; + + abstract String getName(); + + default FileConfiguration getConfig() { + return TabooLibraryModule.getInst().getConfig(this); + } +} diff --git a/src/main/src/me/skymc/tlm/module/TabooLibraryModule.java b/src/main/src/me/skymc/tlm/module/TabooLibraryModule.java new file mode 100644 index 0000000..7cfa771 --- /dev/null +++ b/src/main/src/me/skymc/tlm/module/TabooLibraryModule.java @@ -0,0 +1,100 @@ +package me.skymc.tlm.module; + +import java.io.File; +import java.util.HashMap; +import java.util.Set; + +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.event.Listener; + +import me.skymc.taboolib.Main; + +/** + * @author sky + * @since 2018217 11:22:48 + */ +public class TabooLibraryModule { + + private final HashMap TLM_MODULE = new HashMap<>(); + private static TabooLibraryModule inst = null; + + private TabooLibraryModule() { + + } + + public static TabooLibraryModule getInst() { + if (inst == null) { + synchronized (TabooLibraryModule.class) { + if (inst == null) { + inst = new TabooLibraryModule(); + } + } + } + return inst; + } + + public void register(ITabooLibraryModule module) { + if (!TLM_MODULE.containsKey(module)) { + TLM_MODULE.put(module, new YamlConfiguration()); + reloadConfig(module, false); + } + } + + public void loadModules() { + for (ITabooLibraryModule module : TLM_MODULE.keySet()) { + module.onEnable(); + if (module instanceof Listener) { + Bukkit.getPluginManager().registerEvents((Listener) module, Main.getInst()); + } + } + } + + public void unloadModules() { + TLM_MODULE.keySet().forEach(x -> x.onDisable()); + } + + public void reloadConfig() { + TLM_MODULE.keySet().forEach(x -> reloadConfig(x, true)); + } + + public void reloadConfig(ITabooLibraryModule module, boolean isReload) { + if (module.getName() == null) { + return; + } + File file = new File(Main.getInst().getDataFolder(), "TLM/" + module.getName() + ".yml"); + if (!file.exists()) { + Main.getInst().saveResource("TLM/" + module.getName() + ".yml", true); + } + try { + TLM_MODULE.get(module).load(file); + } catch (Exception e) { + // TODO Auto-generated catch block + } + if (isReload) { + module.onReload(); + } + } + + public FileConfiguration getConfig(ITabooLibraryModule module) { + return TLM_MODULE.get(module); + } + + public int getSize() { + return TLM_MODULE.size(); + } + + public Set keySet() { + return TLM_MODULE.keySet(); + } + + public ITabooLibraryModule valueOf(String name) { + for (ITabooLibraryModule module : TLM_MODULE.keySet()) { + if (module.getName().equals(name)) { + return module; + } + } + return null; + } +} diff --git a/src/main/src/me/skymc/tlm/module/sub/ModuleTimeCycle.java b/src/main/src/me/skymc/tlm/module/sub/ModuleTimeCycle.java new file mode 100644 index 0000000..3e440c3 --- /dev/null +++ b/src/main/src/me/skymc/tlm/module/sub/ModuleTimeCycle.java @@ -0,0 +1,114 @@ +package me.skymc.tlm.module.sub; + +import java.util.Calendar; +import java.util.Date; + +import org.bukkit.Bukkit; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.scheduler.BukkitRunnable; + +import me.skymc.taboolib.Main; +import me.skymc.taboolib.message.MsgUtils; +import me.skymc.taboolib.other.DateUtils; +import me.skymc.taboolib.other.NumberUtils; +import me.skymc.taboolib.timecycle.TimeCycle; +import me.skymc.taboolib.timecycle.TimeCycleEvent; +import me.skymc.taboolib.timecycle.TimeCycleInitializeEvent; +import me.skymc.taboolib.timecycle.TimeCycleManager; +import me.skymc.tlm.module.ITabooLibraryModule; + +/** + * @author sky + * @since 2018217 11:23:38 + */ +public class ModuleTimeCycle implements ITabooLibraryModule, Listener { + + @Override + public String getName() { + return "TimeCycle"; + } + + @Override + public void onEnable() { + // + loadCycles(); + } + + @Override + public void onDisable() { + // ע + unloadCycles(); + } + + @Override + public void onReload() { + // ע + unloadCycles(); + // + loadCycles(); + } + + @EventHandler + public void onTimeCycleInitialize(TimeCycleInitializeEvent e) { + if (e.getCycle().getName().contains("tlm|")) { + // ȡ + String name = e.getCycle().getName().replace("tlm|", ""); + // гʼʱ + if (getConfig().contains("TimeCycle." + name + ".Initialise.InitialiseDate")) { + // ȡʱ + Calendar date = Calendar.getInstance(); + // ʼ + for (String typeStr : getConfig().getStringList("TimeCycle." + name + ".Initialise.InitialiseDate")) { + try { + int type = (int) Calendar.class.getField(typeStr.split("=")[0]).get(Calendar.class); + date.set(type, NumberUtils.getInteger(typeStr.split("=")[1])); + } catch (Exception err) { + MsgUtils.warn("ģ쳣"); + MsgUtils.warn("ģ: &4TimeCycle"); + MsgUtils.warn("λ: &4" + typeStr); + } + } + e.setTimeLine(date.getTimeInMillis()); + } + // гʼ + if (getConfig().contains("TimeCycle." + name + ".Initialise.InitialiseCommand")) { + // ʼ + for (String command : getConfig().getStringList("TimeCycle." + name + ".Initialise.InitialiseCommand")) { + // ִ + Bukkit.getScheduler().runTask(Main.getInst(), () -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command)); + } + } + } + } + + @EventHandler + public void onTimeCycle(TimeCycleEvent e) { + if (e.getCycle().getName().contains("tlm|")) { + // ȡ + String name = e.getCycle().getName().replace("tlm|", ""); + // и + if (getConfig().contains("TimeCycle." + name + ".UpdateCommand")) { + // + for (String command : getConfig().getStringList("TimeCycle." + name + ".UpdateCommand")) { + // ִ + Bukkit.getScheduler().runTask(Main.getInst(), () -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command)); + } + } + } + } + + private void loadCycles() { + for (String name : getConfig().getConfigurationSection("TimeCycle").getKeys(false)) { + TimeCycleManager.register(new TimeCycle("tlm|" + name, DateUtils.formatDate(getConfig().getString("TimeCycle." + name + ".Cycle")), Main.getInst())); + } + } + + private void unloadCycles() { + for (TimeCycle cycle : TimeCycleManager.getTimeCycles()) { + if (cycle.getName().startsWith("tlm|")) { + TimeCycleManager.cancel(cycle.getName()); + } + } + } +} diff --git a/src/resources/TLM/TimeCycle.yml b/src/resources/TLM/TimeCycle.yml new file mode 100644 index 0000000..6a4e5a8 --- /dev/null +++ b/src/resources/TLM/TimeCycle.yml @@ -0,0 +1,35 @@ +# 时间检查器 +TimeCycle: + # 检查器名称 + cycle_name: + # 检查器周期 + # ---------- # + # 1d = 1天 + # 1h = 1小时 + # 1m = 1分钟 + # 1s = 1秒钟 + # 时间之间用 ";" 分隔, 例如 1小时30分钟 = "1h;30m" + # ---------- # + Cycle: '1d' + + # 更新配置 + UpdateCommand: + - 'say 检查器 cycle_name 更新!' + + # 初始化配置 + Initialise: + # 初始化时间 + # 特殊时间 + # - DAY_OF_WEEK = 本周第几天 (最小:1) + # - DAY_OF_MONTH = 本月第几天 (最小:1) + InitialiseDate: + # 初始化时将小时设置为 0 + - 'HOUR_OF_DAY=0' + # 初始化时将分钟设置为 0 + - 'MINUTE=0' + # 初始化时将秒钟设置为 0 + - 'SECOND=0' + + # 初始化命令 + InitialiseCommand: + - 'say 检查器 cycle_name 初始化完成!' \ No newline at end of file diff --git a/src/resources/module.yml b/src/resources/module.yml new file mode 100644 index 0000000..bc13058 --- /dev/null +++ b/src/resources/module.yml @@ -0,0 +1,4 @@ +# 启用模块 +# 该配置需要重启服务器才会生效 +EnableModule: +#- 'TimeCycle' \ No newline at end of file