diff --git a/build.gradle b/build.gradle index 85372c3..aba62b1 100644 --- a/build.gradle +++ b/build.gradle @@ -1,14 +1,12 @@ plugins { id 'java' - id 'io.franzbecker.gradle-lombok' version '1.14' } group 'sh.okx' -version '3.5-beta.2' +version '3.5-beta.5' repositories { mavenCentral() - jcenter() mavenLocal() maven { url 'http://nexus.hc.to/content/repositories/pub_releases' @@ -28,6 +26,9 @@ repositories { } dependencies { + compileOnly 'org.projectlombok:lombok:1.18.6' + annotationProcessor 'org.projectlombok:lombok:1.18.6' + testCompile group: 'junit', name: 'junit', version: '4.12' compile 'org.spigotmc:spigot-api:1.13.2-R0.1-SNAPSHOT' diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 01b8bf6..f6b961f 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 7eb5e88..edeaf9e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Tue Aug 21 18:52:26 BST 2018 +#Thu Apr 11 23:41:41 GMT+01:00 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.3.1-all.zip diff --git a/src/main/java/sh/okx/rankup/Rankup.java b/src/main/java/sh/okx/rankup/Rankup.java index 4de7072..facf69b 100644 --- a/src/main/java/sh/okx/rankup/Rankup.java +++ b/src/main/java/sh/okx/rankup/Rankup.java @@ -353,7 +353,7 @@ public class Rankup extends JavaPlugin { public boolean checkRankup(Player player, boolean message) { Rank rank = rankups.getByPlayer(player); if (rankups.isLast(permissions, player)) { - getMessage(prestiges == null ? Message.NO_RANKUP : prestiges.getByPlayer(player).isLast() ? Message.NO_RANKUP : Message.MUST_PRESTIGE) + getMessage(prestiges == null ? Message.NO_RANKUP : prestiges.isLast(permissions, player) ? Message.NO_RANKUP : Message.MUST_PRESTIGE) .failIf(!message) .replaceRanks(player, rankups.getLast()) .send(player); diff --git a/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java b/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java index e9f63e3..d175069 100644 --- a/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java +++ b/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java @@ -4,6 +4,7 @@ import com.sk89q.worldedit.extension.platform.Actor; import com.sk89q.worldguard.WorldGuard; import lombok.RequiredArgsConstructor; import me.clip.placeholderapi.expansion.PlaceholderExpansion; +import org.apache.commons.lang.Validate; import org.bukkit.entity.Player; import sh.okx.rankup.Rankup; import sh.okx.rankup.prestige.Prestige; @@ -29,14 +30,11 @@ public class RankupExpansion extends PlaceholderExpansion { Rankups rankups = plugin.getRankups(); Rank rank = rankups.getByPlayer(player); - Rank nextRank = rank == null ? null : rankups.next(rank); Prestiges prestiges = plugin.getPrestiges(); Prestige prestige = null; - Prestige nextPrestige = null; if (prestiges != null) { prestige = prestiges.getByPlayer(player); - nextPrestige = prestiges.next(prestige); } if (params.startsWith("requirement_")) { @@ -59,17 +57,30 @@ public class RankupExpansion extends PlaceholderExpansion { switch (params) { case "current_prestige": - return Objects.requireNonNull(prestige, "Using current_prestige placeholder but prestiging is disabled").getRank(); + requirePrestiging(prestiges, params); + if (prestiges.isLast(plugin.getPermissions(), player)) { + return prestiges.getLast(); + } else if (prestige == null || prestige.getRank() == null) { + return getPlaceholder("no-prestige"); + } else { + return prestige.getRank(); + } case "next_prestige": - return orElsePlaceholder(nextPrestige, Prestige::getRank, "highest-rank"); + requirePrestiging(prestiges, params); + if (prestiges.isLast(plugin.getPermissions(), player)) { + return getPlaceholder("highest-rank"); + } + return orElse(prestige, Prestige::getNext, prestiges.getFirst().getNext()); case "prestige_money": + requirePrestiging(prestiges, params); return String.valueOf(simplify(orElse(prestige, r -> r.isIn(player) ? r.getRequirement("money").getValueDouble() : 0, 0))); case "prestige_money_formatted": + requirePrestiging(prestiges, params); return plugin.formatMoney(orElse(prestige, r -> r.isIn(player) ? r.getRequirement("money").getValueDouble() : 0, 0D)); case "current_rank": return orElsePlaceholder(rank, Rank::getRank, "not-in-ladder"); case "next_rank": - return orElsePlaceholder(rank, r -> orElsePlaceholder(nextRank, Rank::getRank, "highest-rank"), "not-in-ladder"); + return orElsePlaceholder(rank, r -> orElsePlaceholder(rank, Rank::getNext, "highest-rank"), "not-in-ladder"); case "money": return String.valueOf(orElse(rank, r -> simplify(r.getRequirement("money").getValueDouble()), 0)); case "money_formatted": @@ -91,6 +102,10 @@ public class RankupExpansion extends PlaceholderExpansion { } } + private void requirePrestiging(Prestiges prestiges, String params) { + Objects.requireNonNull(prestiges, "Using %rankup_" + params + "% prestige placeholder but prestiging is disabled."); + } + private String getPlaceholderRequirement(Player player, Rank rank, String requirementName, String params) { if (rank == null) { return ""; diff --git a/src/main/java/sh/okx/rankup/prestige/Prestige.java b/src/main/java/sh/okx/rankup/prestige/Prestige.java index d3bb72d..ca4998b 100644 --- a/src/main/java/sh/okx/rankup/prestige/Prestige.java +++ b/src/main/java/sh/okx/rankup/prestige/Prestige.java @@ -2,18 +2,18 @@ package sh.okx.rankup.prestige; import lombok.EqualsAndHashCode; import lombok.Getter; -import org.apache.commons.lang3.Validate; +import lombok.ToString; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; import sh.okx.rankup.Rankup; import sh.okx.rankup.ranks.Rank; import sh.okx.rankup.requirements.Requirement; -import java.util.HashSet; import java.util.List; import java.util.Set; @EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) public class Prestige extends Rank { @Getter private final String from; diff --git a/src/main/java/sh/okx/rankup/prestige/Prestiges.java b/src/main/java/sh/okx/rankup/prestige/Prestiges.java index 2e9cd89..968914b 100644 --- a/src/main/java/sh/okx/rankup/prestige/Prestiges.java +++ b/src/main/java/sh/okx/rankup/prestige/Prestiges.java @@ -17,6 +17,7 @@ public class Prestiges extends RankList { return prestige; } } - throw new IllegalStateException("No prestige found for first prestige (first prestige is counted as a prestige without a rank set)"); + throw new IllegalStateException("No prestige found for first prestige (first prestige is counted as a prestige without a rank set)." + + "Disable prestiges in config.yml if you don't want any."); } } diff --git a/src/main/java/sh/okx/rankup/ranks/Rank.java b/src/main/java/sh/okx/rankup/ranks/Rank.java index 1be2a86..5cb0e8d 100644 --- a/src/main/java/sh/okx/rankup/ranks/Rank.java +++ b/src/main/java/sh/okx/rankup/ranks/Rank.java @@ -4,7 +4,7 @@ import lombok.AccessLevel; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.RequiredArgsConstructor; -import org.apache.commons.lang3.Validate; +import lombok.ToString; import org.bukkit.Bukkit; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; @@ -13,11 +13,11 @@ import sh.okx.rankup.messages.MessageBuilder; import sh.okx.rankup.requirements.DeductibleRequirement; import sh.okx.rankup.requirements.Requirement; -import java.util.HashSet; import java.util.List; import java.util.Set; @EqualsAndHashCode +@ToString @RequiredArgsConstructor(access = AccessLevel.PROTECTED) public class Rank { @Getter diff --git a/src/main/java/sh/okx/rankup/requirements/DeductibleRequirement.java b/src/main/java/sh/okx/rankup/requirements/DeductibleRequirement.java index 40d6b29..f95f2f9 100644 --- a/src/main/java/sh/okx/rankup/requirements/DeductibleRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/DeductibleRequirement.java @@ -19,6 +19,11 @@ public abstract class DeductibleRequirement extends ProgressiveRequirement { * and has returned true immediately prior to this. * * @param player the player to take from + * @param multiplier The multiplier for the value */ - public abstract void apply(Player player); + public abstract void apply(Player player, double multiplier); + + public final void apply(Player player) { + apply(player, 1); + } } diff --git a/src/main/java/sh/okx/rankup/requirements/ProgressiveRequirement.java b/src/main/java/sh/okx/rankup/requirements/ProgressiveRequirement.java index 284cd89..831140b 100644 --- a/src/main/java/sh/okx/rankup/requirements/ProgressiveRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/ProgressiveRequirement.java @@ -9,6 +9,10 @@ public abstract class ProgressiveRequirement extends Requirement { super(plugin, name); } + public ProgressiveRequirement(Rankup plugin, String name, boolean subRequirement) { + super(plugin, name, subRequirement); + } + protected ProgressiveRequirement(Requirement clone) { super(clone); } @@ -19,8 +23,12 @@ public abstract class ProgressiveRequirement extends Requirement { } @Override - public double getRemaining(Player player) { - return Math.max(0, getValueDouble() - getProgress(player)); + public final double getRemaining(Player player) { + return getRemaining(player, 1); + } + + public double getRemaining(Player player, double multiplier) { + return Math.max(0, (multiplier * getValueDouble()) - getProgress(player)); } public abstract double getProgress(Player player); diff --git a/src/main/java/sh/okx/rankup/requirements/Requirement.java b/src/main/java/sh/okx/rankup/requirements/Requirement.java index e6e911c..5b0cb69 100644 --- a/src/main/java/sh/okx/rankup/requirements/Requirement.java +++ b/src/main/java/sh/okx/rankup/requirements/Requirement.java @@ -12,10 +12,16 @@ public abstract class Requirement implements Cloneable { private String value; @Getter private String sub; + private boolean subRequirement; public Requirement(Rankup plugin, String name) { + this(plugin, name, false); + } + + public Requirement(Rankup plugin, String name, boolean subRequirement) { this.plugin = plugin; this.name = name; + this.subRequirement = subRequirement; } protected Requirement(Requirement clone) { @@ -71,8 +77,8 @@ public abstract class Requirement implements Cloneable { return check(player) ? 0 : 1; } - public boolean hasSubRequirement() { - return false; + public final boolean hasSubRequirement() { + return subRequirement; } public abstract Requirement clone(); diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/BlockBreakRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/BlockBreakRequirement.java index a6b70c2..325ca0a 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/BlockBreakRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/BlockBreakRequirement.java @@ -9,7 +9,7 @@ import sh.okx.rankup.requirements.Requirement; public class BlockBreakRequirement extends ProgressiveRequirement { public BlockBreakRequirement(Rankup plugin) { - super(plugin, "block-break"); + super(plugin, "block-break", true); } @Override @@ -30,9 +30,4 @@ public class BlockBreakRequirement extends ProgressiveRequirement { public Requirement clone() { return new BlockBreakRequirement(this); } - - @Override - public boolean hasSubRequirement() { - return true; - } } diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/MobKillsRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/MobKillsRequirement.java index 5f7b929..11320c9 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/MobKillsRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/MobKillsRequirement.java @@ -9,7 +9,7 @@ import sh.okx.rankup.requirements.Requirement; public class MobKillsRequirement extends ProgressiveRequirement { public MobKillsRequirement(Rankup plugin) { - super(plugin, "mob-kills"); + super(plugin, "mob-kills", true); } protected MobKillsRequirement(Requirement clone) { @@ -25,9 +25,4 @@ public class MobKillsRequirement extends ProgressiveRequirement { public Requirement clone() { return new MobKillsRequirement(this); } - - @Override - public boolean hasSubRequirement() { - return true; - } } diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/MoneyRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/MoneyRequirement.java index 61566d3..dacaf3d 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/MoneyRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/MoneyRequirement.java @@ -16,9 +16,9 @@ public class MoneyRequirement extends DeductibleRequirement { } @Override - public void apply(Player player) { + public void apply(Player player, double multiplier) { Economy economy = plugin.getEconomy(); - economy.withdrawPlayer(player, getValueDouble()); + economy.withdrawPlayer(player, getValueDouble() * multiplier); } @Override diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/WorldRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/WorldRequirement.java index 53f2a86..d9b7409 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/WorldRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/WorldRequirement.java @@ -15,7 +15,11 @@ public class WorldRequirement extends Requirement { @Override public boolean check(Player player) { - return player.getWorld().getName().equalsIgnoreCase(getValueString()); + String[] worlds = getValuesString(); + for (String world : worlds) { + return player.getWorld().getName().equalsIgnoreCase(world); + } + return false; } @Override diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/XpLevelRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/XpLevelRequirement.java index 45922e8..3ce78dc 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/XpLevelRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/XpLevelRequirement.java @@ -15,8 +15,8 @@ public class XpLevelRequirement extends DeductibleRequirement { } @Override - public void apply(Player player) { - player.setLevel(player.getLevel() - getValueInt()); + public void apply(Player player, double multiplier) { + player.setLevel(player.getLevel() - (int) Math.round(getValueInt() * multiplier)); } @Override diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOSkillRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOSkillRequirement.java index 55180ad..db133e2 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOSkillRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOSkillRequirement.java @@ -7,7 +7,7 @@ import sh.okx.rankup.requirements.ProgressiveRequirement; public class McMMOSkillRequirement extends ProgressiveRequirement { public McMMOSkillRequirement(Rankup plugin) { - super(plugin, "mcmmo"); + super(plugin, "mcmmo", true); } protected McMMOSkillRequirement(McMMOSkillRequirement clone) { @@ -19,11 +19,6 @@ public class McMMOSkillRequirement extends ProgressiveRequirement { return McMMOSkillUtil.getInstance().getSkillLevel(player, getValueString()); } - @Override - public boolean hasSubRequirement() { - return true; - } - @Override public Requirement clone() { return new McMMOSkillRequirement(this); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 0732139..512ce9b 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -61,6 +61,8 @@ text: # confirm by typing /rankup again timeout: 10 +# placeholders: +# https://github.com/okx-code/Rankup3/wiki/PAPI-Placeholders placeholders: # format for money. for more information, see # https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html @@ -70,7 +72,9 @@ placeholders: simple-format: "#.##" # used for current_rank and next_rank placeholders when a player is not in anything in rankups.yml not-in-ladder: "None" - # used in next_rank placeholders when there is no rankup + # used in the current_prestige placeholders when a player hasn't prestiged yet + no-prestige: "None" + # used in the next_rank and next_prestige placeholders when there is no rankup/prestige highest-rank: "None" # what to shorten money by. diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 161a4ae..1bcc4e2 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: Rankup -version: 3.5-beta.2 +version: 3.5-beta.5 main: sh.okx.rankup.Rankup author: Okx depend: [Vault]