diff --git a/src/main/java/dev/twme/debugstickpro/commands/subcommands/ModeCommand.java b/src/main/java/dev/twme/debugstickpro/commands/subcommands/ModeCommand.java index 3266b59..fbc9a74 100644 --- a/src/main/java/dev/twme/debugstickpro/commands/subcommands/ModeCommand.java +++ b/src/main/java/dev/twme/debugstickpro/commands/subcommands/ModeCommand.java @@ -7,11 +7,13 @@ import dev.twme.debugstickpro.playerdata.PlayerData; import dev.twme.debugstickpro.playerdata.PlayerDataManager; import dev.twme.debugstickpro.utils.CustomModelDataManager; +import dev.twme.debugstickpro.utils.DebugStickItem; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.Bukkit; import org.bukkit.entity.Player; +import java.util.Locale; import java.util.UUID; public class ModeCommand { @@ -43,62 +45,64 @@ public static boolean onModeCommand(Player player, String[] args) { if (args.length != 2) { return false; } - PlayerData playerData = PlayerDataManager.getOrCreatePlayerData(player.getUniqueId()); - if (args[1].equalsIgnoreCase("classic")) { - - - if (modeChangeEventCancelled(player.getUniqueId(), playerData.getDebugStickMode(), DebugStickMode.CLASSIC)) { - return true; - } - PlayerDataManager.setPlayerData(player.getUniqueId(), playerData.setDebugStickMode(DebugStickMode.CLASSIC)); + DebugStickMode newMode = parseMode(args[1]); - CustomModelDataManager.updateItem(player, DebugStickMode.CLASSIC); - - Component parsed = mm.deserialize(I18n.string(playerUUID, Lang.CommandsMessages.Mode.SuccessSetToClassic)); + if (newMode == null) { + Component parsed = mm.deserialize(I18n.string(playerUUID, Lang.CommandsMessages.Mode.Usage)); player.sendMessage(parsed); return true; - } else if (args[1].equalsIgnoreCase("copy")) { - if (player.hasPermission("debugstickpro.mode.copy")) { + } - if (modeChangeEventCancelled(player.getUniqueId(), playerData.getDebugStickMode(), DebugStickMode.COPY)) { - return true; - } + if (!hasModePermission(player, newMode)) { + Component parsed = mm.deserialize(I18n.string(playerUUID, Lang.CommandsMessages.NoPermission)); + player.sendMessage(parsed); + return true; + } - PlayerDataManager.setPlayerData(player.getUniqueId(), playerData.setDebugStickMode(DebugStickMode.COPY)); + if (!DebugStickItem.checkPlayer(player)) { + Component parsed = mm.deserialize(I18n.string(playerUUID, Lang.CommandsMessages.Mode.MustHoldDebugStick)); + player.sendMessage(parsed); + return true; + } - CustomModelDataManager.updateItem(player, DebugStickMode.COPY); + PlayerData playerData = PlayerDataManager.getOrCreatePlayerData(player.getUniqueId()); - Component parsed = mm.deserialize(I18n.string(playerUUID, Lang.CommandsMessages.Mode.SuccessSetToCopy)); - player.sendMessage(parsed); - } else { - Component parsed = mm.deserialize(I18n.string(playerUUID, Lang.CommandsMessages.NoPermission)); - player.sendMessage(parsed); - } + if (modeChangeEventCancelled(player.getUniqueId(), playerData.getDebugStickMode(), newMode)) { return true; - } else if (args[1].equalsIgnoreCase("freeze")) { - if (player.hasPermission("debugstickpro.mode.freeze")) { + } - if (modeChangeEventCancelled(player.getUniqueId(), playerData.getDebugStickMode(), DebugStickMode.FREEZE)) { - return true; - } + PlayerDataManager.setPlayerData(player.getUniqueId(), playerData.setDebugStickMode(newMode)); - PlayerDataManager.setPlayerData(player.getUniqueId(), playerData.setDebugStickMode(DebugStickMode.FREEZE)); + CustomModelDataManager.updateItem(player, newMode); - CustomModelDataManager.updateItem(player, DebugStickMode.FREEZE); + Component parsed = mm.deserialize(I18n.string(playerUUID, successMessageKey(newMode))); + player.sendMessage(parsed); + return true; + } - Component parsed = mm.deserialize(I18n.string(playerUUID, Lang.CommandsMessages.Mode.SuccessSetToFreeze)); - player.sendMessage(parsed); - } else { - Component parsed = mm.deserialize(I18n.string(playerUUID, Lang.CommandsMessages.NoPermission)); - player.sendMessage(parsed); - } - return true; - } else { - Component parsed = mm.deserialize(I18n.string(playerUUID, Lang.CommandsMessages.Mode.Usage)); - player.sendMessage(parsed); - return true; - } + private static DebugStickMode parseMode(String mode) { + return switch (mode.toLowerCase(Locale.ROOT)) { + case "classic" -> DebugStickMode.CLASSIC; + case "copy" -> DebugStickMode.COPY; + case "freeze" -> DebugStickMode.FREEZE; + default -> null; + }; + } + + private static boolean hasModePermission(Player player, DebugStickMode mode) { + return switch (mode) { + case CLASSIC -> true; + case COPY -> player.hasPermission("debugstickpro.mode.copy"); + case FREEZE -> player.hasPermission("debugstickpro.mode.freeze"); + }; + } + private static String successMessageKey(DebugStickMode mode) { + return switch (mode) { + case CLASSIC -> Lang.CommandsMessages.Mode.SuccessSetToClassic; + case COPY -> Lang.CommandsMessages.Mode.SuccessSetToCopy; + case FREEZE -> Lang.CommandsMessages.Mode.SuccessSetToFreeze; + }; } } diff --git a/src/main/java/dev/twme/debugstickpro/display/ActionBarDisplayTask.java b/src/main/java/dev/twme/debugstickpro/display/ActionBarDisplayTask.java index 9e56813..4f10725 100644 --- a/src/main/java/dev/twme/debugstickpro/display/ActionBarDisplayTask.java +++ b/src/main/java/dev/twme/debugstickpro/display/ActionBarDisplayTask.java @@ -42,11 +42,7 @@ public void run() { switch (playerData.getDebugStickMode()) { case CLASSIC: Block block = player.getTargetBlockExact(5); - if (block == null) { - ActionbarUtil.removeActionBar(uuid); - continue; - } - ActionbarUtil.sendActionBar(player, ClassicActionBarDisplay.getDisplay(uuid, block.getBlockData())); + ActionbarUtil.sendActionBar(player, ClassicActionBarDisplay.getDisplay(uuid, block == null ? null : block.getBlockData())); continue; case COPY: ActionbarUtil.sendActionBar(player, CopyActionBarDisplay.getDisplay(uuid)); diff --git a/src/main/java/dev/twme/debugstickpro/localization/Lang.java b/src/main/java/dev/twme/debugstickpro/localization/Lang.java index 5e566b8..6dee6b3 100644 --- a/src/main/java/dev/twme/debugstickpro/localization/Lang.java +++ b/src/main/java/dev/twme/debugstickpro/localization/Lang.java @@ -19,6 +19,7 @@ public final static class Give { public final static class Mode { public final static String Usage = "CommandsMessages.Mode.Usage"; + public final static String MustHoldDebugStick = "CommandsMessages.Mode.MustHoldDebugStick"; public final static String SuccessSetToClassic = "CommandsMessages.Mode.SuccessSetToClassic"; public final static String SuccessSetToCopy = "CommandsMessages.Mode.SuccessSetToCopy"; public final static String SuccessSetToFreeze = "CommandsMessages.Mode.SuccessSetToFreeze"; diff --git a/src/main/java/dev/twme/debugstickpro/mode/classic/ClassicActionBarDisplay.java b/src/main/java/dev/twme/debugstickpro/mode/classic/ClassicActionBarDisplay.java index 0669822..3a7db13 100644 --- a/src/main/java/dev/twme/debugstickpro/mode/classic/ClassicActionBarDisplay.java +++ b/src/main/java/dev/twme/debugstickpro/mode/classic/ClassicActionBarDisplay.java @@ -14,6 +14,9 @@ public class ClassicActionBarDisplay { public static String getDisplay(UUID playerUUID, BlockData blockData) { + if (blockData == null) { + return I18n.string(playerUUID, Lang.Tips.classicModeIntroduction); + } // 用於確認是否有任何 SubBlockData 類型被使用的變數 boolean hasIsUsingType = false; @@ -24,9 +27,8 @@ public static String getDisplay(UUID playerUUID, BlockData blockData) { // 獲取方塊拆分後的資料 ArrayList displayList = BlockDataSeparater.separate(blockData, playerUUID); - // TODO: 需檢查這邊的返回是否是冗於 if (displayList.isEmpty()) { - return " "; + return I18n.string(playerUUID, Lang.Tips.classicModeIntroduction); } int selectedIndex; diff --git a/src/main/resources/lang/en_US.yml b/src/main/resources/lang/en_US.yml index 04ad593..02cadcd 100644 --- a/src/main/resources/lang/en_US.yml +++ b/src/main/resources/lang/en_US.yml @@ -16,6 +16,7 @@ CommandsMessages: Success: "Given Debug Stick to %player%." Mode: Usage: "Usage: /dsp mode [classic|copy|freeze]" + MustHoldDebugStick: "You must hold a Debug Stick to change its mode." SuccessSetToClassic: "Mode set to Classic." SuccessSetToCopy: "Mode set to Copy." SuccessSetToFreeze: "Mode set to Freeze." diff --git a/src/main/resources/lang/zh_TW.yml b/src/main/resources/lang/zh_TW.yml index cae6008..f10bb59 100644 --- a/src/main/resources/lang/zh_TW.yml +++ b/src/main/resources/lang/zh_TW.yml @@ -17,6 +17,7 @@ CommandsMessages: Success: "已將除錯棒給予 %player%。" Mode: Usage: "用法: /dsp mode [classic|copy|freeze]" + MustHoldDebugStick: "您必須手持除錯棒才能更改其模式。" SuccessSetToClassic: "模式已設置為 經典。" SuccessSetToCopy: "模式已設置為 複製。" SuccessSetToFreeze: "模式已設置為 凍結。"