From 9c42a8d0073f862eb273145bcf3a518b0b1ae3f3 Mon Sep 17 00:00:00 2001 From: ceze88 Date: Wed, 5 Apr 2023 13:14:16 +0200 Subject: [PATCH] Add UltimateStacker hook for stacked blocks (#281) --- pom.xml | 11 ++++++++++ src/main/java/world/bentobox/level/Level.java | 14 ++++++++++++ .../calculators/IslandLevelCalculator.java | 22 +++++++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/pom.xml b/pom.xml index abde9c7..8c8f5a2 100644 --- a/pom.xml +++ b/pom.xml @@ -149,6 +149,11 @@ rosewood-repo https://repo.rosewooddev.io/repository/public/ + + + songoda-public + https://repo.songoda.com/repository/public/ + @@ -234,6 +239,12 @@ 1.3.0 provided + + com.songoda + UltimateStacker + 2.3.3 + provided + diff --git a/src/main/java/world/bentobox/level/Level.java b/src/main/java/world/bentobox/level/Level.java index 78c2a5b..61789e5 100644 --- a/src/main/java/world/bentobox/level/Level.java +++ b/src/main/java/world/bentobox/level/Level.java @@ -58,6 +58,7 @@ public class Level extends Addon { private boolean stackersEnabled; private boolean advChestEnabled; private boolean roseStackersEnabled; + private boolean ultimateStackerEnabled; private final List registeredGameModes = new ArrayList<>(); /** @@ -146,6 +147,12 @@ public class Level extends Addon { if (roseStackersEnabled) { log("Hooked into RoseStackers."); } + + // Check if UltimateStacker is enabled + ultimateStackerEnabled = Bukkit.getPluginManager().isPluginEnabled("UltimateStacker"); + if (ultimateStackerEnabled) { + log("Hooked into UltimateStacker."); + } } @Override @@ -403,6 +410,13 @@ public class Level extends Addon { return roseStackersEnabled; } + /** + * @return the ultimateStackerEnabled + */ + public boolean isUltimateStackerEnabled() { + return ultimateStackerEnabled; + } + /** * Method Level#getVisitHook returns the visitHook of this object. * diff --git a/src/main/java/world/bentobox/level/calculators/IslandLevelCalculator.java b/src/main/java/world/bentobox/level/calculators/IslandLevelCalculator.java index 9d36dc8..9c2a6cf 100644 --- a/src/main/java/world/bentobox/level/calculators/IslandLevelCalculator.java +++ b/src/main/java/world/bentobox/level/calculators/IslandLevelCalculator.java @@ -16,6 +16,9 @@ import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentLinkedQueue; +import com.songoda.ultimatestacker.UltimateStacker; +import com.songoda.ultimatestacker.core.compatibility.CompatibleMaterial; +import com.songoda.ultimatestacker.stackable.block.BlockStack; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.ChunkSnapshot; @@ -524,6 +527,25 @@ public class IslandLevelCalculator { if (addon.isStackersEnabled() && (blockData.getMaterial().equals(Material.CAULDRON) || blockData.getMaterial().equals(Material.SPAWNER))) { stackedBlocks.add(new Location(cp.world, (double)x + cp.chunkSnapshot.getX() * 16, y, (double)z + cp.chunkSnapshot.getZ() * 16)); } + + Block block = cp.chunk.getBlock(x, y, z); + + if (addon.isUltimateStackerEnabled()) { + if (!blockData.getMaterial().equals(Material.AIR)) { + BlockStack stack = UltimateStacker.getInstance().getBlockStackManager().getBlock(block, CompatibleMaterial.getMaterial(block)); + if (stack != null) { + int value = limitCount(blockData.getMaterial()); + if (belowSeaLevel) { + results.underWaterBlockCount.addAndGet((long) stack.getAmount() * value); + results.uwCount.add(blockData.getMaterial()); + } else { + results.rawBlockCount.addAndGet((long) stack.getAmount() * value); + results.mdCount.add(blockData.getMaterial()); + } + } + } + } + // Scan chests if (addon.getSettings().isIncludeChests() && CHESTS.contains(blockData.getMaterial())) { chestBlocks.add(cp.chunk);