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() + "";