From bece2529bb2f2f46847f5edbed0942917819e74a Mon Sep 17 00:00:00 2001 From: DaTTV <104141141+DrFreezyYT@users.noreply.github.com> Date: Wed, 19 Feb 2025 18:54:28 +0100 Subject: [PATCH 01/32] Added Claim restrictions for spawn --- .../plugins/papermc/blazesmp/command/ClaimCommand.java | 5 +++++ src/main/resources/storage/messages.json | 1 + 2 files changed, 6 insertions(+) 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 7efdf05..2a138b8 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 @@ -55,6 +55,11 @@ public class ClaimCommand extends SimpleCommand { if (clans.isChunkClaimed(playerChunk)) { player.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("error.chunk_already_claimed"))); } else { + // claim too close to spawn 8 chunks + if (playerChunk.getX() < 8 && playerChunk.getZ() < 8) { + player.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("error.chunk_too_close_to_spawn"))); + return true; + } playerClaims.add(playerChunk); player.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("success.chunk_claimed"))); existingClaims.put(playerUUID, playerClaims); diff --git a/src/main/resources/storage/messages.json b/src/main/resources/storage/messages.json index 722e79a..975cbf9 100644 --- a/src/main/resources/storage/messages.json +++ b/src/main/resources/storage/messages.json @@ -28,6 +28,7 @@ "error.not_in_clan": "To claim you need to be in a clan!", "error.chunk_already_claimed": "Chunk is already claimed!", "error.max_claims_reached": "You cannot claim more than 50 chunks!", + "error.chunk_too_close_to_spawn": "Chunk is too close to spawn!", "usage.clan_create": "Usage: /clan create ", "usage.clan_chat": "Usage: /clan chat ", From 286919ce6cb21be4f78f922b1a477c2a28f7e320 Mon Sep 17 00:00:00 2001 From: EmrageGHC Date: Wed, 19 Feb 2025 22:16:43 +0100 Subject: [PATCH 02/32] add PlayerVsPlayerListener --- .../plugins/papermc/blazesmp/BlazeSMP.java | 2 ++ .../listener/PlayerVsPlayerListener.java | 32 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerVsPlayerListener.java diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java index f8d189b..b5fdf41 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java @@ -6,6 +6,7 @@ import me.freezy.plugins.papermc.blazesmp.command.ClanCommand; import me.freezy.plugins.papermc.blazesmp.command.HomeCommand; import me.freezy.plugins.papermc.blazesmp.command.ReportCommand; import me.freezy.plugins.papermc.blazesmp.listener.*; +import me.freezy.plugins.papermc.blazesmp.module.Clan; import me.freezy.plugins.papermc.blazesmp.module.manager.Clans; import me.freezy.plugins.papermc.blazesmp.module.manager.Homes; import me.freezy.plugins.papermc.blazesmp.module.manager.L4M4; @@ -81,6 +82,7 @@ public final class BlazeSMP extends JavaPlugin { pm.registerEvents(new PlayerClaimListener(), this); pm.registerEvents(new ChunkInventoryManager(), this); pm.registerEvents(new PressurePlateListener(), this); + pm.registerEvents(new PlayerVsPlayerListener(clans), this); this.log.info("Registered EventListeners!"); this.log.info("Starting Timer tasks..."); diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerVsPlayerListener.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerVsPlayerListener.java new file mode 100644 index 0000000..a67a4b6 --- /dev/null +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerVsPlayerListener.java @@ -0,0 +1,32 @@ +package me.freezy.plugins.papermc.blazesmp.listener; + +import me.freezy.plugins.papermc.blazesmp.module.manager.Clans; +import me.freezy.plugins.papermc.blazesmp.module.Clan; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; + +public class PlayerVsPlayerListener implements Listener { + + private final Clans clanManager; + + public PlayerVsPlayerListener(Clans clanManager) { + this.clanManager = clanManager; + } + + @EventHandler + public void onPVP(EntityDamageByEntityEvent event) { + if (event.getDamager() instanceof Player && event.getEntity() instanceof Player) { + Player damager = (Player) event.getDamager(); + Player victim = (Player) event.getEntity(); + + Clan damagerClan = clanManager.getClanByMember(damager.getUniqueId()); + Clan victimClan = clanManager.getClanByMember(victim.getUniqueId()); + + if (damagerClan != null && damagerClan.equals(victimClan)) { + event.setCancelled(true); + } + } + } +} \ No newline at end of file From 595e3005d7b2812fb991ffae3e7574fdabfc25ce Mon Sep 17 00:00:00 2001 From: DaTTV Date: Thu, 20 Feb 2025 07:41:58 +0100 Subject: [PATCH 03/32] Use of Pattern Variable --- .../papermc/blazesmp/listener/PlayerVsPlayerListener.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerVsPlayerListener.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerVsPlayerListener.java index a67a4b6..b29ef0d 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerVsPlayerListener.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerVsPlayerListener.java @@ -17,9 +17,7 @@ public class PlayerVsPlayerListener implements Listener { @EventHandler public void onPVP(EntityDamageByEntityEvent event) { - if (event.getDamager() instanceof Player && event.getEntity() instanceof Player) { - Player damager = (Player) event.getDamager(); - Player victim = (Player) event.getEntity(); + if (event.getDamager() instanceof Player damager && event.getEntity() instanceof Player victim) { Clan damagerClan = clanManager.getClanByMember(damager.getUniqueId()); Clan victimClan = clanManager.getClanByMember(victim.getUniqueId()); From 989079757ee1b20c40ea0293ba6f2cfddb16aefb Mon Sep 17 00:00:00 2001 From: DaTTV Date: Thu, 20 Feb 2025 07:56:07 +0100 Subject: [PATCH 04/32] Added updator for TabList --- .../plugins/papermc/blazesmp/BlazeSMP.java | 3 + .../papermc/blazesmp/module/manager/L4M4.java | 69 ++++++++++++++++--- .../papermc/blazesmp/tasks/TabListTimer.java | 58 ++++++++++++++++ src/main/resources/storage/messages.json | 10 ++- 4 files changed, 130 insertions(+), 10 deletions(-) create mode 100644 src/main/java/me/freezy/plugins/papermc/blazesmp/tasks/TabListTimer.java diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java index b5fdf41..3d29a3d 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java @@ -12,6 +12,7 @@ import me.freezy.plugins.papermc.blazesmp.module.manager.Homes; import me.freezy.plugins.papermc.blazesmp.module.manager.L4M4; import me.freezy.plugins.papermc.blazesmp.module.manager.ProtectedBlocks; import me.freezy.plugins.papermc.blazesmp.tasks.PlayerNameUpdate; +import me.freezy.plugins.papermc.blazesmp.tasks.TabListTimer; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; @@ -26,6 +27,7 @@ public final class BlazeSMP extends JavaPlugin { @Getter private FileConfiguration configuration; @Getter private Logger log; @Getter private BukkitTask nameUpdateTask; + @Getter private BukkitTask tabListUpdateTask; @Override public void onLoad() { @@ -87,6 +89,7 @@ public final class BlazeSMP extends JavaPlugin { this.log.info("Starting Timer tasks..."); this.nameUpdateTask = new PlayerNameUpdate().runTaskTimer(this, 0L, 20L); + this.tabListUpdateTask = new TabListTimer().runTaskTimer(this, 0L, 20L); this.log.info("Started Timer tasks!"); this.log.info("Enabled BlazeSMP!"); diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/module/manager/L4M4.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/module/manager/L4M4.java index ece8289..7dce624 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/module/manager/L4M4.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/module/manager/L4M4.java @@ -10,15 +10,15 @@ import java.io.InputStream; import java.io.Reader; import java.nio.file.Files; import java.nio.file.StandardCopyOption; -import java.util.Map; +import java.util.*; import java.util.logging.Logger; public class L4M4 { private static final Logger LOGGER = Logger.getLogger("L4M4"); private static final String MESSAGES_STORAGE_PATH = "plugins/BlazeSMP/storage/messages.json"; - // Map zum Speichern der geladenen Nachrichten - private static Map messages; + // Map zum Speichern der geladenen Nachrichten (jetzt mit Object als Wert) + private static Map messages; /** * Initialisiert die messages.json und lädt anschließend die Nachrichten. @@ -36,7 +36,6 @@ public class L4M4 { private static void initializeMessages() { File messagesFile = new File(MESSAGES_STORAGE_PATH); if (!messagesFile.exists()) { - // Erstelle die notwendigen Verzeichnisse if (messagesFile.getParentFile() != null && !messagesFile.getParentFile().exists()) { if (messagesFile.getParentFile().mkdirs()) { LOGGER.info("Verzeichnis für messages.json erstellt: " + messagesFile.getParentFile().getAbsolutePath()); @@ -45,13 +44,11 @@ public class L4M4 { return; } } - // Lade die Ressource als Stream try (InputStream in = L4M4.class.getClassLoader().getResourceAsStream("storage/messages.json")) { if (in == null) { LOGGER.severe("Resource 'storage/messages.json' nicht gefunden!"); return; } - // Kopiere den Inhalt der Ressource in die Zieldatei Files.copy(in, messagesFile.toPath(), StandardCopyOption.REPLACE_EXISTING); LOGGER.info("Default messages.json wurde kopiert nach: " + MESSAGES_STORAGE_PATH); } catch (IOException e) { @@ -73,7 +70,7 @@ public class L4M4 { } try (Reader reader = new FileReader(messagesFile)) { Gson gson = new Gson(); - messages = gson.fromJson(reader, new TypeToken>() {}.getType()); + messages = gson.fromJson(reader, new TypeToken>() {}.getType()); LOGGER.info("messages.json wurde erfolgreich geladen."); } catch (IOException e) { LOGGER.severe("Fehler beim Laden von messages.json: " + e.getMessage()); @@ -84,17 +81,71 @@ public class L4M4 { * Gibt den Wert zum gegebenen Schlüssel zurück. * * @param key der Schlüssel - * @return der Wert, falls vorhanden, ansonsten null. + * @return der Wert als Object, falls vorhanden, ansonsten "404 not found". */ public static String get(String key) { if (messages == null) { LOGGER.warning("Messages wurden nicht geladen. Bitte init() aufrufen."); return "404 not found"; } - String value = messages.get(key); + String value = (String) messages.get(key); if (value == null) { LOGGER.warning("Key '" + key + "' nicht in messages.json gefunden."); + return "404 not found"; } return value; } + + /** + * Gibt eine Liste aller Nachrichtenwerte zurück. + * + * @return LinkedList mit allen gespeicherten Werten aus messages.json. + */ + public static LinkedList getStringList() { + if (messages == null) { + LOGGER.warning("Messages wurden nicht geladen. Bitte init() aufrufen."); + return new LinkedList<>(); + } + return new LinkedList<>(messages.values()); + } + + /** + * Gibt eine Liste von Strings für einen bestimmten Key zurück. + * Falls der Wert ein Array ist, wird es als Liste zurückgegeben. + * Falls der Wert ein einzelner String ist, wird eine Liste mit einem Element zurückgegeben. + * Falls der Key nicht existiert, wird eine leere Liste zurückgegeben. + * + * @param key der Schlüssel, dessen Werte als Liste zurückgegeben werden sollen. + * @return LinkedList mit den gespeicherten Werten. + */ + public static LinkedList getStringList(String key) { + LinkedList result = new LinkedList<>(); + + if (messages == null) { + LOGGER.warning("Messages wurden nicht geladen. Bitte init() aufrufen."); + return result; + } + + Object value = messages.get(key); + switch (value) { + case null -> { + LOGGER.warning("Key '" + key + "' nicht in messages.json gefunden."); + return result; + } + case List objects -> { + // Falls es eine Liste ist, konvertiere sie zu einer Liste von Strings + for (Object obj : objects) { + if (obj instanceof String) { + result.add((String) obj); + } + } + } + case String s -> + // Falls der Wert nur ein einzelner String ist, füge ihn zur Liste hinzu + result.add(s); + default -> LOGGER.warning("Key '" + key + "' enthält keine Liste oder String in messages.json."); + } + + return result; + } } diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/tasks/TabListTimer.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/tasks/TabListTimer.java new file mode 100644 index 0000000..a6a0a17 --- /dev/null +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/tasks/TabListTimer.java @@ -0,0 +1,58 @@ +package me.freezy.plugins.papermc.blazesmp.tasks; + +import me.freezy.plugins.papermc.blazesmp.module.manager.L4M4; +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.bukkit.Bukkit; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.LinkedList; + +public class TabListTimer extends BukkitRunnable { + private LinkedList header = new LinkedList<>(); + private LinkedList footer = new LinkedList<>(); + private int index = 0; + + public TabListTimer() { + reloadData(); + } + + /** + * Lädt die Header- und Footer-Daten neu. + * Falls eine Liste leer ist, wird ein Standardwert gesetzt, um Fehler zu vermeiden. + */ + private void reloadData() { + header = L4M4.getStringList("tablist.header"); + footer = L4M4.getStringList("tablist.footer"); + + // Falls eine Liste leer ist, setzen wir eine Fallback-Nachricht + if (header.isEmpty()) { + header.add("Error"); + } + if (footer.isEmpty()) { + footer.add("Error"); + } + } + + @Override + public void run() { + if (header.isEmpty() || footer.isEmpty()) { + reloadData(); + } + + int headerIndex = index % header.size(); + int footerIndex = index % footer.size(); + + Bukkit.getOnlinePlayers().forEach(player -> { + player.sendPlayerListHeaderAndFooter( + MiniMessage.miniMessage().deserialize(header.get(headerIndex)), + MiniMessage.miniMessage().deserialize(footer.get(footerIndex)) + ); + }); + + index++; + + if (index >= Math.max(header.size(), footer.size())) { + index = 0; + } + } +} diff --git a/src/main/resources/storage/messages.json b/src/main/resources/storage/messages.json index 975cbf9..dda198b 100644 --- a/src/main/resources/storage/messages.json +++ b/src/main/resources/storage/messages.json @@ -116,5 +116,13 @@ "teleport.cancelled": "Teleporting cancelled, you moved!", "teleport.success": "Teleported!", - "teleport.countdown": "Teleporting to home in %s seconds!" + "teleport.countdown": "Teleporting to home in %s seconds!", + + "tablist.header": [ + "BlazeSMP" + ], + "tablist.footer": [ + "hosted by merged.games", + "made by BlazeHC Team & Freezy/DaTTV" + ] } From 7aebce806a4f91688a41547ef863ebccdb80fdae Mon Sep 17 00:00:00 2001 From: DaTTV Date: Thu, 20 Feb 2025 13:47:43 +0100 Subject: [PATCH 05/32] Added (untested) ProtectedBlocks --- .../plugins/papermc/blazesmp/BlazeSMP.java | 4 +- .../blazesmp/command/ClaimCommand.java | 4 +- ...nager.java => ChunkInventoryListener.java} | 4 +- .../listener/ProtectedBlockListener.java | 213 ++++++++++++++++++ .../module/manager/ProtectedBlocks.java | 18 +- .../papermc/blazesmp/tasks/TabListTimer.java | 4 +- src/main/resources/storage/messages.json | 24 +- 7 files changed, 257 insertions(+), 14 deletions(-) rename src/main/java/me/freezy/plugins/papermc/blazesmp/listener/{ChunkInventoryManager.java => ChunkInventoryListener.java} (98%) create mode 100644 src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ProtectedBlockListener.java diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java index 3d29a3d..010d7af 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java @@ -6,7 +6,6 @@ import me.freezy.plugins.papermc.blazesmp.command.ClanCommand; import me.freezy.plugins.papermc.blazesmp.command.HomeCommand; import me.freezy.plugins.papermc.blazesmp.command.ReportCommand; import me.freezy.plugins.papermc.blazesmp.listener.*; -import me.freezy.plugins.papermc.blazesmp.module.Clan; import me.freezy.plugins.papermc.blazesmp.module.manager.Clans; import me.freezy.plugins.papermc.blazesmp.module.manager.Homes; import me.freezy.plugins.papermc.blazesmp.module.manager.L4M4; @@ -82,9 +81,10 @@ public final class BlazeSMP extends JavaPlugin { pm.registerEvents(new PlayerChatListener(), this); pm.registerEvents(new PlayerCommandBlockerListener(), this); pm.registerEvents(new PlayerClaimListener(), this); - pm.registerEvents(new ChunkInventoryManager(), this); + pm.registerEvents(new ChunkInventoryListener(), this); pm.registerEvents(new PressurePlateListener(), this); pm.registerEvents(new PlayerVsPlayerListener(clans), this); + pm.registerEvents(new ProtectedBlockListener(), this); this.log.info("Registered EventListeners!"); this.log.info("Starting Timer tasks..."); 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 2a138b8..c3b4eab 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,7 +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.listener.ChunkInventoryListener; import me.freezy.plugins.papermc.blazesmp.module.Clan; import me.freezy.plugins.papermc.blazesmp.module.manager.Clans; import me.freezy.plugins.papermc.blazesmp.module.manager.L4M4; @@ -38,7 +38,7 @@ public class ClaimCommand extends SimpleCommand { } else { if (label.equalsIgnoreCase("claim")) { if (args.length != 0 && args[0].equalsIgnoreCase("see")) { - ChunkInventoryManager.openInv(player); + ChunkInventoryListener.openInv(player); return true; } Clan playerClan = clans.getClanByMember(playerUUID); diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ChunkInventoryManager.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ChunkInventoryListener.java similarity index 98% rename from src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ChunkInventoryManager.java rename to src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ChunkInventoryListener.java index f3437a2..673cdda 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ChunkInventoryManager.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ChunkInventoryListener.java @@ -19,7 +19,7 @@ import org.bukkit.inventory.meta.SkullMeta; import java.util.*; -public class ChunkInventoryManager implements Listener { +public class ChunkInventoryListener implements Listener { // Speichert pro Spieler den aktuellen Seitenindex private final PaginatedData paginatedData = new PaginatedData(); @@ -32,7 +32,7 @@ public class ChunkInventoryManager implements Listener { )); return; } - new ChunkInventoryManager().chunksInv(player, clan); + new ChunkInventoryListener().chunksInv(player, clan); } /** diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ProtectedBlockListener.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ProtectedBlockListener.java new file mode 100644 index 0000000..a400da4 --- /dev/null +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ProtectedBlockListener.java @@ -0,0 +1,213 @@ +package me.freezy.plugins.papermc.blazesmp.listener; + +import me.freezy.plugins.papermc.blazesmp.BlazeSMP; +import me.freezy.plugins.papermc.blazesmp.module.ProtectedBlock; +import me.freezy.plugins.papermc.blazesmp.module.manager.L4M4; +import me.freezy.plugins.papermc.blazesmp.module.manager.ProtectedBlocks; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.bukkit.*; +import org.bukkit.block.*; +import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryMoveItemEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.*; + +public class ProtectedBlockListener implements Listener { + + private final MiniMessage miniMessage = MiniMessage.miniMessage(); + private final ProtectedBlocks protectedBlocks = BlazeSMP.getInstance().getProtectedBlocks(); + + // Supported storage block types + private final Set STORAGE_BLOCKS = Set.of( + Material.CHEST, Material.TRAPPED_CHEST, Material.BARREL, + Material.HOPPER, Material.DROPPER, Material.DISPENSER, + Material.FURNACE, Material.BLAST_FURNACE, Material.SMOKER + ); + + @EventHandler + public void onItemTransferHopperEvent(InventoryMoveItemEvent event) { + Block destinationBlock = Objects.requireNonNull(event.getDestination().getLocation()).getBlock(); + if (isProtected(destinationBlock)) { + event.setCancelled(true); + } + } + + @EventHandler + public void onBlockInteractEvent(PlayerInteractEvent event) { + Player player = event.getPlayer(); + Block block = event.getClickedBlock(); + if (block == null || !STORAGE_BLOCKS.contains(block.getType())) return; + + ItemStack mainHandItem = player.getInventory().getItemInMainHand(); + ProtectedBlock protectedBlock = getProtectedBlock(block); + + // Owner (if the block is locked) can always access the management GUI. + if (player.isSneaking() && protectedBlock != null && + protectedBlock.owner().equals(player.getUniqueId())) { + openManageKeysGUI(player, block); + return; + } + + // Shift + Right-click with a trial key: Relink the key to the new container. + if (player.isSneaking() && isValidKey(mainHandItem)) { + relinkKey(player, mainHandItem, block); + return; + } + + // Shift + Right-click without a key (and if the container is not locked) → open lock GUI. + if (player.isSneaking() && protectedBlock == null) { + openLockGUI(player, block); + return; + } + + // Normal right-click with a valid key: open the container inventory. + if (protectedBlock != null && isValidKey(mainHandItem, protectedBlock.key())) { + if (block.getState() instanceof Container container) { + player.openInventory(container.getInventory()); + } + return; + } + + // Normal right-click without a key on a locked container: show locked message. + if (protectedBlock != null) { + String lockedMsg = String.format(L4M4.get("storage.locked"), "minecraft:trial_key"); + player.sendMessage(miniMessage.deserialize(lockedMsg)); + } + } + + private void openLockGUI(Player player, Block block) { + String titleRaw = String.format(L4M4.get("storage.lock_gui_title"), block.getType().toString()); + Inventory lockInventory = Bukkit.createInventory(player, InventoryType.HOPPER, + miniMessage.deserialize(titleRaw)); + + UUID lockUUID = UUID.randomUUID(); + ItemStack trialKey1 = createTrialKey(lockUUID); + ItemStack trialKey2 = createTrialKey(lockUUID); + + lockInventory.setItem(0, trialKey1); + lockInventory.setItem(4, trialKey2); + + player.openInventory(lockInventory); + // Save the protected block. + protectedBlocks.addBlock(new ProtectedBlock(player.getUniqueId(), lockUUID, block.getLocation())); + } + + private void openManageKeysGUI(Player player, Block block) { + String titleRaw = String.format(L4M4.get("storage.manage_gui_title"), block.getType().toString()); + Inventory manageKeysInventory = Bukkit.createInventory(player, InventoryType.HOPPER, + miniMessage.deserialize(titleRaw)); + + ItemStack addKey = new ItemStack(Material.PAPER); + ItemMeta addKeyMeta = addKey.getItemMeta(); + addKeyMeta.displayName(miniMessage.deserialize(L4M4.get("storage.add_key"))); + addKey.setItemMeta(addKeyMeta); + + ItemStack removeKey = new ItemStack(Material.BARRIER); + ItemMeta removeKeyMeta = removeKey.getItemMeta(); + removeKeyMeta.displayName(miniMessage.deserialize(L4M4.get("storage.remove_key"))); + removeKey.setItemMeta(removeKeyMeta); + + manageKeysInventory.setItem(1, addKey); + manageKeysInventory.setItem(3, removeKey); + + player.openInventory(manageKeysInventory); + } + + private void relinkKey(Player player, ItemStack key, Block newBlock) { + UUID newLockUUID = UUID.randomUUID(); + ItemMeta meta = key.getItemMeta(); + if (meta != null) { + meta.lore(List.of( + miniMessage.deserialize(String.format(L4M4.get("storage.linked_to"), newLockUUID.toString())), + miniMessage.deserialize(L4M4.get("storage.not_usable_on_vaults")) + )); + key.setItemMeta(meta); + } + protectedBlocks.addBlock(new ProtectedBlock(player.getUniqueId(), newLockUUID, newBlock.getLocation())); + player.sendMessage(miniMessage.deserialize(L4M4.get("storage.link_success"))); + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent event) { + String title = event.getView().title().toString(); + if (title.contains(L4M4.get("storage.lock_gui_title_prefix")) || + title.contains(L4M4.get("storage.manage_gui_title_prefix"))) { + event.setCancelled(true); + HumanEntity entity = event.getWhoClicked(); + if (entity instanceof Player player) { + player.sendMessage(miniMessage.deserialize(L4M4.get("storage.action_completed"))); + player.closeInventory(); + } + } + } + + @EventHandler + public void onBlockBreak(BlockBreakEvent event) { + Player player = event.getPlayer(); + Block block = event.getBlock(); + ProtectedBlock protectedBlock = getProtectedBlock(block); + + if (protectedBlock != null) { + if (protectedBlock.owner().equals(player.getUniqueId())) { + protectedBlocks.removeBlock(protectedBlock); + player.sendMessage(miniMessage.deserialize(L4M4.get("storage.removed_lock"))); + } else { + event.setCancelled(true); + player.sendMessage(miniMessage.deserialize(L4M4.get("storage.break_denied"))); + } + } + } + + @EventHandler + public void onExplosion(EntityExplodeEvent event) { + event.blockList().removeIf(this::isProtected); + } + + private ItemStack createTrialKey(UUID lockUUID) { + ItemStack trialKey = new ItemStack(Material.TRIPWIRE_HOOK); + ItemMeta meta = trialKey.getItemMeta(); + if (meta != null) { + meta.displayName(miniMessage.deserialize(L4M4.get("storage.trial_key"))); + meta.lore(List.of( + miniMessage.deserialize(String.format(L4M4.get("storage.linked_to"), lockUUID.toString())), + miniMessage.deserialize(L4M4.get("storage.not_usable_on_vaults")) + )); + trialKey.setItemMeta(meta); + } + return trialKey; + } + + private boolean isValidKey(ItemStack item) { + return item != null && item.getType() == Material.TRIPWIRE_HOOK && item.hasItemMeta(); + } + + private boolean isValidKey(ItemStack item, UUID lockUUID) { + if (!isValidKey(item)) return false; + ItemMeta meta = item.getItemMeta(); + if (meta == null || meta.lore() == null) return false; + return Objects.requireNonNull(meta.lore()).stream().anyMatch(line -> line.contains(Component.text(lockUUID.toString()))); + } + + private ProtectedBlock getProtectedBlock(Block block) { + return protectedBlocks.getBlocks().stream() + .filter(pb -> pb.location().equals(block.getLocation())) + .findFirst() + .orElse(null); + } + + private boolean isProtected(Block block) { + return getProtectedBlock(block) != null; + } +} diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/module/manager/ProtectedBlocks.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/module/manager/ProtectedBlocks.java index e0d1675..6c831ae 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/module/manager/ProtectedBlocks.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/module/manager/ProtectedBlocks.java @@ -7,12 +7,15 @@ import me.freezy.plugins.papermc.blazesmp.module.ProtectedBlock; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; import java.util.UUID; import java.util.logging.Logger; @@ -27,10 +30,10 @@ public class ProtectedBlocks { private static final Logger LOGGER = Logger.getLogger("ProtectedBlocks"); // List of protected blocks - private final List blocks; + private final LinkedList blocks; public ProtectedBlocks() { - this.blocks = new ArrayList<>(); + this.blocks = new LinkedList<>(); } /** @@ -124,4 +127,15 @@ public class ProtectedBlocks { String y; String z; } + + public void addBlock(ProtectedBlock block) { + blocks.add(block); + this.save(); + } + + public boolean removeBlock(ProtectedBlock block) { + boolean bool = blocks.remove(block); + this.save(); + return bool; + } } diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/tasks/TabListTimer.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/tasks/TabListTimer.java index a6a0a17..73bce71 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/tasks/TabListTimer.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/tasks/TabListTimer.java @@ -26,10 +26,10 @@ public class TabListTimer extends BukkitRunnable { // Falls eine Liste leer ist, setzen wir eine Fallback-Nachricht if (header.isEmpty()) { - header.add("Error"); + header.add(L4M4.get("error.not_found")); } if (footer.isEmpty()) { - footer.add("Error"); + footer.add(L4M4.get("error.not_found")); } } diff --git a/src/main/resources/storage/messages.json b/src/main/resources/storage/messages.json index dda198b..aface9e 100644 --- a/src/main/resources/storage/messages.json +++ b/src/main/resources/storage/messages.json @@ -29,6 +29,7 @@ "error.chunk_already_claimed": "Chunk is already claimed!", "error.max_claims_reached": "You cannot claim more than 50 chunks!", "error.chunk_too_close_to_spawn": "Chunk is too close to spawn!", + "error.not_found": "Not Found", "usage.clan_create": "Usage: /clan create ", "usage.clan_chat": "Usage: /clan chat ", @@ -121,8 +122,23 @@ "tablist.header": [ "BlazeSMP" ], - "tablist.footer": [ - "hosted by merged.games", - "made by BlazeHC Team & Freezy/DaTTV" - ] + "tablist.footer": [ + "hosted by merged.games", + "made by BlazeHC Team & Freezy/DaTTV" + ], + + "storage.locked": "This storage is locked! You need a %s to open it.", + "storage.lock_gui_title": "Lock & Link Storage - %s", + "storage.lock_gui_title_prefix": "Lock & Link Storage", + "storage.manage_gui_title": "Manage Keys - %s", + "storage.manage_gui_title_prefix": "Manage Keys", + "storage.add_key": "Add Key", + "storage.remove_key": "Remove Key", + "storage.linked_to": "Linked to: %s", + "storage.not_usable_on_vaults": "Not usable on vaults", + "storage.link_success": "Your key has been successfully linked to the new storage!", + "storage.action_completed": "Action completed successfully!", + "storage.removed_lock": "You removed the lock from this storage.", + "storage.break_denied": "You cannot break this locked storage!", + "storage.trial_key": "Linked Trial Key" } From aa7f4954889900f3459223b5d17cb210de4e2bdf Mon Sep 17 00:00:00 2001 From: EmrageGHC Date: Thu, 20 Feb 2025 17:36:02 +0100 Subject: [PATCH 06/32] add DiscordCommand --- .../plugins/papermc/blazesmp/BlazeSMP.java | 6 +-- .../blazesmp/command/DiscordCommand.java | 40 +++++++++++++++++++ 2 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 src/main/java/me/freezy/plugins/papermc/blazesmp/command/DiscordCommand.java diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java index 010d7af..0390fac 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java @@ -1,10 +1,7 @@ package me.freezy.plugins.papermc.blazesmp; import lombok.Getter; -import me.freezy.plugins.papermc.blazesmp.command.ClaimCommand; -import me.freezy.plugins.papermc.blazesmp.command.ClanCommand; -import me.freezy.plugins.papermc.blazesmp.command.HomeCommand; -import me.freezy.plugins.papermc.blazesmp.command.ReportCommand; +import me.freezy.plugins.papermc.blazesmp.command.*; import me.freezy.plugins.papermc.blazesmp.listener.*; import me.freezy.plugins.papermc.blazesmp.module.manager.Clans; import me.freezy.plugins.papermc.blazesmp.module.manager.Homes; @@ -73,6 +70,7 @@ public final class BlazeSMP extends JavaPlugin { new ReportCommand().register(); new ClaimCommand().register(); new HomeCommand().register(); + new DiscordCommand().register(); this.log.info("Registered Commands!"); this.log.info("Registering EventListeners..."); diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/DiscordCommand.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/DiscordCommand.java new file mode 100644 index 0000000..2550aa1 --- /dev/null +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/DiscordCommand.java @@ -0,0 +1,40 @@ +package me.freezy.plugins.papermc.blazesmp.command; + +import me.freezy.plugins.papermc.blazesmp.BlazeSMP; +import me.freezy.plugins.papermc.blazesmp.command.util.SimpleCommand; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class DiscordCommand extends SimpleCommand { + + private final String discordUrl; + + public DiscordCommand() { + super("discord"); + this.discordUrl = BlazeSMP.getInstance().getConfig().getString("discord-url"); + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + Component message = MiniMessage.miniMessage().deserialize("Click here to join our Discord!"); + player.sendMessage(message); + } else { + sender.sendMessage("This command can only be used by players."); + } + return true; + } + + @Override + public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + return List.of(); + } +} \ No newline at end of file From 21e0194f6b9265482fb37803844616fcaeef4348 Mon Sep 17 00:00:00 2001 From: DaTTV <104141141+DrFreezyYT@users.noreply.github.com> Date: Thu, 20 Feb 2025 21:24:20 +0100 Subject: [PATCH 07/32] Fixed bugs --- .../plugins/papermc/blazesmp/BlazeSMP.java | 7 +- .../blazesmp/command/ClaimCommand.java | 2 +- .../blazesmp/command/DiscordCommand.java | 3 +- .../blazesmp/command/ReloadCommand.java | 39 ++++++++ .../listener/ChunkInventoryListener.java | 21 +++-- .../blazesmp/listener/PlayerChatListener.java | 16 +--- .../blazesmp/listener/PlayerJoinListener.java | 7 +- .../listener/ProtectedBlockListener.java | 94 +++++++++++++++---- .../blazesmp/manager/PlayerManager.java | 6 +- src/main/resources/storage/messages.json | 7 +- 10 files changed, 157 insertions(+), 45 deletions(-) create mode 100644 src/main/java/me/freezy/plugins/papermc/blazesmp/command/ReloadCommand.java diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java index 0390fac..100cfec 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java @@ -13,6 +13,7 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitTask; +import org.bukkit.scoreboard.Team; import org.slf4j.Logger; public final class BlazeSMP extends JavaPlugin { @@ -82,7 +83,7 @@ public final class BlazeSMP extends JavaPlugin { pm.registerEvents(new ChunkInventoryListener(), this); pm.registerEvents(new PressurePlateListener(), this); pm.registerEvents(new PlayerVsPlayerListener(clans), this); - pm.registerEvents(new ProtectedBlockListener(), this); + //pm.registerEvents(new ProtectedBlockListener(), this); this.log.info("Registered EventListeners!"); this.log.info("Starting Timer tasks..."); @@ -113,6 +114,10 @@ public final class BlazeSMP extends JavaPlugin { this.clans.saveAllClans(); this.log.info("Saved Clans!"); + this.log.info("Clearing Teams..."); + getServer().getScoreboardManager().getMainScoreboard().getTeams().forEach(Team::unregister); + this.log.info("Cleared Teams!"); + this.log.info("Disabling BlazeSMP!"); } } 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 c3b4eab..0b356cf 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 @@ -56,7 +56,7 @@ public class ClaimCommand extends SimpleCommand { player.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("error.chunk_already_claimed"))); } else { // claim too close to spawn 8 chunks - if (playerChunk.getX() < 8 && playerChunk.getZ() < 8) { + if (player.getX() < 152 && player.getZ() < 152) { player.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("error.chunk_too_close_to_spawn"))); return true; } diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/DiscordCommand.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/DiscordCommand.java index 2550aa1..a4e9742 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/DiscordCommand.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/DiscordCommand.java @@ -23,8 +23,7 @@ public class DiscordCommand extends SimpleCommand { @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { - if (sender instanceof Player) { - Player player = (Player) sender; + if (sender instanceof Player player) { Component message = MiniMessage.miniMessage().deserialize("Click here to join our Discord!"); player.sendMessage(message); } else { diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/ReloadCommand.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/ReloadCommand.java new file mode 100644 index 0000000..578a5b4 --- /dev/null +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/ReloadCommand.java @@ -0,0 +1,39 @@ +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.module.manager.L4M4; +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class ReloadCommand extends SimpleCommand { + public ReloadCommand() { + super("reloadconf"); + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + if (!(sender instanceof Player player)) { + sender.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("error.not_a_player"))); + return true; + } + BlazeSMP.getInstance().getClans().saveAllClans(); + BlazeSMP.getInstance().saveConfig(); + BlazeSMP.getInstance().reloadConfig(); + BlazeSMP.getInstance().getProtectedBlocks().save(); + BlazeSMP.getInstance().getHomes().save(); + player.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("config.reloaded"))); + return true; + } + + @Override + public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + return List.of(); + } +} diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ChunkInventoryListener.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ChunkInventoryListener.java index 673cdda..dfb84fb 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ChunkInventoryListener.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ChunkInventoryListener.java @@ -2,6 +2,7 @@ package me.freezy.plugins.papermc.blazesmp.listener; import me.freezy.plugins.papermc.blazesmp.BlazeSMP; import me.freezy.plugins.papermc.blazesmp.module.Clan; +import me.freezy.plugins.papermc.blazesmp.module.manager.L4M4; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; @@ -89,6 +90,7 @@ public class ChunkInventoryListener implements Listener { Component itemName = MiniMessage.miniMessage().deserialize("Chunk [" + chunk.getX() + ", " + chunk.getZ() + "]"); skullMeta.displayName(itemName); List lore = new ArrayList<>(); + lore.add(MiniMessage.miniMessage().deserialize(L4M4.get("chunk.unclaim_lore"))); lore.add(MiniMessage.miniMessage().deserialize("World: " + chunk.getWorld().getName() + "")); lore.add(MiniMessage.miniMessage().deserialize("Owner: " + ownerPlayer.getName() + "")); lore.add(MiniMessage.miniMessage().deserialize("Index: " + (i + 1) + "")); @@ -128,7 +130,7 @@ public class ChunkInventoryListener implements Listener { if (!(event.getWhoClicked() instanceof Player player)) return; Component invTitle = event.getView().title(); Component expectedTitle = MiniMessage.miniMessage().deserialize( - me.freezy.plugins.papermc.blazesmp.module.manager.L4M4.get("chunk.title") + L4M4.get("chunk.title") ); if (!PlainTextComponentSerializer.plainText().serialize(invTitle) .equals(PlainTextComponentSerializer.plainText().serialize(expectedTitle))) { @@ -164,11 +166,18 @@ public class ChunkInventoryListener implements Listener { } } else { // Nutze den zentralen Nachrichtentext für Klicks - String msg = String.format( - me.freezy.plugins.papermc.blazesmp.module.manager.L4M4.get("chunk.clicked"), - displayName - ); - player.sendMessage(MiniMessage.miniMessage().deserialize(msg)); + String[] parts = displayName.substring(1, displayName.length() - 1).split(","); + int x = Integer.parseInt(parts[0].trim()); + int y = Integer.parseInt(parts[1].trim()); + Chunk chunk = Objects.requireNonNull(Bukkit.getWorld("world")).getChunkAt(x, y); + if (clan.getChunkOwnerMap().containsKey(chunk)) { + clan.getChunkOwnerMap().remove(chunk); + clan.save(); + player.sendMessage(MiniMessage.miniMessage().deserialize( + L4M4.get("chunk.unclaimed") + )); + openChunksMenu(player, chunkEntries, currentPage, totalPages, itemsPerPage, clan); + } } } diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerChatListener.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerChatListener.java index 07e5993..fe48ca5 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerChatListener.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerChatListener.java @@ -2,6 +2,7 @@ package me.freezy.plugins.papermc.blazesmp.listener; import io.papermc.paper.event.player.AsyncChatEvent; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.TextColor; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -11,25 +12,16 @@ public class PlayerChatListener implements Listener { @EventHandler public void onChat(AsyncChatEvent event) { Player player = event.getPlayer(); - Team team = player.getScoreboard().getEntryTeam(player.getName()); - - Component prefix = Component.empty(); - Component suffix = Component.empty(); - - if (team != null) { - prefix = team.prefix(); - suffix = team.suffix(); - } Component messageComponent = event.message(); Component chatComponent = Component.empty() - //.append(prefix) - .append(player.teamDisplayName()) - //.append(suffix) + .append(player.playerListName()) .append(Component.text(": ")) .append(messageComponent); + player.sendMessage(player.playerListName()); + event.renderer((source, sourceDisplayName, msg, viewer) -> chatComponent); } } diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerJoinListener.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerJoinListener.java index 40fd323..4e7b705 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerJoinListener.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerJoinListener.java @@ -2,20 +2,25 @@ package me.freezy.plugins.papermc.blazesmp.listener; import me.freezy.plugins.papermc.blazesmp.manager.PlayerManager; import me.freezy.plugins.papermc.blazesmp.module.manager.L4M4; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.TextColor; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.scoreboard.Team; public class PlayerJoinListener implements Listener { @EventHandler public void onJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); new PlayerManager().setPlayerTeam(player); + Team team = player.getScoreboard().getEntryTeam(player.getName()); // Verwende den zentral konfigurierten Join-Text aus der JSON-Datei + assert team != null; event.joinMessage(MiniMessage.miniMessage().deserialize(L4M4.get("player.join")) - .append(player.teamDisplayName())); + .append(player.playerListName())); } } diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ProtectedBlockListener.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ProtectedBlockListener.java index a400da4..42323c5 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ProtectedBlockListener.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ProtectedBlockListener.java @@ -6,8 +6,11 @@ import me.freezy.plugins.papermc.blazesmp.module.manager.L4M4; import me.freezy.plugins.papermc.blazesmp.module.manager.ProtectedBlocks; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; -import org.bukkit.*; -import org.bukkit.block.*; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.Container; import org.bukkit.entity.HumanEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -30,49 +33,61 @@ public class ProtectedBlockListener implements Listener { private final ProtectedBlocks protectedBlocks = BlazeSMP.getInstance().getProtectedBlocks(); // Supported storage block types - private final Set STORAGE_BLOCKS = Set.of( + private static final Set STORAGE_BLOCKS = Set.of( Material.CHEST, Material.TRAPPED_CHEST, Material.BARREL, Material.HOPPER, Material.DROPPER, Material.DISPENSER, Material.FURNACE, Material.BLAST_FURNACE, Material.SMOKER ); + /* + * Prevents items from being transferred into protected storages. + */ @EventHandler public void onItemTransferHopperEvent(InventoryMoveItemEvent event) { - Block destinationBlock = Objects.requireNonNull(event.getDestination().getLocation()).getBlock(); + Location destLocation = event.getDestination().getLocation(); + if (destLocation == null) return; + Block destinationBlock = destLocation.getBlock(); if (isProtected(destinationBlock)) { event.setCancelled(true); } } + /* + * Handles player interactions with storage blocks. + * Supports locking, unlocking, linking keys, and opening GUIs. + */ @EventHandler public void onBlockInteractEvent(PlayerInteractEvent event) { Player player = event.getPlayer(); Block block = event.getClickedBlock(); - if (block == null || !STORAGE_BLOCKS.contains(block.getType())) return; + + if (block == null || !STORAGE_BLOCKS.contains(block.getType())) { + return; + } ItemStack mainHandItem = player.getInventory().getItemInMainHand(); ProtectedBlock protectedBlock = getProtectedBlock(block); - // Owner (if the block is locked) can always access the management GUI. + // Owner can manage keys with shift-right-click if the block is already locked. if (player.isSneaking() && protectedBlock != null && protectedBlock.owner().equals(player.getUniqueId())) { openManageKeysGUI(player, block); return; } - // Shift + Right-click with a trial key: Relink the key to the new container. + // Shift + Right-click with a valid trial key relinks the key to the new container. if (player.isSneaking() && isValidKey(mainHandItem)) { relinkKey(player, mainHandItem, block); return; } - // Shift + Right-click without a key (and if the container is not locked) → open lock GUI. + // Shift + Right-click on an unlocked container opens the lock GUI. if (player.isSneaking() && protectedBlock == null) { openLockGUI(player, block); return; } - // Normal right-click with a valid key: open the container inventory. + // Normal right-click: if a valid key is held for a locked container, open the inventory. if (protectedBlock != null && isValidKey(mainHandItem, protectedBlock.key())) { if (block.getState() instanceof Container container) { player.openInventory(container.getInventory()); @@ -80,19 +95,24 @@ public class ProtectedBlockListener implements Listener { return; } - // Normal right-click without a key on a locked container: show locked message. + // Normal right-click on a locked container without a valid key shows a locked message. if (protectedBlock != null) { String lockedMsg = String.format(L4M4.get("storage.locked"), "minecraft:trial_key"); player.sendMessage(miniMessage.deserialize(lockedMsg)); } } + /* + * Opens the lock GUI for a container. + * Two trial keys are created and the container is then registered as protected. + */ private void openLockGUI(Player player, Block block) { String titleRaw = String.format(L4M4.get("storage.lock_gui_title"), block.getType().toString()); Inventory lockInventory = Bukkit.createInventory(player, InventoryType.HOPPER, miniMessage.deserialize(titleRaw)); UUID lockUUID = UUID.randomUUID(); + // Create two identical trial keys for symmetry ItemStack trialKey1 = createTrialKey(lockUUID); ItemStack trialKey2 = createTrialKey(lockUUID); @@ -100,24 +120,33 @@ public class ProtectedBlockListener implements Listener { lockInventory.setItem(4, trialKey2); player.openInventory(lockInventory); - // Save the protected block. + // Save the protected block information protectedBlocks.addBlock(new ProtectedBlock(player.getUniqueId(), lockUUID, block.getLocation())); } + /* + * Opens the manage keys GUI for the owner to add or remove keys. + */ private void openManageKeysGUI(Player player, Block block) { String titleRaw = String.format(L4M4.get("storage.manage_gui_title"), block.getType().toString()); Inventory manageKeysInventory = Bukkit.createInventory(player, InventoryType.HOPPER, miniMessage.deserialize(titleRaw)); + // Create "Add Key" button ItemStack addKey = new ItemStack(Material.PAPER); ItemMeta addKeyMeta = addKey.getItemMeta(); - addKeyMeta.displayName(miniMessage.deserialize(L4M4.get("storage.add_key"))); - addKey.setItemMeta(addKeyMeta); + if (addKeyMeta != null) { + addKeyMeta.displayName(miniMessage.deserialize(L4M4.get("storage.add_key"))); + addKey.setItemMeta(addKeyMeta); + } + // Create "Remove Key" button ItemStack removeKey = new ItemStack(Material.BARRIER); ItemMeta removeKeyMeta = removeKey.getItemMeta(); - removeKeyMeta.displayName(miniMessage.deserialize(L4M4.get("storage.remove_key"))); - removeKey.setItemMeta(removeKeyMeta); + if (removeKeyMeta != null) { + removeKeyMeta.displayName(miniMessage.deserialize(L4M4.get("storage.remove_key"))); + removeKey.setItemMeta(removeKeyMeta); + } manageKeysInventory.setItem(1, addKey); manageKeysInventory.setItem(3, removeKey); @@ -125,20 +154,29 @@ public class ProtectedBlockListener implements Listener { player.openInventory(manageKeysInventory); } + /* + * Relinks the provided trial key to the new block. + * A new lock UUID is generated and the key’s lore is updated. + */ private void relinkKey(Player player, ItemStack key, Block newBlock) { UUID newLockUUID = UUID.randomUUID(); ItemMeta meta = key.getItemMeta(); if (meta != null) { - meta.lore(List.of( + List newLore = List.of( miniMessage.deserialize(String.format(L4M4.get("storage.linked_to"), newLockUUID.toString())), miniMessage.deserialize(L4M4.get("storage.not_usable_on_vaults")) - )); + ); + meta.lore(newLore); key.setItemMeta(meta); } protectedBlocks.addBlock(new ProtectedBlock(player.getUniqueId(), newLockUUID, newBlock.getLocation())); player.sendMessage(miniMessage.deserialize(L4M4.get("storage.link_success"))); } + /* + * Prevents any changes in the lock or manage keys GUIs. + * Also informs the player that the action was completed. + */ @EventHandler public void onInventoryClick(InventoryClickEvent event) { String title = event.getView().title().toString(); @@ -153,6 +191,10 @@ public class ProtectedBlockListener implements Listener { } } + /* + * Handles block breaking. + * If the block is protected, only the owner can break it. + */ @EventHandler public void onBlockBreak(BlockBreakEvent event) { Player player = event.getPlayer(); @@ -170,11 +212,17 @@ public class ProtectedBlockListener implements Listener { } } + /* + * Prevents explosions from destroying protected storage blocks. + */ @EventHandler public void onExplosion(EntityExplodeEvent event) { event.blockList().removeIf(this::isProtected); } + /* + * Helper method to create a trial key with linked lock information. + */ private ItemStack createTrialKey(UUID lockUUID) { ItemStack trialKey = new ItemStack(Material.TRIPWIRE_HOOK); ItemMeta meta = trialKey.getItemMeta(); @@ -189,10 +237,16 @@ public class ProtectedBlockListener implements Listener { return trialKey; } + /* + * Validates if the provided item is a trial key. + */ private boolean isValidKey(ItemStack item) { return item != null && item.getType() == Material.TRIPWIRE_HOOK && item.hasItemMeta(); } + /* + * Validates if the provided item is a trial key that is linked to the given lock UUID. + */ private boolean isValidKey(ItemStack item, UUID lockUUID) { if (!isValidKey(item)) return false; ItemMeta meta = item.getItemMeta(); @@ -200,6 +254,9 @@ public class ProtectedBlockListener implements Listener { return Objects.requireNonNull(meta.lore()).stream().anyMatch(line -> line.contains(Component.text(lockUUID.toString()))); } + /* + * Returns the ProtectedBlock associated with the given block, or null if not found. + */ private ProtectedBlock getProtectedBlock(Block block) { return protectedBlocks.getBlocks().stream() .filter(pb -> pb.location().equals(block.getLocation())) @@ -207,6 +264,9 @@ public class ProtectedBlockListener implements Listener { .orElse(null); } + /* + * Checks if a block is protected. + */ private boolean isProtected(Block block) { return getProtectedBlock(block) != null; } diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/manager/PlayerManager.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/manager/PlayerManager.java index 74a35f3..ac3671d 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/manager/PlayerManager.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/manager/PlayerManager.java @@ -30,8 +30,9 @@ public class PlayerManager { public void setPlayerTeam(Player player) { Clans clans = BlazeSMP.getInstance().getClans(); UUID playerUUID = player.getUniqueId(); - player.setScoreboard(player.getServer().getScoreboardManager().getMainScoreboard()); Scoreboard scoreboard = player.getScoreboard(); + if (!scoreboard.equals(player.getServer().getScoreboardManager().getMainScoreboard())) + player.setScoreboard(player.getServer().getScoreboardManager().getMainScoreboard()); String teamName; if (clans.isInClan(playerUUID)) { teamName=clanChars.get(clans.getClanByMember(playerUUID)); @@ -46,8 +47,7 @@ public class PlayerManager { teamName="zzzm"; } teamName+=generateRandomString(); - scoreboard.getTeams().forEach(Team::unregister); - Team team = scoreboard.getTeam(teamName); + Team team = scoreboard.getPlayerTeam(player); if (team == null) { team = scoreboard.registerNewTeam(teamName); } diff --git a/src/main/resources/storage/messages.json b/src/main/resources/storage/messages.json index aface9e..9763b10 100644 --- a/src/main/resources/storage/messages.json +++ b/src/main/resources/storage/messages.json @@ -105,6 +105,7 @@ "chunk.navigation.previous": "Previous Page", "chunk.navigation.next": "Next Page", "chunk.clicked": "You clicked on Chunk item: %s.", + "chunk.unclaim_lore": "Click to unclaim!", "claim.entered": "You entered the claim of %s!", "claim.territory": "Territory of %s - %s!", @@ -124,7 +125,7 @@ ], "tablist.footer": [ "hosted by merged.games", - "made by BlazeHC Team & Freezy/DaTTV" + "made by BlazeHC Team & Freezy/DaTTV" ], "storage.locked": "This storage is locked! You need a %s to open it.", @@ -140,5 +141,7 @@ "storage.action_completed": "Action completed successfully!", "storage.removed_lock": "You removed the lock from this storage.", "storage.break_denied": "You cannot break this locked storage!", - "storage.trial_key": "Linked Trial Key" + "storage.trial_key": "Linked Trial Key", + + "config.reloaded": "Config reloaded!" } From 3c40a33714c097daedfe87d895ead2c67289886f Mon Sep 17 00:00:00 2001 From: DaTTV <104141141+DrFreezyYT@users.noreply.github.com> Date: Thu, 20 Feb 2025 22:07:07 +0100 Subject: [PATCH 08/32] Added reload command! --- src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java index 100cfec..35d7ccd 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java @@ -72,6 +72,7 @@ public final class BlazeSMP extends JavaPlugin { new ClaimCommand().register(); new HomeCommand().register(); new DiscordCommand().register(); + new ReloadCommand().register(); this.log.info("Registered Commands!"); this.log.info("Registering EventListeners..."); From 56d5f2d6a427588937dacea75d2e14e87294e661 Mon Sep 17 00:00:00 2001 From: DaTTV <104141141+DrFreezyYT@users.noreply.github.com> Date: Thu, 20 Feb 2025 22:13:48 +0100 Subject: [PATCH 09/32] Changed TabListTimer intervall system --- .../me/freezy/plugins/papermc/blazesmp/tasks/TabListTimer.java | 3 ++- src/main/resources/config.yml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/tasks/TabListTimer.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/tasks/TabListTimer.java index 73bce71..7e0fedf 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/tasks/TabListTimer.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/tasks/TabListTimer.java @@ -1,5 +1,6 @@ package me.freezy.plugins.papermc.blazesmp.tasks; +import me.freezy.plugins.papermc.blazesmp.BlazeSMP; import me.freezy.plugins.papermc.blazesmp.module.manager.L4M4; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.Bukkit; @@ -51,7 +52,7 @@ public class TabListTimer extends BukkitRunnable { index++; - if (index >= Math.max(header.size(), footer.size())) { + if (index >= BlazeSMP.getInstance().getConfiguration().getInt("tab_update_interval", 5)) { index = 0; } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index bafae36..84eefb0 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,3 +1,4 @@ op-prefix: '[Team] ' player-prefix: '[Player] ' -discord-report-webhook: 'https://discord.com/api/webhooks/1234567890/abcdefghijklmnopqrstuvwxyz' \ No newline at end of file +discord-report-webhook: 'https://discord.com/api/webhooks/1234567890/abcdefghijklmnopqrstuvwxyz' +tab_update_interval: 5 #Seconds \ No newline at end of file From 591eb3231e7b018c8a9870bad0b18b00fe9a3561 Mon Sep 17 00:00:00 2001 From: EmrageGHC Date: Thu, 20 Feb 2025 22:41:18 +0100 Subject: [PATCH 10/32] add VanishCommand (untested) --- .../plugins/papermc/blazesmp/BlazeSMP.java | 1 + .../blazesmp/command/VanishCommand.java | 54 +++++++++++++++++++ src/main/resources/storage/messages.json | 3 +- 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 src/main/java/me/freezy/plugins/papermc/blazesmp/command/VanishCommand.java diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java index 35d7ccd..24c712d 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java @@ -73,6 +73,7 @@ public final class BlazeSMP extends JavaPlugin { new HomeCommand().register(); new DiscordCommand().register(); new ReloadCommand().register(); + new VanishCommand().register(); this.log.info("Registered Commands!"); this.log.info("Registering EventListeners..."); diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/VanishCommand.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/VanishCommand.java new file mode 100644 index 0000000..fa5da82 --- /dev/null +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/VanishCommand.java @@ -0,0 +1,54 @@ +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.module.manager.L4M4; +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.UUID; + +public class VanishCommand extends SimpleCommand { + private final Set vanishedPlayers = new HashSet<>(); + private static boolean isvanished = true; + + public VanishCommand() { + super("vanish"); + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage("Du bist kein Spieler!"); + return false; + } + Player player = (Player) sender; + Player online = (Player) Bukkit.getOnlinePlayers(); + + if (isvanished) { + player.showPlayer(BlazeSMP.getInstance(), online); + vanishedPlayers.remove(player.getUniqueId()); + online.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("player.join"))); + } else { + player.hidePlayer(BlazeSMP.getInstance(), online); + vanishedPlayers.add(player.getUniqueId()); + online.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("player.left"))); + } + + isvanished = !isvanished; + return true; + } + + @Override + public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + return List.of(); + } +} \ No newline at end of file diff --git a/src/main/resources/storage/messages.json b/src/main/resources/storage/messages.json index 9763b10..a62979e 100644 --- a/src/main/resources/storage/messages.json +++ b/src/main/resources/storage/messages.json @@ -113,6 +113,7 @@ "command.blocked": "Unknown or incomplete command, see below for error\n%s <--[HERE]", "player.join": "[+] ", + "player.left": "[-] ", "pressureplate.teleport": "You need to wait 5 seconds to be teleported.", @@ -125,7 +126,7 @@ ], "tablist.footer": [ "hosted by merged.games", - "made by BlazeHC Team & Freezy/DaTTV" + "made by BlazeGHC Team" ], "storage.locked": "This storage is locked! You need a %s to open it.", From 2059bdb4b92cb9eaff1ac6b6c107ad37cbc8ea64 Mon Sep 17 00:00:00 2001 From: EmrageGHC Date: Fri, 21 Feb 2025 15:02:51 +0100 Subject: [PATCH 11/32] added things --- .../plugins/papermc/blazesmp/BlazeSMP.java | 2 + .../papermc/blazesmp/command/ClanCommand.java | 10 +++- .../blazesmp/command/VanishCommand.java | 27 ++++++--- .../listener/PlayerClaimListener.java | 2 + .../blazesmp/listener/PlayerJoinListener.java | 10 ++++ .../listener/ProtectedBlockListener.java | 55 +------------------ .../plugins/papermc/blazesmp/module/Clan.java | 1 + src/main/resources/storage/messages.json | 9 ++- 8 files changed, 50 insertions(+), 66 deletions(-) diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java index 24c712d..ff36674 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java @@ -9,6 +9,7 @@ import me.freezy.plugins.papermc.blazesmp.module.manager.L4M4; import me.freezy.plugins.papermc.blazesmp.module.manager.ProtectedBlocks; import me.freezy.plugins.papermc.blazesmp.tasks.PlayerNameUpdate; import me.freezy.plugins.papermc.blazesmp.tasks.TabListTimer; +import org.bukkit.NamespacedKey; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; @@ -26,6 +27,7 @@ public final class BlazeSMP extends JavaPlugin { @Getter private BukkitTask nameUpdateTask; @Getter private BukkitTask tabListUpdateTask; + @Override public void onLoad() { this.log=getSLF4JLogger(); diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/ClanCommand.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/ClanCommand.java index b11a1a9..db6bb82 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/ClanCommand.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/ClanCommand.java @@ -130,6 +130,10 @@ public class ClanCommand extends SimpleCommand { player.sendMessage(miniMessage().deserialize(L4M4.get("error.clan_not_found"))); return true; } + if (targetClan.getMembers().size() >= 10) { + player.sendMessage(miniMessage().deserialize(L4M4.get("error.clan_full"))); + return true; + } clanJoins.computeIfAbsent(targetClan, k -> new LinkedList<>()); LinkedList joinRequests = clanJoins.get(targetClan); if (joinRequests.contains(playerUUID)) { @@ -140,7 +144,6 @@ public class ClanCommand extends SimpleCommand { player.sendMessage(miniMessage().deserialize( String.format(L4M4.get("success.join_request_sent"), targetClan.getName()) )); - // Benachrichtige den Clan-Leader, sofern online Player leader = Bukkit.getPlayer(targetClan.getLeaderUUID()); if (leader != null && leader.isOnline()) { String acceptCommand = "/clan accept " + player.getName(); @@ -189,6 +192,10 @@ public class ClanCommand extends SimpleCommand { player.sendMessage(miniMessage().deserialize(L4M4.get("error.clan_not_found"))); return true; } + if (inviterClan.getMembers().size() >= 10) { + player.sendMessage(miniMessage().deserialize(L4M4.get("error.clan_full"))); + return true; + } clanInvites.computeIfAbsent(inviterClan, k -> new LinkedList<>()); LinkedList inviteList = clanInvites.get(inviterClan); if (inviteList.contains(invitee.getUniqueId())) { @@ -201,7 +208,6 @@ public class ClanCommand extends SimpleCommand { player.sendMessage(miniMessage().deserialize( String.format(L4M4.get("success.invite_sent"), inviteeName) )); - // Benachrichtige den Eingeladenen String acceptCmd = "/clan accept " + inviterClan.getName(); String denyCmd = "/clan deny " + inviterClan.getName(); String inviteNotifyText = String.format(L4M4.get("notification.invite"), inviterClan.getName()); diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/VanishCommand.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/VanishCommand.java index fa5da82..79bdf69 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/VanishCommand.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/VanishCommand.java @@ -18,7 +18,7 @@ import java.util.UUID; public class VanishCommand extends SimpleCommand { private final Set vanishedPlayers = new HashSet<>(); - private static boolean isvanished = true; + private boolean isvanished = true; public VanishCommand() { super("vanish"); @@ -31,16 +31,25 @@ public class VanishCommand extends SimpleCommand { return false; } Player player = (Player) sender; - Player online = (Player) Bukkit.getOnlinePlayers(); - if (isvanished) { - player.showPlayer(BlazeSMP.getInstance(), online); - vanishedPlayers.remove(player.getUniqueId()); - online.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("player.join"))); + if (player.isOp()) { + for (Player online : Bukkit.getOnlinePlayers()) { + if (isvanished) { + player.showPlayer(BlazeSMP.getInstance(), online); + online.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("player.join"))); + } else { + player.hidePlayer(BlazeSMP.getInstance(), online); + online.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("player.left"))); + } + } + if (isvanished) { + vanishedPlayers.remove(player.getUniqueId()); + } else { + vanishedPlayers.add(player.getUniqueId()); + } } else { - player.hidePlayer(BlazeSMP.getInstance(), online); - vanishedPlayers.add(player.getUniqueId()); - online.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("player.left"))); + player.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("error.no_permission"))); + return false; } isvanished = !isvanished; 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 aac257d..bcae895 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 @@ -33,6 +33,8 @@ public class PlayerClaimListener implements Listener { } } + + @EventHandler public void onBlockPlace(BlockPlaceEvent event) { Location location = event.getBlock().getLocation(); diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerJoinListener.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerJoinListener.java index 4e7b705..43fba31 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerJoinListener.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerJoinListener.java @@ -1,5 +1,6 @@ package me.freezy.plugins.papermc.blazesmp.listener; +import me.freezy.plugins.papermc.blazesmp.BlazeSMP; import me.freezy.plugins.papermc.blazesmp.manager.PlayerManager; import me.freezy.plugins.papermc.blazesmp.module.manager.L4M4; import net.kyori.adventure.text.Component; @@ -11,12 +12,21 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.scoreboard.Team; +import java.util.HashSet; +import java.util.UUID; + public class PlayerJoinListener implements Listener { + private final HashSet joinedPlayers = new HashSet<>(); @EventHandler public void onJoin(PlayerJoinEvent event) { + UUID playerUUID = event.getPlayer().getUniqueId(); Player player = event.getPlayer(); new PlayerManager().setPlayerTeam(player); Team team = player.getScoreboard().getEntryTeam(player.getName()); + if (!joinedPlayers.contains(playerUUID)) { + event.getPlayer().sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("join.notify"))); + joinedPlayers.add(playerUUID); + } // Verwende den zentral konfigurierten Join-Text aus der JSON-Datei assert team != null; diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ProtectedBlockListener.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ProtectedBlockListener.java index 42323c5..2f8df11 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ProtectedBlockListener.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/ProtectedBlockListener.java @@ -39,9 +39,6 @@ public class ProtectedBlockListener implements Listener { Material.FURNACE, Material.BLAST_FURNACE, Material.SMOKER ); - /* - * Prevents items from being transferred into protected storages. - */ @EventHandler public void onItemTransferHopperEvent(InventoryMoveItemEvent event) { Location destLocation = event.getDestination().getLocation(); @@ -52,10 +49,6 @@ public class ProtectedBlockListener implements Listener { } } - /* - * Handles player interactions with storage blocks. - * Supports locking, unlocking, linking keys, and opening GUIs. - */ @EventHandler public void onBlockInteractEvent(PlayerInteractEvent event) { Player player = event.getPlayer(); @@ -68,26 +61,22 @@ public class ProtectedBlockListener implements Listener { ItemStack mainHandItem = player.getInventory().getItemInMainHand(); ProtectedBlock protectedBlock = getProtectedBlock(block); - // Owner can manage keys with shift-right-click if the block is already locked. if (player.isSneaking() && protectedBlock != null && protectedBlock.owner().equals(player.getUniqueId())) { openManageKeysGUI(player, block); return; } - // Shift + Right-click with a valid trial key relinks the key to the new container. if (player.isSneaking() && isValidKey(mainHandItem)) { relinkKey(player, mainHandItem, block); return; } - // Shift + Right-click on an unlocked container opens the lock GUI. if (player.isSneaking() && protectedBlock == null) { openLockGUI(player, block); return; } - // Normal right-click: if a valid key is held for a locked container, open the inventory. if (protectedBlock != null && isValidKey(mainHandItem, protectedBlock.key())) { if (block.getState() instanceof Container container) { player.openInventory(container.getInventory()); @@ -95,24 +84,18 @@ public class ProtectedBlockListener implements Listener { return; } - // Normal right-click on a locked container without a valid key shows a locked message. if (protectedBlock != null) { String lockedMsg = String.format(L4M4.get("storage.locked"), "minecraft:trial_key"); player.sendMessage(miniMessage.deserialize(lockedMsg)); } } - /* - * Opens the lock GUI for a container. - * Two trial keys are created and the container is then registered as protected. - */ private void openLockGUI(Player player, Block block) { String titleRaw = String.format(L4M4.get("storage.lock_gui_title"), block.getType().toString()); Inventory lockInventory = Bukkit.createInventory(player, InventoryType.HOPPER, miniMessage.deserialize(titleRaw)); UUID lockUUID = UUID.randomUUID(); - // Create two identical trial keys for symmetry ItemStack trialKey1 = createTrialKey(lockUUID); ItemStack trialKey2 = createTrialKey(lockUUID); @@ -120,19 +103,14 @@ public class ProtectedBlockListener implements Listener { lockInventory.setItem(4, trialKey2); player.openInventory(lockInventory); - // Save the protected block information protectedBlocks.addBlock(new ProtectedBlock(player.getUniqueId(), lockUUID, block.getLocation())); } - /* - * Opens the manage keys GUI for the owner to add or remove keys. - */ private void openManageKeysGUI(Player player, Block block) { String titleRaw = String.format(L4M4.get("storage.manage_gui_title"), block.getType().toString()); Inventory manageKeysInventory = Bukkit.createInventory(player, InventoryType.HOPPER, miniMessage.deserialize(titleRaw)); - // Create "Add Key" button ItemStack addKey = new ItemStack(Material.PAPER); ItemMeta addKeyMeta = addKey.getItemMeta(); if (addKeyMeta != null) { @@ -140,7 +118,6 @@ public class ProtectedBlockListener implements Listener { addKey.setItemMeta(addKeyMeta); } - // Create "Remove Key" button ItemStack removeKey = new ItemStack(Material.BARRIER); ItemMeta removeKeyMeta = removeKey.getItemMeta(); if (removeKeyMeta != null) { @@ -154,10 +131,6 @@ public class ProtectedBlockListener implements Listener { player.openInventory(manageKeysInventory); } - /* - * Relinks the provided trial key to the new block. - * A new lock UUID is generated and the key’s lore is updated. - */ private void relinkKey(Player player, ItemStack key, Block newBlock) { UUID newLockUUID = UUID.randomUUID(); ItemMeta meta = key.getItemMeta(); @@ -173,10 +146,6 @@ public class ProtectedBlockListener implements Listener { player.sendMessage(miniMessage.deserialize(L4M4.get("storage.link_success"))); } - /* - * Prevents any changes in the lock or manage keys GUIs. - * Also informs the player that the action was completed. - */ @EventHandler public void onInventoryClick(InventoryClickEvent event) { String title = event.getView().title().toString(); @@ -191,10 +160,6 @@ public class ProtectedBlockListener implements Listener { } } - /* - * Handles block breaking. - * If the block is protected, only the owner can break it. - */ @EventHandler public void onBlockBreak(BlockBreakEvent event) { Player player = event.getPlayer(); @@ -212,17 +177,11 @@ public class ProtectedBlockListener implements Listener { } } - /* - * Prevents explosions from destroying protected storage blocks. - */ @EventHandler public void onExplosion(EntityExplodeEvent event) { event.blockList().removeIf(this::isProtected); } - /* - * Helper method to create a trial key with linked lock information. - */ private ItemStack createTrialKey(UUID lockUUID) { ItemStack trialKey = new ItemStack(Material.TRIPWIRE_HOOK); ItemMeta meta = trialKey.getItemMeta(); @@ -237,16 +196,10 @@ public class ProtectedBlockListener implements Listener { return trialKey; } - /* - * Validates if the provided item is a trial key. - */ private boolean isValidKey(ItemStack item) { return item != null && item.getType() == Material.TRIPWIRE_HOOK && item.hasItemMeta(); } - /* - * Validates if the provided item is a trial key that is linked to the given lock UUID. - */ private boolean isValidKey(ItemStack item, UUID lockUUID) { if (!isValidKey(item)) return false; ItemMeta meta = item.getItemMeta(); @@ -254,9 +207,6 @@ public class ProtectedBlockListener implements Listener { return Objects.requireNonNull(meta.lore()).stream().anyMatch(line -> line.contains(Component.text(lockUUID.toString()))); } - /* - * Returns the ProtectedBlock associated with the given block, or null if not found. - */ private ProtectedBlock getProtectedBlock(Block block) { return protectedBlocks.getBlocks().stream() .filter(pb -> pb.location().equals(block.getLocation())) @@ -264,10 +214,7 @@ public class ProtectedBlockListener implements Listener { .orElse(null); } - /* - * Checks if a block is protected. - */ private boolean isProtected(Block block) { return getProtectedBlock(block) != null; } -} +} \ No newline at end of file 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 5fb4df0..bb22b60 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 @@ -136,6 +136,7 @@ public class Clan { this.chunkAmount = loaded.chunkAmount; } + /** * Saves the clan data to its corresponding JSON file. */ diff --git a/src/main/resources/storage/messages.json b/src/main/resources/storage/messages.json index a62979e..d0e2507 100644 --- a/src/main/resources/storage/messages.json +++ b/src/main/resources/storage/messages.json @@ -64,6 +64,7 @@ "notification.invite": "Invite from clan %s.", + "button.accept": "[Accept]", "button.deny": "[Deny]", @@ -144,5 +145,11 @@ "storage.break_denied": "You cannot break this locked storage!", "storage.trial_key": "Linked Trial Key", - "config.reloaded": "Config reloaded!" + "config.reloaded": "Config reloaded!", + "error.clan_full": "The clan is full.", + "error.clan_not_found": "Clan not found.", + "success.invite_sent": "Invite sent to %s.", + "error.no_permission": "You can't do this.", + "join.notify": "WICHTIG!!! Die Clans wurden aufgelöst, das aktuelle Clanlimit liegt bei 10 Membern. Jeder hat damit die Chance einen neuen Clan selbst zu gründen, da die großen Clans keine unendliche Kapazität mehr haben." + } From dfa234714c8afb3aee4952b1b2e44353e1fdf537 Mon Sep 17 00:00:00 2001 From: EmrageGHC Date: Fri, 21 Feb 2025 15:03:48 +0100 Subject: [PATCH 12/32] push config.yml --- src/main/resources/config.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 84eefb0..dd4a5e3 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,4 +1,5 @@ op-prefix: '[Team] ' player-prefix: '[Player] ' -discord-report-webhook: 'https://discord.com/api/webhooks/1234567890/abcdefghijklmnopqrstuvwxyz' +discord-report-webhook: '' +discord-url: 'https://discord.gg/cww2YDt2bx' tab_update_interval: 5 #Seconds \ No newline at end of file From a5b5407d63a153d1d2846cb570c6e96ed8f0d0dc Mon Sep 17 00:00:00 2001 From: DaTTV <104141141+DrFreezyYT@users.noreply.github.com> Date: Fri, 21 Feb 2025 15:16:41 +0100 Subject: [PATCH 13/32] Added Language Reloader to ReloadCommand --- .../freezy/plugins/papermc/blazesmp/command/ReloadCommand.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/ReloadCommand.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/ReloadCommand.java index 578a5b4..3333d2d 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/ReloadCommand.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/ReloadCommand.java @@ -28,6 +28,7 @@ public class ReloadCommand extends SimpleCommand { BlazeSMP.getInstance().reloadConfig(); BlazeSMP.getInstance().getProtectedBlocks().save(); BlazeSMP.getInstance().getHomes().save(); + L4M4.init(); player.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("config.reloaded"))); return true; } From 4f6c79029964a7dee471990db4613f287b411f12 Mon Sep 17 00:00:00 2001 From: EmrageGHC Date: Fri, 21 Feb 2025 16:09:17 +0100 Subject: [PATCH 14/32] push --- .../papermc/blazesmp/command/ClanCommand.java | 6 ++-- .../blazesmp/command/VanishCommand.java | 28 +++++++++---------- src/main/resources/storage/messages.json | 1 - 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/ClanCommand.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/ClanCommand.java index db6bb82..1382417 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/ClanCommand.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/ClanCommand.java @@ -510,12 +510,10 @@ public class ClanCommand extends SimpleCommand { player.sendMessage(miniMessage().deserialize(String.format(L4M4.get("error.player_not_in_clan"), newLeaderName))); return true; } - if (!currentClan.getMembers().contains(playerUUID)) { - currentClan.getMembers().add(playerUUID); - } + currentClan.setLeaderUUID(newLeaderUUID); if (currentClan.isVice(newLeaderUUID)) { - currentClan.setViceUUID(null); + currentClan.setViceUUID(playerUUID); } currentClan.save(); player.sendMessage(miniMessage().deserialize(String.format(L4M4.get("success.leadership_transferred"), newLeaderName))); diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/VanishCommand.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/VanishCommand.java index 79bdf69..7e7e5bb 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/VanishCommand.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/VanishCommand.java @@ -11,14 +11,16 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.HashSet; +import java.util.HashMap; import java.util.List; -import java.util.Set; +import java.util.Map; import java.util.UUID; public class VanishCommand extends SimpleCommand { - private final Set vanishedPlayers = new HashSet<>(); - private boolean isvanished = true; + private final Map vanishedPlayers = new HashMap(); + + + public VanishCommand() { super("vanish"); @@ -26,33 +28,31 @@ public class VanishCommand extends SimpleCommand { @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { - if (!(sender instanceof Player)) { - sender.sendMessage("Du bist kein Spieler!"); + if (!(sender instanceof Player player)) { + sender.sendMessage(L4M4.get("error.not_a_player")); return false; } - Player player = (Player) sender; if (player.isOp()) { for (Player online : Bukkit.getOnlinePlayers()) { - if (isvanished) { + if (vanishedPlayers.getOrDefault(player.getUniqueId(), false)) { player.showPlayer(BlazeSMP.getInstance(), online); - online.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("player.join"))); + online.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("player.join")).append(player.playerListName())); } else { player.hidePlayer(BlazeSMP.getInstance(), online); - online.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("player.left"))); + online.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("player.left")).append(player.playerListName())); } } - if (isvanished) { - vanishedPlayers.remove(player.getUniqueId()); + if (vanishedPlayers.getOrDefault(player.getUniqueId(), false)) { + vanishedPlayers.put(player.getUniqueId(), false); } else { - vanishedPlayers.add(player.getUniqueId()); + vanishedPlayers.put(player.getUniqueId(), true); } } else { player.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("error.no_permission"))); return false; } - isvanished = !isvanished; return true; } diff --git a/src/main/resources/storage/messages.json b/src/main/resources/storage/messages.json index d0e2507..04b7b0b 100644 --- a/src/main/resources/storage/messages.json +++ b/src/main/resources/storage/messages.json @@ -147,7 +147,6 @@ "config.reloaded": "Config reloaded!", "error.clan_full": "The clan is full.", - "error.clan_not_found": "Clan not found.", "success.invite_sent": "Invite sent to %s.", "error.no_permission": "You can't do this.", "join.notify": "WICHTIG!!! Die Clans wurden aufgelöst, das aktuelle Clanlimit liegt bei 10 Membern. Jeder hat damit die Chance einen neuen Clan selbst zu gründen, da die großen Clans keine unendliche Kapazität mehr haben." From 7c04f951e2bca7fbc6fa283444741ec84308e56e Mon Sep 17 00:00:00 2001 From: DaTTV <104141141+DrFreezyYT@users.noreply.github.com> Date: Fri, 21 Feb 2025 16:49:10 +0100 Subject: [PATCH 15/32] Added Language Reloader to ReloadCommand --- .../freezy/plugins/papermc/blazesmp/command/ClaimCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 0b356cf..e1e9e78 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 @@ -56,7 +56,7 @@ public class ClaimCommand extends SimpleCommand { player.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("error.chunk_already_claimed"))); } else { // claim too close to spawn 8 chunks - if (player.getX() < 152 && player.getZ() < 152) { + if (player.getX() < 152.0 && player.getZ() < 152.0) { player.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("error.chunk_too_close_to_spawn"))); return true; } From b8d719478ceaa1bd7884a14ca8cf2cd3d6ef7d4c Mon Sep 17 00:00:00 2001 From: EmrageGHC Date: Fri, 21 Feb 2025 20:58:47 +0100 Subject: [PATCH 16/32] add Ebdportalluistener --- .../plugins/papermc/blazesmp/BlazeSMP.java | 8 +++++ .../blazesmp/listener/EndPortalListener.java | 32 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 src/main/java/me/freezy/plugins/papermc/blazesmp/listener/EndPortalListener.java diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java index ff36674..5fe7906 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java @@ -26,6 +26,7 @@ public final class BlazeSMP extends JavaPlugin { @Getter private Logger log; @Getter private BukkitTask nameUpdateTask; @Getter private BukkitTask tabListUpdateTask; + private boolean isEndOpen; @Override @@ -124,4 +125,11 @@ public final class BlazeSMP extends JavaPlugin { this.log.info("Disabling BlazeSMP!"); } + public boolean isEndOpen() { + return isEndOpen; + } + + public void setEndOpen(boolean endOpen) { + isEndOpen = endOpen; + } } diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/EndPortalListener.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/EndPortalListener.java new file mode 100644 index 0000000..8215e25 --- /dev/null +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/EndPortalListener.java @@ -0,0 +1,32 @@ +package me.freezy.plugins.papermc.blazesmp.listener; + +import me.freezy.plugins.papermc.blazeghcsmpclan.Main; +import org.bukkit.ChatColor; +import org.bukkit.World; +import org.bukkit.World.Environment; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerPortalEvent; + +public class EndPortalListener implements Listener { + + private final Main plugin; + + public EndPortalListener(Main plugin) { + this.plugin = plugin; + } + + @EventHandler + public void onPlayerPortal(PlayerPortalEvent event) { + Player player = event.getPlayer(); + World world = event.getTo().getWorld(); + + if (world != null && world.getEnvironment() == Environment.THE_END) { + if (!plugin.isEndOpen()) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "Das End ist noch nicht geöffnet!"); + } + } + } +} \ No newline at end of file From 3a9f229d81d4a9cf6f1ef57544fd60dffa85b5a7 Mon Sep 17 00:00:00 2001 From: EmrageGHC Date: Fri, 21 Feb 2025 21:37:42 +0100 Subject: [PATCH 17/32] add EndCommand --- .../plugins/papermc/blazesmp/BlazeSMP.java | 20 +++-- .../blazesmp/command/EventCommand.java | 85 +++++++++++++++++++ .../blazesmp/listener/EndPortalListener.java | 6 +- 3 files changed, 100 insertions(+), 11 deletions(-) create mode 100644 src/main/java/me/freezy/plugins/papermc/blazesmp/command/EventCommand.java diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java index 5fe7906..25ed069 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java @@ -28,26 +28,25 @@ public final class BlazeSMP extends JavaPlugin { @Getter private BukkitTask tabListUpdateTask; private boolean isEndOpen; - @Override public void onLoad() { - this.log=getSLF4JLogger(); + this.log = getSLF4JLogger(); this.log.info("Loading BlazeSMP..."); this.log.info("Loading ProtectedBlocks..."); - this.protectedBlocks=new ProtectedBlocks(); + this.protectedBlocks = new ProtectedBlocks(); this.protectedBlocks.load(); this.log.info("Loaded ProtectedBlocks!"); this.log.info("Loading Clans..."); - this.clans=new Clans(); + this.clans = new Clans(); this.clans.loadAllClans(); this.log.info("Loaded Clans!"); this.log.info("Loading config..."); saveDefaultConfig(); - this.configuration= getConfig(); + this.configuration = getConfig(); saveConfig(); this.log.info("Loaded config!"); @@ -60,12 +59,13 @@ public final class BlazeSMP extends JavaPlugin { @Override public void onEnable() { - BlazeSMP.instance=this; + BlazeSMP.instance = this; + isEndOpen = getConfig().getBoolean("isEndOpen", false); this.log.info("Enabling BlazeSMP..."); this.log.info("Loading Homes..."); - this.homes=new Homes(); + this.homes = new Homes(); this.homes.load(); this.log.info("Loaded Homes!"); @@ -77,6 +77,7 @@ public final class BlazeSMP extends JavaPlugin { new DiscordCommand().register(); new ReloadCommand().register(); new VanishCommand().register(); + new EventCommand(this).register(); this.log.info("Registered Commands!"); this.log.info("Registering EventListeners..."); @@ -125,11 +126,14 @@ public final class BlazeSMP extends JavaPlugin { this.log.info("Disabling BlazeSMP!"); } + public boolean isEndOpen() { return isEndOpen; } public void setEndOpen(boolean endOpen) { isEndOpen = endOpen; + getConfig().set("isEndOpen", endOpen); + saveConfig(); } -} +} \ No newline at end of file diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/EventCommand.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/EventCommand.java new file mode 100644 index 0000000..89bd5cf --- /dev/null +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/EventCommand.java @@ -0,0 +1,85 @@ +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.module.manager.L4M4; +import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.title.Title; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Sound; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.time.Duration; +import java.util.List; + +public class EventCommand extends SimpleCommand { + + private final BlazeSMP plugin; + + public EventCommand(BlazeSMP plugin) { + super("event"); + this.plugin = plugin; + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + if (args.length == 1 && args[0].equalsIgnoreCase("open")) { + if (!(sender.getName().equals("BlazeGHC") || sender.getName().equals("EmrageGHC"))) { + sender.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("error.no_permission"))); + return true; + } + + if (plugin.isEndOpen()) { + sender.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "The End is already open!"); + return true; + } + + if (sender instanceof Player || sender instanceof ConsoleCommandSender) { + for (int i = 10; i > 0; i--) { + int finalI = i; + Bukkit.getScheduler().runTaskLater(plugin, () -> { + String titleMessage = "" + finalI + ""; + String subtitleMessage = "The End is opening soon!"; + Bukkit.getOnlinePlayers().forEach(player -> { + player.showTitle(Title.title( + MiniMessage.miniMessage().deserialize(titleMessage), + MiniMessage.miniMessage().deserialize(subtitleMessage) + )); + player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0f, 1.0f); + }); + }, (10 - i) * 20L); + } + + Bukkit.getScheduler().runTaskLater(plugin, () -> { + plugin.setEndOpen(true); + plugin.getConfig().set("isEndOpen", true); + plugin.saveConfig(); + Bukkit.broadcastMessage(ChatColor.GREEN + "" + ChatColor.BOLD + "The End is now open! Good luck!"); + Bukkit.getOnlinePlayers().forEach(player -> { + player.playSound(player.getLocation(), Sound.ENTITY_ENDER_DRAGON_GROWL, 1.0f, 1.0f); + player.showTitle(Title.title( + MiniMessage.miniMessage().deserialize("Open!"), + MiniMessage.miniMessage().deserialize("Good luck!"), + Title.Times.times(Duration.ofSeconds(1), Duration.ofSeconds(3), Duration.ofSeconds(1)) + )); + }); + }, 10 * 20L); + return true; + } else { + return true; + } + } + return false; + } + + @Override + public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + return List.of(); + } +} \ No newline at end of file diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/EndPortalListener.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/EndPortalListener.java index 8215e25..1768d69 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/EndPortalListener.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/EndPortalListener.java @@ -1,6 +1,6 @@ package me.freezy.plugins.papermc.blazesmp.listener; -import me.freezy.plugins.papermc.blazeghcsmpclan.Main; +import me.freezy.plugins.papermc.blazesmp.BlazeSMP; import org.bukkit.ChatColor; import org.bukkit.World; import org.bukkit.World.Environment; @@ -11,9 +11,9 @@ import org.bukkit.event.player.PlayerPortalEvent; public class EndPortalListener implements Listener { - private final Main plugin; + private final BlazeSMP plugin; - public EndPortalListener(Main plugin) { + public EndPortalListener(BlazeSMP plugin) { this.plugin = plugin; } From 43b6c32faeb8298c9511e375ddae0e1ad647ec6e Mon Sep 17 00:00:00 2001 From: DaTTV <104141141+DrFreezyYT@users.noreply.github.com> Date: Fri, 21 Feb 2025 21:45:08 +0100 Subject: [PATCH 18/32] maybe fixed homes --- .../freezy/plugins/papermc/blazesmp/command/HomeCommand.java | 3 +++ .../freezy/plugins/papermc/blazesmp/module/manager/Homes.java | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/HomeCommand.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/HomeCommand.java index f391184..7d80117 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/HomeCommand.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/HomeCommand.java @@ -32,11 +32,13 @@ public class HomeCommand extends SimpleCommand { if (label.equalsIgnoreCase("sethome")) { homes.setHome(player); + homes.save(); player.sendMessage(MiniMessage.miniMessage().deserialize( L4M4.get("home.sethome.success") )); } else if (label.equalsIgnoreCase("delhome")) { homes.removeHome(player); + homes.save(); player.sendMessage(MiniMessage.miniMessage().deserialize( L4M4.get("home.delhome.success") )); @@ -48,6 +50,7 @@ public class HomeCommand extends SimpleCommand { new PlayerTeleportHomeTimer(player).runTaskTimer(BlazeSMP.getInstance(), 0, 1); } else { homes.setHome(player); + homes.save(); player.sendMessage(MiniMessage.miniMessage().deserialize( L4M4.get("home.sethome.success") )); diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/module/manager/Homes.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/module/manager/Homes.java index f79a0d9..90bfee9 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/module/manager/Homes.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/module/manager/Homes.java @@ -123,12 +123,10 @@ public class Homes { public void setHome(Player player) { homes.put(player.getUniqueId(), player.getLocation()); - save(); } public void removeHome(Player player) { homes.remove(player.getUniqueId()); - save(); } /** From 14d540b096a28a7d8c3886c4a10dea7020d26017 Mon Sep 17 00:00:00 2001 From: DaTTV <104141141+DrFreezyYT@users.noreply.github.com> Date: Fri, 21 Feb 2025 21:48:29 +0100 Subject: [PATCH 19/32] fixed duplicate player name in chat --- .../plugins/papermc/blazesmp/listener/PlayerChatListener.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerChatListener.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerChatListener.java index fe48ca5..dfd50f3 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerChatListener.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerChatListener.java @@ -20,8 +20,6 @@ public class PlayerChatListener implements Listener { .append(Component.text(": ")) .append(messageComponent); - player.sendMessage(player.playerListName()); - event.renderer((source, sourceDisplayName, msg, viewer) -> chatComponent); } } From fbda5262a23c074c1ac38488e048ac27e5d146cd Mon Sep 17 00:00:00 2001 From: DaTTV <104141141+DrFreezyYT@users.noreply.github.com> Date: Fri, 21 Feb 2025 22:24:03 +0100 Subject: [PATCH 20/32] Added minimessage chat format --- .../plugins/papermc/blazesmp/listener/PlayerChatListener.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerChatListener.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerChatListener.java index dfd50f3..a07f911 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerChatListener.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerChatListener.java @@ -3,6 +3,8 @@ package me.freezy.plugins.papermc.blazesmp.listener; import io.papermc.paper.event.player.AsyncChatEvent; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.TextColor; +import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -13,7 +15,7 @@ public class PlayerChatListener implements Listener { public void onChat(AsyncChatEvent event) { Player player = event.getPlayer(); - Component messageComponent = event.message(); + Component messageComponent = MiniMessage.miniMessage().deserialize(PlainTextComponentSerializer.plainText().serialize(event.message())); Component chatComponent = Component.empty() .append(player.playerListName()) From 36c8f02456298911b7e7df4895ebab3c2626276b Mon Sep 17 00:00:00 2001 From: DaTTV <104141141+DrFreezyYT@users.noreply.github.com> Date: Fri, 21 Feb 2025 22:24:16 +0100 Subject: [PATCH 21/32] Removed unused imports --- .../plugins/papermc/blazesmp/listener/PlayerChatListener.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerChatListener.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerChatListener.java index a07f911..983c574 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerChatListener.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerChatListener.java @@ -2,13 +2,11 @@ package me.freezy.plugins.papermc.blazesmp.listener; import io.papermc.paper.event.player.AsyncChatEvent; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.TextColor; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.scoreboard.Team; public class PlayerChatListener implements Listener { @EventHandler From 215c0e0bfefbeabfd7476ba066e3dcda4eea60ea Mon Sep 17 00:00:00 2001 From: EmrageGHC Date: Sun, 23 Feb 2025 12:29:30 +0100 Subject: [PATCH 22/32] add No PvP in End --- .../plugins/papermc/blazesmp/BlazeSMP.java | 2 ++ .../blazesmp/listener/PvPListener.java | 28 +++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PvPListener.java diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java index 25ed069..da68a0a 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java @@ -89,6 +89,8 @@ public final class BlazeSMP extends JavaPlugin { pm.registerEvents(new ChunkInventoryListener(), this); pm.registerEvents(new PressurePlateListener(), this); pm.registerEvents(new PlayerVsPlayerListener(clans), this); + pm.registerEvents(new EndPortalListener(this), this); + pm.registerEvents(new PvPListener(), this); //pm.registerEvents(new ProtectedBlockListener(), this); this.log.info("Registered EventListeners!"); diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PvPListener.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PvPListener.java new file mode 100644 index 0000000..eec964e --- /dev/null +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PvPListener.java @@ -0,0 +1,28 @@ +package me.freezy.plugins.papermc.blazesmp.listener; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; + +import java.time.LocalDateTime; +import java.time.Month; +import java.time.format.DateTimeFormatter; +import java.util.Locale; + +public class PvPListener implements Listener { + + @EventHandler + public void onEntityDamageByEntity(EntityDamageByEntityEvent event) { + if (event.getDamager() instanceof Player && event.getEntity() instanceof Player) { + LocalDateTime now = LocalDateTime.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.GERMAN); + String formattedNow = now.format(formatter); + + if (now.getYear() == 2025 && now.getMonth() == Month.FEBRUARY && now.getDayOfMonth() == 23 && + now.getHour() >= 17 && (now.getHour() < 20 || (now.getHour() == 20 && now.getMinute() == 0))) { + event.setCancelled(true); + } + } + } +} \ No newline at end of file From d67ed15b6ce55cf9aea6a5f24579f60f793ade78 Mon Sep 17 00:00:00 2001 From: EmrageGHC Date: Sun, 23 Feb 2025 14:04:59 +0100 Subject: [PATCH 23/32] add PlayerQuit and fix VanishCommand --- .../blazesmp/command/VanishCommand.java | 4 +-- .../blazesmp/listener/PlayerQuitListener.java | 28 +++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerQuitListener.java diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/VanishCommand.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/VanishCommand.java index 7e7e5bb..0774c5d 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/VanishCommand.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/VanishCommand.java @@ -36,10 +36,10 @@ public class VanishCommand extends SimpleCommand { if (player.isOp()) { for (Player online : Bukkit.getOnlinePlayers()) { if (vanishedPlayers.getOrDefault(player.getUniqueId(), false)) { - player.showPlayer(BlazeSMP.getInstance(), online); + online.showPlayer(BlazeSMP.getInstance(), player); online.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("player.join")).append(player.playerListName())); } else { - player.hidePlayer(BlazeSMP.getInstance(), online); + online.hidePlayer(BlazeSMP.getInstance(), player); online.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("player.left")).append(player.playerListName())); } } diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerQuitListener.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerQuitListener.java new file mode 100644 index 0000000..76c7fdb --- /dev/null +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerQuitListener.java @@ -0,0 +1,28 @@ +package me.freezy.plugins.papermc.blazesmp.listener; + +import me.freezy.plugins.papermc.blazesmp.manager.PlayerManager; +import me.freezy.plugins.papermc.blazesmp.module.manager.L4M4; +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.scoreboard.Team; + + +import java.util.UUID; + +public class PlayerQuitListener implements Listener { + + @EventHandler + public void onQuit(PlayerQuitEvent event) { + UUID playerUUID = event.getPlayer().getUniqueId(); + Player player = event.getPlayer(); + new PlayerManager().setPlayerTeam(player); + Team team = player.getScoreboard().getEntryTeam(player.getName()); + + assert team != null; + event.quitMessage(MiniMessage.miniMessage().deserialize(L4M4.get("player.left")) + .append(player.playerListName())); + } +} From 6a9a3018eb55e64cc213a59f5d7335d583ca2260 Mon Sep 17 00:00:00 2001 From: DaTTV <104141141+DrFreezyYT@users.noreply.github.com> Date: Sun, 23 Feb 2025 14:39:28 +0100 Subject: [PATCH 24/32] fixed loading clans --- .../plugins/papermc/blazesmp/BlazeSMP.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java index 25ed069..97ba8de 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java @@ -39,11 +39,6 @@ public final class BlazeSMP extends JavaPlugin { this.protectedBlocks.load(); this.log.info("Loaded ProtectedBlocks!"); - this.log.info("Loading Clans..."); - this.clans = new Clans(); - this.clans.loadAllClans(); - this.log.info("Loaded Clans!"); - this.log.info("Loading config..."); saveDefaultConfig(); this.configuration = getConfig(); @@ -64,10 +59,17 @@ public final class BlazeSMP extends JavaPlugin { this.log.info("Enabling BlazeSMP..."); - this.log.info("Loading Homes..."); - this.homes = new Homes(); - this.homes.load(); - this.log.info("Loaded Homes!"); + this.getServer().getScheduler().runTaskLater(this, () -> { + this.log.info("Loading Clans..."); + this.clans = new Clans(); + this.clans.loadAllClans(); + this.log.info("Loaded Clans!"); + + this.log.info("Loading Homes..."); + this.homes = new Homes(); + this.homes.load(); + this.log.info("Loaded Homes!"); + }, 20L); this.log.info("Registering Commands..."); new ClanCommand().register(); From 19165efd150aa2e8ea42d19a75cbfcf0ddc868e9 Mon Sep 17 00:00:00 2001 From: EmrageGHC Date: Sun, 23 Feb 2025 15:43:47 +0100 Subject: [PATCH 25/32] fix Claim and Damage --- .../plugins/papermc/blazesmp/BlazeSMP.java | 129 +++++++++--------- .../blazesmp/command/ClaimCommand.java | 16 ++- src/main/resources/storage/messages.json | 15 +- 3 files changed, 91 insertions(+), 69 deletions(-) diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java index c9fffe0..3b98792 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java @@ -2,6 +2,7 @@ package me.freezy.plugins.papermc.blazesmp; import lombok.Getter; import me.freezy.plugins.papermc.blazesmp.command.*; +import me.freezy.plugins.papermc.blazesmp.command.util.SimpleCommand; import me.freezy.plugins.papermc.blazesmp.listener.*; import me.freezy.plugins.papermc.blazesmp.module.manager.Clans; import me.freezy.plugins.papermc.blazesmp.module.manager.Homes; @@ -29,80 +30,86 @@ public final class BlazeSMP extends JavaPlugin { private boolean isEndOpen; @Override - public void onLoad() { - this.log = getSLF4JLogger(); +public void onLoad() { + this.log = getSLF4JLogger(); - this.log.info("Loading BlazeSMP..."); + this.log.info("Loading BlazeSMP..."); - this.log.info("Loading ProtectedBlocks..."); - this.protectedBlocks = new ProtectedBlocks(); - this.protectedBlocks.load(); - this.log.info("Loaded ProtectedBlocks!"); + this.log.info("Loading ProtectedBlocks..."); + this.protectedBlocks = new ProtectedBlocks(); + this.protectedBlocks.load(); + this.log.info("Loaded ProtectedBlocks!"); - this.log.info("Loading config..."); - saveDefaultConfig(); - this.configuration = getConfig(); - saveConfig(); - this.log.info("Loaded config!"); + this.log.info("Loading config..."); + saveDefaultConfig(); + this.configuration = getConfig(); + saveConfig(); + this.log.info("Loaded config!"); - this.log.info("Loading L4M4..."); - L4M4.init(); - this.log.info("Loaded L4M4!"); + this.log.info("Loading L4M4..."); + L4M4.init(); + this.log.info("Loaded L4M4!"); - this.log.info("Loaded BlazeSMP!"); - } + this.log.info("Loaded BlazeSMP!"); +} - @Override - public void onEnable() { - BlazeSMP.instance = this; - isEndOpen = getConfig().getBoolean("isEndOpen", false); +@Override +public void onEnable() { + BlazeSMP.instance = this; + isEndOpen = getConfig().getBoolean("isEndOpen", false); - this.log.info("Enabling BlazeSMP..."); + this.log.info("Enabling BlazeSMP..."); - this.getServer().getScheduler().runTaskLater(this, () -> { - this.log.info("Loading Clans..."); - this.clans = new Clans(); - this.clans.loadAllClans(); - this.log.info("Loaded Clans!"); - this.log.info("Loading Homes..."); - this.homes = new Homes(); - this.homes.load(); - this.log.info("Loaded Homes!"); - }, 20L); - this.log.info("Registering Commands..."); - new ClanCommand().register(); - new ReportCommand().register(); - new ClaimCommand().register(); - new HomeCommand().register(); - new DiscordCommand().register(); - new ReloadCommand().register(); - new VanishCommand().register(); - new EventCommand(this).register(); - this.log.info("Registered Commands!"); + this.getServer().getScheduler().runTaskLater(this, () -> { + this.log.info("Loading Homes..."); + this.homes = new Homes(); + this.homes.load(); + this.log.info("Loaded Homes!"); + }, 20L); - this.log.info("Registering EventListeners..."); - PluginManager pm = getServer().getPluginManager(); - pm.registerEvents(new PlayerJoinListener(), this); - pm.registerEvents(new PlayerChatListener(), this); - pm.registerEvents(new PlayerCommandBlockerListener(), this); - pm.registerEvents(new PlayerClaimListener(), this); - pm.registerEvents(new ChunkInventoryListener(), this); - pm.registerEvents(new PressurePlateListener(), this); - pm.registerEvents(new PlayerVsPlayerListener(clans), this); - pm.registerEvents(new EndPortalListener(this), this); - pm.registerEvents(new PvPListener(), this); - //pm.registerEvents(new ProtectedBlockListener(), this); - this.log.info("Registered EventListeners!"); + this.getServer().getScheduler().runTaskLater(this, () -> { + this.log.info("Loading Clans..."); + this.clans = new Clans(); + this.clans.loadAllClans(); + this.log.info("Loaded Clans!"); + }, 40L); - this.log.info("Starting Timer tasks..."); - this.nameUpdateTask = new PlayerNameUpdate().runTaskTimer(this, 0L, 20L); - this.tabListUpdateTask = new TabListTimer().runTaskTimer(this, 0L, 20L); - this.log.info("Started Timer tasks!"); + this.log.info("Registering Commands..."); + new ClanCommand().register(); + new ReportCommand().register(); + new ClaimCommand().register(); + new HomeCommand().register(); + new DiscordCommand().register(); + new ReloadCommand().register(); + new VanishCommand().register(); + new EventCommand(this).register(); + new RestartCommand().register(); + this.log.info("Registered Commands!"); - this.log.info("Enabled BlazeSMP!"); - } + this.log.info("Registering EventListeners..."); + PluginManager pm = getServer().getPluginManager(); + pm.registerEvents(new PlayerJoinListener(), this); + pm.registerEvents(new PlayerChatListener(), this); + pm.registerEvents(new PlayerCommandBlockerListener(), this); + pm.registerEvents(new PlayerClaimListener(), this); + pm.registerEvents(new ChunkInventoryListener(), this); + pm.registerEvents(new PressurePlateListener(), this); + pm.registerEvents(new PlayerVsPlayerListener(clans), this); + pm.registerEvents(new EndPortalListener(this), this); + pm.registerEvents(new PvPListener(), this); + pm.registerEvents(new PlayerQuitListener(), this); + //pm.registerEvents(new ProtectedBlockListener(), this); + this.log.info("Registered EventListeners!"); + + this.log.info("Starting Timer tasks..."); + this.nameUpdateTask = new PlayerNameUpdate().runTaskTimer(this, 0L, 20L); + this.tabListUpdateTask = new TabListTimer().runTaskTimer(this, 0L, 20L); + this.log.info("Started Timer tasks!"); + + this.log.info("Enabled BlazeSMP!"); +} @Override public void onDisable() { 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 e1e9e78..1ea0ff1 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 @@ -14,7 +14,10 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.*; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.UUID; public class ClaimCommand extends SimpleCommand { @@ -50,14 +53,18 @@ public class ClaimCommand extends SimpleCommand { int MAX_CLAIMS = 50; if (playerClaims.size() >= MAX_CLAIMS) { player.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("error.max_claims_reached"))); + System.out.println("Claim denied: max claims reached"); } else { Chunk playerChunk = player.getLocation().getChunk(); if (clans.isChunkClaimed(playerChunk)) { player.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("error.chunk_already_claimed"))); + System.out.println("Claim denied: chunk already claimed"); } else { // claim too close to spawn 8 chunks - if (player.getX() < 152.0 && player.getZ() < 152.0) { + // claim too close to spawn 152 blocks in all directions + if (Math.abs(player.getX()) < 152.0 && Math.abs(player.getZ()) < 152.0) { player.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("error.chunk_too_close_to_spawn"))); + System.out.println("Claim denied: chunk too close to spawn"); return true; } playerClaims.add(playerChunk); @@ -66,6 +73,7 @@ public class ClaimCommand extends SimpleCommand { clans.setClanChunks(playerClan, existingClaims); playerClan.save(); clans.saveAllClans(); + System.out.println("Chunk claimed successfully"); } } return true; @@ -82,8 +90,10 @@ public class ClaimCommand extends SimpleCommand { clans.setClanChunks(playerClan, existingClaims); playerClan.save(); clans.saveAllClans(); + System.out.println("Chunk unclaimed successfully"); } else { player.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("error.chunk_not_owned"))); + System.out.println("Unclaim denied: chunk not owned"); } return true; } @@ -99,4 +109,4 @@ public class ClaimCommand extends SimpleCommand { } return List.of(); } -} +} \ No newline at end of file diff --git a/src/main/resources/storage/messages.json b/src/main/resources/storage/messages.json index 04b7b0b..cd8ca7e 100644 --- a/src/main/resources/storage/messages.json +++ b/src/main/resources/storage/messages.json @@ -30,6 +30,8 @@ "error.max_claims_reached": "You cannot claim more than 50 chunks!", "error.chunk_too_close_to_spawn": "Chunk is too close to spawn!", "error.not_found": "Not Found", + "error.no_reason": "Please provide a reason for the restart.", + "error.no_permission": "You can't do this.", "usage.clan_create": "Usage: /clan create ", "usage.clan_chat": "Usage: /clan chat ", @@ -126,8 +128,11 @@ "BlazeSMP" ], "tablist.footer": [ - "hosted by merged.games", - "made by BlazeGHC Team" + "hosted by merged.games", + "hosted by merged.games", + "made by BlazeGHC Team", + "made by BlazeGHC Team", + "made by BlazeGHC Team" ], "storage.locked": "This storage is locked! You need a %s to open it.", @@ -147,8 +152,8 @@ "config.reloaded": "Config reloaded!", "error.clan_full": "The clan is full.", - "success.invite_sent": "Invite sent to %s.", - "error.no_permission": "You can't do this.", - "join.notify": "WICHTIG!!! Die Clans wurden aufgelöst, das aktuelle Clanlimit liegt bei 10 Membern. Jeder hat damit die Chance einen neuen Clan selbst zu gründen, da die großen Clans keine unendliche Kapazität mehr haben." + "join.notify": "WICHTIG!!! Die Clans wurden aufgelöst, das aktuelle Clanlimit liegt bei 10 Membern. Jeder hat damit die Chance einen neuen Clan selbst zu gründen, da die großen Clans keine unendliche Kapazität mehr haben.", + "success.chunk_unclaimed": "Chunk successfully unclaimed!", + "error.chunk_not_owned": "You do not own this chunk!" } From 682b586320e566ffb154ffb304ab5d13ccef22c1 Mon Sep 17 00:00:00 2001 From: EmrageGHC Date: Sun, 23 Feb 2025 15:46:21 +0100 Subject: [PATCH 26/32] add RestartCommand --- .../blazesmp/command/RestartCommand.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/main/java/me/freezy/plugins/papermc/blazesmp/command/RestartCommand.java diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/RestartCommand.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/RestartCommand.java new file mode 100644 index 0000000..3786f97 --- /dev/null +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/RestartCommand.java @@ -0,0 +1,47 @@ +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.module.manager.L4M4; +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class RestartCommand extends SimpleCommand { + public RestartCommand() { + super("restart"); + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + if (!sender.isOp()) { + sender.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("error.no_permission"))); + return true; + } + + if (args.length == 0) { + sender.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("error.no_reason"))); + return true; + } + + String reason = String.join(" ", args); + String kickMessage = MiniMessage.miniMessage().deserialize(reason).toString(); + + Bukkit.getOnlinePlayers().forEach(player -> player.kickPlayer(kickMessage)); + + Bukkit.getScheduler().runTaskLater(BlazeSMP.getInstance(), Bukkit::shutdown, 60L); // 3 seconds later (60 ticks) + + return true; + } + + @Override + public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + return List.of(); + } +} \ No newline at end of file From e185f70437580a855fb2e1e74930f5a0b5911fdc Mon Sep 17 00:00:00 2001 From: DaTTV <104141141+DrFreezyYT@users.noreply.github.com> Date: Sun, 23 Feb 2025 16:02:02 +0100 Subject: [PATCH 27/32] Extracted common part from statement in EventCommand --- .../freezy/plugins/papermc/blazesmp/command/EventCommand.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/EventCommand.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/EventCommand.java index 89bd5cf..a024d19 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/EventCommand.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/EventCommand.java @@ -70,10 +70,8 @@ public class EventCommand extends SimpleCommand { )); }); }, 10 * 20L); - return true; - } else { - return true; } + return true; } return false; } From 088ce798c66052acb1f1218a4237bacba3fde0a4 Mon Sep 17 00:00:00 2001 From: DaTTV <104141141+DrFreezyYT@users.noreply.github.com> Date: Sun, 23 Feb 2025 16:02:36 +0100 Subject: [PATCH 28/32] Updated RestartCommand, Fixed claim and homes finally --- .../plugins/papermc/blazesmp/BlazeSMP.java | 70 +++++++++---------- .../blazesmp/command/ClaimCommand.java | 6 -- .../blazesmp/command/RestartCommand.java | 5 +- 3 files changed, 36 insertions(+), 45 deletions(-) diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java index 3b98792..1925409 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java @@ -58,57 +58,53 @@ public void onEnable() { BlazeSMP.instance = this; isEndOpen = getConfig().getBoolean("isEndOpen", false); - this.log.info("Enabling BlazeSMP..."); - - - this.getServer().getScheduler().runTaskLater(this, () -> { + this.log.info("Enabling BlazeSMP..."); + this.log.info("Loading Homes..."); this.homes = new Homes(); this.homes.load(); this.log.info("Loaded Homes!"); - }, 20L); - this.getServer().getScheduler().runTaskLater(this, () -> { this.log.info("Loading Clans..."); this.clans = new Clans(); this.clans.loadAllClans(); this.log.info("Loaded Clans!"); - }, 40L); - this.log.info("Registering Commands..."); - new ClanCommand().register(); - new ReportCommand().register(); - new ClaimCommand().register(); - new HomeCommand().register(); - new DiscordCommand().register(); - new ReloadCommand().register(); - new VanishCommand().register(); - new EventCommand(this).register(); - new RestartCommand().register(); - this.log.info("Registered Commands!"); + this.log.info("Registering Commands..."); + new ClanCommand().register(); + new ReportCommand().register(); + new ClaimCommand().register(); + new HomeCommand().register(); + new DiscordCommand().register(); + new ReloadCommand().register(); + new VanishCommand().register(); + new EventCommand(this).register(); + new RestartCommand().register(); + this.log.info("Registered Commands!"); - this.log.info("Registering EventListeners..."); - PluginManager pm = getServer().getPluginManager(); - pm.registerEvents(new PlayerJoinListener(), this); - pm.registerEvents(new PlayerChatListener(), this); - pm.registerEvents(new PlayerCommandBlockerListener(), this); - pm.registerEvents(new PlayerClaimListener(), this); - pm.registerEvents(new ChunkInventoryListener(), this); - pm.registerEvents(new PressurePlateListener(), this); - pm.registerEvents(new PlayerVsPlayerListener(clans), this); - pm.registerEvents(new EndPortalListener(this), this); - pm.registerEvents(new PvPListener(), this); - pm.registerEvents(new PlayerQuitListener(), this); - //pm.registerEvents(new ProtectedBlockListener(), this); - this.log.info("Registered EventListeners!"); + this.log.info("Registering EventListeners..."); + PluginManager pm = getServer().getPluginManager(); + pm.registerEvents(new PlayerJoinListener(), this); + pm.registerEvents(new PlayerChatListener(), this); + pm.registerEvents(new PlayerCommandBlockerListener(), this); + pm.registerEvents(new PlayerClaimListener(), this); + pm.registerEvents(new ChunkInventoryListener(), this); + pm.registerEvents(new PressurePlateListener(), this); + pm.registerEvents(new PlayerVsPlayerListener(clans), this); + pm.registerEvents(new EndPortalListener(this), this); + pm.registerEvents(new PvPListener(), this); + pm.registerEvents(new PlayerQuitListener(), this); + //pm.registerEvents(new ProtectedBlockListener(), this); + this.log.info("Registered EventListeners!"); - this.log.info("Starting Timer tasks..."); - this.nameUpdateTask = new PlayerNameUpdate().runTaskTimer(this, 0L, 20L); - this.tabListUpdateTask = new TabListTimer().runTaskTimer(this, 0L, 20L); - this.log.info("Started Timer tasks!"); + this.log.info("Starting Timer tasks..."); + this.nameUpdateTask = new PlayerNameUpdate().runTaskTimer(this, 0L, 20L); + this.tabListUpdateTask = new TabListTimer().runTaskTimer(this, 0L, 20L); + this.log.info("Started Timer tasks!"); - this.log.info("Enabled BlazeSMP!"); + this.log.info("Enabled BlazeSMP!"); + }, 20L); } @Override 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 1ea0ff1..6bd3b50 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 @@ -53,18 +53,15 @@ public class ClaimCommand extends SimpleCommand { int MAX_CLAIMS = 50; if (playerClaims.size() >= MAX_CLAIMS) { player.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("error.max_claims_reached"))); - System.out.println("Claim denied: max claims reached"); } else { Chunk playerChunk = player.getLocation().getChunk(); if (clans.isChunkClaimed(playerChunk)) { player.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("error.chunk_already_claimed"))); - System.out.println("Claim denied: chunk already claimed"); } else { // claim too close to spawn 8 chunks // claim too close to spawn 152 blocks in all directions if (Math.abs(player.getX()) < 152.0 && Math.abs(player.getZ()) < 152.0) { player.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("error.chunk_too_close_to_spawn"))); - System.out.println("Claim denied: chunk too close to spawn"); return true; } playerClaims.add(playerChunk); @@ -73,7 +70,6 @@ public class ClaimCommand extends SimpleCommand { clans.setClanChunks(playerClan, existingClaims); playerClan.save(); clans.saveAllClans(); - System.out.println("Chunk claimed successfully"); } } return true; @@ -90,10 +86,8 @@ public class ClaimCommand extends SimpleCommand { clans.setClanChunks(playerClan, existingClaims); playerClan.save(); clans.saveAllClans(); - System.out.println("Chunk unclaimed successfully"); } else { player.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("error.chunk_not_owned"))); - System.out.println("Unclaim denied: chunk not owned"); } return true; } diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/RestartCommand.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/RestartCommand.java index 3786f97..4fdeeb2 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/RestartCommand.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/RestartCommand.java @@ -3,6 +3,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.module.manager.L4M4; +import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.Bukkit; import org.bukkit.command.Command; @@ -31,9 +32,9 @@ public class RestartCommand extends SimpleCommand { } String reason = String.join(" ", args); - String kickMessage = MiniMessage.miniMessage().deserialize(reason).toString(); + Component kickMessage = MiniMessage.miniMessage().deserialize(reason); - Bukkit.getOnlinePlayers().forEach(player -> player.kickPlayer(kickMessage)); + Bukkit.getOnlinePlayers().forEach(player -> player.kick(kickMessage)); Bukkit.getScheduler().runTaskLater(BlazeSMP.getInstance(), Bukkit::shutdown, 60L); // 3 seconds later (60 ticks) From 916881e62822f333911ed490d99d63eba7ee3f94 Mon Sep 17 00:00:00 2001 From: DaTTV <104141141+DrFreezyYT@users.noreply.github.com> Date: Sun, 23 Feb 2025 16:10:58 +0100 Subject: [PATCH 29/32] fixed homes --- .../blazesmp/command/RestartCommand.java | 1 - .../papermc/blazesmp/command/VanishCommand.java | 4 +--- .../papermc/blazesmp/module/manager/Homes.java | 17 +++++++++++------ src/main/resources/storage/homes.json | 3 ++- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/RestartCommand.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/RestartCommand.java index 4fdeeb2..b0c52e1 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/RestartCommand.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/RestartCommand.java @@ -8,7 +8,6 @@ import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/VanishCommand.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/VanishCommand.java index 0774c5d..d36ef93 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/command/VanishCommand.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/command/VanishCommand.java @@ -17,9 +17,7 @@ import java.util.Map; import java.util.UUID; public class VanishCommand extends SimpleCommand { - private final Map vanishedPlayers = new HashMap(); - - + private final Map vanishedPlayers = new HashMap<>(); public VanishCommand() { diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/module/manager/Homes.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/module/manager/Homes.java index 90bfee9..39df583 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/module/manager/Homes.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/module/manager/Homes.java @@ -43,7 +43,8 @@ public class Homes { } try (FileReader reader = new FileReader(file)) { // Use a TypeToken to handle the Map structure - Type type = new TypeToken>() {}.getType(); + Type type = new TypeToken>() { + }.getType(); Map jsonMap = GSON.fromJson(reader, type); if (jsonMap == null) { return; @@ -58,17 +59,19 @@ public class Homes { } LocationJson locJson = entry.getValue(); // Assume the default world "world" for homes - World world = Bukkit.getWorld("world"); - if (world == null) { - LOGGER.warning("Default world 'world' not found. Skipping home for " + uuid); - continue; - } + try { double x = Double.parseDouble(locJson.x); double y = Double.parseDouble(locJson.y); double z = Double.parseDouble(locJson.z); float yaw = Float.parseFloat(locJson.yaw); float pitch = Float.parseFloat(locJson.pitch); + String worldName = locJson.world; + World world = Bukkit.getWorld(worldName); + if (world == null) { + LOGGER.warning("World '%s' not found. Skipping home for %s".formatted(worldName, uuid)); + continue; + } Location location = new Location(world, x, y, z, yaw, pitch); homes.put(uuid, location); } catch (NumberFormatException ex) { @@ -94,6 +97,7 @@ public class Homes { locJson.z = String.valueOf(location.getZ()); locJson.yaw = String.valueOf(location.getYaw()); locJson.pitch = String.valueOf(location.getPitch()); + locJson.world = location.getWorld().getName(); jsonMap.put(entry.getKey().toString(), locJson); } File file = new File(FILE_PATH); @@ -138,5 +142,6 @@ public class Homes { String z; String yaw; String pitch; + String world; } } diff --git a/src/main/resources/storage/homes.json b/src/main/resources/storage/homes.json index 67d7d5a..8dba881 100644 --- a/src/main/resources/storage/homes.json +++ b/src/main/resources/storage/homes.json @@ -4,6 +4,7 @@ "y": "", "z": "", "yaw": "", - "pitch": "" + "pitch": "", + "world": "" } } \ No newline at end of file From dd9b6b6e6817f3649a1cc95395a3301643d39813 Mon Sep 17 00:00:00 2001 From: DaTTV <104141141+DrFreezyYT@users.noreply.github.com> Date: Sun, 23 Feb 2025 17:32:06 +0100 Subject: [PATCH 30/32] disable end --- .../plugins/papermc/blazesmp/BlazeSMP.java | 153 +++++++++--------- .../listener/EndBedPlaceListener.java | 41 +++++ src/main/resources/storage/messages.json | 22 +-- 3 files changed, 123 insertions(+), 93 deletions(-) create mode 100644 src/main/java/me/freezy/plugins/papermc/blazesmp/listener/EndBedPlaceListener.java diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java index 1925409..84acc8a 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java @@ -2,7 +2,6 @@ package me.freezy.plugins.papermc.blazesmp; import lombok.Getter; import me.freezy.plugins.papermc.blazesmp.command.*; -import me.freezy.plugins.papermc.blazesmp.command.util.SimpleCommand; import me.freezy.plugins.papermc.blazesmp.listener.*; import me.freezy.plugins.papermc.blazesmp.module.manager.Clans; import me.freezy.plugins.papermc.blazesmp.module.manager.Homes; @@ -10,7 +9,6 @@ import me.freezy.plugins.papermc.blazesmp.module.manager.L4M4; import me.freezy.plugins.papermc.blazesmp.module.manager.ProtectedBlocks; import me.freezy.plugins.papermc.blazesmp.tasks.PlayerNameUpdate; import me.freezy.plugins.papermc.blazesmp.tasks.TabListTimer; -import org.bukkit.NamespacedKey; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; @@ -19,93 +17,102 @@ import org.bukkit.scoreboard.Team; import org.slf4j.Logger; public final class BlazeSMP extends JavaPlugin { - @Getter private static BlazeSMP instance; - @Getter private Homes homes; - @Getter private ProtectedBlocks protectedBlocks; - @Getter private Clans clans; - @Getter private FileConfiguration configuration; - @Getter private Logger log; - @Getter private BukkitTask nameUpdateTask; - @Getter private BukkitTask tabListUpdateTask; + @Getter + private static BlazeSMP instance; + @Getter + private Homes homes; + @Getter + private ProtectedBlocks protectedBlocks; + @Getter + private Clans clans; + @Getter + private FileConfiguration configuration; + @Getter + private Logger log; + @Getter + private BukkitTask nameUpdateTask; + @Getter + private BukkitTask tabListUpdateTask; private boolean isEndOpen; @Override -public void onLoad() { - this.log = getSLF4JLogger(); + public void onLoad() { + this.log = getSLF4JLogger(); - this.log.info("Loading BlazeSMP..."); + this.log.info("Loading BlazeSMP..."); - this.log.info("Loading ProtectedBlocks..."); - this.protectedBlocks = new ProtectedBlocks(); - this.protectedBlocks.load(); - this.log.info("Loaded ProtectedBlocks!"); + this.log.info("Loading ProtectedBlocks..."); + this.protectedBlocks = new ProtectedBlocks(); + this.protectedBlocks.load(); + this.log.info("Loaded ProtectedBlocks!"); - this.log.info("Loading config..."); - saveDefaultConfig(); - this.configuration = getConfig(); - saveConfig(); - this.log.info("Loaded config!"); + this.log.info("Loading config..."); + saveDefaultConfig(); + this.configuration = getConfig(); + saveConfig(); + this.log.info("Loaded config!"); - this.log.info("Loading L4M4..."); - L4M4.init(); - this.log.info("Loaded L4M4!"); + this.log.info("Loading L4M4..."); + L4M4.init(); + this.log.info("Loaded L4M4!"); - this.log.info("Loaded BlazeSMP!"); -} + this.log.info("Loaded BlazeSMP!"); + } -@Override -public void onEnable() { - BlazeSMP.instance = this; - isEndOpen = getConfig().getBoolean("isEndOpen", false); + @Override + public void onEnable() { + BlazeSMP.instance = this; + isEndOpen = getConfig().getBoolean("isEndOpen", false); - this.getServer().getScheduler().runTaskLater(this, () -> { - this.log.info("Enabling BlazeSMP..."); + this.getServer().getScheduler().runTaskLater(this, () -> { + this.log.info("Enabling BlazeSMP..."); - this.log.info("Loading Homes..."); - this.homes = new Homes(); - this.homes.load(); - this.log.info("Loaded Homes!"); + this.log.info("Loading Homes..."); + this.homes = new Homes(); + this.homes.load(); + this.log.info("Loaded Homes!"); - this.log.info("Loading Clans..."); - this.clans = new Clans(); - this.clans.loadAllClans(); - this.log.info("Loaded Clans!"); + this.log.info("Loading Clans..."); + this.clans = new Clans(); + this.clans.loadAllClans(); + this.log.info("Loaded Clans!"); - this.log.info("Registering Commands..."); - new ClanCommand().register(); - new ReportCommand().register(); - new ClaimCommand().register(); - new HomeCommand().register(); - new DiscordCommand().register(); - new ReloadCommand().register(); - new VanishCommand().register(); - new EventCommand(this).register(); - new RestartCommand().register(); - this.log.info("Registered Commands!"); + this.log.info("Registering Commands..."); + new ClanCommand().register(); + new ReportCommand().register(); + new ClaimCommand().register(); + new HomeCommand().register(); + new DiscordCommand().register(); + new ReloadCommand().register(); + new VanishCommand().register(); + new EventCommand(this).register(); + new RestartCommand().register(); + this.log.info("Registered Commands!"); - this.log.info("Registering EventListeners..."); - PluginManager pm = getServer().getPluginManager(); - pm.registerEvents(new PlayerJoinListener(), this); - pm.registerEvents(new PlayerChatListener(), this); - pm.registerEvents(new PlayerCommandBlockerListener(), this); - pm.registerEvents(new PlayerClaimListener(), this); - pm.registerEvents(new ChunkInventoryListener(), this); - pm.registerEvents(new PressurePlateListener(), this); - pm.registerEvents(new PlayerVsPlayerListener(clans), this); - pm.registerEvents(new EndPortalListener(this), this); - pm.registerEvents(new PvPListener(), this); - pm.registerEvents(new PlayerQuitListener(), this); - //pm.registerEvents(new ProtectedBlockListener(), this); - this.log.info("Registered EventListeners!"); + this.log.info("Registering EventListeners..."); + PluginManager pm = getServer().getPluginManager(); + pm.registerEvents(new PlayerJoinListener(), this); + pm.registerEvents(new PlayerChatListener(), this); + pm.registerEvents(new PlayerCommandBlockerListener(), this); + pm.registerEvents(new PlayerClaimListener(), this); + pm.registerEvents(new ChunkInventoryListener(), this); + pm.registerEvents(new PressurePlateListener(), this); + pm.registerEvents(new PlayerVsPlayerListener(clans), this); + pm.registerEvents(new EndPortalListener(this), this); + pm.registerEvents(new PvPListener(), this); + pm.registerEvents(new PlayerQuitListener(), this); + //pm.registerEvents(new ProtectedBlockListener(), this); + pm.registerEvents(new EndBedPlaceListener(), this); + this.log.info("Registered EventListeners!"); - this.log.info("Starting Timer tasks..."); - this.nameUpdateTask = new PlayerNameUpdate().runTaskTimer(this, 0L, 20L); - this.tabListUpdateTask = new TabListTimer().runTaskTimer(this, 0L, 20L); - this.log.info("Started Timer tasks!"); + this.log.info("Starting Timer tasks..."); + this.nameUpdateTask = new PlayerNameUpdate().runTaskTimer(this, 0L, 20L); + this.tabListUpdateTask = new TabListTimer().runTaskTimer(this, 0L, 20L); + this.log.info("Started Timer tasks!"); - this.log.info("Enabled BlazeSMP!"); - }, 20L); -} + this.log.info("Enabled BlazeSMP!"); + }, 20L); + } @Override public void onDisable() { diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/EndBedPlaceListener.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/EndBedPlaceListener.java new file mode 100644 index 0000000..403527c --- /dev/null +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/EndBedPlaceListener.java @@ -0,0 +1,41 @@ +package me.freezy.plugins.papermc.blazesmp.listener; + +import me.freezy.plugins.papermc.blazesmp.module.manager.L4M4; +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockPlaceEvent; + +import java.util.Set; + +public class EndBedPlaceListener implements Listener { + private final Set beds = Set.of( + Material.BLACK_BED, + Material.BLUE_BED, + Material.BROWN_BED, + Material.CYAN_BED, + Material.GRAY_BED, + Material.GREEN_BED, + Material.LIGHT_BLUE_BED, + Material.LIGHT_GRAY_BED, + Material.LIME_BED, + Material.MAGENTA_BED, + Material.ORANGE_BED, + Material.PINK_BED, + Material.PURPLE_BED, + Material.RED_BED, + Material.WHITE_BED, + Material.YELLOW_BED + ); + + @EventHandler + public void onBedPlace(BlockPlaceEvent event) { + Block block = event.getBlock(); + if (beds.contains(block.getType()) && event.getPlayer().getWorld().getName().equalsIgnoreCase("world_the_end")) { + event.setCancelled(true); + event.getPlayer().sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("error.bed_place_in_end"))); + } + } +} diff --git a/src/main/resources/storage/messages.json b/src/main/resources/storage/messages.json index cd8ca7e..8d99c4a 100644 --- a/src/main/resources/storage/messages.json +++ b/src/main/resources/storage/messages.json @@ -32,7 +32,6 @@ "error.not_found": "Not Found", "error.no_reason": "Please provide a reason for the restart.", "error.no_permission": "You can't do this.", - "usage.clan_create": "Usage: /clan create ", "usage.clan_chat": "Usage: /clan chat ", "usage.clan_join": "Usage: /clan join ", @@ -46,7 +45,6 @@ "usage.clan_promote": "Usage: /clan promote ", "usage.clan_demote": "Usage: /clan demote ", "usage.clan_modify": "Usage: /clan modify ", - "success.clan_created": "Clan created successfully!", "success.join_request_sent": "Join request sent to clan %s!", "success.invite_sent": "Invite sent to %s.", @@ -63,20 +61,14 @@ "success.clan_disbanded_leave": "You have disbanded your clan (no other members) and left.", "success.left_clan": "You have left the clan %s.", "success.chunk_claimed": "Successfully claimed the chunk!", - "notification.invite": "Invite from clan %s.", - - "button.accept": "[Accept]", "button.deny": "[Deny]", - "help.leader": "=== Clan Commands ===\n- /clan info\n- /clan invite\n- /clan kick\n- /clan transfer\n- /clan promote\n- /clan demote\n- /clan disband\n- /clan leave\n- /clan accept\n- /clan deny\n- /clan modify\n- /clan list\n=====================", "help.vice": "=== Clan Commands ===\n- /clan info\n- /clan invite\n- /clan kick\n- /clan demote\n- /clan leave\n- /clan accept\n- /clan deny\n- /clan list\n=====================", "help.member": "=== Clan Commands ===\n- /clan info\n- /clan leave\n- /clan list\n=====================", "help.none": "=== Clan Commands ===\n- /clan create\n- /clan join\n- /clan accept\n- /clan deny\n- /clan list\n=====================", - "chat.format": "[Clan] %s: %s", - "info.header": "=== Clan info ===\n", "info.uuid": " - ID: %s\n", "info.name": " - Name: %s\n", @@ -91,7 +83,6 @@ "home.sethome.success": "Home set!", "home.delhome.success": "Home removed!", "home.teleport.start": "Teleporting to home!", - "report.error.not_a_player": "Du darfst das nicht", "report.usage": "Benutze bitte: /report ", "report.error.invalid_player": "Der Spieler existiert nicht oder war noch nie online!", @@ -102,28 +93,21 @@ "report.discord.field.reporter": "Reporter", "report.discord.field.reported": "Gemeldeter Spieler", "report.discord.field.reason": "Grund", - "chunk.error.no_clan": "You are not in a clan!", "chunk.title": "Clan Chunks", "chunk.navigation.previous": "Previous Page", "chunk.navigation.next": "Next Page", "chunk.clicked": "You clicked on Chunk item: %s.", "chunk.unclaim_lore": "Click to unclaim!", - "claim.entered": "You entered the claim of %s!", "claim.territory": "Territory of %s - %s!", - "command.blocked": "Unknown or incomplete command, see below for error\n%s <--[HERE]", - "player.join": "[+] ", "player.left": "[-] ", - "pressureplate.teleport": "You need to wait 5 seconds to be teleported.", - "teleport.cancelled": "Teleporting cancelled, you moved!", "teleport.success": "Teleported!", "teleport.countdown": "Teleporting to home in %s seconds!", - "tablist.header": [ "BlazeSMP" ], @@ -134,7 +118,6 @@ "made by BlazeGHC Team", "made by BlazeGHC Team" ], - "storage.locked": "This storage is locked! You need a %s to open it.", "storage.lock_gui_title": "Lock & Link Storage - %s", "storage.lock_gui_title_prefix": "Lock & Link Storage", @@ -149,11 +132,10 @@ "storage.removed_lock": "You removed the lock from this storage.", "storage.break_denied": "You cannot break this locked storage!", "storage.trial_key": "Linked Trial Key", - "config.reloaded": "Config reloaded!", "error.clan_full": "The clan is full.", "join.notify": "WICHTIG!!! Die Clans wurden aufgelöst, das aktuelle Clanlimit liegt bei 10 Membern. Jeder hat damit die Chance einen neuen Clan selbst zu gründen, da die großen Clans keine unendliche Kapazität mehr haben.", "success.chunk_unclaimed": "Chunk successfully unclaimed!", - "error.chunk_not_owned": "You do not own this chunk!" - + "error.chunk_not_owned": "You do not own this chunk!", + "error.bed_place_in_end": "You cannot place beds in the end!" } From ed640765b273ff3a8a30d081d77fb3c055f6b8c4 Mon Sep 17 00:00:00 2001 From: DaTTV <104141141+DrFreezyYT@users.noreply.github.com> Date: Sun, 23 Feb 2025 17:33:16 +0100 Subject: [PATCH 31/32] fixed maybe --- .../papermc/blazesmp/listener/PvPListener.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PvPListener.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PvPListener.java index eec964e..98082f8 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PvPListener.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PvPListener.java @@ -6,6 +6,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageByEntityEvent; import java.time.LocalDateTime; +import java.time.LocalTime; import java.time.Month; import java.time.format.DateTimeFormatter; import java.util.Locale; @@ -18,11 +19,17 @@ public class PvPListener implements Listener { LocalDateTime now = LocalDateTime.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.GERMAN); String formattedNow = now.format(formatter); + // Optional: Logge oder benutze formattedNow, falls benötigt - if (now.getYear() == 2025 && now.getMonth() == Month.FEBRUARY && now.getDayOfMonth() == 23 && - now.getHour() >= 17 && (now.getHour() < 20 || (now.getHour() == 20 && now.getMinute() == 0))) { - event.setCancelled(true); + if (now.getYear() == 2025 && now.getMonth() == Month.FEBRUARY && now.getDayOfMonth() == 23) { + LocalTime currentTime = now.toLocalTime(); + LocalTime startTime = LocalTime.of(17, 30); + LocalTime endTime = LocalTime.of(20, 0); + // Prüft, ob die aktuelle Uhrzeit zwischen 17:30 und 20:00 liegt (inklusive beider Grenzen) + if (!currentTime.isBefore(startTime) && !currentTime.isAfter(endTime)) { + event.setCancelled(true); + } } } } -} \ No newline at end of file +} From 659fa2961e8e331e29b2245c8d97610f0aa9a653 Mon Sep 17 00:00:00 2001 From: EmrageGHC Date: Sun, 23 Feb 2025 17:44:17 +0100 Subject: [PATCH 32/32] add PvPListener --- .../java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java | 7 +++++++ .../plugins/papermc/blazesmp/listener/PvPListener.java | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java index 84acc8a..d68eb5d 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/BlazeSMP.java @@ -16,7 +16,12 @@ import org.bukkit.scheduler.BukkitTask; import org.bukkit.scoreboard.Team; import org.slf4j.Logger; +import java.time.LocalDateTime; +import java.time.LocalTime; + public final class BlazeSMP extends JavaPlugin { + LocalDateTime now = LocalDateTime.now(); + LocalTime currentTime = now.toLocalTime(); @Getter private static BlazeSMP instance; @Getter @@ -57,6 +62,8 @@ public final class BlazeSMP extends JavaPlugin { this.log.info("Loaded L4M4!"); this.log.info("Loaded BlazeSMP!"); + + this.log.error(currentTime.toString()); } @Override diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PvPListener.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PvPListener.java index 98082f8..ea1fe12 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PvPListener.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PvPListener.java @@ -23,8 +23,8 @@ public class PvPListener implements Listener { if (now.getYear() == 2025 && now.getMonth() == Month.FEBRUARY && now.getDayOfMonth() == 23) { LocalTime currentTime = now.toLocalTime(); - LocalTime startTime = LocalTime.of(17, 30); - LocalTime endTime = LocalTime.of(20, 0); + LocalTime startTime = LocalTime.of(16, 30); + LocalTime endTime = LocalTime.of(19, 0); // Prüft, ob die aktuelle Uhrzeit zwischen 17:30 und 20:00 liegt (inklusive beider Grenzen) if (!currentTime.isBefore(startTime) && !currentTime.isAfter(endTime)) { event.setCancelled(true);