This commit is contained in:
okx-code
2020-07-17 15:16:23 +01:00
parent 55e190a5c2
commit e043cd2b1f
6 changed files with 890 additions and 826 deletions
+69 -69
View File
@@ -1,70 +1,70 @@
plugins { plugins {
id 'java' id 'java'
id "io.freefair.lombok" version "5.1.0" id "io.freefair.lombok" version "5.1.0"
} }
group 'sh.okx' group 'sh.okx'
version '3.9-beta.2' version '3.9'
repositories { repositories {
mavenCentral() mavenCentral()
mavenLocal() mavenLocal()
maven { maven {
url 'https://hub.spigotmc.org/nexus/content/groups/public/' url 'https://hub.spigotmc.org/nexus/content/groups/public/'
} }
maven { maven {
url 'https://repo.extendedclip.com/content/repositories/placeholderapi/' url 'https://repo.extendedclip.com/content/repositories/placeholderapi/'
} }
maven { maven {
url 'https://raw.github.com/PyvesB/AdvancedAchievements/mvn-repo/' url 'https://raw.github.com/PyvesB/AdvancedAchievements/mvn-repo/'
} }
// for plugins without repos, namely mcmmo, votingplugin, and towny // for plugins without repos, namely mcmmo, votingplugin, and towny
maven { maven {
url 'https://jitpack.io' url 'https://jitpack.io'
} }
} }
dependencies { dependencies {
testImplementation group: 'junit', name: 'junit', version: '4.12' testImplementation group: 'junit', name: 'junit', version: '4.12'
testImplementation 'com.github.seeseemelk:MockBukkit-v1.15:0.3.0-SNAPSHOT' testImplementation 'com.github.seeseemelk:MockBukkit-v1.15:0.3.0-SNAPSHOT'
compileOnly 'org.jetbrains:annotations:16.0.2' compileOnly 'org.jetbrains:annotations:16.0.2'
implementation 'org.spigotmc:spigot-api:1.16.1-R0.1-SNAPSHOT' implementation 'org.spigotmc:spigot-api:1.16.1-R0.1-SNAPSHOT'
implementation('com.github.Realizedd:TokenManager:3.2.4') { implementation('com.github.Realizedd:TokenManager:3.2.4') {
transitive = false transitive = false
} }
implementation('com.github.MilkBowl:VaultAPI:1.7') { implementation('com.github.MilkBowl:VaultAPI:1.7') {
exclude group: 'org.bukkit' exclude group: 'org.bukkit'
} }
implementation 'me.clip:placeholderapi:2.10.6' implementation 'me.clip:placeholderapi:2.10.6'
implementation 'com.hm.achievement:advanced-achievements-api:1.1.0' implementation 'com.hm.achievement:advanced-achievements-api:1.1.0'
implementation('com.github.mcMMO-Dev:mcMMO:601297') { implementation('com.github.mcMMO-Dev:mcMMO:601297') {
exclude group: 'com.sk89q.worldguard' exclude group: 'com.sk89q.worldguard'
} }
implementation 'com.github.Ben12345rocks:VotingPlugin:5.21.1' implementation 'com.github.Ben12345rocks:VotingPlugin:5.21.1'
implementation 'com.github.LlmDl:Towny:25fc18a' implementation 'com.github.LlmDl:Towny:25fc18a'
} }
// automatically copy the version to plugin.yml // automatically copy the version to plugin.yml
processResources { processResources {
// do this again whenever version changes // do this again whenever version changes
inputs.property 'version', project.version inputs.property 'version', project.version
// copy plugin.yml and replace version // copy plugin.yml and replace version
from(sourceSets.main.resources.srcDirs) { from(sourceSets.main.resources.srcDirs) {
include 'plugin.yml' include 'plugin.yml'
expand 'version': project.version expand 'version': project.version
} }
// copy everything else // copy everything else
from(sourceSets.main.resources.srcDirs) { from(sourceSets.main.resources.srcDirs) {
exclude 'plugin.yml' exclude 'plugin.yml'
} }
} }
task spigot(type: Jar) { task spigot(type: Jar) {
from sourceSets.main.runtimeClasspath from sourceSets.main.runtimeClasspath
destinationDirectory = file("./spigot/plugins/") destinationDirectory = file("./spigot/plugins/")
archiveFileName = "Rankup.jar" archiveFileName = "Rankup.jar"
} }
File diff suppressed because it is too large Load Diff
@@ -1,253 +1,259 @@
package sh.okx.rankup.commands; package sh.okx.rankup.commands;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor; import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.util.StringUtil; import org.bukkit.util.StringUtil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import sh.okx.rankup.RankupPlugin; import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.prestige.Prestige; import sh.okx.rankup.prestige.Prestige;
import sh.okx.rankup.prestige.Prestiges; import sh.okx.rankup.prestige.Prestiges;
import sh.okx.rankup.ranks.Rank; import sh.okx.rankup.ranks.Rank;
import sh.okx.rankup.ranks.RankElement; import sh.okx.rankup.ranks.RankElement;
import sh.okx.rankup.ranks.Rankups; import sh.okx.rankup.ranks.Rankups;
import sh.okx.rankup.util.UpdateNotifier; import sh.okx.rankup.util.UpdateNotifier;
import java.util.*; import java.util.*;
public class InfoCommand implements TabExecutor { public class InfoCommand implements TabExecutor {
private final RankupPlugin plugin; private final RankupPlugin plugin;
private final UpdateNotifier notifier; private final UpdateNotifier notifier;
public InfoCommand(RankupPlugin plugin, UpdateNotifier notifier) { public InfoCommand(RankupPlugin plugin, UpdateNotifier notifier) {
this.plugin = plugin; this.plugin = plugin;
this.notifier = notifier; this.notifier = notifier;
} }
@Override @Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (args.length > 0) { if (args.length > 0) {
if (args[0].equalsIgnoreCase("reload") && sender.hasPermission("rankup.reload")) { if (args[0].equalsIgnoreCase("reload") && sender.hasPermission("rankup.reload")) {
plugin.reload(false); plugin.reload(false);
if (!plugin.error(sender)) { if (!plugin.error(sender)) {
sender.sendMessage(ChatColor.GREEN + "" + ChatColor.BOLD + "Rankup " + ChatColor.YELLOW + "Reloaded configuration files."); sender.sendMessage(ChatColor.GREEN + "" + ChatColor.BOLD + "Rankup " + ChatColor.YELLOW + "Reloaded configuration files.");
} }
return true; return true;
} else if (args[0].equalsIgnoreCase("forcerankup") && sender.hasPermission("rankup.force")) { } else if (args[0].equalsIgnoreCase("forcerankup") && sender.hasPermission("rankup.force")) {
if (args.length < 2) { if (args.length < 2) {
sender.sendMessage(ChatColor.YELLOW + "Usage: /" + label + " forcerankup <player>"); sender.sendMessage(ChatColor.YELLOW + "Usage: /" + label + " forcerankup <player>");
return true; return true;
} }
Player player = Bukkit.getPlayer(args[1]); Player player = Bukkit.getPlayer(args[1]);
if (player == null) { if (player == null) {
sender.sendMessage(ChatColor.YELLOW + "Player not found."); sender.sendMessage(ChatColor.YELLOW + "Player not found.");
return true; return true;
} }
Rankups rankups = plugin.getRankups(); Rankups rankups = plugin.getRankups();
RankElement<Rank> rankElement = rankups.getByPlayer(player); RankElement<Rank> rankElement = rankups.getByPlayer(player);
if (rankElement == null) { if (rankElement == null) {
sender.sendMessage(ChatColor.YELLOW + "That player is not in any rankup groups."); sender.sendMessage(ChatColor.YELLOW + "That player is not in any rankup groups.");
return true; return true;
} else if (!rankElement.hasNext()) { } else if (!rankElement.hasNext()) {
sender.sendMessage(ChatColor.YELLOW + "That player is at the last rank."); sender.sendMessage(ChatColor.YELLOW + "That player is at the last rank.");
return true; return true;
} }
Rank rank = rankElement.getRank(); Rank rank = rankElement.getRank();
plugin.getHelper().doRankup(player, rankElement); plugin.getHelper().doRankup(player, rankElement);
plugin.getHelper().sendRankupMessages(player, rankElement); plugin.getHelper().sendRankupMessages(player, rankElement);
sender.sendMessage(ChatColor.GREEN + "Successfully forced " sender.sendMessage(ChatColor.GREEN + "Successfully forced "
+ ChatColor.GOLD + player.getName() + ChatColor.GOLD + player.getName()
+ ChatColor.GREEN + " to rankup from " + ChatColor.GOLD + rank.getRank() + ChatColor.GREEN + " to rankup from " + ChatColor.GOLD + rank.getRank()
+ ChatColor.GREEN + " to " + ChatColor.GOLD + rank.getNext()); + ChatColor.GREEN + " to " + ChatColor.GOLD + rank.getNext());
return true; return true;
} else if (args[0].equalsIgnoreCase("forceprestige") && sender.hasPermission("rankup.force")) { } else if (args[0].equalsIgnoreCase("forceprestige") && sender.hasPermission("rankup.force")) {
if (plugin.getPrestiges() == null) { if (plugin.getPrestiges() == null) {
sender.sendMessage(ChatColor.RED + "Prestige is disabled."); sender.sendMessage(ChatColor.RED + "Prestige is disabled.");
return true; return true;
} }
if (args.length < 2) { if (args.length < 2) {
sender.sendMessage(ChatColor.YELLOW + "Usage: /" + label + " forceprestige <player>"); sender.sendMessage(ChatColor.YELLOW + "Usage: /" + label + " forceprestige <player>");
return true; return true;
} }
Player player = Bukkit.getPlayer(args[1]); Player player = Bukkit.getPlayer(args[1]);
if (player == null) { if (player == null) {
sender.sendMessage(ChatColor.YELLOW + "Player not found."); sender.sendMessage(ChatColor.YELLOW + "Player not found.");
return true; return true;
} }
Prestiges prestiges = plugin.getPrestiges(); Prestiges prestiges = plugin.getPrestiges();
RankElement<Prestige> rankElement = prestiges.getByPlayer(player); RankElement<Prestige> rankElement = prestiges.getByPlayer(player);
if (!rankElement.hasNext()) { if (!rankElement.hasNext()) {
sender.sendMessage(ChatColor.YELLOW + "That player is at the last prestige."); sender.sendMessage(ChatColor.YELLOW + "That player is at the last prestige.");
return true; return true;
} }
Prestige prestige = rankElement.getRank(); Prestige prestige = rankElement.getRank();
if (prestige == null) { if (prestige == null) {
sender.sendMessage(ChatColor.YELLOW + "That player is not in any prestige groups."); sender.sendMessage(ChatColor.YELLOW + "That player is not in any prestige groups.");
return true; return true;
} }
plugin.getHelper().doPrestige(player, rankElement); plugin.getHelper().doPrestige(player, rankElement);
plugin.getHelper().sendPrestigeMessages(player, rankElement); plugin.getHelper().sendPrestigeMessages(player, rankElement);
sender.sendMessage(ChatColor.GREEN + "Successfully forced " sender.sendMessage(ChatColor.GREEN + "Successfully forced "
+ ChatColor.GOLD + player.getName() + ChatColor.GOLD + player.getName()
+ ChatColor.GREEN + " to prestige " + ChatColor.GREEN + " to prestige "
+ ChatColor.GOLD + prestige.getRank() + ChatColor.GOLD + prestige.getRank()
+ ChatColor.GREEN + " from " + ChatColor.GOLD + prestige.getFrom() + ChatColor.GREEN + " from " + ChatColor.GOLD + prestige.getFrom()
+ ChatColor.GREEN + " to " + ChatColor.GOLD + prestige.getTo()); + ChatColor.GREEN + " to " + ChatColor.GOLD + prestige.getTo());
return true; return true;
} else if(args[0].equalsIgnoreCase("rankdown") && sender.hasPermission("rankup.force")) { } else if(args[0].equalsIgnoreCase("rankdown") && sender.hasPermission("rankup.force")) {
if (args.length < 2) { if (args.length < 2) {
sender.sendMessage(ChatColor.YELLOW + "Usage: /" + label + " rankdown <player>"); sender.sendMessage(ChatColor.YELLOW + "Usage: /" + label + " rankdown <player>");
return true; return true;
} }
Player player = Bukkit.getPlayer(args[1]); Player player = Bukkit.getPlayer(args[1]);
if (player == null) { if (player == null) {
sender.sendMessage(ChatColor.YELLOW + "Player not found."); sender.sendMessage(ChatColor.YELLOW + "Player not found.");
return true; return true;
} }
RankElement<Rank> currentRankElement = plugin.getRankups().getByPlayer(player); RankElement<Rank> currentRankElement = plugin.getRankups().getByPlayer(player);
if (currentRankElement == null) { if (currentRankElement == null) {
sender.sendMessage(ChatColor.YELLOW + "That player is not in any rankup groups."); sender.sendMessage(ChatColor.YELLOW + "That player is not in any rankup groups.");
return true; return true;
} }
Rank currentRank = currentRankElement.getRank(); Rank currentRank = currentRankElement.getRank();
if (plugin.getRankups().getFirst().equals(currentRank)) { if (plugin.getRankups().getFirst().equals(currentRank)) {
sender.sendMessage(ChatColor.YELLOW + "That player is in the first rank and cannot be ranked down."); sender.sendMessage(ChatColor.YELLOW + "That player is in the first rank and cannot be ranked down.");
} }
RankElement<Rank> prevRankElement = plugin.getRankups().getTree().getFirst(); RankElement<Rank> prevRankElement = plugin.getRankups().getTree().getFirst();
while(prevRankElement.hasNext() && !prevRankElement.getNext().getRank().equals(currentRank)) { while(prevRankElement.hasNext() && !prevRankElement.getNext().getRank().equals(currentRank)) {
prevRankElement = prevRankElement.getNext(); prevRankElement = prevRankElement.getNext();
} }
if (!prevRankElement.hasNext()) { if (!prevRankElement.hasNext()) {
sender.sendMessage(ChatColor.YELLOW + "Could not match previous rank."); sender.sendMessage(ChatColor.YELLOW + "Could not match previous rank.");
} }
Rank prevRank = prevRankElement.getRank(); Rank prevRank = prevRankElement.getRank();
if (prevRankElement.getRank() != null) { if (prevRankElement.getRank() != null) {
plugin.getPermissions().removeGroup(player.getUniqueId(), currentRank.getRank()); plugin.getPermissions().removeGroup(player.getUniqueId(), currentRank.getRank());
} }
plugin.getPermissions().addGroup(player.getUniqueId(), prevRank.getRank()); plugin.getPermissions().addGroup(player.getUniqueId(), prevRank.getRank());
sender.sendMessage(ChatColor.GREEN + "Successfully forced " sender.sendMessage(ChatColor.GREEN + "Successfully forced "
+ ChatColor.GOLD + player.getName() + ChatColor.GOLD + player.getName()
+ ChatColor.GREEN + " to rank down from " + ChatColor.GOLD + currentRank.getRank() + ChatColor.GREEN + " to rank down from " + ChatColor.GOLD + currentRank.getRank()
+ ChatColor.GREEN + " to " + ChatColor.GOLD + prevRank.getRank()); + ChatColor.GREEN + " to " + ChatColor.GOLD + prevRank.getRank());
return true; return true;
} else if (args[0].equalsIgnoreCase("placeholders") && sender.hasPermission("rankup.admin")) { } else if (args[0].equalsIgnoreCase("placeholders") && sender.hasPermission("rankup.admin")) {
sender.sendMessage("--- Rankup placeholders ---"); sender.sendMessage("--- Rankup placeholders ---");
if (args.length > 1 && args[1].equalsIgnoreCase("status")) { if (args.length > 1 && args[1].equalsIgnoreCase("status")) {
for (Rank rank : plugin.getRankups().getTree()) { for (Rank rank : plugin.getRankups().getTree()) {
String placeholder = "status_" + rank.getRank(); String placeholder = "status_" + rank.getRank();
sender.sendMessage(placeholder + ": " + plugin.getPlaceholders().getExpansion().placeholder(sender instanceof Player ? (Player) sender : null, placeholder)); sender.sendMessage(placeholder + ": " + plugin.getPlaceholders().getExpansion().placeholder(sender instanceof Player ? (Player) sender : null, placeholder));
} }
return true; return true;
} }
String[] placeholders = new String[] { String[] placeholders = new String[] {
"prestige_money", "prestige_money",
"prestige_money_formatted", "prestige_money_formatted",
"prestige_percent_left_formatted", "prestige_percent_left_formatted",
"prestige_percent_done_formatted", "prestige_percent_done_formatted",
"money_formatted", "money_formatted",
"money_left_formatted", "money_left_formatted",
"percent_left_formatted", "percent_left_formatted",
"percent_done_formatted", "percent_done_formatted",
"current_prestige", "current_prestige",
"next_prestige", "next_prestige",
"current_rank", "current_rank",
"next_rank", "next_rank",
}; };
for (String placeholder : placeholders) { for (String placeholder : placeholders) {
sender.sendMessage(placeholder + ": " + plugin.getPlaceholders().getExpansion().placeholder(sender instanceof Player ? (Player) sender : null, placeholder)); String result;
} try {
return true; result = plugin.getPlaceholders().getExpansion().placeholder(sender instanceof Player ? (Player) sender : null, placeholder);
} else if (args[0].equalsIgnoreCase("tree") && sender.hasPermission("rankup.admin")) { } catch (Exception e) {
RankElement<Rank> element = plugin.getRankups().getTree().getFirst(); result = e.getClass().getSimpleName() + ", " + e.getMessage();
while (element.hasNext()) { }
Rank rank = element.getRank(); sender.sendMessage(placeholder + ": " + result);
RankElement<Rank> next = element.getNext(); }
Rank nextRank = next.getRank(); return true;
sender.sendMessage(rank.getRank() + " (" + rank.getNext() + ") -> " + nextRank.getRank() + " (" + nextRank.getNext() + ")"); } else if (args[0].equalsIgnoreCase("tree") && sender.hasPermission("rankup.admin")) {
element = next; RankElement<Rank> element = plugin.getRankups().getTree().getFirst();
} while (element.hasNext()) {
return true; Rank rank = element.getRank();
} RankElement<Rank> next = element.getNext();
} Rank nextRank = next.getRank();
sender.sendMessage(rank.getRank() + " (" + rank.getNext() + ") -> " + nextRank.getRank() + " (" + nextRank.getNext() + ")");
PluginDescriptionFile description = plugin.getDescription(); element = next;
String version = description.getVersion(); }
sender.sendMessage( return true;
ChatColor.GREEN + "" + ChatColor.BOLD + description.getName() + " " + version + }
ChatColor.YELLOW + " by " + ChatColor.BLUE + ChatColor.BOLD + String.join(", ", description.getAuthors())); }
if (sender.hasPermission("rankup.reload")) {
sender.sendMessage(ChatColor.GREEN + "/" + label + " reload " + ChatColor.YELLOW + "Reloads configuration files."); PluginDescriptionFile description = plugin.getDescription();
} String version = description.getVersion();
if (sender.hasPermission("rankup.force")) { sender.sendMessage(
sender.sendMessage(ChatColor.GREEN + "/" + label + " forcerankup <player> " + ChatColor.YELLOW + "Force a player to rankup, bypassing requirements."); ChatColor.GREEN + "" + ChatColor.BOLD + description.getName() + " " + version +
if (plugin.getPrestiges() != null) { ChatColor.YELLOW + " by " + ChatColor.BLUE + ChatColor.BOLD + String.join(", ", description.getAuthors()));
sender.sendMessage( if (sender.hasPermission("rankup.reload")) {
ChatColor.GREEN + "/" + label + " forceprestige <player> " + ChatColor.YELLOW sender.sendMessage(ChatColor.GREEN + "/" + label + " reload " + ChatColor.YELLOW + "Reloads configuration files.");
+ "Force a player to prestige, bypassing requirements."); }
} if (sender.hasPermission("rankup.force")) {
} sender.sendMessage(ChatColor.GREEN + "/" + label + " forcerankup <player> " + ChatColor.YELLOW + "Force a player to rankup, bypassing requirements.");
if (plugin.getPrestiges() != null) {
if (sender.hasPermission("rankup.checkversion")) { sender.sendMessage(
notifier.notify(sender, false); ChatColor.GREEN + "/" + label + " forceprestige <player> " + ChatColor.YELLOW
} + "Force a player to prestige, bypassing requirements.");
}
return true; }
}
if (sender.hasPermission("rankup.checkversion")) {
@Override notifier.notify(sender, false);
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) { }
if (args.length == 1) {
List<String> list = new ArrayList<>(); return true;
if (sender.hasPermission("rankup.reload")) { }
list.add("reload");
} @Override
if (sender.hasPermission("rankup.force")) { public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) {
list.add("forcerankup"); if (args.length == 1) {
list.add("forceprestige"); List<String> list = new ArrayList<>();
list.add("rankdown"); if (sender.hasPermission("rankup.reload")) {
} list.add("reload");
return StringUtil.copyPartialMatches(args[0], list, new ArrayList<>()); }
} else if (args.length == 2) { if (sender.hasPermission("rankup.force")) {
if (args[0].equalsIgnoreCase("forcerankup") && sender.hasPermission("rankup.force")) { list.add("forcerankup");
return StringUtil.copyPartialMatches(args[1], players(), new ArrayList<>()); list.add("forceprestige");
} else if (args[0].equalsIgnoreCase("forceprestige") && sender.hasPermission("rankup.force")) { list.add("rankdown");
return StringUtil.copyPartialMatches(args[1], players(), new ArrayList<>()); }
} else if (args[0].equalsIgnoreCase("rankdown") && sender.hasPermission("rankup.force")) { return StringUtil.copyPartialMatches(args[0], list, new ArrayList<>());
return StringUtil.copyPartialMatches(args[1], players(), new ArrayList<>()); } else if (args.length == 2) {
} if (args[0].equalsIgnoreCase("forcerankup") && sender.hasPermission("rankup.force")) {
} return StringUtil.copyPartialMatches(args[1], players(), new ArrayList<>());
return Collections.emptyList(); } else if (args[0].equalsIgnoreCase("forceprestige") && sender.hasPermission("rankup.force")) {
} return StringUtil.copyPartialMatches(args[1], players(), new ArrayList<>());
} else if (args[0].equalsIgnoreCase("rankdown") && sender.hasPermission("rankup.force")) {
private Iterable<String> players() { return StringUtil.copyPartialMatches(args[1], players(), new ArrayList<>());
Set<String> players = new HashSet<>(); }
for (Player player : Bukkit.getOnlinePlayers()) { }
players.add(player.getName()); return Collections.emptyList();
} }
return players;
} private Iterable<String> players() {
} Set<String> players = new HashSet<>();
for (Player player : Bukkit.getOnlinePlayers()) {
players.add(player.getName());
}
return players;
}
}
@@ -120,9 +120,9 @@ public class RankupExpansion implements Expansion {
case "money_formatted": case "money_formatted":
return plugin.formatMoney(getMoney(player, rank).doubleValue()); return plugin.formatMoney(getMoney(player, rank).doubleValue());
case "money_left": case "money_left":
return String.valueOf(Math.max(0, orElse(rank, r -> simplify(plugin.getEconomy().getBalance(player) - r.getRequirement(player, "money").getValueDouble()), 0).doubleValue())); return String.valueOf(Math.max(0, orElse(rank, r -> simplify(r.getRequirement(player, "money").getValueDouble() - plugin.getEconomy().getBalance(player)), 0).doubleValue()));
case "money_left_formatted": case "money_left_formatted":
return plugin.formatMoney(Math.max(0D, orElse(rank, r -> plugin.getEconomy().getBalance(player) - r.getRequirement(player, "money").getValueDouble(), 0D))); return plugin.formatMoney(Math.max(0D, orElse(rank, r -> r.getRequirement(player, "money").getValueDouble() - plugin.getEconomy().getBalance(player), 0D)));
case "percent_left": case "percent_left":
return String.valueOf(Math.max(0D, orElse(rank, r -> (1 - (plugin.getEconomy().getBalance(player) / r.getRequirement(player, "money").getValueDouble())) * 100, 0).doubleValue())); return String.valueOf(Math.max(0D, orElse(rank, r -> (1 - (plugin.getEconomy().getBalance(player) / r.getRequirement(player, "money").getValueDouble())) * 100, 0).doubleValue()));
case "percent_left_formatted": case "percent_left_formatted":
@@ -0,0 +1,35 @@
package sh.okx.rankup;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import be.seeseemelk.mockbukkit.entity.PlayerMock;
import org.junit.Test;
public class RankupCommandTest extends RankupTest {
@Test
public void testPlaceholders() {
// placeholders command should never throw an exception
PlayerMock player = server.addPlayer();
player.addAttachment(plugin, "rankup.admin", true);
plugin.getCommand("rankup3").execute(player, "pru", new String[] {"placeholders"});
player.assertSaid("--- Rankup placeholders ---");
}
@Test
public void testForce() {
// forcing rankup should change group and not affect money
PlayerMock player = server.addPlayer();
player.addAttachment(plugin, "rankup.force", true);
plugin.getEconomy().setPlayer(player, 11);
groupProvider.addGroup(player.getUniqueId(), "A");
plugin.getCommand("rankup3").execute(player, "pru", new String[] {"forcerankup", player.getName()});
assertTrue(groupProvider.inGroup(player.getUniqueId(), "B"));
assertEquals(11, plugin.getEconomy().getBalance(player), 0.0001);
}
}
@@ -1,11 +1,11 @@
package sh.okx.rankup; package sh.okx.rankup;
import static org.junit.Assert.assertEquals;
import be.seeseemelk.mockbukkit.entity.PlayerMock; import be.seeseemelk.mockbukkit.entity.PlayerMock;
import org.junit.Test; import org.junit.Test;
import sh.okx.rankup.placeholders.RankupExpansion; import sh.okx.rankup.placeholders.RankupExpansion;
import static org.junit.Assert.assertEquals;
public class RankupPlaceholderTest extends RankupTest { public class RankupPlaceholderTest extends RankupTest {
@Test @Test
public void testCurrentRank() { public void testCurrentRank() {
@@ -52,4 +52,24 @@ public class RankupPlaceholderTest extends RankupTest {
RankupExpansion expansion = plugin.getPlaceholders().getExpansion(); RankupExpansion expansion = plugin.getPlaceholders().getExpansion();
assertEquals("Incomplete", expansion.placeholder(player, "status_b")); assertEquals("Incomplete", expansion.placeholder(player, "status_b"));
} }
@Test
public void testMoneyLeft() {
PlayerMock player = server.addPlayer();
groupProvider.addGroup(player.getUniqueId(), "A");
plugin.getEconomy().setPlayer(player, 900);
RankupExpansion expansion = plugin.getPlaceholders().getExpansion();
assertEquals("100.0", expansion.placeholder(player, "money_left"));
}
@Test
public void testMoney() {
PlayerMock player = server.addPlayer();
groupProvider.addGroup(player.getUniqueId(), "A");
plugin.getEconomy().setPlayer(player, 900);
RankupExpansion expansion = plugin.getPlaceholders().getExpansion();
assertEquals("1000", expansion.placeholder(player, "money"));
}
} }