From 21986d3f2d11cab7450c84fe98e176d92f057b68 Mon Sep 17 00:00:00 2001 From: JasonLiu2002 Date: Thu, 29 Jul 2021 01:38:45 -0700 Subject: [PATCH 1/4] Added chest/hopper placeholders, refactored getBlockCounts to be consistent, implemented getBlockCount --- .../java/world/bentobox/limits/Limits.java | 27 ++++++++++++++++ .../bentobox/limits/commands/LimitTab.java | 2 +- .../bentobox/limits/commands/LimitsCalc.java | 2 +- .../limits/listeners/BlockLimitsListener.java | 2 +- .../limits/objects/IslandBlockCount.java | 31 ++++++++++++------- 5 files changed, 50 insertions(+), 14 deletions(-) diff --git a/src/main/java/world/bentobox/limits/Limits.java b/src/main/java/world/bentobox/limits/Limits.java index b4ed394..a36e9aa 100644 --- a/src/main/java/world/bentobox/limits/Limits.java +++ b/src/main/java/world/bentobox/limits/Limits.java @@ -3,6 +3,7 @@ package world.bentobox.limits; import java.util.List; import java.util.stream.Collectors; +import org.bukkit.Material; import org.bukkit.World; import world.bentobox.bentobox.api.addons.Addon; @@ -48,6 +49,7 @@ public class Limits extends Addon { // Register commands gm.getAdminCommand().ifPresent(a -> new AdminCommand(this, a)); gm.getPlayerCommand().ifPresent(a -> new PlayerCommand(this, a)); + registerPlaceholders(gm); log("Limits will apply to " + gm.getDescription().getName()); } ); @@ -125,4 +127,29 @@ public class Limits extends Addon { return joinListener; } + private void registerPlaceholders(GameModeAddon gm) { + if (getPlugin().getPlaceholdersManager() == null) return; + + // Hopper count + getPlugin().getPlaceholdersManager().registerPlaceholder(this, + gm.getDescription().getName().toLowerCase() + "_island_hopper_count", + user -> String.valueOf(getBlockLimitListener().getIsland(gm.getIslands(). + getIsland(gm.getOverWorld(), user).getUniqueId()).getBlockCount(Material.HOPPER))); + // Hopper limit + getPlugin().getPlaceholdersManager().registerPlaceholder(this, + gm.getDescription().getName().toLowerCase() + "_island_hopper_limit", + user -> String.valueOf(getBlockLimitListener().getIsland(gm.getIslands(). + getIsland(gm.getOverWorld(), user).getUniqueId()).getBlockLimit(Material.HOPPER))); + // Chest count + getPlugin().getPlaceholdersManager().registerPlaceholder(this, + gm.getDescription().getName().toLowerCase() + "_island_chest_count", + user -> String.valueOf(getBlockLimitListener().getIsland(gm.getIslands(). + getIsland(gm.getOverWorld(), user).getUniqueId()).getBlockCount(Material.CHEST))); + // Chest limit + getPlugin().getPlaceholdersManager().registerPlaceholder(this, + gm.getDescription().getName().toLowerCase() + "_island_chest_limit", + user -> String.valueOf(getBlockLimitListener().getIsland(gm.getIslands(). + getIsland(gm.getOverWorld(), user).getUniqueId()).getBlockLimit(Material.CHEST))); + } + } diff --git a/src/main/java/world/bentobox/limits/commands/LimitTab.java b/src/main/java/world/bentobox/limits/commands/LimitTab.java index f21f035..62782ab 100644 --- a/src/main/java/world/bentobox/limits/commands/LimitTab.java +++ b/src/main/java/world/bentobox/limits/commands/LimitTab.java @@ -179,7 +179,7 @@ public class LimitTab implements Tab { // Adjust icon pib.icon(B2M.getOrDefault(en.getKey(), en.getKey())); - int count = ibc == null ? 0 : ibc.getBlockCount().getOrDefault(en.getKey(), 0); + int count = ibc == null ? 0 : ibc.getBlockCounts().getOrDefault(en.getKey(), 0); String color = count >= en.getValue() ? user.getTranslation("island.limits.max-color") : user.getTranslation("island.limits.regular-color"); pib.description(color + user.getTranslation("island.limits.block-limit-syntax", diff --git a/src/main/java/world/bentobox/limits/commands/LimitsCalc.java b/src/main/java/world/bentobox/limits/commands/LimitsCalc.java index 056b414..24f6c65 100644 --- a/src/main/java/world/bentobox/limits/commands/LimitsCalc.java +++ b/src/main/java/world/bentobox/limits/commands/LimitsCalc.java @@ -143,7 +143,7 @@ public class LimitsCalc { if (ibc == null) { ibc = new IslandBlockCount(); } - ibc.setBlockCount(blockCount.entrySet().stream() + ibc.setBlockCounts(blockCount.entrySet().stream() .collect(Collectors.toMap( Map.Entry::getKey, entry -> entry.getValue().get()))); diff --git a/src/main/java/world/bentobox/limits/listeners/BlockLimitsListener.java b/src/main/java/world/bentobox/limits/listeners/BlockLimitsListener.java index 70895bd..f9defaa 100644 --- a/src/main/java/world/bentobox/limits/listeners/BlockLimitsListener.java +++ b/src/main/java/world/bentobox/limits/listeners/BlockLimitsListener.java @@ -85,7 +85,7 @@ public class BlockLimitsListener implements Listener { handler.loadObjects().forEach(ibc -> { // Clean up if (addon.isCoveredGameMode(ibc.getGameMode())) { - ibc.getBlockCount().keySet().removeIf(DO_NOT_COUNT::contains); + ibc.getBlockCounts().keySet().removeIf(DO_NOT_COUNT::contains); // Store islandCountMap.put(ibc.getUniqueId(), ibc); } else { diff --git a/src/main/java/world/bentobox/limits/objects/IslandBlockCount.java b/src/main/java/world/bentobox/limits/objects/IslandBlockCount.java index df79857..b085576 100644 --- a/src/main/java/world/bentobox/limits/objects/IslandBlockCount.java +++ b/src/main/java/world/bentobox/limits/objects/IslandBlockCount.java @@ -26,7 +26,7 @@ public class IslandBlockCount implements DataObject { private String gameMode = ""; @Expose - private Map blockCount = new EnumMap<>(Material.class); + private Map blockCounts = new EnumMap<>(Material.class); private boolean changed; @@ -74,24 +74,33 @@ public class IslandBlockCount implements DataObject { /** * @return the blockCount */ - public Map getBlockCount() { - return blockCount; + public Map getBlockCounts() { + return blockCounts; } /** - * @param blockCount the blockCount to set + * @param blockCounts the blockCount to set */ - public void setBlockCount(Map blockCount) { - this.blockCount = blockCount; + public void setBlockCounts(Map blockCounts) { + this.blockCounts = blockCounts; setChanged(); } + /** + * Get the block count for this material for this island + * @param m - material + * @return count or -1 for unlimited + */ + public Integer getBlockCount(Material m) { + return blockCounts.getOrDefault(m, -1); + } + /** * Add a material to the count * @param material - material */ public void add(Material material) { - blockCount.merge(material, 1, Integer::sum); + blockCounts.merge(material, 1, Integer::sum); setChanged(); } @@ -100,8 +109,8 @@ public class IslandBlockCount implements DataObject { * @param material - material */ public void remove(Material material) { - blockCount.put(material, blockCount.getOrDefault(material, 0) - 1); - blockCount.values().removeIf(v -> v <= 0); + blockCounts.put(material, blockCounts.getOrDefault(material, 0) - 1); + blockCounts.values().removeIf(v -> v <= 0); setChanged(); } @@ -112,7 +121,7 @@ public class IslandBlockCount implements DataObject { * @return true if count is >= limit */ public boolean isAtLimit(Material material, int limit) { - return blockCount.getOrDefault(material, 0) >= limit; + return blockCounts.getOrDefault(material, 0) >= limit; } /** @@ -122,7 +131,7 @@ public class IslandBlockCount implements DataObject { */ public boolean isAtLimit(Material m) { // Check island limits first - return blockLimits.containsKey(m) && blockCount.getOrDefault(m, 0) >= blockLimits.get(m); + return blockLimits.containsKey(m) && blockCounts.getOrDefault(m, 0) >= blockLimits.get(m); } public boolean isBlockLimited(Material m) { From 0a193ebd27d0bcd1b20a62f2b58da1427fe16447 Mon Sep 17 00:00:00 2001 From: JasonLiu2002 Date: Fri, 30 Jul 2021 02:16:28 -0700 Subject: [PATCH 2/4] Simplified how to register placeholders, changed default getBlockCount to 0 instead of -1 --- .../java/world/bentobox/limits/Limits.java | 74 ++++++++++++++----- .../limits/objects/IslandBlockCount.java | 4 +- 2 files changed, 58 insertions(+), 20 deletions(-) diff --git a/src/main/java/world/bentobox/limits/Limits.java b/src/main/java/world/bentobox/limits/Limits.java index a36e9aa..f390e7d 100644 --- a/src/main/java/world/bentobox/limits/Limits.java +++ b/src/main/java/world/bentobox/limits/Limits.java @@ -6,8 +6,11 @@ import java.util.stream.Collectors; import org.bukkit.Material; import org.bukkit.World; +import org.eclipse.jdt.annotation.Nullable; import world.bentobox.bentobox.api.addons.Addon; import world.bentobox.bentobox.api.addons.GameModeAddon; +import world.bentobox.bentobox.api.user.User; +import world.bentobox.bentobox.database.objects.Island; import world.bentobox.limits.commands.AdminCommand; import world.bentobox.limits.commands.PlayerCommand; import world.bentobox.limits.listeners.BlockLimitsListener; @@ -130,26 +133,61 @@ public class Limits extends Addon { private void registerPlaceholders(GameModeAddon gm) { if (getPlugin().getPlaceholdersManager() == null) return; - // Hopper count + registerCountAndLimitPlaceholders("HOPPER", gm); + registerCountAndLimitPlaceholders("CHEST", gm); + } + + /** + * Registers placeholders for the count and limit of the material + * in the format of %Limits_(gamemode prefix)_island_(lowercase material name)_count% + * and %Limits_(gamemode prefix)_island_(lowercase material name)_limit% + * + * Example: registerCountAndLimitPlaceholders("HOPPER", gm); + * Placeholders: + * "Limits_bskyblock_island_hopper_count" + * "Limits_bskyblock_island_hopper_limit" + * + * @param materialName - All caps + * @param gm + */ + private void registerCountAndLimitPlaceholders(String materialName, GameModeAddon gm) { getPlugin().getPlaceholdersManager().registerPlaceholder(this, - gm.getDescription().getName().toLowerCase() + "_island_hopper_count", - user -> String.valueOf(getBlockLimitListener().getIsland(gm.getIslands(). - getIsland(gm.getOverWorld(), user).getUniqueId()).getBlockCount(Material.HOPPER))); - // Hopper limit + gm.getDescription().getName().toLowerCase() + "_island_" + materialName.toLowerCase() + "_count", + user -> String.valueOf(getCount(user, materialName, gm))); getPlugin().getPlaceholdersManager().registerPlaceholder(this, - gm.getDescription().getName().toLowerCase() + "_island_hopper_limit", - user -> String.valueOf(getBlockLimitListener().getIsland(gm.getIslands(). - getIsland(gm.getOverWorld(), user).getUniqueId()).getBlockLimit(Material.HOPPER))); - // Chest count - getPlugin().getPlaceholdersManager().registerPlaceholder(this, - gm.getDescription().getName().toLowerCase() + "_island_chest_count", - user -> String.valueOf(getBlockLimitListener().getIsland(gm.getIslands(). - getIsland(gm.getOverWorld(), user).getUniqueId()).getBlockCount(Material.CHEST))); - // Chest limit - getPlugin().getPlaceholdersManager().registerPlaceholder(this, - gm.getDescription().getName().toLowerCase() + "_island_chest_limit", - user -> String.valueOf(getBlockLimitListener().getIsland(gm.getIslands(). - getIsland(gm.getOverWorld(), user).getUniqueId()).getBlockLimit(Material.CHEST))); + gm.getDescription().getName().toLowerCase() + "_island_" + materialName.toLowerCase() + "_limit", + user -> getLimit(user, materialName, gm)); + } + + /** + * @param user - Used to identify the island the user belongs to + * @param materialName - The material we are trying to count on the island + * @param gm + * @return Number of blocks of the specified material on the given user's island + */ + private int getCount(@Nullable User user, String materialName, GameModeAddon gm) { + Island is = gm.getIslands().getIsland(gm.getOverWorld(), user); + if (is == null) { + return 0; + } + return getBlockLimitListener().getIsland(gm.getIslands().getIsland(gm.getOverWorld(), user).getUniqueId()). + getBlockCount(Material.getMaterial(materialName)); + } + + /** + * @param user - Used to identify the island the user belongs to + * @param materialName - The material whose limit we are querying + * @param gm + * @return The limit of the specified material on the given user's island + */ + private String getLimit(@Nullable User user, String materialName, GameModeAddon gm) { + Island is = gm.getIslands().getIsland(gm.getOverWorld(), user); + if (is == null) { + return "Limit not set"; + } + int limit = getBlockLimitListener().getIsland(gm.getIslands().getIsland(gm.getOverWorld(), user).getUniqueId()). + getBlockLimit(Material.getMaterial(materialName)); + return limit == -1 ? "Limit not set" : String.valueOf(limit); } } diff --git a/src/main/java/world/bentobox/limits/objects/IslandBlockCount.java b/src/main/java/world/bentobox/limits/objects/IslandBlockCount.java index b085576..3a357ea 100644 --- a/src/main/java/world/bentobox/limits/objects/IslandBlockCount.java +++ b/src/main/java/world/bentobox/limits/objects/IslandBlockCount.java @@ -89,10 +89,10 @@ public class IslandBlockCount implements DataObject { /** * Get the block count for this material for this island * @param m - material - * @return count or -1 for unlimited + * @return count */ public Integer getBlockCount(Material m) { - return blockCounts.getOrDefault(m, -1); + return blockCounts.getOrDefault(m, 0); } /** From f94a4ac0bba5a0a60436b8c8b76cf63ad59d841e Mon Sep 17 00:00:00 2001 From: JasonLiu2002 Date: Sat, 31 Jul 2021 16:30:41 -0700 Subject: [PATCH 3/4] Registers all blocks as placeholders --- .../java/world/bentobox/limits/Limits.java | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/main/java/world/bentobox/limits/Limits.java b/src/main/java/world/bentobox/limits/Limits.java index f390e7d..5a9f089 100644 --- a/src/main/java/world/bentobox/limits/Limits.java +++ b/src/main/java/world/bentobox/limits/Limits.java @@ -1,5 +1,6 @@ package world.bentobox.limits; +import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -132,9 +133,9 @@ public class Limits extends Addon { private void registerPlaceholders(GameModeAddon gm) { if (getPlugin().getPlaceholdersManager() == null) return; - - registerCountAndLimitPlaceholders("HOPPER", gm); - registerCountAndLimitPlaceholders("CHEST", gm); + Arrays.stream(Material.values()) + .filter(m -> m.isBlock()) + .forEach(m -> registerCountAndLimitPlaceholders(m, gm)); } /** @@ -147,46 +148,46 @@ public class Limits extends Addon { * "Limits_bskyblock_island_hopper_count" * "Limits_bskyblock_island_hopper_limit" * - * @param materialName - All caps + * @param m * @param gm */ - private void registerCountAndLimitPlaceholders(String materialName, GameModeAddon gm) { + private void registerCountAndLimitPlaceholders(Material m, GameModeAddon gm) { getPlugin().getPlaceholdersManager().registerPlaceholder(this, - gm.getDescription().getName().toLowerCase() + "_island_" + materialName.toLowerCase() + "_count", - user -> String.valueOf(getCount(user, materialName, gm))); + gm.getDescription().getName().toLowerCase() + "_island_" + m.toString().toLowerCase() + "_count", + user -> String.valueOf(getCount(user, m, gm))); getPlugin().getPlaceholdersManager().registerPlaceholder(this, - gm.getDescription().getName().toLowerCase() + "_island_" + materialName.toLowerCase() + "_limit", - user -> getLimit(user, materialName, gm)); + gm.getDescription().getName().toLowerCase() + "_island_" + m.toString().toLowerCase() + "_limit", + user -> getLimit(user, m, gm)); } /** * @param user - Used to identify the island the user belongs to - * @param materialName - The material we are trying to count on the island + * @param m - The material we are trying to count on the island * @param gm * @return Number of blocks of the specified material on the given user's island */ - private int getCount(@Nullable User user, String materialName, GameModeAddon gm) { + private int getCount(@Nullable User user, Material m, GameModeAddon gm) { Island is = gm.getIslands().getIsland(gm.getOverWorld(), user); if (is == null) { return 0; } return getBlockLimitListener().getIsland(gm.getIslands().getIsland(gm.getOverWorld(), user).getUniqueId()). - getBlockCount(Material.getMaterial(materialName)); + getBlockCount(m); } /** * @param user - Used to identify the island the user belongs to - * @param materialName - The material whose limit we are querying + * @param m - The material whose limit we are querying * @param gm * @return The limit of the specified material on the given user's island */ - private String getLimit(@Nullable User user, String materialName, GameModeAddon gm) { + private String getLimit(@Nullable User user, Material m, GameModeAddon gm) { Island is = gm.getIslands().getIsland(gm.getOverWorld(), user); if (is == null) { return "Limit not set"; } int limit = getBlockLimitListener().getIsland(gm.getIslands().getIsland(gm.getOverWorld(), user).getUniqueId()). - getBlockLimit(Material.getMaterial(materialName)); + getBlockLimit(m); return limit == -1 ? "Limit not set" : String.valueOf(limit); } From f7c44c7c21d630398c197709d5a6e8d9d53c2ffb Mon Sep 17 00:00:00 2001 From: Huynh Tien Date: Tue, 10 Aug 2021 20:05:21 +0700 Subject: [PATCH 4/4] Add Vietnamese --- src/main/resources/locales/vi.yml | 32 +++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/main/resources/locales/vi.yml diff --git a/src/main/resources/locales/vi.yml b/src/main/resources/locales/vi.yml new file mode 100644 index 0000000..1232d33 --- /dev/null +++ b/src/main/resources/locales/vi.yml @@ -0,0 +1,32 @@ +########################################################################################### +# This is a YML file. Be careful when editing. Check your edits in a YAML checker like # +# the one at http://yaml-online-parser.appspot.com # +########################################################################################### + +block-limits: + hit-limit: "&c[material] bị giới hạn trong [number] khối!" +entity-limits: + hit-limit: "&c[entity] bị giới hạn trong [number] thực thể!" +limits: + panel-title: "Giới hạn đảo" + + +admin: + limits: + main: + parameters: "" + description: "xem giới hạn đảo của người chơi" + calc: + parameters: "" + description: "tính toán lại giới hạn đảo của người chơi" + finished: "&aTính toán đã hoàn thành!" + +island: + limits: + description: "xem giới hạn đảo của bạn" + max-color: "&c" + regular-color: "&a" + block-limit-syntax: "[number]/[limit]" + no-limits: "&cKhông có giới hạn ở thế giới này" + recount: + description: "tính toán lại giới hạn đảo của bạn"