From 21986d3f2d11cab7450c84fe98e176d92f057b68 Mon Sep 17 00:00:00 2001 From: JasonLiu2002 Date: Thu, 29 Jul 2021 01:38:45 -0700 Subject: [PATCH] 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) {