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