From 58a74a0cdd516c91da178f9450ac48e8fba71599 Mon Sep 17 00:00:00 2001 From: hyperdefined Date: Mon, 26 Jan 2026 15:23:20 -0500 Subject: [PATCH] properly do black/whitelist feature based on feedback --- .../hyper/toolstats/events/BlockBreak.java | 2 +- .../toolstats/events/BlockDispenseEvent.java | 2 +- .../hyper/toolstats/events/ChunkPopulate.java | 2 +- .../lol/hyper/toolstats/events/CraftItem.java | 2 +- .../hyper/toolstats/events/CreativeEvent.java | 2 +- .../hyper/toolstats/events/EntityDamage.java | 2 +- .../hyper/toolstats/events/EntityDeath.java | 2 +- .../hyper/toolstats/events/GenerateLoot.java | 2 +- .../toolstats/events/InventoryClose.java | 2 +- .../hyper/toolstats/events/InventoryOpen.java | 2 +- .../hyper/toolstats/events/PickupItem.java | 2 +- .../hyper/toolstats/events/PlayerFish.java | 2 +- .../toolstats/events/PlayerInteract.java | 2 +- .../hyper/toolstats/events/PlayerJoin.java | 2 +- .../hyper/toolstats/events/PlayerMove.java | 2 +- .../toolstats/events/ProjectileShoot.java | 2 +- .../hyper/toolstats/events/SheepShear.java | 2 +- .../lol/hyper/toolstats/events/ShootBow.java | 2 +- .../hyper/toolstats/events/VillagerTrade.java | 2 +- .../toolstats/tools/config/ConfigTools.java | 41 +++++++++++++++++++ .../tools/config/versions/Version15.java | 6 ++- src/main/resources/config.yml | 12 ++++-- 22 files changed, 72 insertions(+), 25 deletions(-) diff --git a/src/main/java/lol/hyper/toolstats/events/BlockBreak.java b/src/main/java/lol/hyper/toolstats/events/BlockBreak.java index 36b80cc..d9f6c7e 100644 --- a/src/main/java/lol/hyper/toolstats/events/BlockBreak.java +++ b/src/main/java/lol/hyper/toolstats/events/BlockBreak.java @@ -46,7 +46,7 @@ public class BlockBreak implements Listener { return; } Player player = event.getPlayer(); - if (toolStats.config.getStringList("blacklist-worlds").contains(player.getWorld().getName())) { + if (!toolStats.configTools.checkWorld(player.getWorld().getName())) { return; } if (player.getGameMode() == GameMode.CREATIVE && !toolStats.config.getBoolean("allow-creative")) { diff --git a/src/main/java/lol/hyper/toolstats/events/BlockDispenseEvent.java b/src/main/java/lol/hyper/toolstats/events/BlockDispenseEvent.java index 2c66128..4d40cda 100644 --- a/src/main/java/lol/hyper/toolstats/events/BlockDispenseEvent.java +++ b/src/main/java/lol/hyper/toolstats/events/BlockDispenseEvent.java @@ -52,7 +52,7 @@ public class BlockDispenseEvent implements Listener { return; } - if (toolStats.config.getStringList("blacklist-worlds").contains(player.getWorld().getName())) { + if (!toolStats.configTools.checkWorld(player.getWorld().getName())) { return; } if (player.getGameMode() == GameMode.CREATIVE && !toolStats.config.getBoolean("allow-creative")) { diff --git a/src/main/java/lol/hyper/toolstats/events/ChunkPopulate.java b/src/main/java/lol/hyper/toolstats/events/ChunkPopulate.java index 28018c7..e8af879 100644 --- a/src/main/java/lol/hyper/toolstats/events/ChunkPopulate.java +++ b/src/main/java/lol/hyper/toolstats/events/ChunkPopulate.java @@ -50,7 +50,7 @@ public class ChunkPopulate implements Listener { return; } World world = event.getChunk().getWorld(); - if (toolStats.config.getStringList("blacklist-worlds").contains(world.getName())) { + if (!toolStats.configTools.checkWorld(world.getName())) { return; } // this is delayed because entities are not loaded instantly diff --git a/src/main/java/lol/hyper/toolstats/events/CraftItem.java b/src/main/java/lol/hyper/toolstats/events/CraftItem.java index 65ed3dc..65f9065 100644 --- a/src/main/java/lol/hyper/toolstats/events/CraftItem.java +++ b/src/main/java/lol/hyper/toolstats/events/CraftItem.java @@ -50,7 +50,7 @@ public class CraftItem implements Listener { return; } Player player = (Player) event.getWhoClicked(); - if (toolStats.config.getStringList("blacklist-worlds").contains(player.getWorld().getName())) { + if (!toolStats.configTools.checkWorld(player.getWorld().getName())) { return; } if (player.getGameMode() == GameMode.CREATIVE && !toolStats.config.getBoolean("allow-creative")) { diff --git a/src/main/java/lol/hyper/toolstats/events/CreativeEvent.java b/src/main/java/lol/hyper/toolstats/events/CreativeEvent.java index c4750ef..7fd4830 100644 --- a/src/main/java/lol/hyper/toolstats/events/CreativeEvent.java +++ b/src/main/java/lol/hyper/toolstats/events/CreativeEvent.java @@ -45,7 +45,7 @@ public class CreativeEvent implements Listener { @EventHandler public void onCreativeEvent(InventoryCreativeEvent event) { Player player = (Player) event.getWhoClicked(); - if (toolStats.config.getStringList("blacklist-worlds").contains(player.getWorld().getName())) { + if (!toolStats.configTools.checkWorld(player.getWorld().getName())) { return; } // make sure they are in creative mode diff --git a/src/main/java/lol/hyper/toolstats/events/EntityDamage.java b/src/main/java/lol/hyper/toolstats/events/EntityDamage.java index dacdefe..8645473 100644 --- a/src/main/java/lol/hyper/toolstats/events/EntityDamage.java +++ b/src/main/java/lol/hyper/toolstats/events/EntityDamage.java @@ -56,7 +56,7 @@ public class EntityDamage implements Listener { return; } - if (toolStats.config.getStringList("blacklist-worlds").contains(mobBeingAttacked.getWorld().getName())) { + if (!toolStats.configTools.checkWorld(mobBeingAttacked.getWorld().getName())) { return; } diff --git a/src/main/java/lol/hyper/toolstats/events/EntityDeath.java b/src/main/java/lol/hyper/toolstats/events/EntityDeath.java index 8819d3a..927759e 100644 --- a/src/main/java/lol/hyper/toolstats/events/EntityDeath.java +++ b/src/main/java/lol/hyper/toolstats/events/EntityDeath.java @@ -49,7 +49,7 @@ public class EntityDeath implements Listener { if (livingEntity instanceof Player) { return; } - if (toolStats.config.getStringList("blacklist-worlds").contains(livingEntity.getWorld().getName())) { + if (!toolStats.configTools.checkWorld(livingEntity.getWorld().getName())) { return; } UUID livingEntityUUID = event.getEntity().getUniqueId(); diff --git a/src/main/java/lol/hyper/toolstats/events/GenerateLoot.java b/src/main/java/lol/hyper/toolstats/events/GenerateLoot.java index d0d9b16..139bad5 100644 --- a/src/main/java/lol/hyper/toolstats/events/GenerateLoot.java +++ b/src/main/java/lol/hyper/toolstats/events/GenerateLoot.java @@ -50,7 +50,7 @@ public class GenerateLoot implements Listener { return; } Location lootLocation = event.getLootContext().getLocation(); - if (toolStats.config.getStringList("blacklist-worlds").contains(lootLocation.getWorld().getName())) { + if (!toolStats.configTools.checkWorld(lootLocation.getWorld().getName())) { return; } Chunk lootChunk = lootLocation.getChunk(); diff --git a/src/main/java/lol/hyper/toolstats/events/InventoryClose.java b/src/main/java/lol/hyper/toolstats/events/InventoryClose.java index 06c6224..b34d59e 100644 --- a/src/main/java/lol/hyper/toolstats/events/InventoryClose.java +++ b/src/main/java/lol/hyper/toolstats/events/InventoryClose.java @@ -57,7 +57,7 @@ public class InventoryClose implements Listener { } Player player = (Player) event.getPlayer(); - if (toolStats.config.getStringList("blacklist-worlds").contains(player.getWorld().getName())) { + if (!toolStats.configTools.checkWorld(player.getWorld().getName())) { return; } Inventory closedInventory = event.getInventory(); diff --git a/src/main/java/lol/hyper/toolstats/events/InventoryOpen.java b/src/main/java/lol/hyper/toolstats/events/InventoryOpen.java index 015244d..da95ecf 100644 --- a/src/main/java/lol/hyper/toolstats/events/InventoryOpen.java +++ b/src/main/java/lol/hyper/toolstats/events/InventoryOpen.java @@ -48,7 +48,7 @@ public class InventoryOpen implements Listener { Inventory inventory = event.getInventory(); Player player = (Player) event.getPlayer(); - if (toolStats.config.getStringList("blacklist-worlds").contains(player.getWorld().getName())) { + if (!toolStats.configTools.checkWorld(player.getWorld().getName())) { return; } for (ItemStack itemStack : inventory) { diff --git a/src/main/java/lol/hyper/toolstats/events/PickupItem.java b/src/main/java/lol/hyper/toolstats/events/PickupItem.java index ccd87fb..7813934 100644 --- a/src/main/java/lol/hyper/toolstats/events/PickupItem.java +++ b/src/main/java/lol/hyper/toolstats/events/PickupItem.java @@ -54,7 +54,7 @@ public class PickupItem implements Listener { } Entity entity = event.getEntity(); if (entity instanceof Player player) { - if (toolStats.config.getStringList("blacklist-worlds").contains(player.getWorld().getName())) { + if (!toolStats.configTools.checkWorld(player.getWorld().getName())) { return; } if (player.getGameMode() == GameMode.CREATIVE && !toolStats.config.getBoolean("allow-creative")) { diff --git a/src/main/java/lol/hyper/toolstats/events/PlayerFish.java b/src/main/java/lol/hyper/toolstats/events/PlayerFish.java index d91b508..ea90ade 100644 --- a/src/main/java/lol/hyper/toolstats/events/PlayerFish.java +++ b/src/main/java/lol/hyper/toolstats/events/PlayerFish.java @@ -57,7 +57,7 @@ public class PlayerFish implements Listener { } Player player = event.getPlayer(); - if (toolStats.config.getStringList("blacklist-worlds").contains(player.getWorld().getName())) { + if (!toolStats.configTools.checkWorld(player.getWorld().getName())) { return; } if (player.getGameMode() == GameMode.CREATIVE && !toolStats.config.getBoolean("allow-creative")) { diff --git a/src/main/java/lol/hyper/toolstats/events/PlayerInteract.java b/src/main/java/lol/hyper/toolstats/events/PlayerInteract.java index 558cec3..26cb8f8 100644 --- a/src/main/java/lol/hyper/toolstats/events/PlayerInteract.java +++ b/src/main/java/lol/hyper/toolstats/events/PlayerInteract.java @@ -62,7 +62,7 @@ public class PlayerInteract implements Listener { } Player player = event.getPlayer(); - if (toolStats.config.getStringList("blacklist-worlds").contains(player.getWorld().getName())) { + if (!toolStats.configTools.checkWorld(player.getWorld().getName())) { return; } if (player.getGameMode() == GameMode.CREATIVE && !toolStats.config.getBoolean("allow-creative")) { diff --git a/src/main/java/lol/hyper/toolstats/events/PlayerJoin.java b/src/main/java/lol/hyper/toolstats/events/PlayerJoin.java index 89ad80e..91d9588 100644 --- a/src/main/java/lol/hyper/toolstats/events/PlayerJoin.java +++ b/src/main/java/lol/hyper/toolstats/events/PlayerJoin.java @@ -42,7 +42,7 @@ public class PlayerJoin implements Listener { @EventHandler public void onJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); - if (toolStats.config.getStringList("blacklist-worlds").contains(player.getWorld().getName())) { + if (!toolStats.configTools.checkWorld(player.getWorld().getName())) { return; } diff --git a/src/main/java/lol/hyper/toolstats/events/PlayerMove.java b/src/main/java/lol/hyper/toolstats/events/PlayerMove.java index bf8b0df..0201f25 100644 --- a/src/main/java/lol/hyper/toolstats/events/PlayerMove.java +++ b/src/main/java/lol/hyper/toolstats/events/PlayerMove.java @@ -42,7 +42,7 @@ public class PlayerMove implements Listener { @EventHandler(priority = EventPriority.MONITOR) public void onMove(PlayerMoveEvent event) { Player player = event.getPlayer(); - if (toolStats.config.getStringList("blacklist-worlds").contains(player.getWorld().getName())) { + if (!toolStats.configTools.checkWorld(player.getWorld().getName())) { return; } // player starts to fly diff --git a/src/main/java/lol/hyper/toolstats/events/ProjectileShoot.java b/src/main/java/lol/hyper/toolstats/events/ProjectileShoot.java index 2175d86..569e73c 100644 --- a/src/main/java/lol/hyper/toolstats/events/ProjectileShoot.java +++ b/src/main/java/lol/hyper/toolstats/events/ProjectileShoot.java @@ -41,7 +41,7 @@ public class ProjectileShoot implements Listener { return; } - if (toolStats.config.getStringList("blacklist-worlds").contains(tridentEntity.getWorld().getName())) { + if (!toolStats.configTools.checkWorld(tridentEntity.getWorld().getName())) { return; } diff --git a/src/main/java/lol/hyper/toolstats/events/SheepShear.java b/src/main/java/lol/hyper/toolstats/events/SheepShear.java index ff992b4..0138d2e 100644 --- a/src/main/java/lol/hyper/toolstats/events/SheepShear.java +++ b/src/main/java/lol/hyper/toolstats/events/SheepShear.java @@ -45,7 +45,7 @@ public class SheepShear implements Listener { return; } Player player = event.getPlayer(); - if (toolStats.config.getStringList("blacklist-worlds").contains(player.getWorld().getName())) { + if (!toolStats.configTools.checkWorld(player.getWorld().getName())) { return; } if (player.getGameMode() == GameMode.CREATIVE && !toolStats.config.getBoolean("allow-creative")) { diff --git a/src/main/java/lol/hyper/toolstats/events/ShootBow.java b/src/main/java/lol/hyper/toolstats/events/ShootBow.java index de13866..ad89f31 100644 --- a/src/main/java/lol/hyper/toolstats/events/ShootBow.java +++ b/src/main/java/lol/hyper/toolstats/events/ShootBow.java @@ -46,7 +46,7 @@ public class ShootBow implements Listener { return; } - if (toolStats.config.getStringList("blacklist-worlds").contains(player.getWorld().getName())) { + if (!toolStats.configTools.checkWorld(player.getWorld().getName())) { return; } if (player.getGameMode() == GameMode.CREATIVE && !toolStats.config.getBoolean("allow-creative")) { diff --git a/src/main/java/lol/hyper/toolstats/events/VillagerTrade.java b/src/main/java/lol/hyper/toolstats/events/VillagerTrade.java index 1b6166d..041ab3d 100644 --- a/src/main/java/lol/hyper/toolstats/events/VillagerTrade.java +++ b/src/main/java/lol/hyper/toolstats/events/VillagerTrade.java @@ -56,7 +56,7 @@ public class VillagerTrade implements Listener { if (!(event.getWhoClicked() instanceof Player player)) { return; } - if (toolStats.config.getStringList("blacklist-worlds").contains(player.getWorld().getName())) { + if (!toolStats.configTools.checkWorld(player.getWorld().getName())) { return; } if (player.getGameMode() == GameMode.CREATIVE || player.getGameMode() == GameMode.SPECTATOR) { diff --git a/src/main/java/lol/hyper/toolstats/tools/config/ConfigTools.java b/src/main/java/lol/hyper/toolstats/tools/config/ConfigTools.java index 61d2050..9deb987 100644 --- a/src/main/java/lol/hyper/toolstats/tools/config/ConfigTools.java +++ b/src/main/java/lol/hyper/toolstats/tools/config/ConfigTools.java @@ -94,6 +94,47 @@ public class ConfigTools { }; } + /** + * Check the status of a world from the config. + * + * @param worldName The world to check. + * @return True if we can work in this world, false if not. + */ + public boolean checkWorld(String worldName) { + boolean enabled = toolStats.config.getBoolean("world-limit.enabled"); + // if the system is disabled, all worlds are allowed + if (!enabled) { + return true; + } + + String mode = toolStats.config.getString("worlds.mode"); + if (mode == null) { + toolStats.logger.info("worlds.mode is not set, not allowing any worlds by default."); + return false; + } + + List worlds = toolStats.config.getStringList("worlds.worlds"); + // if no worlds are defined, deny them + if (worlds.isEmpty()) { + return false; + } + + if (mode.equalsIgnoreCase("blacklist")) { + // this world is on list and mode = blacklisted + // don't allow this world, allow others not on list + return !worlds.contains(worldName); + } + + if (mode.equalsIgnoreCase("whitelist")) { + // this world is on list and mode = whitelisted + // allow it. if the world is not on list, don't allow it + return worlds.contains(worldName); + } + + toolStats.logger.warn("Unknown worlds.mode '{}', denying by default.", mode); + return false; + } + /** * Format a string to be ready for lore usage. * diff --git a/src/main/java/lol/hyper/toolstats/tools/config/versions/Version15.java b/src/main/java/lol/hyper/toolstats/tools/config/versions/Version15.java index b8804e1..5505a96 100644 --- a/src/main/java/lol/hyper/toolstats/tools/config/versions/Version15.java +++ b/src/main/java/lol/hyper/toolstats/tools/config/versions/Version15.java @@ -130,9 +130,11 @@ public class Version15 { toolStats.config.set("messages.trident-throws", "&7Times thrown: &8{times}"); // blacklist feature - toolStats.logger.info("Adding new blacklist-worlds feature"); + toolStats.logger.info("Adding new world-limit feature, which is disabled by default"); List worlds = Arrays.asList("world_1", "world_2"); - toolStats.config.set("blacklist-worlds", worlds); + toolStats.config.set("world-limit.enabled", false); + toolStats.config.set("world-limit.mode", "blacklist"); + toolStats.config.set("world-limit.worlds", worlds); try { toolStats.config.save("plugins" + File.separator + "ToolStats" + File.separator + "config.yml"); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 2aaf6a9..921f758 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -409,9 +409,13 @@ normalize-time-creation: false # Allows stats and origins to be tracked if the player is in creative mode. allow-creative: false -# Allows you to turn off ToolStats in the worlds on the list. -blacklist-worlds: - - world_1 - - world_2 +# Allows you to change what worlds ToolStats works in. +# Mode is blacklist or whitelist. +world-limit: + enabled: false + mode: "blacklist" + worlds: + - world_1 + - world_2 config-version: 15 \ No newline at end of file