diff --git a/build.gradle b/build.gradle index 4dde130..d31f4b0 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ java { repositories { mavenCentral() maven { - url 'https://hub.spigotmc.org/nexus/content/groups/public/' + url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' } maven { url 'https://repo.extendedclip.com/content/repositories/placeholderapi/' @@ -57,12 +57,14 @@ dependencies { compileOnly ('me.clip:placeholderapi:2.10.9') { exclude group: 'org.bstats' } - compileOnly 'com.github.pyvesb:advanced-achievements:6.7.2' + compileOnly 'com.github.pyvesb:advanced-achievements:6.7.2' compileOnly 'com.github.astei:Superbvote:700fca43659b438cb9bb36c218a7646d2f2ef315' compileOnly('com.github.mcMMO-Dev:mcMMO:601297') { exclude group: 'com.sk89q.worldguard' } - compileOnly 'com.github.BenCodez:VotingPlugin:6.8.1' + compileOnly ('com.github.BenCodez:VotingPlugin:6.8.1') { + transitive = false + } compileOnly 'com.github.LlmDl:Towny:25fc18a' testImplementation 'com.github.LlmDl:Towny:25fc18a' diff --git a/src/main/java/sh/okx/rankup/messages/pebble/PebbleMessageBuilder.java b/src/main/java/sh/okx/rankup/messages/pebble/PebbleMessageBuilder.java index 0110c42..857367a 100644 --- a/src/main/java/sh/okx/rankup/messages/pebble/PebbleMessageBuilder.java +++ b/src/main/java/sh/okx/rankup/messages/pebble/PebbleMessageBuilder.java @@ -111,7 +111,7 @@ public class PebbleMessageBuilder implements MessageBuilder { return new TextProcessorBuilder() .legacy(context, plugin.getPlaceholders()) .papi(player) - .pebble(context, plugin.getPlaceholders()) + .pebble(plugin.getLogger(), context, plugin.getPlaceholders()) .papi(player) .colour() .create(); diff --git a/src/main/java/sh/okx/rankup/messages/pebble/RankContext.java b/src/main/java/sh/okx/rankup/messages/pebble/RankContext.java index 8589647..d5499a2 100644 --- a/src/main/java/sh/okx/rankup/messages/pebble/RankContext.java +++ b/src/main/java/sh/okx/rankup/messages/pebble/RankContext.java @@ -43,6 +43,14 @@ public class RankContext { return getRequirement(requirement); } + public boolean getHas(String requirement) { + return rank.getRequirement(player, requirement) != null; + } + + public boolean getHas(String requirement, String sub) { + return rank.getRequirement(player, requirement + "#" + sub) != null; + } + public RequirementContext getReq(String requirement, String sub) { return getRequirement(requirement, sub); } diff --git a/src/main/java/sh/okx/rankup/messages/pebble/RequirementContext.java b/src/main/java/sh/okx/rankup/messages/pebble/RequirementContext.java index edcf1b3..2e80d0c 100644 --- a/src/main/java/sh/okx/rankup/messages/pebble/RequirementContext.java +++ b/src/main/java/sh/okx/rankup/messages/pebble/RequirementContext.java @@ -34,11 +34,12 @@ public class RequirementContext { } public double getQuotient() { - return getProgress() / getTotal(); + double total = getTotal(); + return total == 0 ? 1 : getProgress() / total; } public double getPercent() { - return getProgress() / getTotal() * 100; + return getQuotient() * 100; } public String toString() { diff --git a/src/main/java/sh/okx/rankup/text/TextProcessorBuilder.java b/src/main/java/sh/okx/rankup/text/TextProcessorBuilder.java index 1baa96d..be8e5fc 100644 --- a/src/main/java/sh/okx/rankup/text/TextProcessorBuilder.java +++ b/src/main/java/sh/okx/rankup/text/TextProcessorBuilder.java @@ -3,6 +3,7 @@ package sh.okx.rankup.text; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.logging.Logger; import org.bukkit.entity.Player; import org.jetbrains.annotations.Nullable; import sh.okx.rankup.placeholders.Placeholders; @@ -17,8 +18,8 @@ public class TextProcessorBuilder { return this; } - public TextProcessorBuilder pebble(Map context, Placeholders options) { - processors.add(new PebbleTextProcessor(context, options)); + public TextProcessorBuilder pebble(Logger logger, Map context, Placeholders options) { + processors.add(new PebbleTextProcessor(logger, context, options)); return this; } diff --git a/src/main/java/sh/okx/rankup/text/pebble/PebbleTextProcessor.java b/src/main/java/sh/okx/rankup/text/pebble/PebbleTextProcessor.java index 2a2878c..adb88ad 100644 --- a/src/main/java/sh/okx/rankup/text/pebble/PebbleTextProcessor.java +++ b/src/main/java/sh/okx/rankup/text/pebble/PebbleTextProcessor.java @@ -11,18 +11,18 @@ import java.text.DecimalFormat; import java.util.HashMap; import java.util.Map; import java.util.logging.Logger; -import org.bukkit.plugin.java.JavaPlugin; -import sh.okx.rankup.RankupPlugin; import sh.okx.rankup.messages.pebble.InvalidRequirementException; import sh.okx.rankup.placeholders.Placeholders; import sh.okx.rankup.text.TextProcessor; public class PebbleTextProcessor implements TextProcessor { + private final Logger logger; private final Map context; private final Placeholders options; - public PebbleTextProcessor(Map context, Placeholders options) { + public PebbleTextProcessor(Logger logger, Map context, Placeholders options) { + this.logger = logger; this.context = context; this.options = options; } @@ -60,7 +60,6 @@ public class PebbleTextProcessor implements TextProcessor { if (ex.getCause() instanceof InvocationTargetException) { if (ex.getCause().getCause() instanceof InvalidRequirementException) { InvalidRequirementException cause = (InvalidRequirementException) ex.getCause().getCause(); - Logger logger = JavaPlugin.getPlugin(RankupPlugin.class).getLogger(); logger.severe("Unknown requirement \"" + cause.getRequirement() + "\" on rank \"" + cause.getRank().getRank() + "\" in message:"); for (String line : string.split("\n")) { logger.severe(line); diff --git a/src/test/java/sh/okx/rankup/pebble/PebbleTest.java b/src/test/java/sh/okx/rankup/pebble/PebbleTest.java index e0d3fde..469410f 100644 --- a/src/test/java/sh/okx/rankup/pebble/PebbleTest.java +++ b/src/test/java/sh/okx/rankup/pebble/PebbleTest.java @@ -24,7 +24,7 @@ public class PebbleTest extends RankupTest { list.add("L2"); list.add("L3"); ctx.put("list", list); - PebbleTextProcessor processor = new PebbleTextProcessor(ctx, null); + PebbleTextProcessor processor = new PebbleTextProcessor(null, ctx, null); assertEquals("L2", processor.process("{{ list[one] }}")); } @@ -42,4 +42,34 @@ public class PebbleTest extends RankupTest { player.assertSaid("true"); } + + @Test + public void testRequirementAbsent() { + PlayerMock player = server.addPlayer(); + + plugin.getPermissions().addGroup(player.getUniqueId(), "B"); + RankElement rankElement = plugin.getRankups().getByPlayer(player); + + plugin.newMessageBuilder("{{ rank.has('xp-level') ? rank.req('xp-level').total | simple : 'none' }}") + .replacePlayer(player) + .replaceOldRank(rankElement.getRank()) + .send(player); + + player.assertSaid("none"); + } + + @Test + public void testRequirementPresent() { + PlayerMock player = server.addPlayer(); + + plugin.getPermissions().addGroup(player.getUniqueId(), "C"); + RankElement rankElement = plugin.getRankups().getByPlayer(player); + + plugin.newMessageBuilder("{{ rank.has('xp-level') ? rank.req('xp-level').total | simple : 'none' }}") + .replacePlayer(player) + .replaceOldRank(rankElement.getRank()) + .send(player); + + player.assertSaid("2"); + } }