From 7000b71c908494f89da0b4dadf68195b05bafc6a Mon Sep 17 00:00:00 2001 From: PrinzPizza42 <125275369+PrinzPizza42@users.noreply.github.com> Date: Mon, 6 Jan 2025 19:56:34 +0100 Subject: [PATCH] fix, remove TestCMD fix fix fix fix fix remove TestCMD fix fix --- .../de/j/deathMinigames/dmUtil/TestCMD.java | 41 ----------- .../listeners/AnvilListener.java | 45 ++++++------ .../java/de/j/deathMinigames/main/Config.java | 29 ++++---- .../de/j/deathMinigames/settings/AnvilUI.java | 69 +++++++++++++------ .../j/deathMinigames/settings/MainMenu.java | 2 + .../j/stationofdoom/listener/PlayerJoin.java | 5 +- .../java/de/j/stationofdoom/main/Main.java | 3 - .../java/de/j/stationofdoom/util/Tablist.java | 20 +++--- src/main/resources/translations.json | 6 +- 9 files changed, 108 insertions(+), 112 deletions(-) delete mode 100644 src/main/java/de/j/deathMinigames/dmUtil/TestCMD.java diff --git a/src/main/java/de/j/deathMinigames/dmUtil/TestCMD.java b/src/main/java/de/j/deathMinigames/dmUtil/TestCMD.java deleted file mode 100644 index 9956d78..0000000 --- a/src/main/java/de/j/deathMinigames/dmUtil/TestCMD.java +++ /dev/null @@ -1,41 +0,0 @@ -package de.j.deathMinigames.dmUtil; - -import de.j.stationofdoom.util.Tablist; -import io.papermc.paper.command.brigadier.BasicCommand; -import io.papermc.paper.command.brigadier.CommandSourceStack; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class TestCMD implements BasicCommand { - - /** - * Determines if the given command sender can use this command. - * - *

This command can only be used by {@link Player}s. - * - * @param sender the command sender to check - * @return true if the command sender can use this command, false otherwise - */ - @Override - public boolean canUse(@NotNull CommandSender sender) { - return sender instanceof Player; - } - - /** - * Executes the command for the given command source stack. - * - *

- * This method retrieves the player from the command source stack and sends a test message followed by the - * database connection information. Each key-value pair in the connection info is sent as a message to the player. - * - * @param stack the command source stack - * @param args the arguments provided with the command - */ - @Override - public void execute(@NotNull CommandSourceStack stack, @NotNull String[] args) { - Player player = (Player) stack.getSender(); - player.sendMessage("test"); - Tablist.setHostetBy(args[0]); - } -} diff --git a/src/main/java/de/j/deathMinigames/listeners/AnvilListener.java b/src/main/java/de/j/deathMinigames/listeners/AnvilListener.java index 9658f4e..7218257 100644 --- a/src/main/java/de/j/deathMinigames/listeners/AnvilListener.java +++ b/src/main/java/de/j/deathMinigames/listeners/AnvilListener.java @@ -7,7 +7,6 @@ import de.j.stationofdoom.util.translations.TranslationFactory; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; -import net.kyori.adventure.text.format.TextColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; @@ -30,19 +29,18 @@ public class AnvilListener implements Listener { @EventHandler public void onAnvilPrepare(PrepareAnvilEvent event) { - Player player = (Player) event.getViewers().getFirst(); - if(player == null) { - Main.getMainLogger().info("Anvil prepare event has no player"); + if(!(event.getViewers().getFirst() instanceof Player player)) { + Main.getMainLogger().warning("Anvil prepare event has invalid viewer type"); return; } Location loc = event.getInventory().getLocation(); if(loc == null) { - Main.getMainLogger().info("Anvil prepare event has no location"); + Main.getMainLogger().warning("Anvil prepare event has no location"); return; } AnvilView anvilView = event.getView(); if(anvilView == null) { - Main.getMainLogger().info("Anvil prepare event has no anvilView"); + Main.getMainLogger().warning("Anvil prepare event has no anvilView"); return; } String renameText = anvilView.getRenameText(); @@ -65,25 +63,23 @@ public void onAnvilClick(InventoryClickEvent event) { if (loc == null) return; Player player = (Player) event.getWhoClicked(); if(player == null) return; + if(event.getSlot() != 2) return; if (MainMenu.getSetHost().compareLocIDTo(loc)) { event.setCancelled(true); - if(event.getSlot() == 2) { - if (hostName == null) return; - Tablist.setHostetBy(hostName); - event.getView().close(); - DmUtil.getInstance().playSoundAtLocation(player.getLocation(), 0.5f, Sound.BLOCK_ANVIL_USE); - player.sendMessage(Component.text("Host name: " + hostName).color(NamedTextColor.GOLD)); - } + if (hostName == null) return; + Tablist.setHostedBy(hostName); + event.getView().close(); + DmUtil.getInstance().playSoundAtLocation(player.getLocation(), 0.5f, Sound.BLOCK_ANVIL_USE); + player.sendMessage(Component.text("Host name: " + hostName).color(NamedTextColor.GOLD)); } else if (MainMenu.getSetServerName().compareLocIDTo(loc)) { event.setCancelled(true); - if(event.getSlot() == 2) { - if (serverName == null) return; - Tablist.setServerName(serverName); - event.getView().close(); - DmUtil.getInstance().playSoundAtLocation(player.getLocation(), 0.5f, Sound.BLOCK_ANVIL_USE); - player.sendMessage(Component.text("Server name: " + serverName).color(NamedTextColor.GOLD)); - } + if (serverName == null) return; + Tablist.setServerName(serverName); + event.getView().close(); + DmUtil.getInstance().playSoundAtLocation(player.getLocation(), 0.5f, Sound.BLOCK_ANVIL_USE); + player.sendMessage(Component.text("Server name: " + serverName).color(NamedTextColor.GOLD)); } + } } @@ -103,11 +99,20 @@ else if(MainMenu.getSetServerName().compareLocIDTo(loc)) { } private void finishAnvilInvAfterOpening(PrepareAnvilEvent event, Player player) { + if(event == null || player == null) { + Main.getMainLogger().warning("parameters are null: " + event + " " + player + "!"); + return; + } ItemStack output = new ItemStack(Material.GREEN_CONCRETE); ItemMeta outputItemMeta = output.getItemMeta(); + if(outputItemMeta == null) { + Main.getMainLogger().warning("outputItemMeta is null!"); + return; + } outputItemMeta.displayName(Component.text(tf.getTranslation(player, "anvilOutput"))); output.setItemMeta(outputItemMeta); event.setResult(output); + event.getView().setRepairCost(0); } } diff --git a/src/main/java/de/j/deathMinigames/main/Config.java b/src/main/java/de/j/deathMinigames/main/Config.java index c3a067a..e9467ae 100644 --- a/src/main/java/de/j/deathMinigames/main/Config.java +++ b/src/main/java/de/j/deathMinigames/main/Config.java @@ -1,14 +1,11 @@ package de.j.deathMinigames.main; -import de.j.deathMinigames.database.PlayerDataDatabase; -import de.j.stationofdoom.listener.PlayerJoin; import de.j.stationofdoom.util.Tablist; import org.bukkit.Location; import de.j.stationofdoom.main.Main; import org.bukkit.World; import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; import java.util.*; @@ -119,11 +116,11 @@ public void cloneConfigToPlugin() { } //Tablist if(config.contains("Tablist")) { - if(config.contains("Tablist.ServerName")) { + if(config.contains("Tablist.ServerName") && config.get("Tablist.ServerName") != null) { Tablist.setServerName(config.getString("Tablist.ServerName")); } - if(config.contains("Tablist.HostetBy")) { - Tablist.setHostetBy(config.getString("Tablist.HostetBy")); + if(config.contains("Tablist.HostedBy") && config.get("Tablist.HostedBy") != null) { + Tablist.setHostedBy(config.getString("Tablist.HostedBy")); } } } @@ -324,7 +321,11 @@ public HashMap getDatabaseConfig() { return databaseConnectionInfo; } - public void setServerName(String serverName) { + public synchronized void setServerName(String serverName) { + if(serverName == null) { + Main.getMainLogger().warning("ServerName is null!"); + return; + } if(!Main.getPlugin().getConfig().contains("Tablist.ServerName")) { Main.getPlugin().getConfig().set("Tablist.ServerName", serverName); Main.getPlugin().saveConfig(); @@ -345,19 +346,19 @@ public String getServerName() { } } - public void setHostetBy(String serverName) { - if(!Main.getPlugin().getConfig().contains("Tablist.HostetBy") || !Main.getPlugin().getConfig().getString("Tablist.HostetBy").equals(serverName)) { - Main.getPlugin().getConfig().set("Tablist.HostetBy", serverName); + public synchronized void setHostedBy(String serverName) { + if(!Main.getPlugin().getConfig().contains("Tablist.HostedBy") || !Main.getPlugin().getConfig().getString("Tablist.HostedBy").equals(serverName)) { + Main.getPlugin().getConfig().set("Tablist.HostedBy", serverName); Main.getPlugin().saveConfig(); } } - public String getHostetBy() { - if(Main.getPlugin().getConfig().contains("Tablist.HostetBy")) { - return Main.getPlugin().getConfig().getString("Tablist.HostetBy"); + public String getHostedBy() { + if(Main.getPlugin().getConfig().contains("Tablist.HostedBy")) { + return Main.getPlugin().getConfig().getString("Tablist.HostedBy"); } else { - Main.getMainLogger().warning("HostetBy not found in config!"); + Main.getMainLogger().warning("HostedBy not found in config!"); return null; } } diff --git a/src/main/java/de/j/deathMinigames/settings/AnvilUI.java b/src/main/java/de/j/deathMinigames/settings/AnvilUI.java index a2953c4..a3e5ef2 100644 --- a/src/main/java/de/j/deathMinigames/settings/AnvilUI.java +++ b/src/main/java/de/j/deathMinigames/settings/AnvilUI.java @@ -1,12 +1,12 @@ package de.j.deathMinigames.settings; -import de.j.deathMinigames.main.Config; -import de.j.stationofdoom.main.Main; +import de.j.stationofdoom.util.Tablist; import de.j.stationofdoom.util.translations.TranslationFactory; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryHolder; @@ -17,30 +17,23 @@ import java.util.concurrent.ThreadLocalRandom; public class AnvilUI implements InventoryHolder { - private final Location loc = new Location(Bukkit.getWorld("world"), ThreadLocalRandom.current().nextInt(0, 1000), ThreadLocalRandom.current().nextInt(0, 1000), ThreadLocalRandom.current().nextInt(0, 1000)); - private final ItemStack firstSlot = new ItemStack(Material.RED_CONCRETE); + private Location loc = null; + private ItemStack input = new ItemStack(Material.RED_CONCRETE); + Player player = null; + private MainMenu.AnvilUIs title; public AnvilUI(MainMenu.AnvilUIs title) { - ItemMeta paperMeta = firstSlot.getItemMeta(); - switch (title) { - case SET_HOST_NAME: - if(Config.getInstance().getHostetBy() != null) paperMeta.displayName(Component.text(Config.getInstance().getHostetBy())); - else paperMeta.displayName(Component.text("kein Name gesetzt / no name set")); - break; - case SET_SERVER_NAME: - if(Config.getInstance().getServerName() != null) paperMeta.displayName(Component.text(Config.getInstance().getServerName())); - else paperMeta.displayName(Component.text("kein Name gesetzt / no name set")); - break; - default: - paperMeta.displayName(Component.text("")); - } - firstSlot.setItemMeta(paperMeta); + if(title == null) throw new IllegalArgumentException("Title cannot be null"); + this.title = title; + createUniqueLocation(); } public void showInventory(Player playerToShowTheInvTo) { if(playerToShowTheInvTo == null) return; + this.player = playerToShowTheInvTo; playerToShowTheInvTo.openAnvil(loc, true); - playerToShowTheInvTo.getOpenInventory().getTopInventory().addItem(firstSlot); + setInputMeta(playerToShowTheInvTo); + playerToShowTheInvTo.getOpenInventory().getTopInventory().setItem(0, input); } @Override @@ -48,8 +41,42 @@ public void showInventory(Player playerToShowTheInvTo) { return null; } + /** + * Random location used as a unique identifier for the anvil UI. + * This prevents conflicts between multiple anvil UIs. + */ + private void createUniqueLocation() { + World world = Bukkit.getWorld("world"); + if(world == null) throw new IllegalStateException("world `world´ could not be found"); + loc = new Location(world, + ThreadLocalRandom.current().nextInt(0, 1000), + ThreadLocalRandom.current().nextInt(0, 1000), + ThreadLocalRandom.current().nextInt(0, 1000)); + } + public boolean compareLocIDTo(Location loc) { - if(loc.getBlockX() == this.loc.getBlockX() && loc.getBlockZ() == this.loc.getBlockZ()) return true; - else return false; + return loc.getBlockX() == this.loc.getBlockX() && loc.getBlockZ() == this.loc.getBlockZ(); + } + + private void setInputMeta(Player player) { + ItemMeta inputMeta = input.getItemMeta(); + String inputItemName = null; + if(player == null) { + inputMeta.displayName(Component.text("default")); + } + else { + switch (title) { + case SET_HOST_NAME -> inputItemName = Tablist.getHostedBy(); + case SET_SERVER_NAME -> inputItemName = Tablist.getServerName(); + default -> throw new IllegalArgumentException("Title: " + title + " is not supported"); + } + if(inputItemName == null) { + inputMeta.displayName(Component.text(new TranslationFactory().getTranslation(player, "noNameSet"))); + } + else { + inputMeta.displayName(Component.text(inputItemName)); + } + } + input.setItemMeta(inputMeta); } } diff --git a/src/main/java/de/j/deathMinigames/settings/MainMenu.java b/src/main/java/de/j/deathMinigames/settings/MainMenu.java index 9963229..74bf6e7 100755 --- a/src/main/java/de/j/deathMinigames/settings/MainMenu.java +++ b/src/main/java/de/j/deathMinigames/settings/MainMenu.java @@ -1,5 +1,6 @@ package de.j.deathMinigames.settings; +import de.j.stationofdoom.main.Main; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -33,6 +34,7 @@ public enum InventoryMenus { public enum AnvilUIs { SET_SERVER_NAME, SET_HOST_NAME, + DEFAULT // usage when the input slot item should have no name } public MainMenu() { diff --git a/src/main/java/de/j/stationofdoom/listener/PlayerJoin.java b/src/main/java/de/j/stationofdoom/listener/PlayerJoin.java index 7a2c13a..09b18c8 100644 --- a/src/main/java/de/j/stationofdoom/listener/PlayerJoin.java +++ b/src/main/java/de/j/stationofdoom/listener/PlayerJoin.java @@ -17,7 +17,6 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; -import org.checkerframework.common.aliasing.qual.Unique; import java.io.IOException; import java.util.UUID; @@ -71,7 +70,7 @@ public void onPlayerJoin(PlayerJoinEvent event) { AtomicInteger phase = new AtomicInteger(); asyncScheduler.runAtFixedRate(Main.getPlugin(), scheduledTask -> { int ping = player.getPing(); - if(Tablist.getHostetBy() == null) { + if(Tablist.getHostedBy() == null) { tablist.tabTPS(player, mm.deserialize(" <1> ", Placeholder.component("1", Component.text(Tablist.getServerName()))), mm.deserialize(" Plugin by LuckyProgrammer") .append(Component.text(String.format("\nTPS: %s; %s; %s", (int) Main.getPlugin().getServer().getTPS()[0], (int) Main.getPlugin().getServer().getTPS()[1], (int) Main.getPlugin().getServer().getTPS()[2]), NamedTextColor.LIGHT_PURPLE)) @@ -83,7 +82,7 @@ public void onPlayerJoin(PlayerJoinEvent event) { } else { tablist.tabTPS(player, mm.deserialize(" <1> ", Placeholder.component("1", Component.text(Tablist.getServerName()))), - mm.deserialize(" Hosted by <2> Plugin by LuckyProgrammer", Placeholder.component("2", Component.text(Tablist.getHostetBy()))) + mm.deserialize(" Hosted by <2> Plugin by LuckyProgrammer", Placeholder.component("2", Component.text(Tablist.getHostedBy()))) .append(Component.text(String.format("\nTPS: %s; %s; %s", (int) Main.getPlugin().getServer().getTPS()[0], (int) Main.getPlugin().getServer().getTPS()[1], (int) Main.getPlugin().getServer().getTPS()[2]), NamedTextColor.LIGHT_PURPLE)) .append(Component.text("\n Ping: ") .append(Component.text(String.valueOf(ping)) diff --git a/src/main/java/de/j/stationofdoom/main/Main.java b/src/main/java/de/j/stationofdoom/main/Main.java index fb9e49e..2b79925 100755 --- a/src/main/java/de/j/stationofdoom/main/Main.java +++ b/src/main/java/de/j/stationofdoom/main/Main.java @@ -2,7 +2,6 @@ import de.j.deathMinigames.commands.GameCMD; import de.j.deathMinigames.commands.LeaderboardCMD; -import de.j.deathMinigames.dmUtil.TestCMD; import de.j.deathMinigames.listeners.*; import de.j.deathMinigames.main.Config; import de.j.deathMinigames.database.Database; @@ -24,7 +23,6 @@ import io.papermc.paper.threadedregions.scheduler.AsyncScheduler; import io.papermc.paper.threadedregions.scheduler.GlobalRegionScheduler; import org.bukkit.Bukkit; -import org.bukkit.command.defaults.BukkitCommand; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; @@ -89,7 +87,6 @@ public void onEnable() { COMMANDS.register("voterestart", new VoteRestartCMD()); COMMANDS.register("sit", new PlayerSitListener()); COMMANDS.register("game", "game related commands", new GameCMD()); - COMMANDS.register("test", "testing", new TestCMD()); COMMANDS.register("leaderboard", "showing the leaderboard of the minigame", new LeaderboardCMD()); }); diff --git a/src/main/java/de/j/stationofdoom/util/Tablist.java b/src/main/java/de/j/stationofdoom/util/Tablist.java index 2c46efa..b6ff7e1 100644 --- a/src/main/java/de/j/stationofdoom/util/Tablist.java +++ b/src/main/java/de/j/stationofdoom/util/Tablist.java @@ -17,8 +17,8 @@ import java.util.stream.Stream; public class Tablist { - private static String serverName = Bukkit.getServer().getName(); - private static String hostetBy = null; + private volatile static String serverName = Bukkit.getServer().getName(); + private volatile static String hostedBy = null; private static Scoreboard scoreboard; public static HashMap rank; @@ -174,14 +174,18 @@ else if(!Config.getInstance().getServerName().equals(serverName)) { } } - public static void setHostetBy(String hostetBy) { - Tablist.hostetBy = hostetBy; - if(Config.getInstance().getHostetBy() == null || !Config.getInstance().getHostetBy().equals(hostetBy)) { - Config.getInstance().setHostetBy(hostetBy); + public static void setHostedBy(String hostedBy) { + if(hostedBy == null) { + Main.getMainLogger().warning("Hosted by is null"); + return; + } + Tablist.hostedBy = hostedBy; + if(Config.getInstance().getHostedBy() == null || !Config.getInstance().getHostedBy().equals(hostedBy)) { + Config.getInstance().setHostedBy(hostedBy); } } - public static String getHostetBy() { - return hostetBy; + public static String getHostedBy() { + return hostedBy; } } diff --git a/src/main/resources/translations.json b/src/main/resources/translations.json index b9c698e..0fd897f 100755 --- a/src/main/resources/translations.json +++ b/src/main/resources/translations.json @@ -82,7 +82,8 @@ "cmdUsageLength1": "Dein Command hat nicht geklappt, versuche /game ", "somethingWentWrong": "Etwas ist schief gelaufen", "invalidDifficulty": "Die Schwierigkeit muss zwischen 0 und 10 sein", - "anvilOutput": "klicke hier um zu bestätigen" + "anvilOutput": "Klicke hier um zu bestätigen", + "noNameSet": "Kein Name gesetzt" } ], "en-US": [ @@ -168,7 +169,8 @@ "cmdUsageLength1": "Your command did not work, try /game ", "somethingWentWrong": "Something went wrong", "invalidDifficulty": "The difficulty has to be between 0 and 10", - "anvilOutput": "Click here to accept" + "anvilOutput": "Click here to accept", + "noNameSet": "No name set" } ] } \ No newline at end of file