From a4ecbe216f16bd951dbac88c3cc33b569bd18918 Mon Sep 17 00:00:00 2001 From: CarmJos Date: Sun, 13 Mar 2022 13:09:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=B6=88=E6=81=AF=E6=8F=90?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../configuration/PluginMessages.java | 22 +++++++++ .../plugin/commanditem/item/CommandItem.java | 10 ++-- .../commanditem/item/ItemRestrictions.java | 47 ++++++++++++++++--- .../commanditem/listener/ItemListener.java | 22 +++++++-- src/main/resources/items/.example-item.yml | 6 +-- 5 files changed, 89 insertions(+), 18 deletions(-) diff --git a/src/main/java/cc/carm/plugin/commanditem/configuration/PluginMessages.java b/src/main/java/cc/carm/plugin/commanditem/configuration/PluginMessages.java index 456e674..8ddd53b 100644 --- a/src/main/java/cc/carm/plugin/commanditem/configuration/PluginMessages.java +++ b/src/main/java/cc/carm/plugin/commanditem/configuration/PluginMessages.java @@ -1,9 +1,31 @@ package cc.carm.plugin.commanditem.configuration; +import cc.carm.lib.easyplugin.configuration.language.EasyMessageList; import cc.carm.lib.easyplugin.configuration.language.MessagesRoot; public class PluginMessages extends MessagesRoot { + public final static EasyMessageList COOLDOWN = EasyMessageList.builder() + .contents("&f您需要等待 &c%(time)秒 &f才可再次使用指令物品。") + .params("time").build(); + + public static class Restrictions { + + public final static EasyMessageList INVALID = EasyMessageList.builder() + .contents("&c&l抱歉!&f由于配置的时间限制错误,该物品目前暂不可用。") + .build(); + + public final static EasyMessageList NOT_STARTED = EasyMessageList.builder() + .contents("&f该物品目前还到可使用的时间,请在 &c%(time) &f后使用~") + .params("time") + .build(); + + public final static EasyMessageList EXPIRED = EasyMessageList.builder() + .contents("&c&l抱歉!&f由于该物品已过最后使用期限,故无法继续使用。") + .params("time") + .build(); + } + } diff --git a/src/main/java/cc/carm/plugin/commanditem/item/CommandItem.java b/src/main/java/cc/carm/plugin/commanditem/item/CommandItem.java index d3c08ca..9ad89d9 100644 --- a/src/main/java/cc/carm/plugin/commanditem/item/CommandItem.java +++ b/src/main/java/cc/carm/plugin/commanditem/item/CommandItem.java @@ -9,12 +9,12 @@ public class CommandItem { @NotNull UUID uuid; - @NotNull ItemSettings configuration; + @NotNull ItemSettings settings; @NotNull ItemStack itemStack; - public CommandItem(@NotNull UUID uuid, @NotNull ItemSettings configuration, @NotNull ItemStack itemStack) { + public CommandItem(@NotNull UUID uuid, @NotNull ItemSettings settings, @NotNull ItemStack itemStack) { this.uuid = uuid; - this.configuration = configuration; + this.settings = settings; this.itemStack = itemStack; } @@ -22,8 +22,8 @@ public class CommandItem { return uuid; } - public @NotNull ItemSettings getConfiguration() { - return configuration; + public @NotNull ItemSettings getSettings() { + return settings; } public @NotNull ItemStack getItemStack() { diff --git a/src/main/java/cc/carm/plugin/commanditem/item/ItemRestrictions.java b/src/main/java/cc/carm/plugin/commanditem/item/ItemRestrictions.java index f734cf1..a3ea35b 100644 --- a/src/main/java/cc/carm/plugin/commanditem/item/ItemRestrictions.java +++ b/src/main/java/cc/carm/plugin/commanditem/item/ItemRestrictions.java @@ -1,11 +1,16 @@ package cc.carm.plugin.commanditem.item; +import cc.carm.lib.easyplugin.configuration.language.EasyMessageList; import cc.carm.lib.easysql.api.util.TimeDateUtils; -import cc.carm.plugin.commanditem.Main; +import cc.carm.plugin.commanditem.configuration.PluginMessages; import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.function.Function; +import java.util.function.Supplier; + public class ItemRestrictions { long startTime; @@ -18,7 +23,6 @@ public class ItemRestrictions { public ItemRestrictions(long startTime, long endTime) { this.startTime = startTime; this.endTime = endTime; - Main.debugging("ItemRestrictions: " + startTime + " -> " + endTime); } /** @@ -45,10 +49,41 @@ public class ItemRestrictions { public enum CheckResult { - AVAILABLE, - INVALID, - NOT_STARTED, - EXPIRED; + AVAILABLE(() -> null, (res) -> null), + + INVALID(() -> PluginMessages.Restrictions.INVALID, (res) -> null), + + NOT_STARTED( + () -> PluginMessages.Restrictions.NOT_STARTED, + (res) -> new Object[]{TimeDateUtils.getTimeString(res.getStartTime())} + ), + + EXPIRED( + () -> PluginMessages.Restrictions.EXPIRED, + (res) -> new Object[]{TimeDateUtils.getTimeString(res.getEndTime())} + ); + + Supplier<@Nullable EasyMessageList> message; + Function<@NotNull ItemRestrictions, Object[]> params; + + CheckResult(@NotNull Supplier<@Nullable EasyMessageList> message, + @NotNull Function<@NotNull ItemRestrictions, @Nullable Object[]> params) { + this.message = message; + this.params = params; + } + + public Supplier getMessage() { + return message; + } + + public void send(Player player, ItemRestrictions restrictions) { + Object[] params = this.params.apply(restrictions); + if (params == null) { + getMessage().get().send(player); + } else { + getMessage().get().send(player, params); + } + } } diff --git a/src/main/java/cc/carm/plugin/commanditem/listener/ItemListener.java b/src/main/java/cc/carm/plugin/commanditem/listener/ItemListener.java index c5ca726..767e6e7 100644 --- a/src/main/java/cc/carm/plugin/commanditem/listener/ItemListener.java +++ b/src/main/java/cc/carm/plugin/commanditem/listener/ItemListener.java @@ -2,9 +2,11 @@ package cc.carm.plugin.commanditem.listener; import cc.carm.plugin.commanditem.CommandItemAPI; import cc.carm.plugin.commanditem.configuration.PluginConfig; +import cc.carm.plugin.commanditem.configuration.PluginMessages; import cc.carm.plugin.commanditem.item.CommandItem; import cc.carm.plugin.commanditem.item.ItemActionGroup; import cc.carm.plugin.commanditem.item.ItemRestrictions; +import cc.carm.plugin.commanditem.item.ItemSettings; import org.bukkit.entity.EntityType; import org.bukkit.entity.Item; import org.bukkit.entity.Player; @@ -42,16 +44,21 @@ public class ItemListener implements Listener { Player player = event.getPlayer(); if (!isClickable(player.getUniqueId())) { - // TODO 给玩家发消息告诉他还在冷却 + PluginMessages.COOLDOWN.send(player, getRemainSeconds(player.getUniqueId())); return; } - if (commandItem.getConfiguration().checkRestrictions() != ItemRestrictions.CheckResult.AVAILABLE) { - // TODO 给玩家发消息告诉他还不能用 + ItemSettings settings = commandItem.getSettings(); + + // 检查物品的相关使用限制是否满足要求 + ItemRestrictions.CheckResult result = settings.getRestrictions().check(); + if (result != ItemRestrictions.CheckResult.AVAILABLE) { + result.send(player, settings.getRestrictions()); // 发送提示 return; } - ItemActionGroup actions = commandItem.getConfiguration().getPlayerActions(player); + // 获取玩家的对应操作组 + ItemActionGroup actions = settings.getPlayerActions(player); if (actions == null) return; updateTime(player.getUniqueId()); @@ -116,5 +123,12 @@ public class ItemListener implements Listener { || System.currentTimeMillis() - this.clickTime.get(uuid) > PluginConfig.CoolDown.TIME.get(); } + public int getRemainSeconds(UUID uuid) { + if (!this.clickTime.containsKey(uuid)) return 0; + if (!PluginConfig.CoolDown.ENABLE.get()) return 0; + long start = this.clickTime.get(uuid); + return (int) ((PluginConfig.CoolDown.TIME.get() * 1000 - (System.currentTimeMillis() - start)) / 1000) + 1; + } + } diff --git a/src/main/resources/items/.example-item.yml b/src/main/resources/items/.example-item.yml index de3d88e..7a4c793 100644 --- a/src/main/resources/items/.example-item.yml +++ b/src/main/resources/items/.example-item.yml @@ -30,9 +30,9 @@ functions: # 限定相关配置 restrictions: - time: # 允许领取的时间范围 - start: 2021-12-21 15:33:21 # 开始时间,若无该选项则不限制开始时间 - end: 2022-01-21 15:33:21 # 结束时间,若无该选项则不限制结束时间 + time: # 允许领取的时间范围, 格式为 “yyyy-MM-dd HH:mm:ss” (必须用 "" 或 ‘’ 包裹) + start: "2021-12-21 15:33:21" # 开始时间,若无该选项则不限制开始时间 + end: "2022-01-21 15:33:21" # 结束时间,若无该选项则不限制结束时间 # 相关权限设定 # 若玩家拥有配置的权限,则会执行权限对应的操作;