From fba73948c62cf705240aaab42a10f309f1c30a67 Mon Sep 17 00:00:00 2001 From: evlad Date: Tue, 17 Jan 2023 00:00:40 +0100 Subject: [PATCH] feat: add island total points + placeholder (#264) * feat: add island total points + placeholder * Update IslandLevels.java --- src/main/java/world/bentobox/level/Level.java | 8 ++++++++ .../world/bentobox/level/LevelsManager.java | 2 ++ .../calculators/IslandLevelCalculator.java | 3 ++- .../bentobox/level/calculators/Results.java | 20 +++++++++++++++++-- .../level/commands/IslandLevelCommand.java | 2 +- .../bentobox/level/objects/IslandLevels.java | 20 +++++++++++++++++++ 6 files changed, 51 insertions(+), 4 deletions(-) diff --git a/src/main/java/world/bentobox/level/Level.java b/src/main/java/world/bentobox/level/Level.java index 66303de..06bd690 100644 --- a/src/main/java/world/bentobox/level/Level.java +++ b/src/main/java/world/bentobox/level/Level.java @@ -36,6 +36,7 @@ import world.bentobox.level.config.BlockConfig; import world.bentobox.level.config.ConfigSettings; import world.bentobox.level.listeners.IslandActivitiesListeners; import world.bentobox.level.listeners.JoinLeaveListener; +import world.bentobox.level.objects.IslandLevels; import world.bentobox.level.listeners.MigrationListener; import world.bentobox.level.objects.LevelsData; import world.bentobox.level.objects.TopTenData; @@ -226,6 +227,13 @@ public class Level extends Addon { getPlugin().getPlaceholdersManager().registerPlaceholder(this, gm.getDescription().getName().toLowerCase() + "_island_level_raw", user -> String.valueOf(getManager().getIslandLevel(gm.getOverWorld(), user.getUniqueId()))); + getPlugin().getPlaceholdersManager().registerPlaceholder(this, + gm.getDescription().getName().toLowerCase() + "_island_total_points", + user -> { + IslandLevels data = getManager().getLevelsData(this.getIslands().getIsland(gm.getOverWorld(), user)); + return data.getTotalPoints()+""; + }); + getPlugin().getPlaceholdersManager().registerPlaceholder(this, gm.getDescription().getName().toLowerCase() + "_points_to_next_level", user -> getManager().getPointsToNextString(gm.getOverWorld(), user.getUniqueId())); diff --git a/src/main/java/world/bentobox/level/LevelsManager.java b/src/main/java/world/bentobox/level/LevelsManager.java index 08352de..4c09796 100644 --- a/src/main/java/world/bentobox/level/LevelsManager.java +++ b/src/main/java/world/bentobox/level/LevelsManager.java @@ -181,6 +181,7 @@ public class LevelsManager { results.setInitialLevel((Long)ilce.getKeyValues().getOrDefault("initialLevel", results.getInitialLevel())); results.setDeathHandicap((int)ilce.getKeyValues().getOrDefault("deathHandicap", results.getDeathHandicap())); results.setPointsToNextLevel((Long)ilce.getKeyValues().getOrDefault("pointsToNextLevel", results.getPointsToNextLevel())); + results.setTotalPoints((Long)ilce.getKeyValues().getOrDefault("totalPoints", results.getTotalPoints())); return ((Boolean)ilce.getKeyValues().getOrDefault("isCancelled", false)); } @@ -432,6 +433,7 @@ public class LevelsManager { ld.setUwCount(Maps.asMap(r.getUwCount().elementSet(), elem -> r.getUwCount().count(elem))); ld.setMdCount(Maps.asMap(r.getMdCount().elementSet(), elem -> r.getMdCount().count(elem))); ld.setPointsToNextLevel(r.getPointsToNextLevel()); + ld.setTotalPoints(r.getTotalPoints()); levelsCache.put(island.getUniqueId(), ld); handler.saveObjectAsync(ld); // Update TopTen diff --git a/src/main/java/world/bentobox/level/calculators/IslandLevelCalculator.java b/src/main/java/world/bentobox/level/calculators/IslandLevelCalculator.java index 09f6218..b7d7787 100644 --- a/src/main/java/world/bentobox/level/calculators/IslandLevelCalculator.java +++ b/src/main/java/world/bentobox/level/calculators/IslandLevelCalculator.java @@ -52,7 +52,7 @@ import world.bentobox.level.calculators.Results.Result; public class IslandLevelCalculator { private static final String LINE_BREAK = "=================================="; - public static final long MAX_AMOUNT = 10000; + public static final long MAX_AMOUNT = 10000000; private static final List CHESTS = Arrays.asList(Material.CHEST, Material.CHEST_MINECART, Material.TRAPPED_CHEST, Material.SHULKER_BOX, Material.BLACK_SHULKER_BOX, Material.BLUE_SHULKER_BOX, Material.BROWN_SHULKER_BOX, Material.CYAN_SHULKER_BOX, Material.GRAY_SHULKER_BOX, Material.GREEN_SHULKER_BOX, Material.LIGHT_BLUE_SHULKER_BOX, @@ -601,6 +601,7 @@ public class IslandLevelCalculator { } long blockAndDeathPoints = this.results.rawBlockCount.get(); + this.results.totalPoints.set(blockAndDeathPoints); if (this.addon.getSettings().getDeathPenalty() > 0) { diff --git a/src/main/java/world/bentobox/level/calculators/Results.java b/src/main/java/world/bentobox/level/calculators/Results.java index ec57548..c2bf739 100644 --- a/src/main/java/world/bentobox/level/calculators/Results.java +++ b/src/main/java/world/bentobox/level/calculators/Results.java @@ -36,6 +36,7 @@ public class Results { AtomicInteger deathHandicap = new AtomicInteger(0); AtomicLong pointsToNextLevel = new AtomicLong(0); AtomicLong initialLevel = new AtomicLong(0); + AtomicLong totalPoints = new AtomicLong(0); final Result state; public Results(Result state) { @@ -93,6 +94,21 @@ public class Results { pointsToNextLevel.set(points); } + /** + * @return the totalPoints + */ + public long getTotalPoints() { + return totalPoints.get(); + } + + /** + * Set the total points + * @param points + */ + public void setTotalPoints(long points) { + totalPoints.set(points); + } + public long getInitialLevel() { return initialLevel.get(); } @@ -109,7 +125,7 @@ public class Results { return "Results [report=" + report + ", mdCount=" + mdCount + ", uwCount=" + uwCount + ", ncCount=" + ncCount + ", ofCount=" + ofCount + ", rawBlockCount=" + rawBlockCount + ", underWaterBlockCount=" + underWaterBlockCount + ", level=" + level + ", deathHandicap=" + deathHandicap - + ", pointsToNextLevel=" + pointsToNextLevel + ", initialLevel=" + initialLevel + "]"; + + ", pointsToNextLevel=" + pointsToNextLevel + ", totalPoints=" + totalPoints + ", initialLevel=" + initialLevel + "]"; } /** * @return the mdCount @@ -130,4 +146,4 @@ public class Results { return state; } -} \ No newline at end of file +} diff --git a/src/main/java/world/bentobox/level/commands/IslandLevelCommand.java b/src/main/java/world/bentobox/level/commands/IslandLevelCommand.java index d2b1a98..3d1420e 100644 --- a/src/main/java/world/bentobox/level/commands/IslandLevelCommand.java +++ b/src/main/java/world/bentobox/level/commands/IslandLevelCommand.java @@ -110,7 +110,7 @@ public class IslandLevelCommand extends CompositeCommand { user.sendMessage("island.level.deaths", "[number]", String.valueOf(results.getDeathHandicap())); } // Send player how many points are required to reach next island level - if (results.getPointsToNextLevel() >= 0 && results.getPointsToNextLevel() < 10000) { + if (results.getPointsToNextLevel() >= 0) { user.sendMessage("island.level.required-points-to-next-level", "[points]", String.valueOf(results.getPointsToNextLevel())); } // Tell other team members diff --git a/src/main/java/world/bentobox/level/objects/IslandLevels.java b/src/main/java/world/bentobox/level/objects/IslandLevels.java index 7dd0123..10cbdc4 100644 --- a/src/main/java/world/bentobox/level/objects/IslandLevels.java +++ b/src/main/java/world/bentobox/level/objects/IslandLevels.java @@ -49,6 +49,12 @@ public class IslandLevels implements DataObject { @Expose private long maxLevel; + /** + * Total points + */ + @Expose + private long totalPoints; + /** * Underwater count */ @@ -133,6 +139,20 @@ public class IslandLevels implements DataObject { this.pointsToNextLevel = pointsToNextLevel; } + /** + * @return the pointsToNextLevel + */ + public long getTotalPoints() { + return totalPoints; + } + + /** + * @param totalPoints the totalPoints to set + */ + public void setTotalPoints(long totalPoints) { + this.totalPoints = totalPoints; + } + /** * Get the maximum level ever set using {@link #setLevel(long)} * @return the maxLevel