Merge branch 'dev' into master
This commit is contained in:
+25
-4
@@ -1,9 +1,11 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id 'java'
|
id 'java'
|
||||||
|
id "io.freefair.lombok" version "3.8.0"
|
||||||
|
id 'maven-publish'
|
||||||
}
|
}
|
||||||
|
|
||||||
group 'sh.okx'
|
group 'sh.okx'
|
||||||
version '3.5.4'
|
version '3.5.6'
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
@@ -26,9 +28,6 @@ repositories {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compileOnly 'org.projectlombok:lombok:1.18.6'
|
|
||||||
annotationProcessor 'org.projectlombok:lombok:1.18.6'
|
|
||||||
|
|
||||||
testCompile group: 'junit', name: 'junit', version: '4.12'
|
testCompile group: 'junit', name: 'junit', version: '4.12'
|
||||||
compile 'org.spigotmc:spigot-api:1.13.2-R0.1-SNAPSHOT'
|
compile 'org.spigotmc:spigot-api:1.13.2-R0.1-SNAPSHOT'
|
||||||
|
|
||||||
@@ -43,3 +42,25 @@ dependencies {
|
|||||||
compile 'com.github.Ben12345rocks:VotingPlugin:5.18.2'
|
compile 'com.github.Ben12345rocks:VotingPlugin:5.18.2'
|
||||||
compile 'com.github.LlmDl:Towny:25fc18a'
|
compile 'com.github.LlmDl:Towny:25fc18a'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// automatically copy the version to plugin.yml
|
||||||
|
processResources {
|
||||||
|
inputs.property 'version', project.version
|
||||||
|
|
||||||
|
from(sourceSets.main.resources.srcDirs) {
|
||||||
|
include 'plugin.yml'
|
||||||
|
expand 'version':project.version
|
||||||
|
}
|
||||||
|
|
||||||
|
from(sourceSets.main.resources.srcDirs) {
|
||||||
|
exclude 'plugin.yml'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
publishing {
|
||||||
|
publications {
|
||||||
|
maven(MavenPublication) {
|
||||||
|
from components.java
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# This file is generated by the 'io.freefair.lombok' Gradle plugin
|
||||||
|
config.stopBubbling = true
|
||||||
@@ -11,12 +11,17 @@ public class AutoRankup extends BukkitRunnable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
if (rankup.error()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RankupHelper helper = rankup.getHelper();
|
||||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||||
if (player.hasPermission("rankup.auto")) {
|
if (player.hasPermission("rankup.auto")) {
|
||||||
if (rankup.checkRankup(player, false)) {
|
if (helper.checkRankup(player, false)) {
|
||||||
rankup.rankup(player);
|
helper.rankup(player);
|
||||||
} else if (rankup.getPrestiges() != null && rankup.checkPrestige(player, false)) {
|
} else if (rankup.getPrestiges() != null && helper.checkPrestige(player, false)) {
|
||||||
rankup.prestige(player);
|
helper.prestige(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public class RankList<T extends Rank> {
|
|||||||
if (keys.size() == 1 && keys.iterator().next().equalsIgnoreCase("rank")) {
|
if (keys.size() == 1 && keys.iterator().next().equalsIgnoreCase("rank")) {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
"Having a final rank (for example: \"Z: rank: 'Z'\") from 3.4.2 or earlier should no longer be used.\n" +
|
"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 " + name + "");
|
"It is safe to just delete the final rank " + name + "");
|
||||||
} else if (section.getStringList("requirements").isEmpty()) {
|
} else if (section.getStringList("requirements").isEmpty()) {
|
||||||
throw new IllegalArgumentException("Rank " + name + " does not have any requirements.");
|
throw new IllegalArgumentException("Rank " + name + " does not have any requirements.");
|
||||||
}
|
}
|
||||||
@@ -59,13 +59,19 @@ public class RankList<T extends Rank> {
|
|||||||
// nothing ranks up to this
|
// nothing ranks up to this
|
||||||
return rank;
|
return rank;
|
||||||
}
|
}
|
||||||
return null;
|
throw new IllegalArgumentException("Could not find a first rank. First ranks must not have anything that ranks up to them.");
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<T> getOrderedList() {
|
public List<T> getOrderedList() {
|
||||||
List<T> list = new ArrayList<>();
|
List<T> list = new ArrayList<>();
|
||||||
T t = getFirst();
|
T t = getFirst();
|
||||||
while (t != null) {
|
while (t != null) {
|
||||||
|
for (T existing : list) {
|
||||||
|
if (existing.equals(t)) {
|
||||||
|
throw new IllegalArgumentException("Infinite rankup loop detected at rank " + t.getRank() + " to " + t.getNext()
|
||||||
|
+ "\nMake sure no there are no rankups to previous ranks or to the same rank");
|
||||||
|
}
|
||||||
|
}
|
||||||
list.add(t);
|
list.add(t);
|
||||||
t = next(t);
|
t = next(t);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import lombok.Getter;
|
|||||||
import net.milkbowl.vault.economy.Economy;
|
import net.milkbowl.vault.economy.Economy;
|
||||||
import net.milkbowl.vault.permission.Permission;
|
import net.milkbowl.vault.permission.Permission;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
@@ -11,6 +12,7 @@ import org.bukkit.configuration.file.YamlConfiguration;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.inventory.InventoryType;
|
import org.bukkit.event.inventory.InventoryType;
|
||||||
import org.bukkit.inventory.InventoryView;
|
import org.bukkit.inventory.InventoryView;
|
||||||
|
import org.bukkit.plugin.PluginManager;
|
||||||
import org.bukkit.plugin.RegisteredServiceProvider;
|
import org.bukkit.plugin.RegisteredServiceProvider;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import sh.okx.rankup.commands.InfoCommand;
|
import sh.okx.rankup.commands.InfoCommand;
|
||||||
@@ -20,7 +22,7 @@ import sh.okx.rankup.commands.RanksCommand;
|
|||||||
import sh.okx.rankup.commands.RankupCommand;
|
import sh.okx.rankup.commands.RankupCommand;
|
||||||
import sh.okx.rankup.gui.Gui;
|
import sh.okx.rankup.gui.Gui;
|
||||||
import sh.okx.rankup.gui.GuiListener;
|
import sh.okx.rankup.gui.GuiListener;
|
||||||
import sh.okx.rankup.messages.EmptyMessageBuilder;
|
import sh.okx.rankup.messages.NullMessageBuilder;
|
||||||
import sh.okx.rankup.messages.Message;
|
import sh.okx.rankup.messages.Message;
|
||||||
import sh.okx.rankup.messages.MessageBuilder;
|
import sh.okx.rankup.messages.MessageBuilder;
|
||||||
import sh.okx.rankup.messages.Variable;
|
import sh.okx.rankup.messages.Variable;
|
||||||
@@ -29,6 +31,8 @@ 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.Rankups;
|
import sh.okx.rankup.ranks.Rankups;
|
||||||
|
import sh.okx.rankup.requirements.DeductibleRequirement;
|
||||||
|
import sh.okx.rankup.requirements.NonDeductibleRequirement;
|
||||||
import sh.okx.rankup.requirements.Requirement;
|
import sh.okx.rankup.requirements.Requirement;
|
||||||
import sh.okx.rankup.requirements.RequirementRegistry;
|
import sh.okx.rankup.requirements.RequirementRegistry;
|
||||||
import sh.okx.rankup.requirements.requirement.*;
|
import sh.okx.rankup.requirements.requirement.*;
|
||||||
@@ -45,7 +49,6 @@ import java.text.DecimalFormat;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.WeakHashMap;
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class Rankup extends JavaPlugin {
|
public class Rankup extends JavaPlugin {
|
||||||
@@ -57,7 +60,7 @@ public class Rankup extends JavaPlugin {
|
|||||||
* The registry for listing the requirements to /rankup.
|
* The registry for listing the requirements to /rankup.
|
||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
private RequirementRegistry requirementRegistry;
|
private RequirementRegistry requirements;
|
||||||
@Getter
|
@Getter
|
||||||
private FileConfiguration messages;
|
private FileConfiguration messages;
|
||||||
@Getter
|
@Getter
|
||||||
@@ -68,17 +71,14 @@ public class Rankup extends JavaPlugin {
|
|||||||
private Prestiges prestiges;
|
private Prestiges prestiges;
|
||||||
@Getter
|
@Getter
|
||||||
private Placeholders placeholders;
|
private Placeholders placeholders;
|
||||||
/**
|
@Getter
|
||||||
* Players who cannot rankup/prestige for a certain amount of time.
|
private RankupHelper helper;
|
||||||
*/
|
|
||||||
private Map<Player, Long> cooldowns;
|
|
||||||
private AutoRankup autoRankup;
|
private AutoRankup autoRankup;
|
||||||
|
private String errorMessage;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
setupPermissions();
|
reload(true);
|
||||||
setupEconomy();
|
|
||||||
reload();
|
|
||||||
|
|
||||||
Metrics metrics = new Metrics(this);
|
Metrics metrics = new Metrics(this);
|
||||||
metrics.addCustomChart(new Metrics.SimplePie("confirmation",
|
metrics.addCustomChart(new Metrics.SimplePie("confirmation",
|
||||||
@@ -114,13 +114,20 @@ public class Rankup extends JavaPlugin {
|
|||||||
@Override
|
@Override
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
closeInventories();
|
closeInventories();
|
||||||
placeholders.unregister();
|
if (placeholders != null) {
|
||||||
|
placeholders.unregister();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reload() {
|
public void reload(boolean init) {
|
||||||
cooldowns = new WeakHashMap<>();
|
errorMessage = null;
|
||||||
|
if(!setupPermissions()) {
|
||||||
|
errorMessage = "No permission plugin found";
|
||||||
|
}
|
||||||
|
setupEconomy();
|
||||||
|
|
||||||
closeInventories();
|
closeInventories();
|
||||||
loadConfigs();
|
loadConfigs(init);
|
||||||
|
|
||||||
if (autoRankup != null) {
|
if (autoRankup != null) {
|
||||||
autoRankup.cancel();
|
autoRankup.cancel();
|
||||||
@@ -140,6 +147,32 @@ public class Rankup extends JavaPlugin {
|
|||||||
getLogger().severe("You may then copy in your config values from the old config.");
|
getLogger().severe("You may then copy in your config values from the old config.");
|
||||||
getLogger().severe("Check the changelog on the Rankup spigot page to see the changes.");
|
getLogger().severe("Check the changelog on the Rankup spigot page to see the changes.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
helper = new RankupHelper(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean error() {
|
||||||
|
return error(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notify the player of an error if there is one
|
||||||
|
* @return true if there was an error and action was taken
|
||||||
|
*/
|
||||||
|
public boolean error(CommandSender sender) {
|
||||||
|
if (errorMessage == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(sender instanceof Player)) {
|
||||||
|
getLogger().severe("Failed to load Rankup");
|
||||||
|
} else {
|
||||||
|
sender.sendMessage(ChatColor.RED + "Could not load Rankup, check console for more information.");
|
||||||
|
}
|
||||||
|
for (String line : errorMessage.split("\n")) {
|
||||||
|
getLogger().severe(line);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addAll(Map<String, Integer> map, RankList<? extends Rank> ranks) {
|
private void addAll(Map<String, Integer> map, RankList<? extends Rank> ranks) {
|
||||||
@@ -166,7 +199,7 @@ public class Rankup extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadConfigs() {
|
private void loadConfigs(boolean init) {
|
||||||
saveLocales();
|
saveLocales();
|
||||||
|
|
||||||
config = loadConfig("config.yml");
|
config = loadConfig("config.yml");
|
||||||
@@ -174,7 +207,14 @@ public class Rankup extends JavaPlugin {
|
|||||||
File localeFile = new File(new File(getDataFolder(), "locale"), locale + ".yml");
|
File localeFile = new File(new File(getDataFolder(), "locale"), locale + ".yml");
|
||||||
messages = YamlConfiguration.loadConfiguration(localeFile);
|
messages = YamlConfiguration.loadConfiguration(localeFile);
|
||||||
|
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(this, this::refreshRanks);
|
if (init) {
|
||||||
|
Bukkit.getScheduler().scheduleSyncDelayedTask(this, () -> {
|
||||||
|
refreshRanks();
|
||||||
|
error();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
refreshRanks();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void refreshRanks() {
|
public void refreshRanks() {
|
||||||
@@ -188,10 +228,13 @@ public class Rankup extends JavaPlugin {
|
|||||||
} else {
|
} else {
|
||||||
prestiges = null;
|
prestiges = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check rankups are not in an infinite loop
|
||||||
|
rankups.getOrderedList();
|
||||||
|
prestiges.getOrderedList();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
this.errorMessage = e.getMessage();
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
Bukkit.getPluginManager().disablePlugin(this);
|
|
||||||
getLogger().severe("Could not finish enabling Rankup");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,47 +262,58 @@ public class Rankup extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void registerRequirements() {
|
private void registerRequirements() {
|
||||||
requirementRegistry = new RequirementRegistry();
|
requirements = new RequirementRegistry();
|
||||||
|
registerDeductible(new XpLevelRequirement(this));
|
||||||
|
requirements.addRequirement(new PlaytimeMinutesRequirement(this));
|
||||||
|
requirements.addRequirement(new GroupRequirement(this));
|
||||||
|
requirements.addRequirement(new PermissionRequirement(this));
|
||||||
|
requirements.addRequirement(new PlaceholderRequirement(this));
|
||||||
|
requirements.addRequirement(new WorldRequirement(this));
|
||||||
|
requirements.addRequirement(new BlockBreakRequirement(this));
|
||||||
|
requirements.addRequirement(new PlayerKillsRequirement(this));
|
||||||
|
requirements.addRequirement(new MobKillsRequirement(this));
|
||||||
|
registerDeductible(new ItemRequirement(this));
|
||||||
|
requirements.addRequirement(new UseItemRequirement(this));
|
||||||
|
requirements.addRequirement(new TotalMobKillsRequirement(this));
|
||||||
|
requirements.addRequirement(new CraftItemRequirement(this));
|
||||||
if (economy != null) {
|
if (economy != null) {
|
||||||
requirementRegistry.addRequirement(new MoneyRequirement(this));
|
registerDeductible(new MoneyRequirement(this));
|
||||||
}
|
}
|
||||||
requirementRegistry.addRequirement(new XpLevelRequirement(this));
|
|
||||||
requirementRegistry.addRequirement(new PlaytimeMinutesRequirement(this));
|
PluginManager pluginManager = Bukkit.getPluginManager();
|
||||||
requirementRegistry.addRequirement(new GroupRequirement(this));
|
if (pluginManager.isPluginEnabled("mcMMO")) {
|
||||||
requirementRegistry.addRequirement(new PermissionRequirement(this));
|
requirements.addRequirement(new McMMOSkillRequirement(this));
|
||||||
requirementRegistry.addRequirement(new PlaceholderRequirement(this));
|
requirements.addRequirement(new McMMOPowerLevelRequirement(this));
|
||||||
requirementRegistry.addRequirement(new WorldRequirement(this));
|
|
||||||
requirementRegistry.addRequirement(new BlockBreakRequirement(this));
|
|
||||||
requirementRegistry.addRequirement(new PlayerKillsRequirement(this));
|
|
||||||
requirementRegistry.addRequirement(new MobKillsRequirement(this));
|
|
||||||
if (Bukkit.getPluginManager().isPluginEnabled("mcMMO")) {
|
|
||||||
requirementRegistry.addRequirement(new McMMOSkillRequirement(this));
|
|
||||||
requirementRegistry.addRequirement(new McMMOPowerLevelRequirement(this));
|
|
||||||
}
|
}
|
||||||
if (Bukkit.getPluginManager().isPluginEnabled("AdvancedAchievements")) {
|
if (pluginManager.isPluginEnabled("AdvancedAchievements")) {
|
||||||
requirementRegistry.addRequirement(new AdvancedAchievementsAchievementRequirement(this));
|
requirements.addRequirement(new AdvancedAchievementsAchievementRequirement(this));
|
||||||
requirementRegistry.addRequirement(new AdvancedAchievementsTotalRequirement(this));
|
requirements.addRequirement(new AdvancedAchievementsTotalRequirement(this));
|
||||||
}
|
}
|
||||||
if (Bukkit.getPluginManager().isPluginEnabled("VotingPlugin")) {
|
if (pluginManager.isPluginEnabled("VotingPlugin")) {
|
||||||
requirementRegistry.addRequirement(new VotingPluginVotesRequirement(this));
|
requirements.addRequirement(new VotingPluginVotesRequirement(this));
|
||||||
}
|
}
|
||||||
if (Bukkit.getPluginManager().isPluginEnabled("Towny")) {
|
if (Bukkit.getPluginManager().isPluginEnabled("Towny")) {
|
||||||
requirementRegistry.addRequirement(new TownyResidentRequirement(this));
|
requirements.addRequirement(new TownyResidentRequirement(this));
|
||||||
requirementRegistry.addRequirement(new TownyMayorRequirement(this));
|
requirements.addRequirement(new TownyMayorRequirement(this));
|
||||||
requirementRegistry.addRequirement(new TownyMayorNumberResidentsRequirement(this));
|
requirements.addRequirement(new TownyMayorNumberResidentsRequirement(this));
|
||||||
requirementRegistry.addRequirement(new TownyKingRequirement(this));
|
requirements.addRequirement(new TownyKingRequirement(this));
|
||||||
requirementRegistry.addRequirement(new TownyKingNumberResidentsRequirement(this));
|
requirements.addRequirement(new TownyKingNumberResidentsRequirement(this));
|
||||||
requirementRegistry.addRequirement(new TownyKingNumberTownsRequirement(this));
|
requirements.addRequirement(new TownyKingNumberTownsRequirement(this));
|
||||||
}
|
}
|
||||||
requirementRegistry.addRequirement(new ItemRequirement(this));
|
|
||||||
requirementRegistry.addRequirement(new UseItemRequirement(this));
|
|
||||||
requirementRegistry.addRequirement(new TotalMobKillsRequirement(this));
|
|
||||||
requirementRegistry.addRequirement(new CraftItemRequirement(this));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupPermissions() {
|
private void registerDeductible(DeductibleRequirement requirement) {
|
||||||
|
requirements.addRequirement(requirement);
|
||||||
|
requirements.addRequirement(new NonDeductibleRequirement(requirement, requirement.getName() + "h"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean setupPermissions() {
|
||||||
RegisteredServiceProvider<Permission> rsp = getServer().getServicesManager().getRegistration(Permission.class);
|
RegisteredServiceProvider<Permission> rsp = getServer().getServicesManager().getRegistration(Permission.class);
|
||||||
|
if (rsp == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
permissions = rsp.getProvider();
|
permissions = rsp.getProvider();
|
||||||
|
return permissions.hasGroupSupport();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupEconomy() {
|
private void setupEconomy() {
|
||||||
@@ -299,166 +353,8 @@ public class Rankup extends JavaPlugin {
|
|||||||
return MessageBuilder.of(messages, message);
|
return MessageBuilder.of(messages, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean checkCooldown(Player player, Rank rank) {
|
|
||||||
if (cooldowns.containsKey(player)) {
|
|
||||||
long time = System.currentTimeMillis() - cooldowns.get(player);
|
|
||||||
// if time passed is less than the cooldown
|
|
||||||
long cooldownSeconds = config.getInt("cooldown");
|
|
||||||
long timeLeft = (cooldownSeconds * 1000) - time;
|
|
||||||
if (timeLeft > 0) {
|
|
||||||
long secondsLeft = (long) Math.ceil(timeLeft / 1000f);
|
|
||||||
getMessage(rank, secondsLeft > 1 ? Message.COOLDOWN_PLURAL : Message.COOLDOWN_SINGULAR)
|
|
||||||
.failIfEmpty()
|
|
||||||
.replaceRanks(player, rank.getRank())
|
|
||||||
.replaceFromTo(rank)
|
|
||||||
.replace(Variable.SECONDS, cooldownSeconds)
|
|
||||||
.replace(Variable.SECONDS_LEFT, secondsLeft)
|
|
||||||
.send(player);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
// cooldown has expired so remove it
|
|
||||||
cooldowns.remove(player);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void applyCooldown(Player player) {
|
|
||||||
if (config.getInt("cooldown") > 0) {
|
|
||||||
cooldowns.put(player, System.currentTimeMillis());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void rankup(Player player) {
|
|
||||||
if (!checkRankup(player)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Rank oldRank = rankups.getByPlayer(player);
|
|
||||||
String next = oldRank.getNext();
|
|
||||||
|
|
||||||
oldRank.applyRequirements(player);
|
|
||||||
|
|
||||||
permissions.playerRemoveGroup(null, player, oldRank.getRank());
|
|
||||||
permissions.playerAddGroup(null, player, next);
|
|
||||||
|
|
||||||
getMessage(oldRank, Message.SUCCESS_PUBLIC)
|
|
||||||
.failIfEmpty()
|
|
||||||
.replaceRanks(player, oldRank, next)
|
|
||||||
.broadcast();
|
|
||||||
getMessage(oldRank, Message.SUCCESS_PRIVATE)
|
|
||||||
.failIfEmpty()
|
|
||||||
.replaceRanks(player, oldRank, next)
|
|
||||||
.send(player);
|
|
||||||
|
|
||||||
oldRank.runCommands(player, next);
|
|
||||||
applyCooldown(player);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean checkRankup(Player player) {
|
|
||||||
return checkRankup(player, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if a player can rankup,
|
|
||||||
* and if they can't, sends the player a message and returns false
|
|
||||||
*
|
|
||||||
* @param player the player to check if they can rankup
|
|
||||||
* @return true if the player can rankup, false otherwise
|
|
||||||
*/
|
|
||||||
public boolean checkRankup(Player player, boolean message) {
|
|
||||||
Rank rank = rankups.getByPlayer(player);
|
|
||||||
if (rankups.isLast(permissions, player)) {
|
|
||||||
getMessage(prestiges == null ? Message.NO_RANKUP : prestiges.isLast(permissions, player) ? Message.NO_RANKUP : Message.MUST_PRESTIGE)
|
|
||||||
.failIf(!message)
|
|
||||||
.replaceRanks(player, rankups.getLast())
|
|
||||||
.send(player);
|
|
||||||
return false;
|
|
||||||
} else if (rank == null) { // check if in ladder
|
|
||||||
getMessage(Message.NOT_IN_LADDER)
|
|
||||||
.failIf(!message)
|
|
||||||
.replace(Variable.PLAYER, player.getName())
|
|
||||||
.send(player);
|
|
||||||
return false;
|
|
||||||
} else if (!rank.hasRequirements(player)) { // check if they can afford it
|
|
||||||
if (message) {
|
|
||||||
replaceMoneyRequirements(getMessage(rank, Message.REQUIREMENTS_NOT_MET)
|
|
||||||
.replaceRanks(player, rank, rank.getNext()), player, rank)
|
|
||||||
.send(player);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
} else if (message && checkCooldown(player, rank)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void prestige(Player player) {
|
|
||||||
if (!checkPrestige(player)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Prestige oldPrestige = prestiges.getByPlayer(player);
|
|
||||||
|
|
||||||
oldPrestige.applyRequirements(player);
|
|
||||||
|
|
||||||
permissions.playerRemoveGroup(null, player, oldPrestige.getFrom());
|
|
||||||
permissions.playerAddGroup(null, player, oldPrestige.getTo());
|
|
||||||
if (oldPrestige.getRank() != null) {
|
|
||||||
permissions.playerRemoveGroup(null, player, oldPrestige.getRank());
|
|
||||||
}
|
|
||||||
permissions.playerAddGroup(null, player, oldPrestige.getNext());
|
|
||||||
|
|
||||||
getMessage(oldPrestige, Message.PRESTIGE_SUCCESS_PUBLIC)
|
|
||||||
.failIfEmpty()
|
|
||||||
.replaceRanks(player, oldPrestige,oldPrestige.getNext())
|
|
||||||
.replaceFromTo(oldPrestige)
|
|
||||||
.broadcast();
|
|
||||||
getMessage(oldPrestige, Message.PRESTIGE_SUCCESS_PRIVATE)
|
|
||||||
.failIfEmpty()
|
|
||||||
.replaceRanks(player, oldPrestige, oldPrestige.getNext())
|
|
||||||
.replaceFromTo(oldPrestige)
|
|
||||||
.send(player);
|
|
||||||
|
|
||||||
oldPrestige.runCommands(player, oldPrestige.getNext());
|
|
||||||
applyCooldown(player);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean checkPrestige(Player player) {
|
|
||||||
return checkPrestige(player, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean checkPrestige(Player player, boolean message) {
|
|
||||||
Prestige prestige = prestiges.getByPlayer(player);
|
|
||||||
if (prestige == null || !prestige.isEligable(player)) { // check if in ladder
|
|
||||||
getMessage(Message.NOT_HIGH_ENOUGH)
|
|
||||||
.failIf(!message)
|
|
||||||
.replace(Variable.PLAYER, player.getName())
|
|
||||||
.send(player);
|
|
||||||
return false;
|
|
||||||
} else if (prestiges.isLast(permissions, player)) { // check if they are at the highest rank
|
|
||||||
getMessage(prestige, Message.PRESTIGE_NO_PRESTIGE)
|
|
||||||
.failIf(!message)
|
|
||||||
.replaceRanks(player, prestige.getRank())
|
|
||||||
.replaceFromTo(prestige)
|
|
||||||
.send(player);
|
|
||||||
return false;
|
|
||||||
} else if (!prestige.hasRequirements(player)) { // check if they can afford it
|
|
||||||
replaceMoneyRequirements(getMessage(prestige, Message.PRESTIGE_REQUIREMENTS_NOT_MET)
|
|
||||||
.failIf(!message)
|
|
||||||
.replaceRanks(player, prestige, prestiges.next(prestige).getRank()), player, prestige)
|
|
||||||
.replaceFromTo(prestige)
|
|
||||||
.send(player);
|
|
||||||
return false;
|
|
||||||
} else if (checkCooldown(player, prestige)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public MessageBuilder replaceMoneyRequirements(MessageBuilder builder, CommandSender sender, Rank rank) {
|
public MessageBuilder replaceMoneyRequirements(MessageBuilder builder, CommandSender sender, Rank rank) {
|
||||||
if (builder instanceof EmptyMessageBuilder) {
|
if (builder instanceof NullMessageBuilder) {
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -495,7 +391,8 @@ public class Rankup extends JavaPlugin {
|
|||||||
() -> percentFormat.format(Math.max(0, (requirement.getRemaining(player) / requirement.getValueDouble()) * 100)));
|
() -> percentFormat.format(Math.max(0, (requirement.getRemaining(player) / requirement.getValueDouble()) * 100)));
|
||||||
replaceRequirements(builder, Variable.PERCENT_DONE, requirement,
|
replaceRequirements(builder, Variable.PERCENT_DONE, requirement,
|
||||||
() -> percentFormat.format(Math.min(100, (1 - (requirement.getRemaining(player) / requirement.getValueDouble())) * 100)));
|
() -> percentFormat.format(Math.min(100, (1 - (requirement.getRemaining(player) / requirement.getValueDouble())) * 100)));
|
||||||
replaceRequirements(builder, Variable.AMOUNT_DONE, requirement, () -> simpleFormat.format(requirement.getValueDouble() - requirement.getRemaining(player)));
|
replaceRequirements(builder, Variable.AMOUNT_DONE, requirement,
|
||||||
|
() -> simpleFormat.format(requirement.getValueDouble() - requirement.getRemaining(player)));
|
||||||
}
|
}
|
||||||
} catch (NumberFormatException ignored) {
|
} catch (NumberFormatException ignored) {
|
||||||
}
|
}
|
||||||
@@ -538,6 +435,6 @@ public class Rankup extends JavaPlugin {
|
|||||||
|
|
||||||
public boolean isLegacy() {
|
public boolean isLegacy() {
|
||||||
String version = Bukkit.getVersion();
|
String version = Bukkit.getVersion();
|
||||||
return !(version.contains("1.13") || version.contains("1.14"));
|
return !(version.contains("1.13") || version.contains("1.14") || version.contains("1.15"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,194 @@
|
|||||||
|
package sh.okx.rankup;
|
||||||
|
|
||||||
|
import net.milkbowl.vault.permission.Permission;
|
||||||
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import sh.okx.rankup.messages.Message;
|
||||||
|
import sh.okx.rankup.messages.Variable;
|
||||||
|
import sh.okx.rankup.prestige.Prestige;
|
||||||
|
import sh.okx.rankup.prestige.Prestiges;
|
||||||
|
import sh.okx.rankup.ranks.Rank;
|
||||||
|
import sh.okx.rankup.ranks.Rankups;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class RankupHelper {
|
||||||
|
private final Rankup plugin;
|
||||||
|
private final ConfigurationSection config;
|
||||||
|
private final Permission permissions;
|
||||||
|
/**
|
||||||
|
* Players who cannot rankup/prestige for a certain amount of time.
|
||||||
|
*/
|
||||||
|
private Map<Player, Long> cooldowns = new HashMap<>();
|
||||||
|
|
||||||
|
public RankupHelper(Rankup plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
this.config = plugin.getConfig();
|
||||||
|
this.permissions = plugin.getPermissions();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void doRankup(Player player, Rank rank) {
|
||||||
|
rank.runCommands(player);
|
||||||
|
applyCooldown(player);
|
||||||
|
|
||||||
|
if (rank.getRank() != null) {
|
||||||
|
permissions.playerRemoveGroup(null, player, rank.getRank());
|
||||||
|
}
|
||||||
|
permissions.playerAddGroup(null, player, rank.getNext());
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean checkCooldown(Player player, Rank rank) {
|
||||||
|
if (cooldowns.containsKey(player)) {
|
||||||
|
long time = System.currentTimeMillis() - cooldowns.get(player);
|
||||||
|
// if time passed is less than the cooldown
|
||||||
|
long cooldownSeconds = config.getInt("cooldown");
|
||||||
|
long timeLeft = (cooldownSeconds * 1000) - time;
|
||||||
|
if (timeLeft > 0) {
|
||||||
|
long secondsLeft = (long) Math.ceil(timeLeft / 1000f);
|
||||||
|
plugin.getMessage(rank, secondsLeft > 1 ? Message.COOLDOWN_PLURAL : Message.COOLDOWN_SINGULAR)
|
||||||
|
.failIfEmpty()
|
||||||
|
.replaceRanks(player, rank.getRank())
|
||||||
|
.replaceFromTo(rank)
|
||||||
|
.replace(Variable.SECONDS, cooldownSeconds)
|
||||||
|
.replace(Variable.SECONDS_LEFT, secondsLeft)
|
||||||
|
.send(player);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// cooldown has expired so remove it
|
||||||
|
cooldowns.remove(player);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void applyCooldown(Player player) {
|
||||||
|
if (config.getInt("cooldown") > 0) {
|
||||||
|
cooldowns.put(player, System.currentTimeMillis());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void rankup(Player player) {
|
||||||
|
if (!checkRankup(player)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Rank rank = plugin.getRankups().getByPlayer(player);
|
||||||
|
rank.applyRequirements(player);
|
||||||
|
doRankup(player, rank);
|
||||||
|
|
||||||
|
plugin.getMessage(rank, Message.SUCCESS_PUBLIC)
|
||||||
|
.failIfEmpty()
|
||||||
|
.replaceRanks(player, rank, rank.getNext())
|
||||||
|
.broadcast();
|
||||||
|
plugin.getMessage(rank, Message.SUCCESS_PRIVATE)
|
||||||
|
.failIfEmpty()
|
||||||
|
.replaceRanks(player, rank, rank.getNext())
|
||||||
|
.send(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean checkRankup(Player player) {
|
||||||
|
return checkRankup(player, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if a player can rankup,
|
||||||
|
* and if they can't, sends the player a message and returns false
|
||||||
|
*
|
||||||
|
* @param player the player to check if they can rankup
|
||||||
|
* @return true if the player can rankup, false otherwise
|
||||||
|
*/
|
||||||
|
public boolean checkRankup(Player player, boolean message) {
|
||||||
|
Rankups rankups = plugin.getRankups();
|
||||||
|
Rank rank = rankups.getByPlayer(player);
|
||||||
|
if (rankups.isLast(permissions, player)) {
|
||||||
|
Prestiges prestiges = plugin.getPrestiges();
|
||||||
|
plugin.getMessage(prestiges == null ? Message.NO_RANKUP : prestiges.isLast(permissions, player) ? Message.NO_RANKUP : Message.MUST_PRESTIGE)
|
||||||
|
.failIf(!message)
|
||||||
|
.replaceRanks(player, rankups.getLast())
|
||||||
|
.send(player);
|
||||||
|
return false;
|
||||||
|
} else if (rank == null) { // check if in ladder
|
||||||
|
plugin.getMessage(Message.NOT_IN_LADDER)
|
||||||
|
.failIf(!message)
|
||||||
|
.replace(Variable.PLAYER, player.getName())
|
||||||
|
.send(player);
|
||||||
|
return false;
|
||||||
|
} else if (!rank.hasRequirements(player)) { // check if they can afford it
|
||||||
|
if (message) {
|
||||||
|
plugin.replaceMoneyRequirements(plugin.getMessage(rank, Message.REQUIREMENTS_NOT_MET)
|
||||||
|
.replaceRanks(player, rank, rank.getNext()), player, rank)
|
||||||
|
.send(player);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
} else if (message && checkCooldown(player, rank)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void prestige(Player player) {
|
||||||
|
if (!checkPrestige(player)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Prestige prestige = plugin.getPrestiges().getByPlayer(player);
|
||||||
|
prestige.applyRequirements(player);
|
||||||
|
|
||||||
|
prestige.runCommands(player);
|
||||||
|
applyCooldown(player);
|
||||||
|
|
||||||
|
permissions.playerRemoveGroup(null, player, prestige.getFrom());
|
||||||
|
permissions.playerAddGroup(null, player, prestige.getTo());
|
||||||
|
|
||||||
|
if (prestige.getRank() != null) {
|
||||||
|
permissions.playerRemoveGroup(null, player, prestige.getRank());
|
||||||
|
}
|
||||||
|
permissions.playerAddGroup(null, player, prestige.getNext());
|
||||||
|
|
||||||
|
plugin.getMessage(prestige, Message.PRESTIGE_SUCCESS_PUBLIC)
|
||||||
|
.failIfEmpty()
|
||||||
|
.replaceRanks(player, prestige, prestige.getNext())
|
||||||
|
.replaceFromTo(prestige)
|
||||||
|
.broadcast();
|
||||||
|
plugin.getMessage(prestige, Message.PRESTIGE_SUCCESS_PRIVATE)
|
||||||
|
.failIfEmpty()
|
||||||
|
.replaceRanks(player, prestige, prestige.getNext())
|
||||||
|
.replaceFromTo(prestige)
|
||||||
|
.send(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean checkPrestige(Player player) {
|
||||||
|
return checkPrestige(player, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean checkPrestige(Player player, boolean message) {
|
||||||
|
Prestiges prestiges = plugin.getPrestiges();
|
||||||
|
Prestige prestige = prestiges.getByPlayer(player);
|
||||||
|
if (prestige == null || !prestige.isEligable(player)) { // check if in ladder
|
||||||
|
plugin.getMessage(Message.NOT_HIGH_ENOUGH)
|
||||||
|
.failIf(!message)
|
||||||
|
.replace(Variable.PLAYER, player.getName())
|
||||||
|
.send(player);
|
||||||
|
return false;
|
||||||
|
} else if (prestiges.isLast(plugin.getPermissions(), player)) { // check if they are at the highest rank
|
||||||
|
plugin.getMessage(prestige, Message.PRESTIGE_NO_PRESTIGE)
|
||||||
|
.failIf(!message)
|
||||||
|
.replaceRanks(player, prestige.getRank())
|
||||||
|
.replaceFromTo(prestige)
|
||||||
|
.send(player);
|
||||||
|
return false;
|
||||||
|
} else if (!prestige.hasRequirements(player)) { // check if they can afford it
|
||||||
|
plugin.replaceMoneyRequirements(plugin.getMessage(prestige, Message.PRESTIGE_REQUIREMENTS_NOT_MET)
|
||||||
|
.failIf(!message)
|
||||||
|
.replaceRanks(player, prestige, prestiges.next(prestige).getRank()), player, prestige)
|
||||||
|
.replaceFromTo(prestige)
|
||||||
|
.send(player);
|
||||||
|
return false;
|
||||||
|
} else if (checkCooldown(player, prestige)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -24,11 +24,11 @@ public class RankupRegisterEvent extends Event {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public RequirementRegistry getRequirementRegistry() {
|
public RequirementRegistry getRequirementRegistry() {
|
||||||
return plugin.getRequirementRegistry();
|
return plugin.getRequirements();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addRequirement(Requirement requirement) {
|
public void addRequirement(Requirement requirement) {
|
||||||
plugin.getRequirementRegistry().addRequirement(requirement);
|
plugin.getRequirements().addRequirement(requirement);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -24,27 +24,36 @@ public class InfoCommand implements CommandExecutor {
|
|||||||
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();
|
plugin.reload(false);
|
||||||
sender.sendMessage(ChatColor.GREEN + "" + ChatColor.BOLD + "Rankup " + ChatColor.YELLOW + "Reloaded configuration files.");
|
if (!plugin.error(sender)) {
|
||||||
|
sender.sendMessage(ChatColor.GREEN + "" + ChatColor.BOLD + "Rankup " + ChatColor.YELLOW + "Reloaded configuration files.");
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PluginDescriptionFile description = plugin.getDescription();
|
PluginDescriptionFile description = plugin.getDescription();
|
||||||
|
String version = description.getVersion();
|
||||||
sender.sendMessage(
|
sender.sendMessage(
|
||||||
ChatColor.GREEN + "" + ChatColor.BOLD + description.getName() + " " + description.getVersion() +
|
ChatColor.GREEN + "" + ChatColor.BOLD + description.getName() + " " + version +
|
||||||
ChatColor.YELLOW + " by " + ChatColor.BLUE + ChatColor.BOLD + String.join(", ", description.getAuthors()));
|
ChatColor.YELLOW + " by " + ChatColor.BLUE + ChatColor.BOLD + String.join(", ", description.getAuthors()));
|
||||||
if (sender.hasPermission("rankup.reload")) {
|
if (sender.hasPermission("rankup.reload")) {
|
||||||
sender.sendMessage(ChatColor.GREEN + "/" + label + " reload " + ChatColor.YELLOW + "Reloads configuration files.");
|
sender.sendMessage(ChatColor.GREEN + "/" + label + " reload " + ChatColor.YELLOW + "Reloads configuration files.");
|
||||||
}
|
}
|
||||||
if (sender.hasPermission("rankup.checkversion")) {
|
if (sender.hasPermission("rankup.checkversion")) {
|
||||||
if (versionMessage == null) {
|
if (versionMessage == null) {
|
||||||
|
if (version.contains("alpha") || version.contains("beta") || version.contains("rc")) {
|
||||||
|
versionMessage = ChatColor.YELLOW + "You are on a pre-release version.";
|
||||||
|
sender.sendMessage(versionMessage);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
sender.sendMessage(ChatColor.YELLOW + "Checking version...");
|
sender.sendMessage(ChatColor.YELLOW + "Checking version...");
|
||||||
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
|
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
|
||||||
String message;
|
String message;
|
||||||
try {
|
try {
|
||||||
String latest = getLatestVersion();
|
String latest = getLatestVersion();
|
||||||
if (description.getVersion().equals(latest)) {
|
if (version.equals(latest)) {
|
||||||
message = ChatColor.GREEN + "You are on the latest version.";
|
message = ChatColor.GREEN + "You are on the latest version.";
|
||||||
} else {
|
} else {
|
||||||
message = ChatColor.YELLOW + "A new version is available: " + ChatColor.GOLD + latest
|
message = ChatColor.YELLOW + "A new version is available: " + ChatColor.GOLD + latest
|
||||||
|
|||||||
@@ -22,6 +22,10 @@ public class PrestigeCommand implements CommandExecutor {
|
|||||||
|
|
||||||
@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 (plugin.error(sender)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// check if player
|
// check if player
|
||||||
if (!(sender instanceof Player)) {
|
if (!(sender instanceof Player)) {
|
||||||
return false;
|
return false;
|
||||||
@@ -30,7 +34,7 @@ public class PrestigeCommand implements CommandExecutor {
|
|||||||
|
|
||||||
Prestiges prestiges = plugin.getPrestiges();
|
Prestiges prestiges = plugin.getPrestiges();
|
||||||
Prestige prestige = prestiges.getByPlayer(player);
|
Prestige prestige = prestiges.getByPlayer(player);
|
||||||
if (!plugin.checkPrestige(player)) {
|
if (!plugin.getHelper().checkPrestige(player)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -39,7 +43,7 @@ public class PrestigeCommand implements CommandExecutor {
|
|||||||
if (confirmationType.equals("text") && confirming.containsKey(player)) {
|
if (confirmationType.equals("text") && confirming.containsKey(player)) {
|
||||||
long time = System.currentTimeMillis() - confirming.remove(player);
|
long time = System.currentTimeMillis() - confirming.remove(player);
|
||||||
if (time < config.getInt("text.timeout") * 1000) {
|
if (time < config.getInt("text.timeout") * 1000) {
|
||||||
plugin.prestige(player);
|
plugin.getHelper().prestige(player);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -59,7 +63,7 @@ public class PrestigeCommand implements CommandExecutor {
|
|||||||
Gui.of(player, prestige, prestige.getNext(), plugin).open(player);
|
Gui.of(player, prestige, prestige.getNext(), plugin).open(player);
|
||||||
break;
|
break;
|
||||||
case "none":
|
case "none":
|
||||||
plugin.prestige(player);
|
plugin.getHelper().prestige(player);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException("Invalid confirmation type " + confirmationType);
|
throw new IllegalArgumentException("Invalid confirmation type " + confirmationType);
|
||||||
|
|||||||
@@ -16,6 +16,10 @@ public class PrestigesCommand implements CommandExecutor {
|
|||||||
|
|
||||||
@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 (plugin.error(sender)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
Prestiges prestiges = plugin.getPrestiges();
|
Prestiges prestiges = plugin.getPrestiges();
|
||||||
Prestige playerRank = null;
|
Prestige playerRank = null;
|
||||||
if (sender instanceof Player) {
|
if (sender instanceof Player) {
|
||||||
|
|||||||
@@ -16,6 +16,10 @@ public class RanksCommand implements CommandExecutor {
|
|||||||
|
|
||||||
@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 (plugin.error(sender)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
Rankups rankups = plugin.getRankups();
|
Rankups rankups = plugin.getRankups();
|
||||||
Rank playerRank = null;
|
Rank playerRank = null;
|
||||||
if (sender instanceof Player) {
|
if (sender instanceof Player) {
|
||||||
@@ -24,7 +28,8 @@ public class RanksCommand implements CommandExecutor {
|
|||||||
|
|
||||||
plugin.sendHeaderFooter(sender, playerRank, Message.RANKS_HEADER);
|
plugin.sendHeaderFooter(sender, playerRank, Message.RANKS_HEADER);
|
||||||
|
|
||||||
Message message = playerRank == null ? Message.RANKS_INCOMPLETE : Message.RANKS_COMPLETE;
|
Message message = !(sender instanceof Player && rankups.isLast(plugin.getPermissions(), (Player) sender))
|
||||||
|
&& playerRank == null ? Message.RANKS_INCOMPLETE : Message.RANKS_COMPLETE;
|
||||||
Rank rank = rankups.getFirst();
|
Rank rank = rankups.getFirst();
|
||||||
while (rank != null) {
|
while (rank != null) {
|
||||||
String name = rank.getNext();
|
String name = rank.getNext();
|
||||||
|
|||||||
@@ -24,6 +24,10 @@ public class RankupCommand implements CommandExecutor {
|
|||||||
|
|
||||||
@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 (plugin.error(sender)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// check if player
|
// check if player
|
||||||
if (!(sender instanceof Player)) {
|
if (!(sender instanceof Player)) {
|
||||||
return false;
|
return false;
|
||||||
@@ -32,7 +36,7 @@ public class RankupCommand implements CommandExecutor {
|
|||||||
|
|
||||||
Rankups rankups = plugin.getRankups();
|
Rankups rankups = plugin.getRankups();
|
||||||
Rank rank = rankups.getByPlayer(player);
|
Rank rank = rankups.getByPlayer(player);
|
||||||
if (!plugin.checkRankup(player)) {
|
if (!plugin.getHelper().checkRankup(player)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
/*Rank next = rankups.next(rank);
|
/*Rank next = rankups.next(rank);
|
||||||
@@ -51,7 +55,7 @@ public class RankupCommand implements CommandExecutor {
|
|||||||
if (confirmationType.equals("text") && confirming.containsKey(player)) {
|
if (confirmationType.equals("text") && confirming.containsKey(player)) {
|
||||||
long time = System.currentTimeMillis() - confirming.remove(player);
|
long time = System.currentTimeMillis() - confirming.remove(player);
|
||||||
if (time < config.getInt("text.timeout") * 1000) {
|
if (time < config.getInt("text.timeout") * 1000) {
|
||||||
plugin.rankup(player);
|
plugin.getHelper().rankup(player);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -67,7 +71,7 @@ public class RankupCommand implements CommandExecutor {
|
|||||||
Gui.of(player, rank, next, plugin).open(player);
|
Gui.of(player, rank, next, plugin).open(player);
|
||||||
break;
|
break;
|
||||||
case "none":
|
case "none":
|
||||||
plugin.rankup(player);
|
plugin.getHelper().rankup(player);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException("Invalid confirmation type " + confirmationType);
|
throw new IllegalArgumentException("Invalid confirmation type " + confirmationType);
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ public class GuiListener implements Listener {
|
|||||||
Inventory inventory = e.getInventory();
|
Inventory inventory = e.getInventory();
|
||||||
if (inventory == null
|
if (inventory == null
|
||||||
|| !(inventory.getHolder() instanceof Gui)
|
|| !(inventory.getHolder() instanceof Gui)
|
||||||
|| !e.getInventory().equals(e.getClickedInventory())) {
|
|| !inventory.equals(e.getClickedInventory())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
@@ -29,9 +29,9 @@ public class GuiListener implements Listener {
|
|||||||
if (gui.getRankup().isSimilar(e.getCurrentItem())) {
|
if (gui.getRankup().isSimilar(e.getCurrentItem())) {
|
||||||
Bukkit.getScheduler().runTask(plugin, player::closeInventory);
|
Bukkit.getScheduler().runTask(plugin, player::closeInventory);
|
||||||
if (gui.isPrestige()) {
|
if (gui.isPrestige()) {
|
||||||
plugin.prestige(player);
|
plugin.getHelper().prestige(player);
|
||||||
} else {
|
} else {
|
||||||
plugin.rankup(player);
|
plugin.getHelper().rankup(player);
|
||||||
}
|
}
|
||||||
} else if (gui.getCancel().isSimilar(e.getCurrentItem())) {
|
} else if (gui.getCancel().isSimilar(e.getCurrentItem())) {
|
||||||
Bukkit.getScheduler().runTask(plugin, player::closeInventory);
|
Bukkit.getScheduler().runTask(plugin, player::closeInventory);
|
||||||
|
|||||||
@@ -84,8 +84,7 @@ public class MessageBuilder {
|
|||||||
/**
|
/**
|
||||||
* Fails the MessageBuilder if the message is empty.
|
* Fails the MessageBuilder if the message is empty.
|
||||||
* if this fails, all subsequent calls to that MessageBuilder will do nothing
|
* if this fails, all subsequent calls to that MessageBuilder will do nothing
|
||||||
*
|
* @return a NullMessageBuilder if the message is empty, itself otherwise
|
||||||
* @return an EmptyMessageBuilder if the message is empty, itself otherwise
|
|
||||||
*/
|
*/
|
||||||
public MessageBuilder failIfEmpty() {
|
public MessageBuilder failIfEmpty() {
|
||||||
return failIf(message.isEmpty());
|
return failIf(message.isEmpty());
|
||||||
@@ -93,7 +92,7 @@ public class MessageBuilder {
|
|||||||
|
|
||||||
public MessageBuilder failIf(boolean value) {
|
public MessageBuilder failIf(boolean value) {
|
||||||
if (value) {
|
if (value) {
|
||||||
return new EmptyMessageBuilder();
|
return new NullMessageBuilder();
|
||||||
} else {
|
} else {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-3
@@ -2,13 +2,16 @@ package sh.okx.rankup.messages;
|
|||||||
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
public class EmptyMessageBuilder extends MessageBuilder {
|
/**
|
||||||
EmptyMessageBuilder() {
|
* A no-op implementation of MessageBuilder
|
||||||
|
*/
|
||||||
|
public class NullMessageBuilder extends MessageBuilder {
|
||||||
|
NullMessageBuilder() {
|
||||||
super(null);
|
super(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MessageBuilder failIfEmpty() {
|
public MessageBuilder failIf(boolean value) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -16,6 +16,8 @@ public class Placeholders {
|
|||||||
private final DecimalFormat percentFormat;
|
private final DecimalFormat percentFormat;
|
||||||
@Getter
|
@Getter
|
||||||
private final DecimalFormat simpleFormat;
|
private final DecimalFormat simpleFormat;
|
||||||
|
@Getter
|
||||||
|
private RankupExpansion expansion;
|
||||||
private boolean registered;
|
private boolean registered;
|
||||||
|
|
||||||
public Placeholders(Rankup plugin) {
|
public Placeholders(Rankup plugin) {
|
||||||
@@ -27,7 +29,8 @@ public class Placeholders {
|
|||||||
|
|
||||||
public void register() {
|
public void register() {
|
||||||
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
||||||
new RankupExpansion(plugin, this).register();
|
expansion = new RankupExpansion(plugin, this);
|
||||||
|
expansion.register();
|
||||||
registered = true;
|
registered = true;
|
||||||
} else {
|
} else {
|
||||||
registered = false;
|
registered = false;
|
||||||
|
|||||||
@@ -88,9 +88,9 @@ public class RankupExpansion extends PlaceholderExpansion {
|
|||||||
}
|
}
|
||||||
return orElsePlaceholder(rank, r -> orElsePlaceholder(rank, Rank::getNext, "highest-rank"), "not-in-ladder");
|
return orElsePlaceholder(rank, r -> orElsePlaceholder(rank, Rank::getNext, "highest-rank"), "not-in-ladder");
|
||||||
case "money":
|
case "money":
|
||||||
return String.valueOf(orElse(rank, r -> simplify(r.getRequirement("money").getValueDouble()), 0));
|
return String.valueOf(getMoney(rank));
|
||||||
case "money_formatted":
|
case "money_formatted":
|
||||||
return plugin.formatMoney(orElse(rank, r -> r.getRequirement("money").getValueDouble(), 0D));
|
return plugin.formatMoney(getMoney(rank).doubleValue());
|
||||||
case "money_left":
|
case "money_left":
|
||||||
return String.valueOf(Math.max(0, orElse(rank, r -> simplify(plugin.getEconomy().getBalance(player) - r.getRequirement("money").getValueDouble()), 0).doubleValue()));
|
return String.valueOf(Math.max(0, orElse(rank, r -> simplify(plugin.getEconomy().getBalance(player) - r.getRequirement("money").getValueDouble()), 0).doubleValue()));
|
||||||
case "money_left_formatted":
|
case "money_left_formatted":
|
||||||
@@ -103,11 +103,19 @@ public class RankupExpansion extends PlaceholderExpansion {
|
|||||||
return String.valueOf(Math.min(100D, orElse(rank, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble()) * 100, 0).doubleValue()));
|
return String.valueOf(Math.min(100D, orElse(rank, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble()) * 100, 0).doubleValue()));
|
||||||
case "percent_done_formatted":
|
case "percent_done_formatted":
|
||||||
return placeholders.getPercentFormat().format(Math.min(100D, orElse(rank, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble()) * 100, 0).doubleValue()));
|
return placeholders.getPercentFormat().format(Math.min(100D, orElse(rank, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble()) * 100, 0).doubleValue()));
|
||||||
|
case "prestige_percent_left_formatted":
|
||||||
|
return placeholders.getPercentFormat().format(Math.max(0D, orElse(prestige, r -> (1 - (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble())) * 100, 0).doubleValue()));
|
||||||
|
case "prestige_percent_done_formatted":
|
||||||
|
return placeholders.getPercentFormat().format(Math.min(100D, orElse(prestige, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble()) * 100, 0).doubleValue()));
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Number getMoney(Rank rank) {
|
||||||
|
return orElse(rank, r -> simplify(r.getRequirement("money").getValueDouble()), 0);
|
||||||
|
}
|
||||||
|
|
||||||
private void requirePrestiging(Prestiges prestiges, String params) {
|
private void requirePrestiging(Prestiges prestiges, String params) {
|
||||||
Objects.requireNonNull(prestiges, "Using %rankup_" + params + "% prestige placeholder but prestiging is disabled.");
|
Objects.requireNonNull(prestiges, "Using %rankup_" + params + "% prestige placeholder but prestiging is disabled.");
|
||||||
}
|
}
|
||||||
@@ -185,4 +193,9 @@ public class RankupExpansion extends PlaceholderExpansion {
|
|||||||
public String getVersion() {
|
public String getVersion() {
|
||||||
return plugin.getDescription().getVersion();
|
return plugin.getDescription().getVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean persist() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ public class Prestige extends Rank {
|
|||||||
|
|
||||||
public static Prestige deserialize(Rankup plugin, ConfigurationSection section) {
|
public static Prestige deserialize(Rankup plugin, ConfigurationSection section) {
|
||||||
List<String> requirementsList = section.getStringList("requirements");
|
List<String> requirementsList = section.getStringList("requirements");
|
||||||
Set<Requirement> requirements = plugin.getRequirementRegistry().getRequirements(requirementsList);
|
Set<Requirement> requirements = plugin.getRequirements().getRequirements(requirementsList);
|
||||||
|
|
||||||
return new Prestige(section, plugin,
|
return new Prestige(section, plugin,
|
||||||
section.getString("next"),
|
section.getString("next"),
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ public class Rank {
|
|||||||
|
|
||||||
public static Rank deserialize(Rankup plugin, ConfigurationSection section) {
|
public static Rank deserialize(Rankup plugin, ConfigurationSection section) {
|
||||||
List<String> requirementsList = section.getStringList("requirements");
|
List<String> requirementsList = section.getStringList("requirements");
|
||||||
Set<Requirement> requirements = plugin.getRequirementRegistry().getRequirements(requirementsList);
|
Set<Requirement> requirements = plugin.getRequirements().getRequirements(requirementsList);
|
||||||
|
|
||||||
return new Rank(section, plugin,
|
return new Rank(section, plugin,
|
||||||
section.getString("next"),
|
section.getString("next"),
|
||||||
@@ -87,11 +87,13 @@ public class Rank {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void runCommands(Player player, String next) {
|
public void runCommands(Player player) {
|
||||||
for (String command : commands) {
|
for (String command : commands) {
|
||||||
String string = new MessageBuilder(command).replaceRanks(player, this, next).toString();
|
String string = new MessageBuilder(command).replaceRanks(player, this, next).toString();
|
||||||
Bukkit.dispatchCommand(Bukkit.getConsoleSender(),
|
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
||||||
PlaceholderAPI.setPlaceholders(player, string));
|
string = PlaceholderAPI.setPlaceholders(player, string);
|
||||||
|
}
|
||||||
|
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), string);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package sh.okx.rankup.requirements;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proxy requirement for a deductible requirement that is exactly the same but is not deductible
|
||||||
|
*/
|
||||||
|
public class NonDeductibleRequirement extends ProgressiveRequirement {
|
||||||
|
private final DeductibleRequirement requirement;
|
||||||
|
|
||||||
|
public NonDeductibleRequirement(DeductibleRequirement requirement, String name) {
|
||||||
|
super(requirement.plugin, name, requirement.hasSubRequirement());
|
||||||
|
this.requirement = requirement;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected NonDeductibleRequirement(NonDeductibleRequirement clone) {
|
||||||
|
super(clone);
|
||||||
|
this.requirement = clone.requirement;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getProgress(Player player) {
|
||||||
|
return requirement.getProgress(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Requirement clone() {
|
||||||
|
return new NonDeductibleRequirement(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -31,7 +31,7 @@ public class RequirementRegistry {
|
|||||||
String name = parts[0];
|
String name = parts[0];
|
||||||
String value = parts[1];
|
String value = parts[1];
|
||||||
Requirement requirement = newRequirement(name, value);
|
Requirement requirement = newRequirement(name, value);
|
||||||
Objects.requireNonNull(requirement, name.equalsIgnoreCase("money") ? "Money requirement disabled because no economy was found." : "Unknown requirement: " + name);
|
Objects.requireNonNull(requirement, name.equalsIgnoreCase("money") ? "The 'money' requirement is being used but no economy is found" : "Unknown requirement: " + name);
|
||||||
requirements.add(requirement);
|
requirements.add(requirement);
|
||||||
}
|
}
|
||||||
return requirements;
|
return requirements;
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ import sh.okx.rankup.requirements.DeductibleRequirement;
|
|||||||
import sh.okx.rankup.requirements.ProgressiveRequirement;
|
import sh.okx.rankup.requirements.ProgressiveRequirement;
|
||||||
import sh.okx.rankup.requirements.Requirement;
|
import sh.okx.rankup.requirements.Requirement;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
public class ItemRequirement extends DeductibleRequirement {
|
public class ItemRequirement extends DeductibleRequirement {
|
||||||
public ItemRequirement(Rankup plugin) {
|
public ItemRequirement(Rankup plugin) {
|
||||||
super(plugin, "item", true);
|
super(plugin, "item", true);
|
||||||
@@ -18,25 +20,25 @@ public class ItemRequirement extends DeductibleRequirement {
|
|||||||
super(clone);
|
super(clone);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public double getProgress(Player player) {
|
|
||||||
Material material = Material.matchMaterial(getSub());
|
|
||||||
int count = 0;
|
|
||||||
for (ItemStack item : player.getInventory().getStorageContents()) {
|
|
||||||
if (item != null && item.getType() == material) {
|
|
||||||
count += item.getAmount();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void apply(Player player, double multiplier) {
|
public void apply(Player player, double multiplier) {
|
||||||
player.getInventory().removeItem(new ItemStack(Material.matchMaterial(getSub()), (int) (getValueInt() * multiplier)));
|
Material type = Material.matchMaterial(getSub());
|
||||||
|
if (type == null) {
|
||||||
|
throw new IllegalArgumentException("Invalid item " + getSub());
|
||||||
|
}
|
||||||
|
player.getInventory().removeItem(new ItemStack(type, (int) (getValueInt() * multiplier)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Requirement clone() {
|
public Requirement clone() {
|
||||||
return new ItemRequirement(this);
|
return new ItemRequirement(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getProgress(Player player) {
|
||||||
|
Material material = Material.matchMaterial(getSub());
|
||||||
|
return Arrays.stream(player.getInventory().getStorageContents())
|
||||||
|
.filter(item -> item != null && item.getType() == material)
|
||||||
|
.mapToInt(ItemStack::getAmount).sum();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ public class MobKillsRequirement extends ProgressiveRequirement {
|
|||||||
super(clone);
|
super(clone);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
@Override
|
@Override
|
||||||
public double getProgress(Player player) {
|
public double getProgress(Player player) {
|
||||||
EntityType entity = Objects.requireNonNull(EntityType.fromName(getSub()), "Invalid entity type '" + getSub() + "' in mob-kills requirement.");
|
EntityType entity = Objects.requireNonNull(EntityType.fromName(getSub()), "Invalid entity type '" + getSub() + "' in mob-kills requirement.");
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ public class TotalMobKillsRequirement extends ProgressiveRequirement {
|
|||||||
super(plugin, "total-mob-kills");
|
super(plugin, "total-mob-kills");
|
||||||
}
|
}
|
||||||
|
|
||||||
protected TotalMobKillsRequirement(Requirement clone) {
|
private TotalMobKillsRequirement(Requirement clone) {
|
||||||
super(clone);
|
super(clone);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
name: Rankup
|
name: Rankup
|
||||||
version: 3.5.4
|
version: ${version}
|
||||||
main: sh.okx.rankup.Rankup
|
main: sh.okx.rankup.Rankup
|
||||||
author: Okx
|
author: Okx
|
||||||
depend: [Vault]
|
depend: [Vault]
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ first:
|
|||||||
# the rank to change it to
|
# the rank to change it to
|
||||||
to: 'A'
|
to: 'A'
|
||||||
next: 'P1'
|
next: 'P1'
|
||||||
# see rankups.yml for more information on requirements, operations, commands and messages
|
# see rankups.yml for more information on requirements, commands, and messages
|
||||||
requirements:
|
requirements:
|
||||||
- 'money 10000'
|
- 'money 10000'
|
||||||
P1example:
|
P1example:
|
||||||
|
|||||||
@@ -9,6 +9,6 @@ import static org.junit.Assert.assertThat;
|
|||||||
public class MessageBuilderTest {
|
public class MessageBuilderTest {
|
||||||
@Test
|
@Test
|
||||||
public void testFailIfEmpty() {
|
public void testFailIfEmpty() {
|
||||||
assertThat(new MessageBuilder("").failIfEmpty(), instanceOf(EmptyMessageBuilder.class));
|
assertThat(new MessageBuilder("").failIfEmpty(), instanceOf(NullMessageBuilder.class));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user