improve placeholders & add group requirement
removed: %rankup_rank_requirement_<rank>_<requirement>_left% %rankup_rank_requirement_<rank>_<requirement>_percent_left% %rankup_rank_requirement_<rank>_<requirement>_percent_done%
This commit is contained in:
@@ -9,6 +9,7 @@ import org.bukkit.entity.Player;
|
||||
import sh.okx.rankup.Rankup;
|
||||
import sh.okx.rankup.messages.MessageBuilder;
|
||||
import sh.okx.rankup.messages.Variable;
|
||||
import sh.okx.rankup.ranks.requirements.DeductibleRequirement;
|
||||
import sh.okx.rankup.ranks.requirements.Requirement;
|
||||
|
||||
import java.util.HashSet;
|
||||
@@ -40,9 +41,8 @@ public class Rank {
|
||||
if(requirementsSection != null) {
|
||||
for (Map.Entry<String, Object> entry : requirementsSection.getValues(false).entrySet()) {
|
||||
String name = entry.getKey();
|
||||
double amount = Double.parseDouble(String.valueOf(entry.getValue()).replace(",", ""));
|
||||
|
||||
Requirement requirement = plugin.getRequirementRegistry().newRequirement(name, amount);
|
||||
String value = String.valueOf(entry.getValue());
|
||||
Requirement requirement = plugin.getRequirementRegistry().newRequirement(name, value);
|
||||
if (requirement == null) {
|
||||
plugin.getLogger().warning("Unknown requirement " + name);
|
||||
} else {
|
||||
@@ -113,7 +113,9 @@ public class Rank {
|
||||
|
||||
public void applyRequirements(Player player) {
|
||||
for(Requirement requirement : requirements) {
|
||||
requirement.apply(player);
|
||||
if(requirement instanceof DeductibleRequirement) {
|
||||
((DeductibleRequirement) requirement).apply(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
package sh.okx.rankup.ranks.requirements;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import sh.okx.rankup.Rankup;
|
||||
|
||||
public abstract class DeductibleRequirement extends Requirement {
|
||||
public DeductibleRequirement(Rankup plugin, String name) {
|
||||
super(plugin, name);
|
||||
}
|
||||
|
||||
protected DeductibleRequirement(Requirement clone) {
|
||||
super(clone);
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply the effect of this requirement to the player.
|
||||
* For money, this could be taking money away from the player.
|
||||
* You can assume that <code>Requirement#check(Player)</code> has been called,
|
||||
* and has returned true immediately prior to this.
|
||||
* @param player the player to take from
|
||||
*/
|
||||
public abstract void apply(Player player);
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package sh.okx.rankup.ranks.requirements;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import sh.okx.rankup.Rankup;
|
||||
|
||||
public class GroupRequirement extends Requirement {
|
||||
public GroupRequirement(Rankup plugin, String name) {
|
||||
super(plugin, name);
|
||||
}
|
||||
|
||||
protected GroupRequirement(Requirement clone) {
|
||||
super(clone);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean check(Player player) {
|
||||
OUTER:
|
||||
for(String requiredGroup : getValueString().split(" ")) {
|
||||
for(String group : plugin.getPermissions().getPlayerGroups(player)) {
|
||||
if(group.equalsIgnoreCase(requiredGroup)) {
|
||||
continue OUTER;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Requirement clone() {
|
||||
return new GroupRequirement(this);
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@ import net.milkbowl.vault.economy.Economy;
|
||||
import org.bukkit.entity.Player;
|
||||
import sh.okx.rankup.Rankup;
|
||||
|
||||
public class MoneyRequirement extends Requirement {
|
||||
public class MoneyRequirement extends DeductibleRequirement {
|
||||
public MoneyRequirement(Rankup plugin, String name) {
|
||||
super(plugin, name);
|
||||
}
|
||||
@@ -17,18 +17,18 @@ public class MoneyRequirement extends Requirement {
|
||||
public boolean check(Player player) {
|
||||
Economy economy = plugin.getEconomy();
|
||||
double balance = economy.getBalance(player);
|
||||
return balance >= amount;
|
||||
return balance >= getValueDouble();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply(Player player) {
|
||||
Economy economy = plugin.getEconomy();
|
||||
economy.withdrawPlayer(player, amount);
|
||||
economy.withdrawPlayer(player, getValueDouble());
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getRemaining(Player player) {
|
||||
return Math.max(0, amount - plugin.getEconomy().getBalance(player));
|
||||
return Math.max(0, getValueDouble() - plugin.getEconomy().getBalance(player));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -25,17 +25,12 @@ public class PlaytimeMinutesRequirement extends Requirement {
|
||||
|
||||
@Override
|
||||
public boolean check(Player player) {
|
||||
return player.getStatistic(playOneTick) * TICKS_PER_MINUTE >= amount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply(Player player) {
|
||||
// well, we can't really take hours of playtime away, can we?
|
||||
return player.getStatistic(playOneTick) * TICKS_PER_MINUTE >= getValueDouble();
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getRemaining(Player player) {
|
||||
return Math.max(0, amount - (player.getStatistic(playOneTick) * TICKS_PER_MINUTE));
|
||||
return Math.max(0, getValueDouble() - (player.getStatistic(playOneTick) * TICKS_PER_MINUTE));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -9,9 +9,7 @@ public abstract class Requirement implements Cloneable {
|
||||
protected Rankup plugin;
|
||||
@Getter
|
||||
protected String name;
|
||||
@Getter
|
||||
@Setter
|
||||
protected double amount;
|
||||
private String value;
|
||||
|
||||
public Requirement(Rankup plugin, String name) {
|
||||
this.plugin = plugin;
|
||||
@@ -19,13 +17,30 @@ public abstract class Requirement implements Cloneable {
|
||||
}
|
||||
|
||||
protected Requirement(Requirement clone) {
|
||||
if(clone != null) {
|
||||
if (clone != null) {
|
||||
this.plugin = clone.plugin;
|
||||
this.name = clone.name;
|
||||
this.amount = clone.amount;
|
||||
this.value = clone.value;
|
||||
}
|
||||
}
|
||||
|
||||
public void setValue(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String getValueString() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public double getValueDouble() {
|
||||
return Double.parseDouble(value);
|
||||
}
|
||||
|
||||
public int getValueInt() {
|
||||
return Integer.parseInt(value);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if a player meets this requirement
|
||||
* @param player the player to check
|
||||
@@ -33,15 +48,6 @@ public abstract class Requirement implements Cloneable {
|
||||
*/
|
||||
public abstract boolean check(Player player);
|
||||
|
||||
/**
|
||||
* Apply the effect of this requirement to the player.
|
||||
* For money, this could be taking money away from the player.
|
||||
* You can assume that <code>Requirement#check(Player)</code> has been called,
|
||||
* and has returned true immediately prior to this.
|
||||
* @param player the player to take from
|
||||
*/
|
||||
public abstract void apply(Player player);
|
||||
|
||||
/**
|
||||
* Get the remaining amount needed for <code>Requirement#check(Player)</code> to yield true.
|
||||
* This is not required and is only used in placeholders.
|
||||
@@ -49,7 +55,7 @@ public abstract class Requirement implements Cloneable {
|
||||
* @return the remaining amount needed. Should be non-negative.
|
||||
*/
|
||||
public double getRemaining(Player player) {
|
||||
return amount;
|
||||
return getValueDouble();
|
||||
}
|
||||
public abstract Requirement clone();
|
||||
}
|
||||
|
||||
@@ -10,11 +10,11 @@ public class RequirementRegistry {
|
||||
requirements.add(requirement);
|
||||
}
|
||||
|
||||
public Requirement newRequirement(String name, double amount) {
|
||||
public Requirement newRequirement(String name, String value) {
|
||||
for(Requirement requirement : requirements) {
|
||||
if(requirement.getName().equalsIgnoreCase(name)) {
|
||||
Requirement newRequirement = requirement.clone();
|
||||
newRequirement.setAmount(amount);
|
||||
newRequirement.setValue(value);
|
||||
return newRequirement;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package sh.okx.rankup.ranks.requirements;
|
||||
import org.bukkit.entity.Player;
|
||||
import sh.okx.rankup.Rankup;
|
||||
|
||||
public class XpLevelRequirement extends Requirement {
|
||||
public class XpLevelRequirement extends DeductibleRequirement {
|
||||
public XpLevelRequirement(Rankup plugin, String name) {
|
||||
super(plugin, name);
|
||||
}
|
||||
@@ -12,25 +12,19 @@ public class XpLevelRequirement extends Requirement {
|
||||
super(clone);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAmount(double amount) {
|
||||
// experience level should be a whole number
|
||||
super.setAmount(Math.round(amount));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean check(Player player) {
|
||||
return player.getLevel() >= amount;
|
||||
return player.getLevel() >= getValueInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply(Player player) {
|
||||
player.setLevel(player.getLevel() - (int) amount);
|
||||
player.setLevel(player.getLevel() - getValueInt());
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getRemaining(Player player) {
|
||||
return Math.max(0, amount - player.getLevel());
|
||||
return Math.max(0, getValueInt() - player.getLevel());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user