diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/ClaimCommand.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/ClaimCommand.java index 417e699..8e196c0 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/ClaimCommand.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/ClaimCommand.java @@ -2,6 +2,7 @@ package me.freezy.plugins.papermc.blazesmp.command; import me.freezy.plugins.papermc.blazesmp.BlazeSMP; import me.freezy.plugins.papermc.blazesmp.command.util.SimpleCommand; +import me.freezy.plugins.papermc.blazesmp.listener.ChunkInventoryManager; import me.freezy.plugins.papermc.blazesmp.module.Clan; import me.freezy.plugins.papermc.blazesmp.module.manager.Clans; import net.kyori.adventure.text.minimessage.MiniMessage; @@ -35,29 +36,33 @@ public class ClaimCommand extends SimpleCommand { return true; } else { if (label.equalsIgnoreCase("claim")) { + if (args.length != 0 && args[0].equalsIgnoreCase("see")) { + ChunkInventoryManager.openInv(player); + return true; + } Clan playerClan = clans.getClanByMember(playerUUID); LinkedHashMap> existingClaims=clans.getClanChunks(playerClan); - if (args[0].equalsIgnoreCase("see")) { - return true; + if (!existingClaims.containsKey(playerUUID)) { + existingClaims.put(playerUUID, new LinkedList<>()); } - if (existingClaims.containsKey(playerUUID)) { - LinkedList playerClaims = existingClaims.get(playerUUID); - int MAX_CLAIMS = 50; - if (playerClaims.size() >= MAX_CLAIMS) { - player.sendMessage(MiniMessage.miniMessage().deserialize("You have reached the maximum amount of claims!")); + LinkedList playerClaims = existingClaims.get(playerUUID); + int MAX_CLAIMS = 50; + if (playerClaims.size() >= MAX_CLAIMS) { + player.sendMessage(MiniMessage.miniMessage().deserialize("You have reached the maximum amount of claims!")); + } else { + Chunk playerChunk = player.getLocation().getChunk(); + if (clans.isChunkClaimed(playerChunk)) { + player.sendMessage(MiniMessage.miniMessage().deserialize("This chunk is already claimed!")); } else { - Chunk playerChunk = player.getLocation().getChunk(); - if (clans.isChunkClaimed(playerChunk)) { - player.sendMessage(MiniMessage.miniMessage().deserialize("This chunk is already claimed!")); - } else { - playerClaims.add(playerChunk); - player.sendMessage(MiniMessage.miniMessage().deserialize("Claimed chunk!")); - existingClaims.put(playerUUID, playerClaims); - clans.setClanChunks(playerClan, existingClaims); - } + playerClaims.add(playerChunk); + player.sendMessage(MiniMessage.miniMessage().deserialize("Claimed chunk!")); + existingClaims.put(playerUUID, playerClaims); + clans.setClanChunks(playerClan, existingClaims); + playerClan.save(); + clans.saveAllClans(); } - return true; } + return true; } else if (label.equalsIgnoreCase("unclaim")) { Clan playerClan = clans.getClanByMember(playerUUID); LinkedHashMap> existingClaims=clans.getClanChunks(playerClan); @@ -69,6 +74,8 @@ public class ClaimCommand extends SimpleCommand { player.sendMessage(MiniMessage.miniMessage().deserialize("Unclaimed chunk!")); existingClaims.put(playerUUID, playerClaims); clans.setClanChunks(playerClan, existingClaims); + playerClan.save(); + clans.saveAllClans(); } else { player.sendMessage(MiniMessage.miniMessage().deserialize("You do not own this chunk!")); } diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ChunkInventoryManager.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ChunkInventoryManager.java index d9f1da1..3a441bd 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ChunkInventoryManager.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ChunkInventoryManager.java @@ -1,6 +1,7 @@ package me.freezy.plugins.papermc.blazesmp.listener; import me.freezy.plugins.papermc.blazesmp.BlazeSMP; +import me.freezy.plugins.papermc.blazesmp.module.Clan; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; @@ -18,15 +19,22 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.SkullMeta; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; public class ChunkInventoryManager implements Listener { // Speichert pro Spieler den aktuellen Seitenindex private final PaginatedData paginatedData = new PaginatedData(); + public static void openInv(Player player) { + Clan clan = BlazeSMP.getInstance().getClans().getClanByMember(player.getUniqueId()); + if (clan == null) { + player.sendMessage(MiniMessage.miniMessage().deserialize("Du bist in keinem Clan.")); + return; + } + new ChunkInventoryManager().chunksInv(player, clan); + } + /** * Öffnet das Clan-Chunks-Inventar für den Spieler. * Die Chunks des Clans werden als Kopf-Items (PLAYER_HEAD) angezeigt. @@ -34,7 +42,7 @@ public class ChunkInventoryManager implements Listener { * @param player Der Spieler, der das Inventar öffnet. * @param clan Der Clan, dessen Chunks angezeigt werden sollen. */ - private void chunksInv(Player player, me.freezy.plugins.papermc.blazesmp.module.Clan clan) { + private void chunksInv(Player player, Clan clan) { // Erstelle eine Liste der Map-Einträge (Chunk -> Besitzer UUID) aus dem Clan List> chunkEntries = new ArrayList<>(clan.getChunkOwnerMap().entrySet()); int itemsPerPage = 45; // Plätze 0-44 für Items, untere Reihe für Navigation @@ -56,9 +64,9 @@ public class ChunkInventoryManager implements Listener { */ private void openChunksMenu(Player player, List> chunkEntries, int currentPage, int totalPages, int itemsPerPage, - me.freezy.plugins.papermc.blazesmp.module.Clan clan) { + Clan clan) { // Erstelle ein 54-Slot Inventar mit farbigem Titel (Adventure Component) - Component title = MiniMessage.miniMessage().deserialize("Inv Chunks Bust"); + Component title = MiniMessage.miniMessage().deserialize("Clan Chunks"); Inventory inv = Bukkit.createInventory(null, 54, title); // Berechne Start- und Endindex für die aktuelle Seite @@ -67,9 +75,9 @@ public class ChunkInventoryManager implements Listener { // Füge für jeden Chunk ein Kopf-Item hinzu for (int i = startIndex; i < endIndex; i++) { - Map.Entry entry = chunkEntries.get(i); + Map.Entry entry = chunkEntries.get(i); Chunk chunk = entry.getKey(); - java.util.UUID ownerUUID = entry.getValue(); + UUID ownerUUID = entry.getValue(); OfflinePlayer ownerPlayer = Bukkit.getOfflinePlayer(ownerUUID); // Erstelle ein Kopf-Item @@ -176,17 +184,17 @@ public class ChunkInventoryManager implements Listener { * Hilfsklasse zur Verwaltung der aktuellen Seite pro Spieler. */ private static class PaginatedData { - private final java.util.Map playerPages = new java.util.HashMap<>(); + private final Map playerPages = new HashMap<>(); - public void setPage(java.util.UUID playerUUID, int page) { + public void setPage(UUID playerUUID, int page) { playerPages.put(playerUUID, page); } - public int getPage(java.util.UUID playerUUID) { - return playerPages.getOrDefault(playerUUID, 0); + public int getPage(UUID playerUUID) { + return playerPages.getOrDefault(playerUUID, 1); } - public void removePage(java.util.UUID playerUUID) { + public void removePage(UUID playerUUID) { playerPages.remove(playerUUID); } } diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerClaimListener.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerClaimListener.java index d2990a2..f9cf88a 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerClaimListener.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerClaimListener.java @@ -113,7 +113,7 @@ public class PlayerClaimListener implements Listener { if (newClan != null && (!newClan.equals(oldClan))) { player.sendActionBar( MiniMessage.miniMessage().deserialize( - "Terretorry of " + newClan.getName() + " - " + + "Territory of " + newClan.getName() + " - " + Bukkit.getOfflinePlayer(newClan.getChunkOwnerMap().get(toChunk)).getName() + "!" ) diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/module/Clan.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/module/Clan.java index d96171e..5fb4df0 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/module/Clan.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/module/Clan.java @@ -32,7 +32,6 @@ public class Clan { @Setter private UUID leaderUUID; @Setter private UUID viceUUID; private final LinkedList members; - private final LinkedList chunks; private final LinkedHashMap chunkOwnerMap; private int chunkAmount; @@ -43,22 +42,20 @@ public class Clan { this.leaderUUID = leaderUUID; this.viceUUID = null; this.members = new LinkedList<>(); - this.chunks = new LinkedList<>(); this.chunkOwnerMap = new LinkedHashMap<>(); this.chunkAmount = 0; } public Clan(UUID clanUUID, String name, Component tag, UUID leaderUUID, UUID viceUUID, - LinkedList members, LinkedList chunks, LinkedHashMap chunkOwnerMap) { + LinkedList members, LinkedHashMap chunkOwnerMap) { this.uuid = clanUUID; this.name = name; this.tag = tag; this.leaderUUID = leaderUUID; this.viceUUID = viceUUID; this.members = members; - this.chunks = chunks; this.chunkOwnerMap = chunkOwnerMap; - this.chunkAmount = chunks.size(); + this.chunkAmount = chunkOwnerMap.size(); } /** @@ -94,7 +91,6 @@ public class Clan { } // Process chunks with world information - LinkedList chunkList = new LinkedList<>(); LinkedHashMap chunkOwnerMap = new LinkedHashMap<>(); if (jsonClan.chunks != null && jsonClan.chunks.locations != null) { for (LocationJson loc : jsonClan.chunks.locations) { @@ -106,14 +102,13 @@ public class Clan { int x = Integer.parseInt(loc.x); int z = Integer.parseInt(loc.z); Chunk chunk = world.getChunkAt(x, z); - chunkList.add(chunk); UUID ownerUUID = (loc.owner == null || loc.owner.isEmpty()) ? null : UUID.fromString(loc.owner); chunkOwnerMap.put(chunk, ownerUUID); } } - Clan clan = new Clan(uuid, jsonClan.name, tagComponent, leader, vice, memberUUIDs, chunkList, chunkOwnerMap); - clan.chunkAmount = (jsonClan.chunks != null) ? jsonClan.chunks.amount : chunkList.size(); + Clan clan = new Clan(uuid, jsonClan.name, tagComponent, leader, vice, memberUUIDs, chunkOwnerMap); + clan.chunkAmount = (jsonClan.chunks != null) ? jsonClan.chunks.amount : chunkOwnerMap.size(); return clan; } catch (IOException e) { LOGGER.severe("Error loading clan: " + e.getMessage()); @@ -136,8 +131,6 @@ public class Clan { this.viceUUID = loaded.viceUUID; this.members.clear(); this.members.addAll(loaded.members); - this.chunks.clear(); - this.chunks.addAll(loaded.chunks); this.chunkOwnerMap.clear(); this.chunkOwnerMap.putAll(loaded.chunkOwnerMap); this.chunkAmount = loaded.chunkAmount; @@ -158,7 +151,7 @@ public class Clan { jsonClan.chunks = new ChunksJson(); jsonClan.chunks.amount = this.chunkAmount; jsonClan.chunks.locations = new LinkedList<>(); - for (Chunk chunk : this.chunks) { + for (Chunk chunk : this.chunkOwnerMap.keySet()) { LocationJson loc = new LocationJson(); // Assuming the owner mapping may be null UUID owner = this.chunkOwnerMap.getOrDefault(chunk, null); diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/module/manager/Clans.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/module/manager/Clans.java index 4e103bb..d232e58 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/module/manager/Clans.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/module/manager/Clans.java @@ -220,7 +220,7 @@ public class Clans { public Clan getClanByChunk(Chunk chunk) { for (Clan clan : clans) { - if (clan.getChunks().contains(chunk)) { + if (clan.getChunkOwnerMap().containsKey(chunk)) { return clan; } } @@ -228,7 +228,7 @@ public class Clans { } public boolean isChunkClaimed(Chunk chunk) { for (Clan clan : clans) { - if (clan.getChunks().contains(chunk)) { + if (clan.getChunkOwnerMap().containsKey(chunk)) { return true; } }