update to 3.2-beta

add new requirements: placeholder and mcmmo-<skill>
This commit is contained in:
okx-code
2018-10-21 09:38:21 +01:00
parent 3bcd8ae455
commit 7394cf2b87
7 changed files with 143 additions and 16 deletions
+9 -1
View File
@@ -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());
@@ -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":
@@ -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() {
@@ -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);
}
}
@@ -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);
}
}