diff --git a/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandCommand.java b/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandCommand.java index c5337b9..4b0f06f 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandCommand.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandCommand.java @@ -17,6 +17,7 @@ public class IslandCommand extends PlayerSubCommand { registerSubCommand(new IslandGo(plugin)); // TODO -- Add some more output registerSubCommand(new IslandTop(plugin)); + registerSubCommand(new IslandName(plugin)); registerSubCommand(new IslandRestart(plugin)); // TODO -- Add IslandRestartCommand registerSubCommand(new IslandAccept(plugin)); registerSubCommand(new IslandDeny(plugin)); diff --git a/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandName.java b/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandName.java new file mode 100644 index 0000000..9009779 --- /dev/null +++ b/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandName.java @@ -0,0 +1,53 @@ +package com.alttd.cometskyblock.commands.island; + +import com.alttd.cometskyblock.CometSkyBlockPlugin; +import com.alttd.cometskyblock.commands.PlayerSubCommand; +import com.alttd.cometskyblock.island.Island; +import com.alttd.cometskyblock.island.IslandData; +import com.alttd.cometskyblock.island.IslandPlayer; +import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; +import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; +import org.bukkit.entity.Player; + +public class IslandName extends PlayerSubCommand { + + protected IslandName(CometSkyBlockPlugin plugin) { + super(plugin, "name"); + } + + @Override + protected boolean execute(Player player, IslandPlayer islandPlayer, String... args) { + if (islandPlayer.islandId() == 0) { + player.sendRichMessage(plugin.messagesConfiguration().get().commands().island().noIsland()); + return true; + } + if (args.length < 1) { + player.sendRichMessage(plugin.messagesConfiguration().get().commands().island().commandUsage()); + return true; + } + //TODO filter name + String islandName = args[0]; + +// if (islandName.matches("someRegexPreferabllyAWholeListOfThem")) { +// player.sendRichMessage("You used prohibited language in your island name, please keep your names appropriate and suitable for all ages."); +// return true; +// } + + if (islandName.length() < 3 || islandName.length() > 16) { + player.sendRichMessage("Island names have to be between 3 and 16 characters"); + return true; + } + + if (IslandData.islandNameIsDuplicate(islandName)) { + player.sendRichMessage("That island name already exists, please choose another"); + return true; + } + Island island = Island.getIsland(islandPlayer.islandUUID()); + String oldName = island.islandName(); + island.islandName(islandName); + player.sendRichMessage("Your island has been renamed from to !", TagResolver.resolver( + Placeholder.parsed("old_name", oldName), + Placeholder.parsed("new_name", islandName))); + return true; + } +} diff --git a/plugin/src/main/java/com/alttd/cometskyblock/island/Island.java b/plugin/src/main/java/com/alttd/cometskyblock/island/Island.java index 99554b9..219f0ad 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/island/Island.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/island/Island.java @@ -110,6 +110,7 @@ public class Island extends YamlConfiguration { } public void islandName(String islandName) { + IslandData.updateIsland(new IslandData(islandId(), islandName, level())); set("island.islandname", islandName); save(); } diff --git a/plugin/src/main/java/com/alttd/cometskyblock/island/IslandData.java b/plugin/src/main/java/com/alttd/cometskyblock/island/IslandData.java index 094e752..25e5169 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/island/IslandData.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/island/IslandData.java @@ -65,6 +65,10 @@ public record IslandData(int islandId, String name, int level) { } } + public static boolean islandNameIsDuplicate(String islandName) { + return islandDataMap.values().stream().anyMatch(islandData -> islandData.name().equalsIgnoreCase(islandName)); + } + public String format(int playerIslandId) { if (playerIslandId == islandId) { return "" + format() + "";