From cead35b6a15b161dff20e9511168f49266cbd9e9 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Wed, 24 Jan 2024 11:42:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E9=80=9F=E5=BA=A6=E5=80=8D=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 + pom.xml | 2 +- .../liteworldedit/LiteWorldEdit.java | 26 ++++--- .../liteworldedit/Managers/ConfigManager.java | 8 ++ .../deercloud/liteworldedit/Notification.java | 78 ++++++++++++++++++- .../site/deercloud/liteworldedit/Task.java | 45 ++++++----- src/main/resources/config.yml | 2 + 7 files changed, 126 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index f95927c..b273edb 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ 5. 禁止超视距操作(128以外),防止玩家利用创世神插件加载大量区块导致服务器卡顿; 6. 支持自动从背包里的潜影盒补充材料; 7. 支持设置是否产生掉落物; +8. 支持设置速度倍率(整数,默认1表示每tick操作一个方块,设置为2则每次操作两个方块) ## 支持版本 @@ -76,6 +77,8 @@ MaxZ: 64 DropItems: false +Multiplier: 1 + Debug: false ``` diff --git a/pom.xml b/pom.xml index f1d6195..62ee0cc 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ site.deercloud LiteWorldEdit - 2.2.1.0 + 2.3.5.0 jar LiteWorldEdit diff --git a/src/main/java/site/deercloud/liteworldedit/LiteWorldEdit.java b/src/main/java/site/deercloud/liteworldedit/LiteWorldEdit.java index 82be620..db23844 100644 --- a/src/main/java/site/deercloud/liteworldedit/LiteWorldEdit.java +++ b/src/main/java/site/deercloud/liteworldedit/LiteWorldEdit.java @@ -13,23 +13,25 @@ public final class LiteWorldEdit extends JavaPlugin { public void onEnable() { // Plugin startup logic instance = this; - _config = new ConfigManager(); + config = new ConfigManager(); _cache = new Cache(); Bukkit.getPluginManager().registerEvents(new Events(), this); Objects.requireNonNull(Bukkit.getPluginCommand("LiteWorldEdit")).setExecutor(new Commands()); Objects.requireNonNull(Bukkit.getPluginCommand("LiteWorldEdit")).setTabCompleter(new Commands()); - String logo = "LiteWorldEdit 已加载 版本: " + getPluginMeta().getVersion() + "\n"; + LoggerX.info("LiteWorldEdit 已加载"); + LoggerX.info("版本: " + getPluginMeta().getVersion()); + LoggerX.info(""); // https://patorjk.com/software/taag/#p=display&f=Big&t=LiteWorldEdit - logo += " _ _ _ __ __ _ _ ______ _ _ _ \n"; - logo += "| | (_) | \\ \\ / / | | | | ____| | (_) | \n"; - logo += "| | _| |_ __\\ \\ /\\ / /__ _ __| | __| | |__ __| |_| |_ \n"; - logo += "| | | | __/ _ \\\\/ \\/ / _ \\| '__| |/ _` | __| / _` | | __|\n"; - logo += "| |____| | || __/\\ /\\ / (_) | | | | (_| | |___| (_| | | |_ \n"; - logo += "|______|_|\\__\\___| \\/ \\/ \\___/|_| |_|\\__,_|______\\__,_|_|\\__|\n"; - logo += "\n"; - LoggerX.info(logo); + LoggerX.info(" _ _ _ __ __ _ _ ______ _ _ _ "); + LoggerX.info("| | (_) | \\ \\ / / | | | | ____| | (_) | "); + LoggerX.info("| | _| |_ __\\ \\ /\\ / /__ _ __| | __| | |__ __| |_| |_ "); + LoggerX.info("| | | | __/ _ \\\\/ \\/ / _ \\| '__| |/ _` | __| / _` | | __|"); + LoggerX.info("| |____| | || __/\\ /\\ / (_) | | | | (_| | |___| (_| | | |_ "); + LoggerX.info("|______|_|\\__\\___| \\/ \\/ \\___/|_| |_|\\__,_|______\\__,_|_|\\__|"); + LoggerX.info(""); + } @Override @@ -38,7 +40,7 @@ public final class LiteWorldEdit extends JavaPlugin { } public ConfigManager getConfigMgr() { - return _config; + return config; } public Cache getCache() { @@ -46,6 +48,6 @@ public final class LiteWorldEdit extends JavaPlugin { } public static LiteWorldEdit instance; - private ConfigManager _config; + public static ConfigManager config; private Cache _cache; } diff --git a/src/main/java/site/deercloud/liteworldedit/Managers/ConfigManager.java b/src/main/java/site/deercloud/liteworldedit/Managers/ConfigManager.java index 95c7ddf..d2419ea 100644 --- a/src/main/java/site/deercloud/liteworldedit/Managers/ConfigManager.java +++ b/src/main/java/site/deercloud/liteworldedit/Managers/ConfigManager.java @@ -16,7 +16,9 @@ public class ConfigManager { _x_max = _file.getInt("MaxX", 64); _y_max = _file.getInt("MaxY", 64); _z_max = _file.getInt("MaxZ", 64); + _multiplier = _file.getInt("Multiplier", 1); _drop_items = _file.getBoolean("DropItems", false); + _plugin.saveConfig(); } public Boolean isDebug() { @@ -45,6 +47,10 @@ public class ConfigManager { return _drop_items; } + public Integer getMultiplier() { + return _multiplier; + } + public void setDropItems(Boolean drop_items) { _drop_items = drop_items; _file.set("DropItems", drop_items); @@ -73,4 +79,6 @@ public class ConfigManager { private Integer _z_max; private Boolean _drop_items; + + private Integer _multiplier; } diff --git a/src/main/java/site/deercloud/liteworldedit/Notification.java b/src/main/java/site/deercloud/liteworldedit/Notification.java index 79d3259..e3aad34 100644 --- a/src/main/java/site/deercloud/liteworldedit/Notification.java +++ b/src/main/java/site/deercloud/liteworldedit/Notification.java @@ -3,23 +3,93 @@ package site.deercloud.liteworldedit; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.Style; import net.kyori.adventure.text.format.TextColor; +import net.kyori.adventure.title.Title; +import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import static site.deercloud.liteworldedit.LoggerX.*; + public class Notification { private static final Style i_style = Style.style(TextColor.color(139, 255, 123)); private static final Style w_style = Style.style(TextColor.color(255, 185, 69)); private static final Style e_style = Style.style(TextColor.color(255, 96, 72)); + private static final String prefix = "[LWE] "; + public static void info(Player player, String msg) { - player.sendMessage(Component.text("[LWE] " + msg, i_style)); + player.sendMessage(Component.text(prefix + msg, i_style)); } - public static void warn(Player player, String msg) { - player.sendMessage(Component.text("[LWE] " + msg, w_style)); + player.sendMessage(Component.text(prefix + msg, w_style)); } public static void error(Player player, String msg) { - player.sendMessage(Component.text("[LWE] " + msg, e_style)); + player.sendMessage(Component.text(prefix + msg, e_style)); + } + + public static void info(CommandSender sender, String msg) { + sender.sendMessage(Component.text(prefix + msg, i_style)); + } + + public static void warn(CommandSender sender, String msg) { + sender.sendMessage(Component.text(prefix + msg, w_style)); + } + + public static void error(CommandSender sender, String msg) { + sender.sendMessage(Component.text(prefix + msg, e_style)); + } + + public static void info(Player player, Component msg) { + player.sendMessage(Component.text(prefix, i_style).append(msg)); + if (LiteWorldEdit.config.isDebug()) + debug("来自玩家[ " + player.getName() + " ] 的提示 | " + msg); + } + + public static void warn(Player player, Component msg) { + player.sendMessage(Component.text(prefix, w_style).append(msg)); + if (LiteWorldEdit.config.isDebug()) + debug("来自玩家[ " + player.getName() + " ] 的警告 | " + msg); + } + + public static void error(Player player, Component msg) { + player.sendMessage(Component.text(prefix, e_style).append(msg)); + if (LiteWorldEdit.config.isDebug()) + debug("来自玩家[ " + player.getName() + " ] 的报错 | " + msg); + } + + public static void info(CommandSender player, Component msg) { + player.sendMessage(Component.text(prefix, i_style).append(msg)); + } + + public static void warn(CommandSender player, Component msg) { + player.sendMessage(Component.text(prefix, w_style).append(msg)); + } + + public static void error(CommandSender player, Component msg) { + player.sendMessage(Component.text(prefix, e_style).append(msg)); + } + + private static void sendTitle(Player player, Component title, Component subtitle) { + Title title_t = Title.title(title, subtitle); + player.showTitle(title_t); + } + + public static void titleInfo(Player player, String title, String subtitle) { + Component title_c = Component.text(title, i_style); + Component subtitle_c = Component.text(subtitle, i_style); + sendTitle(player, title_c, subtitle_c); + } + + public static void titleWarn(Player player, String title, String subtitle) { + Component title_c = Component.text(title, w_style); + Component subtitle_c = Component.text(subtitle, w_style); + sendTitle(player, title_c, subtitle_c); + } + + public static void titleError(Player player, String title, String subtitle) { + Component title_c = Component.text(title, e_style); + Component subtitle_c = Component.text(subtitle, e_style); + sendTitle(player, title_c, subtitle_c); } } diff --git a/src/main/java/site/deercloud/liteworldedit/Task.java b/src/main/java/site/deercloud/liteworldedit/Task.java index 4994ae8..16986d8 100644 --- a/src/main/java/site/deercloud/liteworldedit/Task.java +++ b/src/main/java/site/deercloud/liteworldedit/Task.java @@ -1,10 +1,11 @@ package site.deercloud.liteworldedit; +import net.kyori.adventure.text.Component; import org.bukkit.entity.Player; import site.deercloud.liteworldedit.Jobs.Job; import site.deercloud.liteworldedit.Jobs.JobErrCode; -public class Task implements Runnable{ +public class Task implements Runnable { /** * When an object implementing interface {@code Runnable} is used * to create a thread, starting the thread causes the object's @@ -25,29 +26,31 @@ public class Task implements Runnable{ @Override public void run() { - Job job = this.xPlayer.popJob(); - if (job == null) { - return; - } - // 如果任务不可执行 允许在一个tick内多次执行直到任务可执行 - int max_retries = 100; - JobErrCode re; - while ((re = job.Do()) != JobErrCode.OK) { - max_retries--; - if (max_retries <= 0) { - break; + for (int i = 0; i < LiteWorldEdit.config.getMultiplier(); i++) { + Job job = this.xPlayer.popJob(); + if (job == null) { + return; } - if (re.canContinue()) { - job.get_creator().sendTitle("§e警告", "§e" + re.getMessage(), 10, 70, 20); - job = this.xPlayer.popJob(); - if (job == null) { + // 如果任务不可执行 允许在一个tick内多次执行直到任务可执行 + int max_retries = 100; + JobErrCode re; + while ((re = job.Do()) != JobErrCode.OK) { + max_retries--; + if (max_retries <= 0) { + break; + } + Player player = job.get_creator(); + if (re.canContinue()) { + Notification.titleWarn(player, "警告", re.getMessage()); + job = this.xPlayer.popJob(); + if (job == null) { + return; + } + } else { + Notification.titleError(player, "错误 任务已自动暂停", re.getMessage()); + this.xPlayer.pauseJob(); return; } - } else { - Player player = job.get_creator(); - player.sendTitle("§c错误 任务已自动暂停", "§c" + re.getMessage(), 10, 70, 20); - this.xPlayer.pauseJob(); - return; } } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 9f62f27..4fd863d 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -4,6 +4,8 @@ MaxY: 64 MaxZ: 64 +Multiplier: 1 + DropItems: false Debug: false \ No newline at end of file