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
@@ -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();
@@ -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);
}
@@ -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() {
@@ -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<String, Object> context, Placeholders options) {
processors.add(new PebbleTextProcessor(context, options));
public TextProcessorBuilder pebble(Logger logger, Map<String, Object> context, Placeholders options) {
processors.add(new PebbleTextProcessor(logger, context, options));
return this;
}
@@ -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<String, Object> context;
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.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);
@@ -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<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");
}
}