From 0f3ed619382b2fe97ce6e9e9b1c7789c6553f3fc Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Fri, 23 May 2025 14:50:07 -0700 Subject: [PATCH 1/3] Items - change PDC methods --- .../java/com/shanebeestudios/hg/api/util/ItemUtils.java | 6 ++---- .../hg/plugin/listeners/GameCompassListener.java | 7 ++----- .../shanebeestudios/hg/plugin/managers/ItemManager.java | 7 ++----- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/shanebeestudios/hg/api/util/ItemUtils.java b/src/main/java/com/shanebeestudios/hg/api/util/ItemUtils.java index d97f1cfa..a8c0817d 100644 --- a/src/main/java/com/shanebeestudios/hg/api/util/ItemUtils.java +++ b/src/main/java/com/shanebeestudios/hg/api/util/ItemUtils.java @@ -33,10 +33,8 @@ public static boolean isCursed(ItemStack itemStack) { public static ItemStack getTrackingStick() { ItemStack itemStack = ItemType.STICK.createItemStack(); - ItemMeta itemMeta = itemStack.getItemMeta(); - PersistentDataContainer pdc = itemMeta.getPersistentDataContainer(); - pdc.set(Constants.TRACKING_STICK_KEY, PersistentDataType.BOOLEAN, true); - itemStack.setItemMeta(itemMeta); + itemStack.editPersistentDataContainer(pdc -> + pdc.set(Constants.TRACKING_STICK_KEY, PersistentDataType.BOOLEAN, true)); itemStack.setData(DataComponentTypes.ITEM_NAME, Util.getMini(LANG.item_tracking_stick_name)); itemStack.setData(DataComponentTypes.MAX_STACK_SIZE, 1); diff --git a/src/main/java/com/shanebeestudios/hg/plugin/listeners/GameCompassListener.java b/src/main/java/com/shanebeestudios/hg/plugin/listeners/GameCompassListener.java index 876611c8..9b99e148 100644 --- a/src/main/java/com/shanebeestudios/hg/plugin/listeners/GameCompassListener.java +++ b/src/main/java/com/shanebeestudios/hg/plugin/listeners/GameCompassListener.java @@ -4,6 +4,7 @@ import com.shanebeestudios.hg.api.gui.SpectatorGUI; import com.shanebeestudios.hg.api.util.Constants; import com.shanebeestudios.hg.plugin.HungerGames; +import io.papermc.paper.persistence.PersistentDataContainerView; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -12,8 +13,6 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; public class GameCompassListener extends GameListenerBase { @@ -57,10 +56,8 @@ private boolean isSpectatorCompass(PlayerInteractEvent event) { ItemStack item = event.getItem(); if (item == null || item.getType() != Material.COMPASS) return false; - ItemMeta itemMeta = item.getItemMeta(); - if (itemMeta == null) return false; - PersistentDataContainer pdc = itemMeta.getPersistentDataContainer(); + PersistentDataContainerView pdc = item.getPersistentDataContainer(); return pdc.has(Constants.SPECTATOR_COMPASS_KEY, PersistentDataType.BOOLEAN); } diff --git a/src/main/java/com/shanebeestudios/hg/plugin/managers/ItemManager.java b/src/main/java/com/shanebeestudios/hg/plugin/managers/ItemManager.java index 66cfbe1b..bb2efe3b 100644 --- a/src/main/java/com/shanebeestudios/hg/plugin/managers/ItemManager.java +++ b/src/main/java/com/shanebeestudios/hg/plugin/managers/ItemManager.java @@ -13,7 +13,6 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.inventory.ItemStack; -import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; import org.jetbrains.annotations.Nullable; @@ -116,10 +115,8 @@ public List loadItems(ConfigurationSection config) { public ItemStack getSpectatorCompass() { ItemStack compass = new ItemStack(Material.COMPASS); compass.setData(DataComponentTypes.ITEM_NAME, Util.getMini(this.lang.spectate_compass_name)); - compass.editMeta(itemMeta -> { - PersistentDataContainer pdc = itemMeta.getPersistentDataContainer(); - pdc.set(Constants.SPECTATOR_COMPASS_KEY, PersistentDataType.BOOLEAN, true); - }); + compass.editPersistentDataContainer(pdc -> + pdc.set(Constants.SPECTATOR_COMPASS_KEY, PersistentDataType.BOOLEAN, true)); return compass; } From 1fdcbe10cd8b733f92b2b71b260c3252f0a8dbe5 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 27 Nov 2025 13:43:32 -0800 Subject: [PATCH 2/3] build.gradle.kts - update some APIs --- build.gradle.kts | 8 ++++---- .../java/com/shanebeestudios/hg/plugin/HungerGames.java | 7 +++---- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index cc50b304..f25a7242 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,7 +7,7 @@ val projectVersion = "5.0.0-beta3" // Where this builds on the server val serverLocation = "1-21-5" // Minecraft version to build against -val minecraftVersion = "1.21.5" +val minecraftVersion = "1.21.10" java.sourceCompatibility = JavaVersion.VERSION_21 @@ -41,7 +41,7 @@ dependencies { compileOnly("io.papermc.paper:paper-api:${minecraftVersion}-R0.1-SNAPSHOT") // Command Api - implementation("dev.jorel:commandapi-bukkit-shade-mojang-mapped:10.0.1") + implementation("dev.jorel:commandapi-paper-shade:11.0.1-SNAPSHOT") // bStats implementation("org.bstats:bstats-bukkit:3.1.0") @@ -53,7 +53,7 @@ dependencies { compileOnly("me.clip:placeholderapi:2.11.6") // NBT-API - implementation("de.tr7zw:item-nbt-api:2.15.0") { + implementation("de.tr7zw:item-nbt-api:2.15.3") { isTransitive = false } @@ -63,7 +63,7 @@ dependencies { } // FastBoard - implementation("fr.mrmicky:fastboard:2.1.4") + implementation("fr.mrmicky:fastboard:2.1.5") } tasks { diff --git a/src/main/java/com/shanebeestudios/hg/plugin/HungerGames.java b/src/main/java/com/shanebeestudios/hg/plugin/HungerGames.java index 8988f24e..1926f49f 100755 --- a/src/main/java/com/shanebeestudios/hg/plugin/HungerGames.java +++ b/src/main/java/com/shanebeestudios/hg/plugin/HungerGames.java @@ -28,7 +28,7 @@ import com.shanebeestudios.hg.plugin.managers.PlayerManager; import com.shanebeestudios.hg.plugin.managers.SessionManager; import dev.jorel.commandapi.CommandAPI; -import dev.jorel.commandapi.CommandAPIBukkitConfig; +import dev.jorel.commandapi.CommandAPIPaperConfig; import dev.jorel.commandapi.exceptions.UnsupportedVersionException; import io.lumine.mythic.api.MythicProvider; import org.bstats.bukkit.Metrics; @@ -74,11 +74,10 @@ public class HungerGames extends JavaPlugin { @Override public void onLoad() { try { - CommandAPI.onLoad(new CommandAPIBukkitConfig(this) + CommandAPI.onLoad(new CommandAPIPaperConfig(this) .setNamespace("hungergames") .verboseOutput(false) - .silentLogs(true) - .skipReloadDatapacks(true)); + .silentLogs(true)); } catch (UnsupportedVersionException ignore) { Util.log("CommandAPI does not support this version of Minecraft, will update soon."); } From 20ae334713bf81193aa376d808a4a549e2a27fdf Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 27 Nov 2025 14:06:23 -0800 Subject: [PATCH 3/3] GameCommandListener - add a config option to allow some commands in game - Ref #102 --- .../shanebeestudios/hg/plugin/configs/Config.java | 6 ++++++ .../hg/plugin/listeners/GameCommandListener.java | 15 ++++++++++++--- src/main/resources/config.yml | 7 +++++++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/shanebeestudios/hg/plugin/configs/Config.java b/src/main/java/com/shanebeestudios/hg/plugin/configs/Config.java index 33a4a5e4..b5dcc9cd 100755 --- a/src/main/java/com/shanebeestudios/hg/plugin/configs/Config.java +++ b/src/main/java/com/shanebeestudios/hg/plugin/configs/Config.java @@ -103,6 +103,9 @@ public class Config { public static String SOUNDS_DEATH; public static String SOUNDS_OPEN_CHEST_DROP; + // Commands + public static List COMMANDS_ALLOWED_IN_GAME; + private final HungerGames plugin; private File configFile; private FileConfiguration config; @@ -202,6 +205,9 @@ private void loadConfig() { SOUNDS_DEATH = config.getString("sounds.death"); SOUNDS_OPEN_CHEST_DROP = config.getString("sounds.open-chest-drop"); + // Commands + COMMANDS_ALLOWED_IN_GAME = config.getStringList("commands.allowed-in-game"); + try { Vault.setupEconomy(); if (Vault.ECONOMY == null) { diff --git a/src/main/java/com/shanebeestudios/hg/plugin/listeners/GameCommandListener.java b/src/main/java/com/shanebeestudios/hg/plugin/listeners/GameCommandListener.java index 95e1252c..31712667 100755 --- a/src/main/java/com/shanebeestudios/hg/plugin/listeners/GameCommandListener.java +++ b/src/main/java/com/shanebeestudios/hg/plugin/listeners/GameCommandListener.java @@ -2,6 +2,7 @@ import com.shanebeestudios.hg.api.util.Util; import com.shanebeestudios.hg.plugin.HungerGames; +import com.shanebeestudios.hg.plugin.configs.Config; import com.shanebeestudios.hg.plugin.permission.Permissions; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -9,6 +10,8 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import java.util.Locale; + /** * Internal event listener */ @@ -24,9 +27,15 @@ private void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) { if (Permissions.BYPASS_COMMAND_RESTRICTION.has(player)) return; String[] st = event.getMessage().split(" "); + String command = st[0].toLowerCase(Locale.ROOT); // Prevent game players running non hunger games commands - if (this.playerManager.isInGame(player) && !st[0].equalsIgnoreCase("/login")) { - if (st[0].equalsIgnoreCase("/hg") || st[0].equalsIgnoreCase("/hungergames")) { + if (this.playerManager.isInGame(player)) { + // Allow some commands from the config to be bypassed + if (Config.COMMANDS_ALLOWED_IN_GAME.contains(command.replaceFirst("/", ""))) { + return; + } + // Allow use of HungerGames commands + if (command.equalsIgnoreCase("/hg") || command.equalsIgnoreCase("/hungergames")) { return; } event.setMessage("/"); @@ -34,7 +43,7 @@ private void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) { Util.sendMessage(player, this.lang.listener_command_handler_no_command); } // Prevent teleporting players out of an arena - else if (("/tp".equalsIgnoreCase(st[0]) || "/teleport".equalsIgnoreCase(st[0])) && st.length >= 2) { + else if (("/tp".equalsIgnoreCase(command) || "/teleport".equalsIgnoreCase(command)) && st.length >= 2) { Player p = Bukkit.getServer().getPlayer(st[1]); if (p != null) { if (this.playerManager.hasPlayerData(p)) { diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index b5c0cd2a..8386bb17 100755 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -200,8 +200,15 @@ spectate: # Allow spectators to chat chat: false +## SOUNDS # Different sounds played in the game sounds: # Played when a player dies in the game death: 'ui.toast.challenge_complete' open-chest-drop: 'block.ender_chest.open' + +## COMMANDS +commands: + # Represents commands a player is allowed to use whilst in a HungerGames arena + allowed-in-game: + - 'login'