From 7394cf2b8785b8fc40cb6dc7c268149b21f17f0f Mon Sep 17 00:00:00 2001 From: okx-code Date: Sun, 21 Oct 2018 09:38:21 +0100 Subject: [PATCH] update to 3.2-beta add new requirements: placeholder and mcmmo- --- build.gradle | 5 +- src/main/java/sh/okx/rankup/Rankup.java | 10 ++- .../rankup/placeholders/RankupExpansion.java | 2 +- .../okx/rankup/requirements/Requirement.java | 18 ++-- .../requirement/McMMOSkillRequirement.java | 36 ++++++++ .../requirement/PlaceholderRequirement.java | 84 +++++++++++++++++++ src/main/resources/plugin.yml | 4 +- 7 files changed, 143 insertions(+), 16 deletions(-) create mode 100644 src/main/java/sh/okx/rankup/requirements/requirement/McMMOSkillRequirement.java create mode 100644 src/main/java/sh/okx/rankup/requirements/requirement/PlaceholderRequirement.java diff --git a/build.gradle b/build.gradle index 2148674..c6617f5 100644 --- a/build.gradle +++ b/build.gradle @@ -4,10 +4,11 @@ plugins { } group 'sh.okx' -version '3.1.4' +version '3.2-beta' repositories { mavenCentral() + mavenLocal() jcenter() maven { url 'http://nexus.hc.to/content/repositories/pub_releases' @@ -33,4 +34,6 @@ dependencies { exclude group: 'org.bukkit' } compile 'me.clip:placeholderapi:2.9.+' + // if compiling this you will have to download and install mcMMO locally + compile 'com.gmail.nossr50.mcMMO:mcMMO:1.6.0-SNAPSHOT' } diff --git a/src/main/java/sh/okx/rankup/Rankup.java b/src/main/java/sh/okx/rankup/Rankup.java index b6f3932..8e6096a 100644 --- a/src/main/java/sh/okx/rankup/Rankup.java +++ b/src/main/java/sh/okx/rankup/Rankup.java @@ -1,7 +1,7 @@ package sh.okx.rankup; +import com.gmail.nossr50.datatypes.skills.SkillType; import lombok.Getter; -import me.clip.placeholderapi.PlaceholderAPI; import net.milkbowl.vault.economy.Economy; import net.milkbowl.vault.permission.Permission; import org.bukkit.Bukkit; @@ -37,7 +37,9 @@ import sh.okx.rankup.requirements.operation.AnyOperation; import sh.okx.rankup.requirements.operation.NoneOperation; import sh.okx.rankup.requirements.operation.OneOperation; import sh.okx.rankup.requirements.requirement.GroupRequirement; +import sh.okx.rankup.requirements.requirement.McMMOSkillRequirement; import sh.okx.rankup.requirements.requirement.MoneyRequirement; +import sh.okx.rankup.requirements.requirement.PlaceholderRequirement; import sh.okx.rankup.requirements.requirement.PermissionRequirement; import sh.okx.rankup.requirements.requirement.PlaytimeMinutesRequirement; import sh.okx.rankup.requirements.requirement.XpLevelRequirement; @@ -175,6 +177,12 @@ public class Rankup extends JavaPlugin { requirementRegistry.addRequirement(new PlaytimeMinutesRequirement(this)); requirementRegistry.addRequirement(new GroupRequirement(this)); requirementRegistry.addRequirement(new PermissionRequirement(this)); + requirementRegistry.addRequirement(new PlaceholderRequirement(this)); + if(Bukkit.getPluginManager().isPluginEnabled("mcMMO")) { + for(SkillType skill : SkillType.values()) { + requirementRegistry.addRequirement(new McMMOSkillRequirement(this, skill)); + } + } operationRegistry = new OperationRegistry(); operationRegistry.addOperation("all", new AllOperation()); diff --git a/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java b/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java index 53cd1c5..f17f0aa 100644 --- a/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java +++ b/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java @@ -103,7 +103,7 @@ public class RankupExpansion extends PlaceholderExpansion { Requirement requirement = rank.getRequirement(requirementName); switch (params) { case "": - return placeholders.getSimpleFormat().format(orElse(requirement, Requirement::getValueDouble, 0)); + return orElse(requirement, Requirement::getValueString, "0"); case "left": return placeholders.getSimpleFormat().format(orElse(requirement, r -> r.getRemaining(player), 0)); case "percent_left": diff --git a/src/main/java/sh/okx/rankup/requirements/Requirement.java b/src/main/java/sh/okx/rankup/requirements/Requirement.java index 9b9fce6..dd09fe7 100644 --- a/src/main/java/sh/okx/rankup/requirements/Requirement.java +++ b/src/main/java/sh/okx/rankup/requirements/Requirement.java @@ -1,13 +1,15 @@ package sh.okx.rankup.requirements; import lombok.Getter; +import lombok.Setter; import org.bukkit.entity.Player; import sh.okx.rankup.Rankup; public abstract class Requirement implements Cloneable { - protected Rankup plugin; + protected final Rankup plugin; @Getter - protected String name; + protected final String name; + @Setter private String value; public Requirement(Rankup plugin, String name) { @@ -16,15 +18,9 @@ public abstract class Requirement implements Cloneable { } protected Requirement(Requirement clone) { - if (clone != null) { - this.plugin = clone.plugin; - this.name = clone.name; - this.value = clone.value; - } - } - - public void setValue(String value) { - this.value = value; + this.plugin = clone.plugin; + this.name = clone.name; + this.value = clone.value; } public String getValueString() { diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/McMMOSkillRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/McMMOSkillRequirement.java new file mode 100644 index 0000000..d09f0c5 --- /dev/null +++ b/src/main/java/sh/okx/rankup/requirements/requirement/McMMOSkillRequirement.java @@ -0,0 +1,36 @@ +package sh.okx.rankup.requirements.requirement; + +import com.gmail.nossr50.datatypes.skills.SkillType; +import com.gmail.nossr50.util.player.UserManager; +import org.bukkit.entity.Player; +import sh.okx.rankup.Rankup; +import sh.okx.rankup.requirements.Requirement; + +public class McMMOSkillRequirement extends Requirement { + private SkillType skill; + + public McMMOSkillRequirement(Rankup plugin, SkillType skill) { + super(plugin, "mcmmo-" + skill.toString().toLowerCase()); + this.skill = skill; + } + + protected McMMOSkillRequirement(McMMOSkillRequirement clone) { + super(clone); + this.skill = clone.skill; + } + + @Override + public boolean check(Player player) { + return getRemaining(player) <= 0; + } + + @Override + public double getRemaining(Player player) { + return Math.max(0, getValueInt() - UserManager.getPlayer(player).getSkillLevel(skill)); + } + + @Override + public Requirement clone() { + return new McMMOSkillRequirement(this); + } +} diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/PlaceholderRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/PlaceholderRequirement.java new file mode 100644 index 0000000..ae6ea6e --- /dev/null +++ b/src/main/java/sh/okx/rankup/requirements/requirement/PlaceholderRequirement.java @@ -0,0 +1,84 @@ +package sh.okx.rankup.requirements.requirement; + +import me.clip.placeholderapi.PlaceholderAPI; +import org.bukkit.entity.Player; +import sh.okx.rankup.Rankup; +import sh.okx.rankup.requirements.Requirement; + +public class PlaceholderRequirement extends Requirement { + public PlaceholderRequirement(Rankup plugin) { + super(plugin, "placeholder"); + } + + public PlaceholderRequirement(PlaceholderRequirement clone) { + super(clone); + } + + private double getValue(Player player) { + String[] parts = getValueString().split(" ", 2); + String parsed = PlaceholderAPI.setPlaceholders(player, parts[0]); + if(!PlaceholderAPI.containsPlaceholders(parts[0]) || parsed.equals(parts[0])) { + plugin.getLogger().severe(parts[0] + " is not a PlaceholderAPI placeholder!"); + return -1; + } + double value; + try { + value = Double.parseDouble(parsed); + } catch(NumberFormatException ex) { + plugin.getLogger().severe("Parsed placeholder '" +parsed + "' is not a valid number"); + return -1; + } + return value; + } + + private double getNeeded() { + String needed = getValueString().split(" ", 2)[1]; + try { + return Double.parseDouble(needed); + } catch(NumberFormatException e) { + plugin.getLogger().severe("Needed '" + needed + "' is not a valid number!"); + return -1; + } + } + + @Override + public boolean check(Player player) { + String[] parts = getValueString().split(" "); + String parsed = PlaceholderAPI.setPlaceholders(player, parts[0]); + if(!PlaceholderAPI.containsPlaceholders(parts[0]) || parsed.equals(parts[0])) { + throw new IllegalArgumentException(parts[0] + " is not a PlaceholderAPI placeholder!"); + } + String value = parts[2]; + + // string operations + switch(parts[1]) { + case "=": + return parsed.equals(value); + } + + // numeric operations + double p = Double.parseDouble(parsed); + double v = Double.parseDouble(value); + switch(parts[1]) { + case ">": + return p > v; + case ">=": + return p >= v; + case "<": + return p < v; + case "<=": + return p <= v; + } + throw new IllegalArgumentException("Invalid operation: " + parts[1]); + } + + @Override + public double getRemaining(Player player) { + return check(player) ? 0 : 1; + } + + @Override + public Requirement clone() { + return new PlaceholderRequirement(this); + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index fd4ee4d..ee22df5 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,9 +1,9 @@ name: Rankup -version: 3.1.4 +version: 3.2-beta main: sh.okx.rankup.Rankup author: Okx depend: [Vault] -softdepend: [PlaceholderAPI] +softdepend: [PlaceholderAPI, mcMMO] api-version: 1.13 commands: