add has() for pebble and fix quotient

This commit is contained in:
okx-code
2022-02-15 04:22:37 +00:00
parent ff9d3a1116
commit 5115ff6c38
7 changed files with 54 additions and 13 deletions
+5 -3
View File
@@ -24,7 +24,7 @@ java {
repositories { repositories {
mavenCentral() mavenCentral()
maven { maven {
url 'https://hub.spigotmc.org/nexus/content/groups/public/' url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/'
} }
maven { maven {
url 'https://repo.extendedclip.com/content/repositories/placeholderapi/' url 'https://repo.extendedclip.com/content/repositories/placeholderapi/'
@@ -57,12 +57,14 @@ dependencies {
compileOnly ('me.clip:placeholderapi:2.10.9') { compileOnly ('me.clip:placeholderapi:2.10.9') {
exclude group: 'org.bstats' 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.astei:Superbvote:700fca43659b438cb9bb36c218a7646d2f2ef315'
compileOnly('com.github.mcMMO-Dev:mcMMO:601297') { compileOnly('com.github.mcMMO-Dev:mcMMO:601297') {
exclude group: 'com.sk89q.worldguard' 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' compileOnly 'com.github.LlmDl:Towny:25fc18a'
testImplementation 'com.github.LlmDl:Towny:25fc18a' testImplementation 'com.github.LlmDl:Towny:25fc18a'
@@ -111,7 +111,7 @@ public class PebbleMessageBuilder implements MessageBuilder {
return new TextProcessorBuilder() return new TextProcessorBuilder()
.legacy(context, plugin.getPlaceholders()) .legacy(context, plugin.getPlaceholders())
.papi(player) .papi(player)
.pebble(context, plugin.getPlaceholders()) .pebble(plugin.getLogger(), context, plugin.getPlaceholders())
.papi(player) .papi(player)
.colour() .colour()
.create(); .create();
@@ -43,6 +43,14 @@ public class RankContext {
return getRequirement(requirement); 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) { public RequirementContext getReq(String requirement, String sub) {
return getRequirement(requirement, sub); return getRequirement(requirement, sub);
} }
@@ -34,11 +34,12 @@ public class RequirementContext {
} }
public double getQuotient() { public double getQuotient() {
return getProgress() / getTotal(); double total = getTotal();
return total == 0 ? 1 : getProgress() / total;
} }
public double getPercent() { public double getPercent() {
return getProgress() / getTotal() * 100; return getQuotient() * 100;
} }
public String toString() { public String toString() {
@@ -3,6 +3,7 @@ package sh.okx.rankup.text;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.logging.Logger;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import sh.okx.rankup.placeholders.Placeholders; import sh.okx.rankup.placeholders.Placeholders;
@@ -17,8 +18,8 @@ public class TextProcessorBuilder {
return this; return this;
} }
public TextProcessorBuilder pebble(Map<String, Object> context, Placeholders options) { public TextProcessorBuilder pebble(Logger logger, Map<String, Object> context, Placeholders options) {
processors.add(new PebbleTextProcessor(context, options)); processors.add(new PebbleTextProcessor(logger, context, options));
return this; return this;
} }
@@ -11,18 +11,18 @@ import java.text.DecimalFormat;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.logging.Logger; 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.messages.pebble.InvalidRequirementException;
import sh.okx.rankup.placeholders.Placeholders; import sh.okx.rankup.placeholders.Placeholders;
import sh.okx.rankup.text.TextProcessor; import sh.okx.rankup.text.TextProcessor;
public class PebbleTextProcessor implements TextProcessor { public class PebbleTextProcessor implements TextProcessor {
private final Logger logger;
private final Map<String, Object> context; private final Map<String, Object> context;
private final Placeholders options; private final Placeholders options;
public PebbleTextProcessor(Map<String, Object> context, Placeholders options) { public PebbleTextProcessor(Logger logger, Map<String, Object> context, Placeholders options) {
this.logger = logger;
this.context = context; this.context = context;
this.options = options; this.options = options;
} }
@@ -60,7 +60,6 @@ public class PebbleTextProcessor implements TextProcessor {
if (ex.getCause() instanceof InvocationTargetException) { if (ex.getCause() instanceof InvocationTargetException) {
if (ex.getCause().getCause() instanceof InvalidRequirementException) { if (ex.getCause().getCause() instanceof InvalidRequirementException) {
InvalidRequirementException cause = (InvalidRequirementException) ex.getCause().getCause(); 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:"); logger.severe("Unknown requirement \"" + cause.getRequirement() + "\" on rank \"" + cause.getRank().getRank() + "\" in message:");
for (String line : string.split("\n")) { for (String line : string.split("\n")) {
logger.severe(line); logger.severe(line);
@@ -24,7 +24,7 @@ public class PebbleTest extends RankupTest {
list.add("L2"); list.add("L2");
list.add("L3"); list.add("L3");
ctx.put("list", list); ctx.put("list", list);
PebbleTextProcessor processor = new PebbleTextProcessor(ctx, null); PebbleTextProcessor processor = new PebbleTextProcessor(null, ctx, null);
assertEquals("L2", processor.process("{{ list[one] }}")); assertEquals("L2", processor.process("{{ list[one] }}"));
} }
@@ -42,4 +42,34 @@ public class PebbleTest extends RankupTest {
player.assertSaid("true"); player.assertSaid("true");
} }
@Test
public void testRequirementAbsent() {
PlayerMock player = server.addPlayer();
plugin.getPermissions().addGroup(player.getUniqueId(), "B");
RankElement<Rank> 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<Rank> 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");
}
} }