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;
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();
}
}

View File

@ -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() {

View File

@ -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<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.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;
}
}

View File

@ -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" # 结束时间,若无该选项则不限制结束时间
# 相关权限设定
# 若玩家拥有配置的权限,则会执行权限对应的操作;