- patch placeholders
- fix an error if you have setup ranks incorrectly
This commit is contained in:
okx-code
2020-09-23 17:20:55 +01:00
parent 598962592b
commit 2bb17a0b71
4 changed files with 179 additions and 172 deletions
+1 -1
View File
@@ -4,7 +4,7 @@ plugins {
}
group 'sh.okx'
version '3.9'
version '3.9.1'
repositories {
mavenCentral()
+35 -33
View File
@@ -1,33 +1,35 @@
package sh.okx.rankup.ranks;
import org.bukkit.configuration.ConfigurationSection;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.ranks.requirements.RankRequirements;
import sh.okx.rankup.ranks.requirements.RankRequirementsFactory;
import java.util.List;
public class Rankup extends Rank {
public static Rankup deserialize(RankupPlugin plugin, ConfigurationSection section) {
String next = section.getString("next");
String rank = section.getString("rank");
if (next != null && next.isEmpty()) {
plugin.getLogger().warning("Rankup section '" + section.getName() + "' has a blank 'next' field, will be ignored.");
return null;
}
return new Rankup(section,
plugin,
next,
rank,
RankRequirementsFactory.getRequirements(plugin, section),
section.getStringList("commands"));
}
protected Rankup(ConfigurationSection section, RankupPlugin plugin, String next, String rank,
RankRequirements requirements,
List<String> commands) {
super(section, plugin, next, rank, requirements, commands);
}
}
package sh.okx.rankup.ranks;
import org.bukkit.configuration.ConfigurationSection;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.ranks.requirements.RankRequirements;
import sh.okx.rankup.ranks.requirements.RankRequirementsFactory;
import java.util.List;
public class Rankup extends Rank {
public static Rankup deserialize(RankupPlugin plugin, ConfigurationSection section) {
String next = section.getString("next");
String rank = section.getString("rank");
if (next == null || next.isEmpty()) {
plugin.getLogger().warning("Having a final rank (for example: \"Z: rank: 'Z'\") from 3.4.2 or earlier should no longer be used.\n"
+ "It is safe to just delete the final rank " + section.getName() + "");
plugin.getLogger().warning("Rankup section '" + section.getName() + "' has a blank 'next' field, will be ignored.");
return null;
}
return new Rankup(section,
plugin,
next,
rank,
RankRequirementsFactory.getRequirements(plugin, section),
section.getStringList("commands"));
}
protected Rankup(ConfigurationSection section, RankupPlugin plugin, String next, String rank,
RankRequirements requirements,
List<String> commands) {
super(section, plugin, next, rank, requirements, commands);
}
}
@@ -1,34 +1,39 @@
package sh.okx.rankup.requirements;
import org.bukkit.entity.Player;
import sh.okx.rankup.RankupPlugin;
public abstract class ProgressiveRequirement extends Requirement {
public ProgressiveRequirement(RankupPlugin plugin, String name) {
super(plugin, name);
}
public ProgressiveRequirement(RankupPlugin plugin, String name, boolean subRequirement) {
super(plugin, name, subRequirement);
}
protected ProgressiveRequirement(Requirement clone) {
super(clone);
}
@Override
public boolean check(Player player) {
return getRemaining(player) <= 0;
}
@Override
public final double getRemaining(Player player) {
return getRemaining(player, 1);
}
public double getRemaining(Player player, double multiplier) {
return Math.max(0, (multiplier * getTotal(player)) - getProgress(player));
}
public abstract double getProgress(Player player);
}
package sh.okx.rankup.requirements;
import org.bukkit.entity.Player;
import sh.okx.rankup.RankupPlugin;
public abstract class ProgressiveRequirement extends Requirement {
public ProgressiveRequirement(RankupPlugin plugin, String name) {
super(plugin, name);
}
public ProgressiveRequirement(RankupPlugin plugin, String name, boolean subRequirement) {
super(plugin, name, subRequirement);
}
protected ProgressiveRequirement(Requirement clone) {
super(clone);
}
@Override
public boolean check(Player player) {
return getRemaining(player) <= 0;
}
@Override
public final double getRemaining(Player player) {
return getRemaining(player, 1);
}
public double getRemaining(Player player, double multiplier) {
return Math.max(0, (multiplier * getTotal(player)) - getProgress(player));
}
@Override
public double getTotal(Player player) {
return getValueDouble();
}
public abstract double getProgress(Player player);
}
@@ -1,104 +1,104 @@
package sh.okx.rankup.requirements;
import lombok.Getter;
import org.bukkit.entity.Player;
import sh.okx.rankup.RankupPlugin;
public abstract class Requirement implements Cloneable {
protected final RankupPlugin plugin;
@Getter
protected final String name;
private String value;
@Getter
private String sub;
private boolean subRequirement;
public Requirement(RankupPlugin plugin, String name) {
this(plugin, name, false);
}
public Requirement(RankupPlugin plugin, String name, boolean subRequirement) {
this.plugin = plugin;
this.name = name;
this.subRequirement = subRequirement;
}
protected Requirement(Requirement clone) {
this.plugin = clone.plugin;
this.name = clone.name;
this.value = clone.value;
this.sub = clone.sub;
this.subRequirement = clone.subRequirement;
}
public void setValue(String value) {
if (hasSubRequirement()) {
String[] parts = value.split(" ", 2);
if (parts.length < 2) {
throw new IllegalArgumentException("Amount and sub-requirement not present for requirement '" + getName() + "'. You must use the format '" + getName() + " <sub-requirement> <amount>'");
}
this.sub = parts[0];
this.value = parts[1];
} else {
this.value = value;
}
}
public String getValueString() {
return value;
}
public String[] getValuesString() {
return value.split(" ");
}
public double getValueDouble() {
return Double.parseDouble(value);
}
public int getValueInt() {
return Integer.parseInt(value);
}
public boolean getValueBoolean() {
return Boolean.parseBoolean(value);
}
public String getFullName() {
if (hasSubRequirement()) {
return name + "#" + sub;
} else {
return name;
}
}
/**
* Check if a player meets this requirement
*
* @param player the player to check
* @return true if they meet the requirement, false otherwise
*/
public abstract boolean check(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.
*
* @param player the player to find the remaining amount of
* @return the remaining amount needed. Should be non-negative.
*/
public double getRemaining(Player player) {
return check(player) ? 0 : 1;
}
public final boolean hasSubRequirement() {
return subRequirement;
}
public abstract Requirement clone();
public double getTotal(Player player) {
return getValueDouble();
}
}
package sh.okx.rankup.requirements;
import lombok.Getter;
import org.bukkit.entity.Player;
import sh.okx.rankup.RankupPlugin;
public abstract class Requirement implements Cloneable {
protected final RankupPlugin plugin;
@Getter
protected final String name;
private String value;
@Getter
private String sub;
private boolean subRequirement;
public Requirement(RankupPlugin plugin, String name) {
this(plugin, name, false);
}
public Requirement(RankupPlugin plugin, String name, boolean subRequirement) {
this.plugin = plugin;
this.name = name;
this.subRequirement = subRequirement;
}
protected Requirement(Requirement clone) {
this.plugin = clone.plugin;
this.name = clone.name;
this.value = clone.value;
this.sub = clone.sub;
this.subRequirement = clone.subRequirement;
}
public void setValue(String value) {
if (hasSubRequirement()) {
String[] parts = value.split(" ", 2);
if (parts.length < 2) {
throw new IllegalArgumentException("Amount and sub-requirement not present for requirement '" + getName() + "'. You must use the format '" + getName() + " <sub-requirement> <amount>'");
}
this.sub = parts[0];
this.value = parts[1];
} else {
this.value = value;
}
}
public String getValueString() {
return value;
}
public String[] getValuesString() {
return value.split(" ");
}
public double getValueDouble() {
return Double.parseDouble(value);
}
public int getValueInt() {
return Integer.parseInt(value);
}
public boolean getValueBoolean() {
return Boolean.parseBoolean(value);
}
public String getFullName() {
if (hasSubRequirement()) {
return name + "#" + sub;
} else {
return name;
}
}
/**
* Check if a player meets this requirement
*
* @param player the player to check
* @return true if they meet the requirement, false otherwise
*/
public abstract boolean check(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.
*
* @param player the player to find the remaining amount of
* @return the remaining amount needed. Should be non-negative.
*/
public double getRemaining(Player player) {
return check(player) ? 0 : 1;
}
public final boolean hasSubRequirement() {
return subRequirement;
}
public abstract Requirement clone();
public double getTotal(Player player) {
return 1;
}
}