From 750f07ba7c1d62b67c0552e889427ab1709d457a Mon Sep 17 00:00:00 2001 From: tastybento Date: Sat, 16 Oct 2021 16:12:52 -0700 Subject: [PATCH] Release 2.8.0 (#239) * Version 2.7.1 * Version 2.7.2 * Use Java 9's takeWhile * Added placeholder %Level_[gamemode]_rank_value Fixes https://github.com/BentoBoxWorld/Level/issues/228 * No save on disable (#231) * Release 2.6.4 * Remove saving to database on disable. https://github.com/BentoBoxWorld/Level/issues/229 First, the top ten tables are never actually used or loaded. They are created in memory by loading the island levels. So there is no reason to keep saving them. Second, the island level data is saved every time it is changed, so there is no need to save all of the cache on exit. * Fixes tests * Rosestacker (#232) * Add support for RoseStacker 1.3.0 * Made plugin a Pladdon. * Version 2.8.0 * Added new placeholders %Level_%gamemode%_top_island_name_%rank% - lists the island name %Level_%gamemode%_top_island_members_%rank% - a comma separated list of team members https://github.com/BentoBoxWorld/Level/issues/224 https://github.com/BentoBoxWorld/Level/issues/211 https://github.com/BentoBoxWorld/Level/issues/132 https://github.com/BentoBoxWorld/Level/issues/107 https://github.com/BentoBoxWorld/Level/issues/105 * Update to BentoBox API 1.18 * Open up modules for testing access. * Back support for BentoBox 1.16.5. --- pom.xml | 34 ++++++++++++++-- src/main/java/world/bentobox/level/Level.java | 40 +++++++++++++++++++ .../calculators/IslandLevelCalculator.java | 2 +- .../events/IslandLevelCalculatedEvent.java | 14 +++++++ .../level/events/IslandPreLevelEvent.java | 13 ++++++ src/main/resources/addon.yml | 2 +- 6 files changed, 99 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index c276d63..b3f602a 100644 --- a/pom.xml +++ b/pom.xml @@ -58,14 +58,14 @@ 2.0.9 - 1.17-R0.1-SNAPSHOT - 1.17.0 + 1.16.5-R0.1-SNAPSHOT + 1.16.5-SNAPSHOT ${build.version}-SNAPSHOT -LOCAL - 2.7.2 + 2.8.0 BentoBoxWorld_Level bentobox-world https://sonarcloud.io @@ -249,7 +249,33 @@ 3.0.0-M5 - --illegal-access=permit + --add-opens java.base/java.lang=ALL-UNNAMED + --add-opens java.base/java.math=ALL-UNNAMED + --add-opens java.base/java.io=ALL-UNNAMED + --add-opens java.base/java.util=ALL-UNNAMED + --add-opens + java.base/java.util.stream=ALL-UNNAMED + --add-opens java.base/java.text=ALL-UNNAMED + --add-opens + java.base/java.util.regex=ALL-UNNAMED + --add-opens + java.base/java.nio.channels.spi=ALL-UNNAMED + --add-opens java.base/sun.nio.ch=ALL-UNNAMED + --add-opens java.base/java.net=ALL-UNNAMED + --add-opens + java.base/java.util.concurrent=ALL-UNNAMED + --add-opens java.base/sun.nio.fs=ALL-UNNAMED + --add-opens java.base/sun.nio.cs=ALL-UNNAMED + --add-opens java.base/java.nio.file=ALL-UNNAMED + --add-opens + java.base/java.nio.charset=ALL-UNNAMED + --add-opens + java.base/java.lang.reflect=ALL-UNNAMED + --add-opens + java.logging/java.util.logging=ALL-UNNAMED + --add-opens java.base/java.lang.ref=ALL-UNNAMED + --add-opens java.base/java.util.jar=ALL-UNNAMED + --add-opens java.base/java.util.zip=ALL-UNNAMED diff --git a/src/main/java/world/bentobox/level/Level.java b/src/main/java/world/bentobox/level/Level.java index df3004d..1416194 100644 --- a/src/main/java/world/bentobox/level/Level.java +++ b/src/main/java/world/bentobox/level/Level.java @@ -3,8 +3,11 @@ package world.bentobox.level; import java.io.File; import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.UUID; +import java.util.stream.Collectors; import org.bukkit.Bukkit; import org.bukkit.World; @@ -208,6 +211,12 @@ public class Level extends Addon implements Listener { // Name getPlugin().getPlaceholdersManager().registerPlaceholder(this, gm.getDescription().getName().toLowerCase() + "_top_name_" + i, u -> getRankName(gm.getOverWorld(), rank)); + // Island Name + getPlugin().getPlaceholdersManager().registerPlaceholder(this, + gm.getDescription().getName().toLowerCase() + "_top_island_name_" + i, u -> getRankIslandName(gm.getOverWorld(), rank)); + // Members + getPlugin().getPlaceholdersManager().registerPlaceholder(this, + gm.getDescription().getName().toLowerCase() + "_top_members_" + i, u -> getRankMembers(gm.getOverWorld(), rank)); // Level getPlugin().getPlaceholdersManager().registerPlaceholder(this, gm.getDescription().getName().toLowerCase() + "_top_value_" + i, u -> getRankLevel(gm.getOverWorld(), rank)); @@ -224,6 +233,37 @@ public class Level extends Addon implements Listener { return getPlayers().getName(getManager().getTopTen(world, TEN).keySet().stream().skip(rank - 1L).limit(1L).findFirst().orElse(null)); } + String getRankIslandName(World world, int rank) { + if (rank < 1) rank = 1; + if (rank > TEN) rank = TEN; + UUID owner = getManager().getTopTen(world, TEN).keySet().stream().skip(rank - 1L).limit(1L).findFirst().orElse(null); + if (owner != null) { + Island island = getIslands().getIsland(world, owner); + if (island != null) { + return island.getName() == null ? "" : island.getName(); + } + } + return ""; + } + + String getRankMembers(World world, int rank) { + if (rank < 1) rank = 1; + if (rank > TEN) rank = TEN; + UUID owner = getManager().getTopTen(world, TEN).keySet().stream().skip(rank - 1L).limit(1L).findFirst().orElse(null); + if (owner != null) { + Island island = getIslands().getIsland(world, owner); + if (island != null) { + // Sort members by rank + return island.getMembers().entrySet().stream() + .sorted(Collections.reverseOrder(Map.Entry.comparingByValue())) + .map(Map.Entry::getKey) + .map(getPlayers()::getName) + .collect(Collectors.joining(",")); + } + } + return ""; + } + String getRankLevel(World world, int rank) { if (rank < 1) rank = 1; if (rank > TEN) rank = TEN; diff --git a/src/main/java/world/bentobox/level/calculators/IslandLevelCalculator.java b/src/main/java/world/bentobox/level/calculators/IslandLevelCalculator.java index 5dd2523..7052077 100644 --- a/src/main/java/world/bentobox/level/calculators/IslandLevelCalculator.java +++ b/src/main/java/world/bentobox/level/calculators/IslandLevelCalculator.java @@ -203,7 +203,7 @@ public class IslandLevelCalculator { private long calculateLevel(long blockAndDeathPoints) { String calcString = addon.getSettings().getLevelCalc(); String withValues = calcString.replace("blocks", String.valueOf(blockAndDeathPoints)).replace("level_cost", String.valueOf(this.addon.getSettings().getLevelCost())); - return (long)eval(withValues) - this.island.getLevelHandicap() - (addon.getSettings().isZeroNewIslandLevels() ? results.initialLevel.get() : 0); + return (long)eval(withValues) - (addon.getSettings().isZeroNewIslandLevels() ? results.initialLevel.get() : 0); } /** diff --git a/src/main/java/world/bentobox/level/events/IslandLevelCalculatedEvent.java b/src/main/java/world/bentobox/level/events/IslandLevelCalculatedEvent.java index 8db2679..b59c6c5 100644 --- a/src/main/java/world/bentobox/level/events/IslandLevelCalculatedEvent.java +++ b/src/main/java/world/bentobox/level/events/IslandLevelCalculatedEvent.java @@ -3,6 +3,9 @@ package world.bentobox.level.events; import java.util.List; import java.util.UUID; +import org.bukkit.event.HandlerList; +import org.eclipse.jdt.annotation.NonNull; + import world.bentobox.bentobox.api.events.IslandBaseEvent; import world.bentobox.bentobox.database.objects.Island; import world.bentobox.level.calculators.Results; @@ -18,6 +21,17 @@ public class IslandLevelCalculatedEvent extends IslandBaseEvent { private UUID targetPlayer; + private static final HandlerList handlers = new HandlerList(); + + @Override + public @NonNull HandlerList getHandlers() { + return getHandlerList(); + } + + public static HandlerList getHandlerList() { + return handlers; + } + /** * @param targetPlayer - target player * @param island - island diff --git a/src/main/java/world/bentobox/level/events/IslandPreLevelEvent.java b/src/main/java/world/bentobox/level/events/IslandPreLevelEvent.java index 453ab58..0845233 100644 --- a/src/main/java/world/bentobox/level/events/IslandPreLevelEvent.java +++ b/src/main/java/world/bentobox/level/events/IslandPreLevelEvent.java @@ -2,6 +2,9 @@ package world.bentobox.level.events; import java.util.UUID; +import org.bukkit.event.HandlerList; +import org.eclipse.jdt.annotation.NonNull; + import world.bentobox.bentobox.api.events.IslandBaseEvent; import world.bentobox.bentobox.database.objects.Island; @@ -13,6 +16,16 @@ import world.bentobox.bentobox.database.objects.Island; public class IslandPreLevelEvent extends IslandBaseEvent { private final UUID targetPlayer; + private static final HandlerList handlers = new HandlerList(); + + @Override + public @NonNull HandlerList getHandlers() { + return getHandlerList(); + } + + public static HandlerList getHandlerList() { + return handlers; + } /** diff --git a/src/main/resources/addon.yml b/src/main/resources/addon.yml index 181fe2c..d7e5b6d 100755 --- a/src/main/resources/addon.yml +++ b/src/main/resources/addon.yml @@ -2,7 +2,7 @@ name: Level main: world.bentobox.level.Level version: ${version}${build.number} icon: DIAMOND -api-version: 1.17 +api-version: 1.16.5 authors: tastybento