diff --git a/.documentation/javadoc/JAVADOC-README.md b/.documentation/javadoc/JAVADOC-README.md index 91fe6e3..ef80bbb 100644 --- a/.documentation/javadoc/JAVADOC-README.md +++ b/.documentation/javadoc/JAVADOC-README.md @@ -4,6 +4,6 @@ ## 如何实现? -若您也想通过 [Github Actions](https://docs.github.com/en/actions/learn-github-actions) +若您也想通过 [Github Actions](https://docs.github.com/en/actions/learn-github-actions) 自动部署项目的Javadoc到 [Github Pages](https://pages.github.com/) , 可以参考我的文章 [《自动部署Javadoc到Github Pages》](https://pages.carm.cc/doc/javadoc-in-github.html) 。 \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bugs_report.md b/.github/ISSUE_TEMPLATE/bugs_report.md index ac6d686..9f464c2 100644 --- a/.github/ISSUE_TEMPLATE/bugs_report.md +++ b/.github/ISSUE_TEMPLATE/bugs_report.md @@ -14,6 +14,7 @@ assignees: '' ### **问题来源** 描述一下通过哪些操作才发现的问题,如: + 1. 使用了 ... 2. 输入了 ... 3. 出现了报错 ... @@ -32,7 +33,6 @@ assignees: '' - Java版本: `JDK11` / `OPENJDK8` / `JRE8` / `...` - 服务端版本: 请在后台输入 `version` 并复制相关输出。 - ### **其他补充** 如有其他补充,可以在这里描述。 diff --git a/.github/ISSUE_TEMPLATE/feature_issues.md b/.github/ISSUE_TEMPLATE/feature_issues.md index 9407bad..0f6498a 100644 --- a/.github/ISSUE_TEMPLATE/feature_issues.md +++ b/.github/ISSUE_TEMPLATE/feature_issues.md @@ -8,13 +8,17 @@ assignees: '' --- ### **功能简述** + 简单的描述一下你想要的功能 ### **需求来源** + 简单的描述一下为什么需要这个功能。 ### **功能参考**(可选) + 如果有相关功能的参考,如文本、截图,请提供给我们。 ### **附加内容** + 如果有什么小细节需要重点注意,请在这里告诉我们。 diff --git a/base/command/pom.xml b/base/command/pom.xml index b237222..673a0f1 100644 --- a/base/command/pom.xml +++ b/base/command/pom.xml @@ -5,7 +5,7 @@ easyplugin-parent cc.carm.lib - 1.4.6 + 1.4.7 ../../pom.xml 4.0.0 diff --git a/base/command/src/main/java/cc/carm/lib/easyplugin/command/CommandHandler.java b/base/command/src/main/java/cc/carm/lib/easyplugin/command/CommandHandler.java index e7c15da..e7d1891 100644 --- a/base/command/src/main/java/cc/carm/lib/easyplugin/command/CommandHandler.java +++ b/base/command/src/main/java/cc/carm/lib/easyplugin/command/CommandHandler.java @@ -1,4 +1,3 @@ - package cc.carm.lib.easyplugin.command; import org.bukkit.command.Command; diff --git a/base/gui/pom.xml b/base/gui/pom.xml index 65fb0f8..cde3eff 100644 --- a/base/gui/pom.xml +++ b/base/gui/pom.xml @@ -5,7 +5,7 @@ easyplugin-parent cc.carm.lib - 1.4.6 + 1.4.7 ../../pom.xml 4.0.0 diff --git a/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/GUI.java b/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/GUI.java index 25fe470..bbdcae9 100644 --- a/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/GUI.java +++ b/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/GUI.java @@ -21,191 +21,193 @@ import java.util.stream.IntStream; public class GUI { - private static JavaPlugin plugin; - private static final HashMap openedGUIs = new HashMap<>(); + private static JavaPlugin plugin; + private static final HashMap openedGUIs = new HashMap<>(); - public static void initialize(JavaPlugin plugin) { - GUI.plugin = plugin; - } + public static void initialize(JavaPlugin plugin) { + GUI.plugin = plugin; + } - public static JavaPlugin getPlugin() { - return plugin; - } + public static JavaPlugin getPlugin() { + return plugin; + } - public static HashMap getOpenedGUIs() { - return openedGUIs; - } + public static HashMap getOpenedGUIs() { + return openedGUIs; + } - protected GUIType type; - protected String name; - public HashMap items; - public Inventory inv; + protected GUIType type; + protected String name; + public HashMap items; + public Inventory inv; - /** - * 当玩家点击目标GUI时是否取消 - */ - boolean cancelOnTarget = true; + /** + * 当玩家点击目标GUI时是否取消 + */ + boolean cancelOnTarget = true; - /** - * 当玩家点击自己背包时是否取消 - */ - boolean cancelOnSelf = true; + /** + * 当玩家点击自己背包时是否取消 + */ + boolean cancelOnSelf = true; - /** - * 当玩家点击界面外时是否取消 - */ - boolean cancelOnOuter = true; + /** + * 当玩家点击界面外时是否取消 + */ + boolean cancelOnOuter = true; - Map flags; + Map flags; - GUIListener listener; + GUIListener listener; - public GUI(GUIType type, String name) { - this.type = type; - this.name = ColorParser.parse(name); - this.items = new HashMap<>(); - } + public GUI(GUIType type, String name) { + this.type = type; + this.name = ColorParser.parse(name); + this.items = new HashMap<>(); + } - public HashMap<@NotNull Integer, @NotNull GUIItem> getItems() { - return new HashMap<>(items); - } + public HashMap<@NotNull Integer, @NotNull GUIItem> getItems() { + return new HashMap<>(items); + } - public final void setItem(int index, @Nullable GUIItem item) { - if (item == null) { - this.items.remove(index); - } else { - this.items.put(index, item); - } - } + public final void setItem(int index, @Nullable GUIItem item) { + if (item == null) { + this.items.remove(index); + } else { + this.items.put(index, item); + } + } - public void setItem(GUIItem item, int... index) { - for (int i : index) { - setItem(i, item); - } - } + public void setItem(GUIItem item, int... index) { + for (int i : index) { + setItem(i, item); + } + } - public GUIItem getItem(int index) { - return this.items.get(index); - } + public GUIItem getItem(int index) { + return this.items.get(index); + } - /** - * 更新玩家箱子的视图 - */ - public void updateView() { - if (this.inv != null) { - List viewers = this.inv.getViewers(); - IntStream.range(0, this.inv.getSize()).forEach(index -> inv.setItem(index, new ItemStack(Material.AIR))); - getItems().forEach((index, item) -> inv.setItem(index, item.getDisplay())); - viewers.forEach(p -> ((Player) p).updateInventory()); - } - } + /** + * 更新玩家箱子的视图 + */ + public void updateView() { + if (this.inv != null) { + List viewers = this.inv.getViewers(); + IntStream.range(0, this.inv.getSize()).forEach(index -> inv.setItem(index, new ItemStack(Material.AIR))); + getItems().forEach((index, item) -> inv.setItem(index, item.getDisplay())); + viewers.forEach(p -> ((Player) p).updateInventory()); + } + } - /** - * 设置是否取消点击GUI内物品的事件 - * 如果不取消,玩家可以从GUI中拿取物品。 - * - * @param b 是否取消 - */ - public void setCancelOnTarget(boolean b) { - this.cancelOnTarget = b; - } + /** + * 设置是否取消点击GUI内物品的事件 + * 如果不取消,玩家可以从GUI中拿取物品。 + * + * @param b 是否取消 + */ + public void setCancelOnTarget(boolean b) { + this.cancelOnTarget = b; + } - /** - * 设置是否取消点击自己背包内物品的事件 - * 如果不取消,玩家可以从自己的背包中拿取物品。 - * - * @param b 是否取消 - */ - public void setCancelOnSelf(boolean b) { - this.cancelOnSelf = b; - } + /** + * 设置是否取消点击自己背包内物品的事件 + * 如果不取消,玩家可以从自己的背包中拿取物品。 + * + * @param b 是否取消 + */ + public void setCancelOnSelf(boolean b) { + this.cancelOnSelf = b; + } - /** - * 设置是否取消点击GUI外的事件 - * 如果不取消,玩家可以把物品从GUI或背包中丢出去 - * - * @param b 是否取消 - */ - public void setCancelOnOuter(boolean b) { - this.cancelOnOuter = b; - } + /** + * 设置是否取消点击GUI外的事件 + * 如果不取消,玩家可以把物品从GUI或背包中丢出去 + * + * @param b 是否取消 + */ + public void setCancelOnOuter(boolean b) { + this.cancelOnOuter = b; + } - public void addFlag(String flag, Object obj) { - if (this.flags == null) this.flags = new HashMap<>(); - this.flags.put(flag, obj); - } + public void addFlag(String flag, Object obj) { + if (this.flags == null) this.flags = new HashMap<>(); + this.flags.put(flag, obj); + } - public Object getFlag(String flag) { - if (this.flags == null) return null; - else - return this.flags.get(flag); - } + public Object getFlag(String flag) { + if (this.flags == null) return null; + else + return this.flags.get(flag); + } - public void setFlag(String flag, Object obj) { - if (this.flags == null) this.flags = new HashMap<>(); - this.flags.replace(flag, obj); - } + public void setFlag(String flag, Object obj) { + if (this.flags == null) this.flags = new HashMap<>(); + this.flags.replace(flag, obj); + } - public void removeFlag(String flag) { - if (this.flags == null) this.flags = new HashMap<>(); - this.flags.remove(flag); - } + public void removeFlag(String flag) { + if (this.flags == null) this.flags = new HashMap<>(); + this.flags.remove(flag); + } - public void rawClickListener(InventoryClickEvent event) { - } + public void rawClickListener(InventoryClickEvent event) { + } - public void openGUI(Player player) { - if (this.type == GUIType.CANCEL) { throw new IllegalStateException("被取消或不存在的GUI"); } + public void openGUI(Player player) { + if (this.type == GUIType.CANCEL) { + throw new IllegalStateException("被取消或不存在的GUI"); + } - Inventory inv = Bukkit.createInventory(null, this.type.getSize(), this.name); - IntStream.range(0, inv.getSize()).forEach(index -> inv.setItem(index, new ItemStack(Material.AIR))); - getItems().forEach((index, item) -> inv.setItem(index, item.getDisplay())); + Inventory inv = Bukkit.createInventory(null, this.type.getSize(), this.name); + IntStream.range(0, inv.getSize()).forEach(index -> inv.setItem(index, new ItemStack(Material.AIR))); + getItems().forEach((index, item) -> inv.setItem(index, item.getDisplay())); - GUI previous = getOpenedGUI(player); - if(previous != null){ - previous.listener.close(player); - } + GUI previous = getOpenedGUI(player); + if (previous != null) { + previous.listener.close(player); + } - setOpenedGUI(player, this); + setOpenedGUI(player, this); - this.inv = inv; - player.openInventory(inv); + this.inv = inv; + player.openInventory(inv); - if (listener == null) { - Bukkit.getPluginManager().registerEvents(listener = new GUIListener(this), getPlugin()); - } - } + if (listener == null) { + Bukkit.getPluginManager().registerEvents(listener = new GUIListener(this), getPlugin()); + } + } - /** - * 拖动GUI内物品是执行的代码 - * - * @param event InventoryDragEvent - */ - public void onDrag(InventoryDragEvent event) { - } + /** + * 拖动GUI内物品是执行的代码 + * + * @param event InventoryDragEvent + */ + public void onDrag(InventoryDragEvent event) { + } - /** - * 关闭GUI时执行的代码 - */ - public void onClose() { - } + /** + * 关闭GUI时执行的代码 + */ + public void onClose() { + } - public static void setOpenedGUI(Player player, GUI gui) { - getOpenedGUIs().put(player.getUniqueId(), gui); - } + public static void setOpenedGUI(Player player, GUI gui) { + getOpenedGUIs().put(player.getUniqueId(), gui); + } - public static boolean hasOpenedGUI(Player player) { - return getOpenedGUIs().containsKey(player.getUniqueId()); - } + public static boolean hasOpenedGUI(Player player) { + return getOpenedGUIs().containsKey(player.getUniqueId()); + } - public static GUI getOpenedGUI(Player player) { - return getOpenedGUIs().get(player.getUniqueId()); - } + public static GUI getOpenedGUI(Player player) { + return getOpenedGUIs().get(player.getUniqueId()); + } - public static void removeOpenedGUI(Player player) { - getOpenedGUIs().remove(player.getUniqueId()); - } + public static void removeOpenedGUI(Player player) { + getOpenedGUIs().remove(player.getUniqueId()); + } } diff --git a/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/GUIItem.java b/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/GUIItem.java index f0c51ad..849d779 100644 --- a/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/GUIItem.java +++ b/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/GUIItem.java @@ -10,64 +10,64 @@ import java.util.Set; public class GUIItem { - ItemStack display; - boolean actionActive = true; + ItemStack display; + boolean actionActive = true; - public Set actions = new HashSet<>(); - public Set actionsIgnoreActive = new HashSet<>(); + public Set actions = new HashSet<>(); + public Set actionsIgnoreActive = new HashSet<>(); - public GUIItem(ItemStack display) { - this.display = display; - } + public GUIItem(ItemStack display) { + this.display = display; + } - public final ItemStack getDisplay() { - return this.display; - } + public final ItemStack getDisplay() { + return this.display; + } - public final void setDisplay(ItemStack display) { - this.display = display; - } + public final void setDisplay(ItemStack display) { + this.display = display; + } - public final boolean isActionActive() { - return this.actionActive; - } + public final boolean isActionActive() { + return this.actionActive; + } - public final void setActionActive(boolean b) { - actionActive = b; - } + public final void setActionActive(boolean b) { + actionActive = b; + } - /** - * 玩家点击GUI后执行的代码 - * - * @param type 点击的类型 - */ - public void onClick(ClickType type) { + /** + * 玩家点击GUI后执行的代码 + * + * @param type 点击的类型 + */ + public void onClick(ClickType type) { - } + } - public void addClickAction(GUIClickAction action) { - actions.add(action); - } + public void addClickAction(GUIClickAction action) { + actions.add(action); + } - public void addActionIgnoreActive(GUIClickAction action) { - actionsIgnoreActive.add(action); - } + public void addActionIgnoreActive(GUIClickAction action) { + actionsIgnoreActive.add(action); + } - public void rawClickAction(InventoryClickEvent event) { + public void rawClickAction(InventoryClickEvent event) { - } + } - /** - * 玩家点击GUI后执行的代码 - * - * @param player 点击GUI的玩家 - */ - public void customAction(Player player) { + /** + * 玩家点击GUI后执行的代码 + * + * @param player 点击GUI的玩家 + */ + public void customAction(Player player) { - } + } - public abstract static class GUIClickAction { - public abstract void run(ClickType type, Player player); - } + public abstract static class GUIClickAction { + public abstract void run(ClickType type, Player player); + } } diff --git a/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/GUIListener.java b/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/GUIListener.java index 2a0cb33..cb94d0b 100644 --- a/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/GUIListener.java +++ b/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/GUIListener.java @@ -11,82 +11,82 @@ import org.bukkit.event.player.PlayerQuitEvent; public class GUIListener implements Listener { - GUI currentGUI; + GUI currentGUI; - public GUIListener(GUI gui) { - this.currentGUI = gui; - } + public GUIListener(GUI gui) { + this.currentGUI = gui; + } - public GUI getCurrentGUI() { - return currentGUI; - } + public GUI getCurrentGUI() { + return currentGUI; + } - @EventHandler - public void onInventoryClickEvent(InventoryClickEvent event) { - if (!(event.getWhoClicked() instanceof Player)) return; - Player player = (Player) event.getWhoClicked(); - if (!GUI.hasOpenedGUI(player)) return; - if (GUI.getOpenedGUI(player) != getCurrentGUI()) return; + @EventHandler + public void onInventoryClickEvent(InventoryClickEvent event) { + if (!(event.getWhoClicked() instanceof Player)) return; + Player player = (Player) event.getWhoClicked(); + if (!GUI.hasOpenedGUI(player)) return; + if (GUI.getOpenedGUI(player) != getCurrentGUI()) return; - getCurrentGUI().rawClickListener(event); + getCurrentGUI().rawClickListener(event); - if (event.getSlot() == -999 && getCurrentGUI().cancelOnOuter) { - event.setCancelled(true); - return; - } + if (event.getSlot() == -999 && getCurrentGUI().cancelOnOuter) { + event.setCancelled(true); + return; + } - if (event.getClickedInventory() == null) return; + if (event.getClickedInventory() == null) return; - if (event.getClickedInventory().equals(getCurrentGUI().inv)) { + if (event.getClickedInventory().equals(getCurrentGUI().inv)) { - if (getCurrentGUI().cancelOnTarget) event.setCancelled(true); + if (getCurrentGUI().cancelOnTarget) event.setCancelled(true); - if (event.getSlot() != -999) { - GUIItem clickedItem = getCurrentGUI().getItem(event.getSlot()); - if (clickedItem != null) { - if (clickedItem.isActionActive()) { - clickedItem.onClick(event.getClick()); - clickedItem.rawClickAction(event); - clickedItem.actions.forEach(action -> action.run(event.getClick(), player)); - } - clickedItem.actionsIgnoreActive.forEach(action -> action.run(event.getClick(), player)); - } - } + if (event.getSlot() != -999) { + GUIItem clickedItem = getCurrentGUI().getItem(event.getSlot()); + if (clickedItem != null) { + if (clickedItem.isActionActive()) { + clickedItem.onClick(event.getClick()); + clickedItem.rawClickAction(event); + clickedItem.actions.forEach(action -> action.run(event.getClick(), player)); + } + clickedItem.actionsIgnoreActive.forEach(action -> action.run(event.getClick(), player)); + } + } - } else if (event.getClickedInventory().equals(player.getInventory()) && getCurrentGUI().cancelOnSelf) { - event.setCancelled(true); - } + } else if (event.getClickedInventory().equals(player.getInventory()) && getCurrentGUI().cancelOnSelf) { + event.setCancelled(true); + } - } + } - @EventHandler - public void onDrag(InventoryDragEvent e) { - if (!(e.getWhoClicked() instanceof Player)) return; - if (e.getInventory().equals(getCurrentGUI().inv) - || e.getInventory().equals(e.getWhoClicked().getInventory())) { - getCurrentGUI().onDrag(e); - } - } + @EventHandler + public void onDrag(InventoryDragEvent e) { + if (!(e.getWhoClicked() instanceof Player)) return; + if (e.getInventory().equals(getCurrentGUI().inv) + || e.getInventory().equals(e.getWhoClicked().getInventory())) { + getCurrentGUI().onDrag(e); + } + } - @EventHandler - public void onInventoryCloseEvent(InventoryCloseEvent event) { - if (!(event.getPlayer() instanceof Player)) return; - if (!event.getInventory().equals(getCurrentGUI().inv)) return; + @EventHandler + public void onInventoryCloseEvent(InventoryCloseEvent event) { + if (!(event.getPlayer() instanceof Player)) return; + if (!event.getInventory().equals(getCurrentGUI().inv)) return; - close((Player) event.getPlayer()); + close((Player) event.getPlayer()); - } + } - protected void close(Player p){ - HandlerList.unregisterAll(this); - getCurrentGUI().listener = null; - GUI.removeOpenedGUI(p); - getCurrentGUI().onClose(); - } + protected void close(Player p) { + HandlerList.unregisterAll(this); + getCurrentGUI().listener = null; + GUI.removeOpenedGUI(p); + getCurrentGUI().onClose(); + } - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) { - GUI.removeOpenedGUI(event.getPlayer()); - } + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + GUI.removeOpenedGUI(event.getPlayer()); + } } diff --git a/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/GUIType.java b/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/GUIType.java index cdf529a..514dbc0 100644 --- a/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/GUIType.java +++ b/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/GUIType.java @@ -6,44 +6,44 @@ import java.util.Arrays; public enum GUIType { - ONE_BY_NINE(1, 9), - TWO_BY_NINE(2, 18), - THREE_BY_NINE(3, 27), - FOUR_BY_NINE(4, 36), - FIVE_BY_NINE(5, 45), - SIX_BY_NINE(6, 54), - CANCEL(0, 0); + ONE_BY_NINE(1, 9), + TWO_BY_NINE(2, 18), + THREE_BY_NINE(3, 27), + FOUR_BY_NINE(4, 36), + FIVE_BY_NINE(5, 45), + SIX_BY_NINE(6, 54), + CANCEL(0, 0); - int lines; - int size; + int lines; + int size; - GUIType(int lines, int size) { - this.lines = lines; - this.size = size; - } + GUIType(int lines, int size) { + this.lines = lines; + this.size = size; + } - public int getLines() { - return lines; - } + public int getLines() { + return lines; + } - public int getSize() { - return size; - } + public int getSize() { + return size; + } - @NotNull - public static GUIType getBySize(int size) { - return Arrays.stream(values()).filter(type -> type.getSize() == size).findFirst().orElse(CANCEL); - } + @NotNull + public static GUIType getBySize(int size) { + return Arrays.stream(values()).filter(type -> type.getSize() == size).findFirst().orElse(CANCEL); + } - @NotNull - public static GUIType getByLines(int lines) { - return Arrays.stream(values()).filter(type -> type.getLines() == lines).findFirst().orElse(CANCEL); - } + @NotNull + public static GUIType getByLines(int lines) { + return Arrays.stream(values()).filter(type -> type.getLines() == lines).findFirst().orElse(CANCEL); + } - @NotNull - public static GUIType getByName(String name) { - return Arrays.stream(values()).filter(type -> type.name().equalsIgnoreCase(name)).findFirst().orElse(CANCEL); - } + @NotNull + public static GUIType getByName(String name) { + return Arrays.stream(values()).filter(type -> type.name().equalsIgnoreCase(name)).findFirst().orElse(CANCEL); + } } diff --git a/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/configuration/GUIActionConfiguration.java b/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/configuration/GUIActionConfiguration.java index fe8a32c..f44f002 100644 --- a/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/configuration/GUIActionConfiguration.java +++ b/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/configuration/GUIActionConfiguration.java @@ -3,51 +3,104 @@ package cc.carm.lib.easyplugin.gui.configuration; import cc.carm.lib.easyplugin.gui.GUIItem; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; +import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class GUIActionConfiguration { + public static @NotNull GUIActionConfiguration of(@NotNull GUIActionType actionType, + @Nullable ClickType clickType, + @Nullable String actionContent) { + return new GUIActionConfiguration(actionType, clickType, actionContent); + } - @Nullable ClickType clickType; - final @NotNull GUIActionType actionType; - final @Nullable String actionContent; + public static @NotNull GUIActionConfiguration of(@NotNull GUIActionType actionType, + @Nullable String actionContent) { + return of(actionType, null, actionContent); + } - public GUIActionConfiguration(@Nullable ClickType clickType, - @NotNull GUIActionType actionType, - @Nullable String actionContent) { - this.clickType = clickType; - this.actionType = actionType; - this.actionContent = actionContent; - } + public static @NotNull GUIActionConfiguration of(@NotNull GUIActionType actionType, + @Nullable ClickType clickType) { + return of(actionType, clickType, null); + } - public @Nullable ClickType getClickType() { - return clickType; - } + public static @NotNull GUIActionConfiguration of(@NotNull GUIActionType actionType) { + return of(actionType, null, null); + } - public @NotNull GUIActionType getActionType() { - return actionType; - } + protected final @NotNull GUIActionType actionType; - public @Nullable String getActionContent() { - return actionContent; - } + protected final @Nullable ClickType clickType; + protected final @Nullable String actionContent; - public void checkAction(Player player, ClickType type) { - if (getClickType() == null || getClickType() == type) executeAction(player); - } + public GUIActionConfiguration(@NotNull GUIActionType actionType, + @Nullable ClickType clickType, + @Nullable String actionContent) { + this.clickType = clickType; + this.actionType = actionType; + this.actionContent = actionContent; + } - public void executeAction(Player targetPlayer) { - getActionType().getExecutor().accept(targetPlayer, getActionContent()); - } + public @Nullable ClickType getClickType() { + return clickType; + } - public GUIItem.GUIClickAction toClickAction() { - return new GUIItem.GUIClickAction() { - @Override - public void run(ClickType type, Player player) { - checkAction(player, type); - } - }; - } + public @NotNull GUIActionType getActionType() { + return actionType; + } + + public @Nullable String getActionContent() { + return actionContent; + } + + public void checkAction(Player player, ClickType type) { + if (getClickType() == null || getClickType() == type) executeAction(player); + } + + public void executeAction(Player targetPlayer) { + getActionType().getExecutor().accept(targetPlayer, getActionContent()); + } + + public GUIItem.GUIClickAction toClickAction() { + return new GUIItem.GUIClickAction() { + @Override + public void run(ClickType type, Player player) { + checkAction(player, type); + } + }; + } + + @Nullable + @Contract("null->null") + public static GUIActionConfiguration deserialize(@Nullable String actionString) { + if (actionString == null) return null; + + int prefixStart = actionString.indexOf("["); + int prefixEnd = actionString.indexOf("]"); + if (prefixStart < 0 || prefixEnd < 0) return null; + + String prefix = actionString.substring(prefixStart + 1, prefixEnd); + ClickType clickType = null; + GUIActionType actionType; + if (prefix.contains(":")) { + String[] args = prefix.split(":"); + clickType = GUIConfiguration.readClickType(args[0]); + actionType = GUIActionType.readActionType(args[1]); + } else { + actionType = GUIActionType.readActionType(prefix); + } + + if (actionType == null) return null; + + String content = actionString.substring(prefixEnd + 1).trim(); + return of(actionType, clickType, content); + } + + public @NotNull String serialize() { + String prefix = "[" + getActionType().name() + (getClickType() == null ? "" : ":" + getClickType().name()) + "]"; + String content = getActionContent() == null ? "" : " " + getActionContent(); + return prefix + content; + } } diff --git a/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/configuration/GUIActionType.java b/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/configuration/GUIActionType.java index 0230b3f..e442aa1 100644 --- a/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/configuration/GUIActionType.java +++ b/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/configuration/GUIActionType.java @@ -13,76 +13,76 @@ import java.util.function.BiConsumer; public enum GUIActionType { - /** - * 以玩家聊天的形式执行 - * 若内容以 “/" 开头,则会以玩家身份执行命令。 - */ - CHAT((player, string) -> { - if (string == null) return; - MessageUtils.setPlaceholders(player, Collections.singletonList(string)).forEach(player::chat); - }), + /** + * 以玩家聊天的形式执行 + * 若内容以 “/" 开头,则会以玩家身份执行命令。 + */ + CHAT((player, string) -> { + if (string == null) return; + MessageUtils.setPlaceholders(player, Collections.singletonList(string)).forEach(player::chat); + }), - /** - * 以后台的形式执行指令 - * 指令内容不需要以“/”开头。 - */ - CONSOLE((player, string) -> { - if (string == null) return; - MessageUtils.setPlaceholders(player, Collections.singletonList(string)) - .forEach(message -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), message)); - }), + /** + * 以后台的形式执行指令 + * 指令内容不需要以“/”开头。 + */ + CONSOLE((player, string) -> { + if (string == null) return; + MessageUtils.setPlaceholders(player, Collections.singletonList(string)) + .forEach(message -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), message)); + }), - /** - * 向玩家发送消息。 - */ - MESSAGE(MessageUtils::send), + /** + * 向玩家发送消息。 + */ + MESSAGE(MessageUtils::send), - /** - * 向玩家发送声音。 - * 允许配置音量与音调 - *
    - *
  • SOUND_NAME
  • - *
  • SOUND_NAME:VOLUME
  • - *
  • SOUND_NAME:VOLUME:PITCH
  • - *
- */ - SOUND((player, string) -> { - if (string == null) return; - try { - String[] args = string.contains(":") ? string.split(":") : new String[]{string}; - Sound sound = Arrays.stream(Sound.values()) - .filter(s -> s.name().equals(args[0])) - .findFirst().orElse(null); + /** + * 向玩家发送声音。 + * 允许配置音量与音调 + *
    + *
  • SOUND_NAME
  • + *
  • SOUND_NAME:VOLUME
  • + *
  • SOUND_NAME:VOLUME:PITCH
  • + *
+ */ + SOUND((player, string) -> { + if (string == null) return; + try { + String[] args = string.contains(":") ? string.split(":") : new String[]{string}; + Sound sound = Arrays.stream(Sound.values()) + .filter(s -> s.name().equals(args[0])) + .findFirst().orElse(null); - if (sound == null) return; - float volume = args.length > 1 ? Float.parseFloat(args[1]) : 1F; - float pitch = args.length > 2 ? Float.parseFloat(args[2]) : 1F; + if (sound == null) return; + float volume = args.length > 1 ? Float.parseFloat(args[1]) : 1F; + float pitch = args.length > 2 ? Float.parseFloat(args[2]) : 1F; - player.playSound(player.getLocation(), sound, volume, pitch); - } catch (Exception ignored) { - } - }), + player.playSound(player.getLocation(), sound, volume, pitch); + } catch (Exception ignored) { + } + }), - /** - * 为玩家关闭GUI。 - */ - CLOSE((player, string) -> player.closeInventory()); + /** + * 为玩家关闭GUI。 + */ + CLOSE((player, string) -> player.closeInventory()); - BiConsumer<@NotNull Player, @Nullable String> executor; + BiConsumer<@NotNull Player, @Nullable String> executor; - GUIActionType(BiConsumer<@NotNull Player, @Nullable String> executor) { - this.executor = executor; - } + GUIActionType(BiConsumer<@NotNull Player, @Nullable String> executor) { + this.executor = executor; + } - public BiConsumer<@NotNull Player, @Nullable String> getExecutor() { - return executor; - } + public BiConsumer<@NotNull Player, @Nullable String> getExecutor() { + return executor; + } - public static GUIActionType readActionType(String string) { - return Arrays.stream(GUIActionType.values()) - .filter(action -> action.name().equalsIgnoreCase(string)) - .findFirst().orElse(null); - } + public static GUIActionType readActionType(String string) { + return Arrays.stream(GUIActionType.values()) + .filter(action -> action.name().equalsIgnoreCase(string)) + .findFirst().orElse(null); + } } \ No newline at end of file diff --git a/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/configuration/GUIConfiguration.java b/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/configuration/GUIConfiguration.java index e75acdd..1b64508 100644 --- a/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/configuration/GUIConfiguration.java +++ b/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/configuration/GUIConfiguration.java @@ -13,60 +13,60 @@ import java.util.stream.Collectors; public class GUIConfiguration { - String title; - int lines; + String title; + int lines; - List guiItems; + List guiItems; - public GUIConfiguration(String title, int lines, List guiItems) { - this.title = title; - this.lines = lines; - this.guiItems = guiItems; - } + public GUIConfiguration(String title, int lines, List guiItems) { + this.title = title; + this.lines = lines; + this.guiItems = guiItems; + } - public String getTitle() { - return ColorParser.parse(title); - } + public String getTitle() { + return ColorParser.parse(title); + } - public int getLines() { - return lines; - } + public int getLines() { + return lines; + } - public GUIType getGUIType() { - return Optional.of(GUIType.getByLines(lines)) - .map(type -> type == GUIType.CANCEL ? GUIType.SIX_BY_NINE : type) - .get(); - } + public GUIType getGUIType() { + return Optional.of(GUIType.getByLines(lines)) + .map(type -> type == GUIType.CANCEL ? GUIType.SIX_BY_NINE : type) + .get(); + } - public List getGuiItems() { - return guiItems; - } + public List getGuiItems() { + return guiItems; + } - public void setupItems(Player player, GUI gui) { - getGuiItems().forEach(itemConfiguration -> itemConfiguration.setupItems(player, gui)); - } + public void setupItems(Player player, GUI gui) { + getGuiItems().forEach(itemConfiguration -> itemConfiguration.setupItems(player, gui)); + } - public static GUIConfiguration readConfiguration(@Nullable ConfigurationSection section) { - if (section == null) return new GUIConfiguration("name", 6, new ArrayList<>()); + public static GUIConfiguration readConfiguration(@Nullable ConfigurationSection section) { + if (section == null) return new GUIConfiguration("name", 6, new ArrayList<>()); - String title = section.getString("title", ""); - int lines = section.getInt("lines", 6); - ConfigurationSection itemsSection = section.getConfigurationSection("items"); - if (itemsSection == null) return new GUIConfiguration(title, lines, new ArrayList<>()); + String title = section.getString("title", ""); + int lines = section.getInt("lines", 6); + ConfigurationSection itemsSection = section.getConfigurationSection("items"); + if (itemsSection == null) return new GUIConfiguration(title, lines, new ArrayList<>()); - return new GUIConfiguration( - title, lines, itemsSection.getKeys(false).stream() - .map(key -> GUIItemConfiguration.readFrom(itemsSection.getConfigurationSection(key))) - .filter(Objects::nonNull) - .collect(Collectors.toList()) - ); - } + return new GUIConfiguration( + title, lines, itemsSection.getKeys(false).stream() + .map(key -> GUIItemConfiguration.readFrom(itemsSection.getConfigurationSection(key))) + .filter(Objects::nonNull) + .collect(Collectors.toList()) + ); + } - public static ClickType readClickType(String type) { - return Arrays.stream(ClickType.values()) - .filter(click -> click.name().equalsIgnoreCase(type)) - .findFirst().orElse(null); - } + public static ClickType readClickType(String type) { + return Arrays.stream(ClickType.values()) + .filter(click -> click.name().equalsIgnoreCase(type)) + .findFirst().orElse(null); + } } diff --git a/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/configuration/GUIItemConfiguration.java b/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/configuration/GUIItemConfiguration.java index 7bd7847..5cd6950 100644 --- a/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/configuration/GUIItemConfiguration.java +++ b/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/configuration/GUIItemConfiguration.java @@ -7,86 +7,88 @@ import cc.carm.lib.easyplugin.utils.MessageUtils; import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; -import org.bukkit.event.inventory.ClickType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Optional; +import java.util.*; +import java.util.stream.Collectors; public class GUIItemConfiguration { - Material material; - int data; - String name; - @NotNull List lore; + @NotNull Material type; + int data; + @Nullable String name; + @NotNull List lore; - @NotNull List slots; - @NotNull List actions; + @NotNull List slots; + @NotNull List actions; - public GUIItemConfiguration(Material material, int data, - String name, @NotNull List lore, - @NotNull List actions, - @NotNull List slots) { - this.material = material; - this.data = data; - this.name = name; - this.lore = lore; - this.slots = slots; - this.actions = actions; - } + public GUIItemConfiguration(@NotNull Material type, int data, + @Nullable String name, @NotNull List lore, + @NotNull List actions, + @NotNull List slots) { + this.type = type; + this.data = data; + this.name = name; + this.lore = lore; + this.slots = slots; + this.actions = actions; + } - public void setupItems(Player player, GUI gui) { - ItemStackFactory icon = new ItemStackFactory(this.material); - icon.setDurability(this.data); - if (this.name != null) icon.setDisplayName(this.name); - icon.setLore(MessageUtils.setPlaceholders(player, this.lore)); + public void setupItems(Player player, GUI gui) { + ItemStackFactory icon = new ItemStackFactory(this.type); + icon.setDurability(this.data); + if (this.name != null) icon.setDisplayName(this.name); + icon.setLore(MessageUtils.setPlaceholders(player, this.lore)); - GUIItem item = new GUIItem(icon.toItemStack()); - this.actions.stream().map(GUIActionConfiguration::toClickAction).forEach(item::addClickAction); - this.slots.forEach(slot -> gui.setItem(slot, item)); - } + GUIItem item = new GUIItem(icon.toItemStack()); + this.actions.stream().map(GUIActionConfiguration::toClickAction).forEach(item::addClickAction); + this.slots.forEach(slot -> gui.setItem(slot, item)); + } - @Nullable - public static GUIItemConfiguration readFrom(@Nullable ConfigurationSection itemSection) { - if (itemSection == null) return null; - Material material = Optional.ofNullable(Material.matchMaterial(itemSection.getString("material", "STONE"))).orElse(Material.STONE); - int data = itemSection.getInt("data", 0); - String name = itemSection.getString("name"); - List lore = itemSection.getStringList("lore"); + public Map serialize() { + LinkedHashMap map = new LinkedHashMap<>(); - List slots = itemSection.getIntegerList("slots"); - int slot = itemSection.getInt("slot", 0); + map.put("type", this.type.name()); + if (this.name != null) map.put("name", this.name); + if (this.data != 0) map.put("data", this.data); + if (!this.lore.isEmpty()) map.put("lore", this.lore); + if (this.slots.size() > 1) { + map.put("slots", this.slots); + } else if (slots.size() == 1) { + map.put("slots", this.slots.get(0)); + } + if (!this.actions.isEmpty()) { + map.put("actions", this.actions.stream().map(GUIActionConfiguration::serialize).collect(Collectors.toList())); + } + return map; + } - List actionsString = itemSection.getStringList("actions"); - List actions = new ArrayList<>(); - for (String actionString : actionsString) { - int prefixStart = actionString.indexOf("["); - int prefixEnd = actionString.indexOf("]"); - if (prefixStart < 0 || prefixEnd < 0) continue; + @Nullable + public static GUIItemConfiguration readFrom(@Nullable ConfigurationSection itemSection) { + if (itemSection == null) return null; + String material = Optional.ofNullable(itemSection.getString("type")).orElse("STONE"); + Material type = Optional.ofNullable(Material.matchMaterial(material)).orElse(Material.STONE); + int data = itemSection.getInt("data", 0); + String name = itemSection.getString("name"); + List lore = itemSection.getStringList("lore"); - String prefix = actionString.substring(prefixStart + 1, prefixEnd); - ClickType clickType = null; - GUIActionType actionType; - if (prefix.contains(":")) { - String[] args = prefix.split(":"); - clickType = GUIConfiguration.readClickType(args[0]); - actionType = GUIActionType.readActionType(args[1]); - } else { - actionType = GUIActionType.readActionType(prefix); - } + List slots = itemSection.getIntegerList("slots"); + int slot = itemSection.getInt("slot", 0); - if (actionType == null) continue; - actions.add(new GUIActionConfiguration(clickType, actionType, actionString.substring(prefixEnd + 1).trim())); - } + List actionsString = itemSection.getStringList("actions"); + List actions = new ArrayList<>(); + for (String actionString : actionsString) { + GUIActionConfiguration action = GUIActionConfiguration.deserialize(actionString); + if (action == null) continue; + actions.add(action); + } - return new GUIItemConfiguration( - material, data, name, lore, actions, - slots.size() > 0 ? slots : Collections.singletonList(slot) - ); - } + return new GUIItemConfiguration( + type, data, name, lore, actions, + slots.size() > 0 ? slots : Collections.singletonList(slot) + ); + } } diff --git a/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/paged/AutoPagedGUI.java b/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/paged/AutoPagedGUI.java index 8503dba..a851974 100644 --- a/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/paged/AutoPagedGUI.java +++ b/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/paged/AutoPagedGUI.java @@ -10,87 +10,87 @@ import java.util.function.Function; public class AutoPagedGUI extends CommonPagedGUI { - public static Function defaultPreviousPage = null; - public static Function defaultNextPage = null; + public static Function defaultPreviousPage = null; + public static Function defaultNextPage = null; - ItemStack previousPageUI; - ItemStack nextPageUI; - int previousPageSlot = -1; - int nextPageSlot = -1; + ItemStack previousPageUI; + ItemStack nextPageUI; + int previousPageSlot = -1; + int nextPageSlot = -1; - public AutoPagedGUI(GUIType type, String name, int[] range) { - super(type, name, range); - } + public AutoPagedGUI(GUIType type, String name, int[] range) { + super(type, name, range); + } - public AutoPagedGUI(GUIType type, String name, int a, int b) { - super(type, name, a, b); - } + public AutoPagedGUI(GUIType type, String name, int a, int b) { + super(type, name, a, b); + } - public void setPreviousPageUI(ItemStack lastPageUI) { - this.previousPageUI = lastPageUI; - } + public void setPreviousPageUI(ItemStack lastPageUI) { + this.previousPageUI = lastPageUI; + } - public void setNextPageUI(ItemStack nextPageUI) { - this.nextPageUI = nextPageUI; - } + public void setNextPageUI(ItemStack nextPageUI) { + this.nextPageUI = nextPageUI; + } - public void setPreviousPageSlot(int slot) { - this.previousPageSlot = slot; - } + public void setPreviousPageSlot(int slot) { + this.previousPageSlot = slot; + } - public void setNextPageSlot(int slot) { - this.nextPageSlot = slot; - } + public void setNextPageSlot(int slot) { + this.nextPageSlot = slot; + } - @Override - public void openGUI(Player user) { - if (previousPageSlot >= 0) { - if (hasPreviousPage()) { - setItem(previousPageSlot, new GUIItem( - previousPageUI == null ? getDefaultPreviousPage(user) : previousPageUI) { - @Override - public void onClick(ClickType type) { - if (type == ClickType.RIGHT) { - goFirstPage(); - } else { - goPreviousPage(); - } - openGUI(user); - } - }); - } else { - setItem(previousPageSlot, null); - } - } + @Override + public void openGUI(Player user) { + if (previousPageSlot >= 0) { + if (hasPreviousPage()) { + setItem(previousPageSlot, new GUIItem( + previousPageUI == null ? getDefaultPreviousPage(user) : previousPageUI) { + @Override + public void onClick(ClickType type) { + if (type == ClickType.RIGHT) { + goFirstPage(); + } else { + goPreviousPage(); + } + openGUI(user); + } + }); + } else { + setItem(previousPageSlot, null); + } + } - if (nextPageSlot >= 0) { - if (hasNextPage()) { - setItem(nextPageSlot, new GUIItem( - nextPageUI == null ? getDefaultNextPage(user) : nextPageUI) { - @Override - public void onClick(ClickType type) { - if (type == ClickType.RIGHT) { - goLastPage(); - } else { - goNextPage(); - } - openGUI(user); - } - }); - } else { - setItem(nextPageSlot, null); - } - } + if (nextPageSlot >= 0) { + if (hasNextPage()) { + setItem(nextPageSlot, new GUIItem( + nextPageUI == null ? getDefaultNextPage(user) : nextPageUI) { + @Override + public void onClick(ClickType type) { + if (type == ClickType.RIGHT) { + goLastPage(); + } else { + goNextPage(); + } + openGUI(user); + } + }); + } else { + setItem(nextPageSlot, null); + } + } - super.openGUI(user); - } + super.openGUI(user); + } - private static ItemStack getDefaultNextPage(Player player) { - return defaultNextPage != null ? defaultNextPage.apply(player) : null; - } + private static ItemStack getDefaultNextPage(Player player) { + return defaultNextPage != null ? defaultNextPage.apply(player) : null; + } - private static ItemStack getDefaultPreviousPage(Player player) { - return defaultPreviousPage != null ? defaultPreviousPage.apply(player) : null; - } + private static ItemStack getDefaultPreviousPage(Player player) { + return defaultPreviousPage != null ? defaultPreviousPage.apply(player) : null; + } } diff --git a/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/paged/CommonPagedGUI.java b/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/paged/CommonPagedGUI.java index 5488207..956230c 100644 --- a/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/paged/CommonPagedGUI.java +++ b/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/paged/CommonPagedGUI.java @@ -11,22 +11,22 @@ import java.util.List; public class CommonPagedGUI extends PagedGUI { - private int[] range; + private int[] range; - private CommonPagedGUI(GUIType type, String name) { - super(type, name); - } + private CommonPagedGUI(GUIType type, String name) { + super(type, name); + } - public CommonPagedGUI(GUIType type, String Name, int a, int b) { - this(type, Name, toRange(type, a, b)); - } + public CommonPagedGUI(GUIType type, String Name, int a, int b) { + this(type, Name, toRange(type, a, b)); + } - public CommonPagedGUI(GUIType type, String Name, int[] range) { - super(type, Name); - Arrays.sort(range); - this.range = range; + public CommonPagedGUI(GUIType type, String Name, int[] range) { + super(type, Name); + Arrays.sort(range); + this.range = range; - } + } @@ -41,122 +41,122 @@ public class CommonPagedGUI extends PagedGUI { } */ - private static int[] toRange(GUIType type, int a, int b) { - if (a > b) { - a = a ^ b; - b = a ^ b; - a = a ^ b; - } + private static int[] toRange(GUIType type, int a, int b) { + if (a > b) { + a = a ^ b; + b = a ^ b; + a = a ^ b; + } - int lineA = getLine(a); - int columnA = getColumn(a); - int lineB = getLine(b); - int columnB = getColumn(b); + int lineA = getLine(a); + int columnA = getColumn(a); + int lineB = getLine(b); + int columnB = getColumn(b); - if (lineB > type.getLines()) - throw new IndexOutOfBoundsException("页面内容范围超过了GUI的大小"); + if (lineB > type.getLines()) + throw new IndexOutOfBoundsException("页面内容范围超过了GUI的大小"); - int[] range = new int[(lineB - lineA + 1) * (columnB - columnA + 1)]; + int[] range = new int[(lineB - lineA + 1) * (columnB - columnA + 1)]; - for (int i = 0, l = 0; i < type.getSize(); i++) { - int li = getLine(i); - int ci = getColumn(i); - if (li >= lineA && li <= lineB && ci >= columnA && ci <= columnB) { - range[l] = i; - l++; - } - } + for (int i = 0, l = 0; i < type.getSize(); i++) { + int li = getLine(i); + int ci = getColumn(i); + if (li >= lineA && li <= lineB && ci >= columnA && ci <= columnB) { + range[l] = i; + l++; + } + } - return range; - } + return range; + } - private static int getLine(int i) { - return i / 9 + 1; - } + private static int getLine(int i) { + return i / 9 + 1; + } - private static int getColumn(int i) { - return i % 9 + 1; - } + private static int getColumn(int i) { + return i % 9 + 1; + } - @Override - public boolean hasPreviousPage() { - return page > 1; - } + @Override + public boolean hasPreviousPage() { + return page > 1; + } - @Override - public boolean hasNextPage() { - return page < getLastPageNumber(); - } + @Override + public boolean hasNextPage() { + return page < getLastPageNumber(); + } - /** - * 前往第一页 - */ - public void goFirstPage() { - if (hasPreviousPage()) - this.page = 1; - else - throw new IndexOutOfBoundsException(); - } + /** + * 前往第一页 + */ + public void goFirstPage() { + if (hasPreviousPage()) + this.page = 1; + else + throw new IndexOutOfBoundsException(); + } - /** - * 前往最后一页 - */ - public void goLastPage() { - if (hasNextPage()) - this.page = getLastPageNumber(); - else - throw new IndexOutOfBoundsException(); - } + /** + * 前往最后一页 + */ + public void goLastPage() { + if (hasNextPage()) + this.page = getLastPageNumber(); + else + throw new IndexOutOfBoundsException(); + } - /** - * 得到最后一页的页码 - * - * @return 最后一页的页码 - */ - public int getLastPageNumber() { - return (this.container.size() / range.length) + 1; - } + /** + * 得到最后一页的页码 + * + * @return 最后一页的页码 + */ + public int getLastPageNumber() { + return (this.container.size() / range.length) + 1; + } - /** - * 得到第一页的页码 - * - * @return 第一页页码(默认为1) - */ - public int getFirstPageNumber() { - return 1; - } + /** + * 得到第一页的页码 + * + * @return 第一页页码(默认为1) + */ + public int getFirstPageNumber() { + return 1; + } - @Override - public void openGUI(Player player) { - if (container.isEmpty()) { - super.openGUI(player); - return; - } - List list = new ArrayList<>(); - int start = (page - 1) * range.length; - for (int i = start; i < start + range.length; i++) { - if (i < container.size()) { - list.add(container.get(i)); - } else { - break; - } - } + @Override + public void openGUI(Player player) { + if (container.isEmpty()) { + super.openGUI(player); + return; + } + List list = new ArrayList<>(); + int start = (page - 1) * range.length; + for (int i = start; i < start + range.length; i++) { + if (i < container.size()) { + list.add(container.get(i)); + } else { + break; + } + } - int i = 0; - Arrays.stream(range).forEach(index -> setItem(index, null)); - for (int index : range) { - if (i < list.size()) { - setItem(index, list.get(i)); - i++; - } else { - break; - } - } - super.openGUI(player); - } + int i = 0; + Arrays.stream(range).forEach(index -> setItem(index, null)); + for (int index : range) { + if (i < list.size()) { + setItem(index, list.get(i)); + i++; + } else { + break; + } + } + super.openGUI(player); + } } diff --git a/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/paged/PagedGUI.java b/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/paged/PagedGUI.java index 802c647..ceff468 100644 --- a/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/paged/PagedGUI.java +++ b/base/gui/src/main/java/cc/carm/lib/easyplugin/gui/paged/PagedGUI.java @@ -10,70 +10,70 @@ import java.util.List; public abstract class PagedGUI extends GUI { - List container = new ArrayList<>(); - public int page = 1; + List container = new ArrayList<>(); + public int page = 1; - public PagedGUI(GUIType type, String name) { - super(type, name); - } + public PagedGUI(GUIType type, String name) { + super(type, name); + } - public int addItem(GUIItem i) { - container.add(i); - return container.size() - 1; - } + public int addItem(GUIItem i) { + container.add(i); + return container.size() - 1; + } - /** - * 从GUI中移除一个物品 - * - * @param item 物品 - */ - public void removeItem(GUIItem item) { - container.remove(item); - } + /** + * 从GUI中移除一个物品 + * + * @param item 物品 + */ + public void removeItem(GUIItem item) { + container.remove(item); + } - /** - * 从GUI中移除一个物品 - * - * @param slot 物品格子数 - */ - public void removeItem(int slot) { - container.remove(slot); - } + /** + * 从GUI中移除一个物品 + * + * @param slot 物品格子数 + */ + public void removeItem(int slot) { + container.remove(slot); + } - public List getItemsContainer() { - return new ArrayList<>(container); - } + public List getItemsContainer() { + return new ArrayList<>(container); + } - /** - * 前往上一页 - */ - public void goPreviousPage() { - if (hasPreviousPage()) - page--; - else - throw new IndexOutOfBoundsException(); - } + /** + * 前往上一页 + */ + public void goPreviousPage() { + if (hasPreviousPage()) + page--; + else + throw new IndexOutOfBoundsException(); + } - /** - * 前往下一页 - */ - public void goNextPage() { - if (hasNextPage()) - page++; - else - throw new IndexOutOfBoundsException(); - } + /** + * 前往下一页 + */ + public void goNextPage() { + if (hasNextPage()) + page++; + else + throw new IndexOutOfBoundsException(); + } - /** - * @return 是否有上一页 - */ - public abstract boolean hasPreviousPage(); + /** + * @return 是否有上一页 + */ + public abstract boolean hasPreviousPage(); - /** - * @return 是否有下一页 - */ - public abstract boolean hasNextPage(); + /** + * @return 是否有下一页 + */ + public abstract boolean hasNextPage(); } diff --git a/base/gui/src/test/java/ActionReadTest.java b/base/gui/src/test/java/ActionReadTest.java index 7b34abf..c2619e2 100644 --- a/base/gui/src/test/java/ActionReadTest.java +++ b/base/gui/src/test/java/ActionReadTest.java @@ -1,4 +1,3 @@ - import cc.carm.lib.easyplugin.gui.configuration.GUIActionType; import cc.carm.lib.easyplugin.gui.configuration.GUIConfiguration; import org.bukkit.event.inventory.ClickType; @@ -10,43 +9,43 @@ import java.util.List; public class ActionReadTest { - @Test - public void test() { + @Test + public void test() { - List actions = Arrays.asList( - "[CHAT] 123123", - "[SHIFT_LEFT:CHAT] /test qwq", - "[CONSOLE] say hello", - "[CLOSE]" - ); + List actions = Arrays.asList( + "[CHAT] 123123", + "[SHIFT_LEFT:CHAT] /test qwq", + "[CONSOLE] say hello", + "[CLOSE]" + ); - for (String actionString : actions) { - int prefixStart = actionString.indexOf("["); - int prefixEnd = actionString.indexOf("]"); - if (prefixStart < 0 || prefixEnd < 0) continue; + for (String actionString : actions) { + int prefixStart = actionString.indexOf("["); + int prefixEnd = actionString.indexOf("]"); + if (prefixStart < 0 || prefixEnd < 0) continue; - String prefix = actionString.substring(prefixStart + 1, prefixEnd); - ClickType clickType = null; - GUIActionType actionType; - if (prefix.contains(":")) { - String[] args = prefix.split(":"); - clickType = GUIConfiguration.readClickType(args[0]); - actionType = GUIActionType.readActionType(args[1]); - } else { - actionType = GUIActionType.readActionType(prefix); - } + String prefix = actionString.substring(prefixStart + 1, prefixEnd); + ClickType clickType = null; + GUIActionType actionType; + if (prefix.contains(":")) { + String[] args = prefix.split(":"); + clickType = GUIConfiguration.readClickType(args[0]); + actionType = GUIActionType.readActionType(args[1]); + } else { + actionType = GUIActionType.readActionType(prefix); + } - if (actionType == null) { - System.out.println("# " + actionString); - System.out.println("- actionType is Null"); - continue; - } + if (actionType == null) { + System.out.println("# " + actionString); + System.out.println("- actionType is Null"); + continue; + } - System.out.println("# " + actionType.name() + " " + (clickType == null ? "" : clickType.name())); - System.out.println("- " + actionString.substring(prefixEnd + 1).trim()); - } + System.out.println("# " + actionType.name() + " " + (clickType == null ? "" : clickType.name())); + System.out.println("- " + actionString.substring(prefixEnd + 1).trim()); + } - } + } } diff --git a/base/main/pom.xml b/base/main/pom.xml index 99a0c2f..a10e580 100644 --- a/base/main/pom.xml +++ b/base/main/pom.xml @@ -5,7 +5,7 @@ easyplugin-parent cc.carm.lib - 1.4.6 + 1.4.7 ../../pom.xml 4.0.0 diff --git a/base/main/src/main/java/cc/carm/lib/easyplugin/utils/ItemStackFactory.java b/base/main/src/main/java/cc/carm/lib/easyplugin/utils/ItemStackFactory.java index 29a8674..2c048d1 100644 --- a/base/main/src/main/java/cc/carm/lib/easyplugin/utils/ItemStackFactory.java +++ b/base/main/src/main/java/cc/carm/lib/easyplugin/utils/ItemStackFactory.java @@ -14,131 +14,131 @@ import java.util.List; import java.util.stream.Collectors; public class ItemStackFactory { - ItemStack item; + ItemStack item; - private ItemStackFactory() { - } + private ItemStackFactory() { + } - public ItemStackFactory(ItemStack is) { - this.item = is.clone(); - } + public ItemStackFactory(ItemStack is) { + this.item = is.clone(); + } - public ItemStackFactory(Material type) { - this(type, 1); - } + public ItemStackFactory(Material type) { + this(type, 1); + } - public ItemStackFactory(Material type, int amount) { - this(type, amount, (short) 0); - } + public ItemStackFactory(Material type, int amount) { + this(type, amount, (short) 0); + } - public ItemStackFactory(Material type, int amount, short data) { - this.item = new ItemStack(type, amount, data); - } + public ItemStackFactory(Material type, int amount, short data) { + this.item = new ItemStack(type, amount, data); + } - public ItemStackFactory(Material type, int amount, int data) { - this(type, amount, (short) data); - } + public ItemStackFactory(Material type, int amount, int data) { + this(type, amount, (short) data); + } - public ItemStack toItemStack() { - return this.item; - } + public ItemStack toItemStack() { + return this.item; + } - public ItemStackFactory setType(Material type) { - this.item.setType(type); - return this; - } + public ItemStackFactory setType(Material type) { + this.item.setType(type); + return this; + } - public ItemStackFactory setDurability(int i) { - ItemMeta im = this.item.getItemMeta(); - if (im instanceof Damageable) { - ((Damageable) im).setDamage(i); - this.item.setItemMeta(im); - } - return this; - } + public ItemStackFactory setDurability(int i) { + ItemMeta im = this.item.getItemMeta(); + if (im instanceof Damageable) { + ((Damageable) im).setDamage(i); + this.item.setItemMeta(im); + } + return this; + } - public ItemStackFactory setAmount(int a) { - this.item.setAmount(a); - return this; - } + public ItemStackFactory setAmount(int a) { + this.item.setAmount(a); + return this; + } - public ItemStackFactory setDisplayName(@NotNull String name) { - ItemMeta im = this.item.getItemMeta(); - if (im != null) { - im.setDisplayName(ColorParser.parse(name)); - this.item.setItemMeta(im); - } - return this; - } + public ItemStackFactory setDisplayName(@NotNull String name) { + ItemMeta im = this.item.getItemMeta(); + if (im != null) { + im.setDisplayName(ColorParser.parse(name)); + this.item.setItemMeta(im); + } + return this; + } - public ItemStackFactory setLore(@NotNull List loreList) { - ItemMeta im = this.item.getItemMeta(); - if (im != null) { - im.setLore( - loreList.stream() - .map(ColorParser::parse) - .collect(Collectors.toList()) - ); - this.item.setItemMeta(im); - } - return this; - } + public ItemStackFactory setLore(@NotNull List loreList) { + ItemMeta im = this.item.getItemMeta(); + if (im != null) { + im.setLore( + loreList.stream() + .map(ColorParser::parse) + .collect(Collectors.toList()) + ); + this.item.setItemMeta(im); + } + return this; + } - public ItemStackFactory addLore(@NotNull String s) { - ItemMeta im = this.item.getItemMeta(); - if (im != null) { - List lore = im.getLore() != null ? im.getLore() : new ArrayList<>(); - lore.add(ColorParser.parse(s)); - im.setLore(lore); - this.item.setItemMeta(im); - } - return this; - } + public ItemStackFactory addLore(@NotNull String s) { + ItemMeta im = this.item.getItemMeta(); + if (im != null) { + List lore = im.getLore() != null ? im.getLore() : new ArrayList<>(); + lore.add(ColorParser.parse(s)); + im.setLore(lore); + this.item.setItemMeta(im); + } + return this; + } - public ItemStackFactory addEnchant(@NotNull Enchantment enchant, int level, boolean ignoreLevelRestriction) { - ItemMeta im = this.item.getItemMeta(); - if (im != null) { - im.addEnchant(enchant, level, ignoreLevelRestriction); - this.item.setItemMeta(im); - } + public ItemStackFactory addEnchant(@NotNull Enchantment enchant, int level, boolean ignoreLevelRestriction) { + ItemMeta im = this.item.getItemMeta(); + if (im != null) { + im.addEnchant(enchant, level, ignoreLevelRestriction); + this.item.setItemMeta(im); + } - return this; - } + return this; + } - public ItemStackFactory removeEnchant(@NotNull Enchantment enchant) { - ItemMeta im = this.item.getItemMeta(); - if (im != null) { - im.removeEnchant(enchant); - this.item.setItemMeta(im); - } - return this; - } + public ItemStackFactory removeEnchant(@NotNull Enchantment enchant) { + ItemMeta im = this.item.getItemMeta(); + if (im != null) { + im.removeEnchant(enchant); + this.item.setItemMeta(im); + } + return this; + } - public ItemStackFactory addFlag(@NotNull ItemFlag flag) { - ItemMeta im = this.item.getItemMeta(); - if (im != null) { - im.addItemFlags(flag); - this.item.setItemMeta(im); - } + public ItemStackFactory addFlag(@NotNull ItemFlag flag) { + ItemMeta im = this.item.getItemMeta(); + if (im != null) { + im.addItemFlags(flag); + this.item.setItemMeta(im); + } - return this; - } + return this; + } - public ItemStackFactory removeFlag(@NotNull ItemFlag flag) { - ItemMeta im = this.item.getItemMeta(); - if (im != null) { - im.removeItemFlags(flag); - this.item.setItemMeta(im); - } - return this; - } + public ItemStackFactory removeFlag(@NotNull ItemFlag flag) { + ItemMeta im = this.item.getItemMeta(); + if (im != null) { + im.removeItemFlags(flag); + this.item.setItemMeta(im); + } + return this; + } - public ItemStackFactory setUnbreakable(boolean unbreakable) { - ItemMeta im = this.item.getItemMeta(); - if (im != null) { - im.setUnbreakable(unbreakable); - this.item.setItemMeta(im); - } - return this; - } + public ItemStackFactory setUnbreakable(boolean unbreakable) { + ItemMeta im = this.item.getItemMeta(); + if (im != null) { + im.setUnbreakable(unbreakable); + this.item.setItemMeta(im); + } + return this; + } } diff --git a/base/main/src/main/java/cc/carm/lib/easyplugin/utils/SchedulerUtils.java b/base/main/src/main/java/cc/carm/lib/easyplugin/utils/SchedulerUtils.java index 45b67dc..c188ed0 100644 --- a/base/main/src/main/java/cc/carm/lib/easyplugin/utils/SchedulerUtils.java +++ b/base/main/src/main/java/cc/carm/lib/easyplugin/utils/SchedulerUtils.java @@ -12,344 +12,344 @@ import java.util.concurrent.Callable; @SuppressWarnings("DuplicatedCode") public class SchedulerUtils { - private final JavaPlugin plugin; + private final JavaPlugin plugin; - public SchedulerUtils(JavaPlugin plugin) { - this.plugin = plugin; - } + public SchedulerUtils(JavaPlugin plugin) { + this.plugin = plugin; + } - private JavaPlugin getPlugin() { - return plugin; - } + private JavaPlugin getPlugin() { + return plugin; + } - /** - * 在服务端主线程中执行一个任务 - * - * @param runnable 需要执行的任务 - */ - public void run(Runnable runnable) { - Bukkit.getScheduler().runTask(getPlugin(), runnable); - } + /** + * 在服务端主线程中执行一个任务 + * + * @param runnable 需要执行的任务 + */ + public void run(Runnable runnable) { + Bukkit.getScheduler().runTask(getPlugin(), runnable); + } - /** - * 异步执行一个任务。 - * - * @param runnable 需要执行的任务 - */ - public void runAsync(Runnable runnable) { - Bukkit.getScheduler().runTaskAsynchronously(getPlugin(), runnable); - } - - /** - * 在主线程延时执行一个任务。 - * - * @param delay 延迟的ticks - * @param runnable 需要执行的任务 - */ - public void runLater(long delay, Runnable runnable) { - Bukkit.getScheduler().runTaskLater(getPlugin(), runnable, delay); - } + /** + * 异步执行一个任务。 + * + * @param runnable 需要执行的任务 + */ + public void runAsync(Runnable runnable) { + Bukkit.getScheduler().runTaskAsynchronously(getPlugin(), runnable); + } - /** - * 异步延时执行一个任务。 - * - * @param delay 延迟的ticks - * @param runnable 需要执行的任务 - */ - public void runLaterAsync(long delay, Runnable runnable) { - Bukkit.getScheduler().runTaskLaterAsynchronously(getPlugin(), runnable, delay); - } + /** + * 在主线程延时执行一个任务。 + * + * @param delay 延迟的ticks + * @param runnable 需要执行的任务 + */ + public void runLater(long delay, Runnable runnable) { + Bukkit.getScheduler().runTaskLater(getPlugin(), runnable, delay); + } - /** - * 间隔一段时间按顺序执行列表中的任务 - * - * @param interval 间隔时间 - * @param tasks 任务列表 - */ - public void runAtInterval(long interval, Runnable... tasks) { - runAtInterval(0L, interval, tasks); - } + /** + * 异步延时执行一个任务。 + * + * @param delay 延迟的ticks + * @param runnable 需要执行的任务 + */ + public void runLaterAsync(long delay, Runnable runnable) { + Bukkit.getScheduler().runTaskLaterAsynchronously(getPlugin(), runnable, delay); + } + + /** + * 间隔一段时间按顺序执行列表中的任务 + * + * @param interval 间隔时间 + * @param tasks 任务列表 + */ + public void runAtInterval(long interval, Runnable... tasks) { + runAtInterval(0L, interval, tasks); + } - /** - * 间隔一段时间按顺序执行列表中的任务 - * - * @param delay 延迟时间 - * @param interval 间隔时间 - * @param tasks 任务列表 - */ - public void runAtInterval(long delay, long interval, Runnable... tasks) { - new BukkitRunnable() { - private int index; + /** + * 间隔一段时间按顺序执行列表中的任务 + * + * @param delay 延迟时间 + * @param interval 间隔时间 + * @param tasks 任务列表 + */ + public void runAtInterval(long delay, long interval, Runnable... tasks) { + new BukkitRunnable() { + private int index; - @Override - public void run() { - if (this.index >= tasks.length) { - this.cancel(); - return; - } + @Override + public void run() { + if (this.index >= tasks.length) { + this.cancel(); + return; + } - tasks[index].run(); - index++; - } - }.runTaskTimer(getPlugin(), delay, interval); - } + tasks[index].run(); + index++; + } + }.runTaskTimer(getPlugin(), delay, interval); + } - /** - * 间隔一段时间按顺序异步执行列表中的任务 - * - * @param interval 间隔时间 - * @param tasks 任务列表 - */ - public void runAtIntervalAsync(long interval, Runnable... tasks) { - runAtIntervalAsync(0L, interval, tasks); - } + /** + * 间隔一段时间按顺序异步执行列表中的任务 + * + * @param interval 间隔时间 + * @param tasks 任务列表 + */ + public void runAtIntervalAsync(long interval, Runnable... tasks) { + runAtIntervalAsync(0L, interval, tasks); + } - /** - * 间隔一段时间按顺序异步执行列表中的任务 - * - * @param delay 延迟时间 - * @param interval 间隔时间 - * @param tasks 任务列表 - */ - public void runAtIntervalAsync(long delay, long interval, Runnable... tasks) { - new BukkitRunnable() { - private int index; + /** + * 间隔一段时间按顺序异步执行列表中的任务 + * + * @param delay 延迟时间 + * @param interval 间隔时间 + * @param tasks 任务列表 + */ + public void runAtIntervalAsync(long delay, long interval, Runnable... tasks) { + new BukkitRunnable() { + private int index; - @Override - public void run() { - if (this.index >= tasks.length) { - this.cancel(); - return; - } + @Override + public void run() { + if (this.index >= tasks.length) { + this.cancel(); + return; + } - tasks[index].run(); - index++; - } - }.runTaskTimerAsynchronously(getPlugin(), delay, interval); - } + tasks[index].run(); + index++; + } + }.runTaskTimerAsynchronously(getPlugin(), delay, interval); + } - /** - * 重复执行一个任务。 - * - * @param repetitions 重复次数 - * @param interval 间隔时间 - * @param task 任务 - * @param onComplete 结束时执行的任务 - */ - public void repeat(int repetitions, long interval, Runnable task, Runnable onComplete) { - new BukkitRunnable() { - private int index; + /** + * 重复执行一个任务。 + * + * @param repetitions 重复次数 + * @param interval 间隔时间 + * @param task 任务 + * @param onComplete 结束时执行的任务 + */ + public void repeat(int repetitions, long interval, Runnable task, Runnable onComplete) { + new BukkitRunnable() { + private int index; - @Override - public void run() { - index++; - if (this.index >= repetitions) { - this.cancel(); - if (onComplete == null) { - return; - } + @Override + public void run() { + index++; + if (this.index >= repetitions) { + this.cancel(); + if (onComplete == null) { + return; + } - onComplete.run(); - return; - } + onComplete.run(); + return; + } - task.run(); - } - }.runTaskTimer(getPlugin(), 0L, interval); - } + task.run(); + } + }.runTaskTimer(getPlugin(), 0L, interval); + } - /** - * 重复执行一个任务。 - * - * @param repetitions 重复次数 - * @param interval 间隔时间 - * @param task 任务 - * @param onComplete 结束时执行的任务 - */ - public void repeatAsync(int repetitions, long interval, Runnable task, Runnable onComplete) { - new BukkitRunnable() { - private int index; + /** + * 重复执行一个任务。 + * + * @param repetitions 重复次数 + * @param interval 间隔时间 + * @param task 任务 + * @param onComplete 结束时执行的任务 + */ + public void repeatAsync(int repetitions, long interval, Runnable task, Runnable onComplete) { + new BukkitRunnable() { + private int index; - @Override - public void run() { - index++; - if (this.index >= repetitions) { - this.cancel(); - if (onComplete == null) { - return; - } + @Override + public void run() { + index++; + if (this.index >= repetitions) { + this.cancel(); + if (onComplete == null) { + return; + } - onComplete.run(); - return; - } + onComplete.run(); + return; + } - task.run(); - } - }.runTaskTimerAsynchronously(getPlugin(), 0L, interval); - } + task.run(); + } + }.runTaskTimerAsynchronously(getPlugin(), 0L, interval); + } - /** - * 在满足某个条件时,重复执行一个任务。 - * - * @param interval 重复间隔时间 - * @param predicate 条件 - * @param task 任务 - * @param onComplete 结束时执行的任务 - */ - public void repeatWhile(long interval, Callable predicate, Runnable task, Runnable onComplete) { - new BukkitRunnable() { - @Override - public void run() { - try { - if (!predicate.call()) { - this.cancel(); - if (onComplete == null) { - return; - } + /** + * 在满足某个条件时,重复执行一个任务。 + * + * @param interval 重复间隔时间 + * @param predicate 条件 + * @param task 任务 + * @param onComplete 结束时执行的任务 + */ + public void repeatWhile(long interval, Callable predicate, Runnable task, Runnable onComplete) { + new BukkitRunnable() { + @Override + public void run() { + try { + if (!predicate.call()) { + this.cancel(); + if (onComplete == null) { + return; + } - onComplete.run(); - return; - } + onComplete.run(); + return; + } - task.run(); - } catch (Exception e) { - e.printStackTrace(); - } - } - }.runTaskTimer(getPlugin(), 0L, interval); - } + task.run(); + } catch (Exception e) { + e.printStackTrace(); + } + } + }.runTaskTimer(getPlugin(), 0L, interval); + } - /** - * 在满足某个条件时,重复执行一个任务。 - * - * @param interval 重复间隔时间 - * @param predicate 条件 - * @param task 任务 - * @param onComplete 结束时执行的任务 - */ - public void repeatWhileAsync(long interval, Callable predicate, Runnable task, Runnable onComplete) { - new BukkitRunnable() { - @Override - public void run() { - try { - if (!predicate.call()) { - this.cancel(); - if (onComplete == null) { - return; - } + /** + * 在满足某个条件时,重复执行一个任务。 + * + * @param interval 重复间隔时间 + * @param predicate 条件 + * @param task 任务 + * @param onComplete 结束时执行的任务 + */ + public void repeatWhileAsync(long interval, Callable predicate, Runnable task, Runnable onComplete) { + new BukkitRunnable() { + @Override + public void run() { + try { + if (!predicate.call()) { + this.cancel(); + if (onComplete == null) { + return; + } - onComplete.run(); - return; - } + onComplete.run(); + return; + } - task.run(); - } catch (Exception e) { - e.printStackTrace(); - } - } - }.runTaskTimerAsynchronously(getPlugin(), 0L, interval); - } + task.run(); + } catch (Exception e) { + e.printStackTrace(); + } + } + }.runTaskTimerAsynchronously(getPlugin(), 0L, interval); + } - public interface Task { - void start(Runnable onComplete); - } + public interface Task { + void start(Runnable onComplete); + } - public class TaskBuilder { - private final Queue taskList; + public class TaskBuilder { + private final Queue taskList; - public TaskBuilder() { - this.taskList = new LinkedList<>(); - } + public TaskBuilder() { + this.taskList = new LinkedList<>(); + } - public TaskBuilder append(TaskBuilder builder) { - this.taskList.addAll(builder.taskList); - return this; - } + public TaskBuilder append(TaskBuilder builder) { + this.taskList.addAll(builder.taskList); + return this; + } - public TaskBuilder appendDelay(long delay) { - this.taskList.add(onComplete -> SchedulerUtils.this.runLater(delay, onComplete)); - return this; - } + public TaskBuilder appendDelay(long delay) { + this.taskList.add(onComplete -> SchedulerUtils.this.runLater(delay, onComplete)); + return this; + } - public TaskBuilder appendTask(Runnable task) { - this.taskList.add(onComplete -> - { - task.run(); - onComplete.run(); - }); + public TaskBuilder appendTask(Runnable task) { + this.taskList.add(onComplete -> + { + task.run(); + onComplete.run(); + }); - return this; - } + return this; + } - public TaskBuilder appendTask(Task task) { - this.taskList.add(task); - return this; - } + public TaskBuilder appendTask(Task task) { + this.taskList.add(task); + return this; + } - public TaskBuilder appendDelayedTask(long delay, Runnable task) { - this.taskList.add(onComplete -> SchedulerUtils.this.runLater(delay, () -> - { - task.run(); - onComplete.run(); - })); + public TaskBuilder appendDelayedTask(long delay, Runnable task) { + this.taskList.add(onComplete -> SchedulerUtils.this.runLater(delay, () -> + { + task.run(); + onComplete.run(); + })); - return this; - } + return this; + } - public TaskBuilder appendTasks(long delay, long interval, Runnable... tasks) { - this.taskList.add(onComplete -> - { - Runnable[] runnables = Arrays.copyOf(tasks, tasks.length + 1); - runnables[runnables.length - 1] = onComplete; - SchedulerUtils.this.runAtInterval(delay, interval, runnables); - }); + public TaskBuilder appendTasks(long delay, long interval, Runnable... tasks) { + this.taskList.add(onComplete -> + { + Runnable[] runnables = Arrays.copyOf(tasks, tasks.length + 1); + runnables[runnables.length - 1] = onComplete; + SchedulerUtils.this.runAtInterval(delay, interval, runnables); + }); - return this; - } + return this; + } - public TaskBuilder appendRepeatingTask(int repetitions, long interval, Runnable task) { - this.taskList.add(onComplete -> SchedulerUtils.this.repeat(repetitions, interval, task, onComplete)); - return this; - } + public TaskBuilder appendRepeatingTask(int repetitions, long interval, Runnable task) { + this.taskList.add(onComplete -> SchedulerUtils.this.repeat(repetitions, interval, task, onComplete)); + return this; + } - public TaskBuilder appendConditionalRepeatingTask(long interval, Callable predicate, Runnable task) { - this.taskList.add(onComplete -> SchedulerUtils.this.repeatWhile(interval, predicate, task, onComplete)); - return this; - } + public TaskBuilder appendConditionalRepeatingTask(long interval, Callable predicate, Runnable task) { + this.taskList.add(onComplete -> SchedulerUtils.this.repeatWhile(interval, predicate, task, onComplete)); + return this; + } - public TaskBuilder waitFor(Callable predicate) { - this.taskList.add(onComplete -> new BukkitRunnable() { - @Override - public void run() { - try { - if (!predicate.call()) { - return; - } + public TaskBuilder waitFor(Callable predicate) { + this.taskList.add(onComplete -> new BukkitRunnable() { + @Override + public void run() { + try { + if (!predicate.call()) { + return; + } - this.cancel(); - onComplete.run(); - } catch (Exception e) { - e.printStackTrace(); - } - } - }.runTaskTimer(getPlugin(), 0L, 1L)); - return this; - } + this.cancel(); + onComplete.run(); + } catch (Exception e) { + e.printStackTrace(); + } + } + }.runTaskTimer(getPlugin(), 0L, 1L)); + return this; + } - public void runTasks() { - this.startNext(); - } + public void runTasks() { + this.startNext(); + } - private void startNext() { - Task task = this.taskList.poll(); - if (task == null) { - return; - } + private void startNext() { + Task task = this.taskList.poll(); + if (task == null) { + return; + } - task.start(this::startNext); - } - } + task.start(this::startNext); + } + } } diff --git a/collection/all/pom.xml b/collection/all/pom.xml index 84d93fb..af97cf4 100644 --- a/collection/all/pom.xml +++ b/collection/all/pom.xml @@ -5,7 +5,7 @@ easyplugin-parent cc.carm.lib - 1.4.6 + 1.4.7 ../../pom.xml 4.0.0 diff --git a/collection/bom/pom.xml b/collection/bom/pom.xml index 601fb7b..816d9a0 100644 --- a/collection/bom/pom.xml +++ b/collection/bom/pom.xml @@ -5,7 +5,7 @@ easyplugin-parent cc.carm.lib - 1.4.6 + 1.4.7 ../../pom.xml 4.0.0 diff --git a/collection/common/pom.xml b/collection/common/pom.xml index 03de656..eeec9a6 100644 --- a/collection/common/pom.xml +++ b/collection/common/pom.xml @@ -5,7 +5,7 @@ easyplugin-parent cc.carm.lib - 1.4.6 + 1.4.7 ../../pom.xml 4.0.0 diff --git a/extension/papi/pom.xml b/extension/papi/pom.xml index 68c0a17..fe71b1b 100644 --- a/extension/papi/pom.xml +++ b/extension/papi/pom.xml @@ -5,7 +5,7 @@ easyplugin-parent cc.carm.lib - 1.4.6 + 1.4.7 ../../pom.xml 4.0.0 diff --git a/extension/vault/pom.xml b/extension/vault/pom.xml index b8ce812..3f54b0c 100644 --- a/extension/vault/pom.xml +++ b/extension/vault/pom.xml @@ -5,7 +5,7 @@ easyplugin-parent cc.carm.lib - 1.4.6 + 1.4.7 ../../pom.xml 4.0.0 diff --git a/pom.xml b/pom.xml index 7ccf10d..88e869e 100644 --- a/pom.xml +++ b/pom.xml @@ -15,7 +15,7 @@ cc.carm.lib easyplugin-parent pom - 1.4.6 + 1.4.7 base/main