1
mirror of https://github.com/CarmJos/ScriptItems synced 2024-09-19 21:35:50 +00:00

完善消息提示

This commit is contained in:
Carm Jos 2022-03-13 13:09:30 +08:00
parent b0b94a4b95
commit a4ecbe216f
5 changed files with 89 additions and 18 deletions

View File

@ -1,9 +1,31 @@
package cc.carm.plugin.commanditem.configuration; package cc.carm.plugin.commanditem.configuration;
import cc.carm.lib.easyplugin.configuration.language.EasyMessageList;
import cc.carm.lib.easyplugin.configuration.language.MessagesRoot; import cc.carm.lib.easyplugin.configuration.language.MessagesRoot;
public class PluginMessages extends 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();
}
} }

View File

@ -9,12 +9,12 @@ public class CommandItem {
@NotNull UUID uuid; @NotNull UUID uuid;
@NotNull ItemSettings configuration; @NotNull ItemSettings settings;
@NotNull ItemStack itemStack; @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.uuid = uuid;
this.configuration = configuration; this.settings = settings;
this.itemStack = itemStack; this.itemStack = itemStack;
} }
@ -22,8 +22,8 @@ public class CommandItem {
return uuid; return uuid;
} }
public @NotNull ItemSettings getConfiguration() { public @NotNull ItemSettings getSettings() {
return configuration; return settings;
} }
public @NotNull ItemStack getItemStack() { public @NotNull ItemStack getItemStack() {

View File

@ -1,11 +1,16 @@
package cc.carm.plugin.commanditem.item; 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.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.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.function.Function;
import java.util.function.Supplier;
public class ItemRestrictions { public class ItemRestrictions {
long startTime; long startTime;
@ -18,7 +23,6 @@ public class ItemRestrictions {
public ItemRestrictions(long startTime, long endTime) { public ItemRestrictions(long startTime, long endTime) {
this.startTime = startTime; this.startTime = startTime;
this.endTime = endTime; this.endTime = endTime;
Main.debugging("ItemRestrictions: " + startTime + " -> " + endTime);
} }
/** /**
@ -45,10 +49,41 @@ public class ItemRestrictions {
public enum CheckResult { public enum CheckResult {
AVAILABLE, AVAILABLE(() -> null, (res) -> null),
INVALID,
NOT_STARTED, INVALID(() -> PluginMessages.Restrictions.INVALID, (res) -> null),
EXPIRED;
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<EasyMessageList> 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);
}
}
} }

View File

@ -2,9 +2,11 @@ package cc.carm.plugin.commanditem.listener;
import cc.carm.plugin.commanditem.CommandItemAPI; import cc.carm.plugin.commanditem.CommandItemAPI;
import cc.carm.plugin.commanditem.configuration.PluginConfig; 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.CommandItem;
import cc.carm.plugin.commanditem.item.ItemActionGroup; import cc.carm.plugin.commanditem.item.ItemActionGroup;
import cc.carm.plugin.commanditem.item.ItemRestrictions; import cc.carm.plugin.commanditem.item.ItemRestrictions;
import cc.carm.plugin.commanditem.item.ItemSettings;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.Item; import org.bukkit.entity.Item;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -42,16 +44,21 @@ public class ItemListener implements Listener {
Player player = event.getPlayer(); Player player = event.getPlayer();
if (!isClickable(player.getUniqueId())) { if (!isClickable(player.getUniqueId())) {
// TODO 给玩家发消息告诉他还在冷却 PluginMessages.COOLDOWN.send(player, getRemainSeconds(player.getUniqueId()));
return; return;
} }
if (commandItem.getConfiguration().checkRestrictions() != ItemRestrictions.CheckResult.AVAILABLE) { ItemSettings settings = commandItem.getSettings();
// TODO 给玩家发消息告诉他还不能用
// 检查物品的相关使用限制是否满足要求
ItemRestrictions.CheckResult result = settings.getRestrictions().check();
if (result != ItemRestrictions.CheckResult.AVAILABLE) {
result.send(player, settings.getRestrictions()); // 发送提示
return; return;
} }
ItemActionGroup actions = commandItem.getConfiguration().getPlayerActions(player); // 获取玩家的对应操作组
ItemActionGroup actions = settings.getPlayerActions(player);
if (actions == null) return; if (actions == null) return;
updateTime(player.getUniqueId()); updateTime(player.getUniqueId());
@ -116,5 +123,12 @@ public class ItemListener implements Listener {
|| System.currentTimeMillis() - this.clickTime.get(uuid) > PluginConfig.CoolDown.TIME.get(); || 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;
}
} }

View File

@ -30,9 +30,9 @@ functions:
# 限定相关配置 # 限定相关配置
restrictions: restrictions:
time: # 允许领取的时间范围 time: # 允许领取的时间范围, 格式为 “yyyy-MM-dd HH:mm:ss” (必须用 "" 或 包裹)
start: 2021-12-21 15:33:21 # 开始时间,若无该选项则不限制开始时间 start: "2021-12-21 15:33:21" # 开始时间,若无该选项则不限制开始时间
end: 2022-01-21 15:33:21 # 结束时间,若无该选项则不限制结束时间 end: "2022-01-21 15:33:21" # 结束时间,若无该选项则不限制结束时间
# 相关权限设定 # 相关权限设定
# 若玩家拥有配置的权限,则会执行权限对应的操作; # 若玩家拥有配置的权限,则会执行权限对应的操作;