3.5.7-alpha
- better reporting of configuration errors (instead of disabling the plugin, send the error on startup and whenever a command is executed) - don't check for updates if on a pre-release version - add infinite rankup loop detection - add itemh requirement (like the item requirement, but not deductible) - make it so i only have to change the plugin version in one place
This commit is contained in:
+16
-4
@@ -1,9 +1,10 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id 'java'
|
id 'java'
|
||||||
|
id "io.freefair.lombok" version "3.8.0"
|
||||||
}
|
}
|
||||||
|
|
||||||
group 'sh.okx'
|
group 'sh.okx'
|
||||||
version '3.5.6'
|
version '3.5.7-alpha'
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
@@ -26,9 +27,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'
|
||||||
|
|
||||||
@@ -42,3 +40,17 @@ dependencies {
|
|||||||
}
|
}
|
||||||
compile 'com.github.Ben12345rocks:VotingPlugin:5.18.2'
|
compile 'com.github.Ben12345rocks:VotingPlugin:5.18.2'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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'
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,6 +11,10 @@ public class AutoRankup extends BukkitRunnable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
if (rankup.error()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
RankupHelper helper = rankup.getHelper();
|
RankupHelper helper = rankup.getHelper();
|
||||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||||
if (player.hasPermission("rankup.auto")) {
|
if (player.hasPermission("rankup.auto")) {
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,12 +71,11 @@ public class Rankup extends JavaPlugin {
|
|||||||
@Getter
|
@Getter
|
||||||
private RankupHelper helper;
|
private RankupHelper helper;
|
||||||
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",
|
||||||
@@ -112,12 +111,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) {
|
||||||
|
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();
|
||||||
@@ -141,6 +148,30 @@ public class Rankup extends JavaPlugin {
|
|||||||
helper = new RankupHelper(this);
|
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) {
|
||||||
for (Rank rank : ranks.ranks) {
|
for (Rank rank : ranks.ranks) {
|
||||||
for (Requirement requirement : rank.getRequirements()) {
|
for (Requirement requirement : rank.getRequirements()) {
|
||||||
@@ -165,7 +196,7 @@ public class Rankup extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadConfigs() {
|
private void loadConfigs(boolean init) {
|
||||||
saveLocales();
|
saveLocales();
|
||||||
|
|
||||||
config = loadConfig("config.yml");
|
config = loadConfig("config.yml");
|
||||||
@@ -173,7 +204,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() {
|
||||||
@@ -187,11 +225,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");
|
|
||||||
Bukkit.broadcast(ChatColor.RED + "Could not reload rankup successfully, please check console for more information.", "rankup.reload");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -229,6 +269,7 @@ public class Rankup extends JavaPlugin {
|
|||||||
requirements.addRequirement(new PlayerKillsRequirement(this));
|
requirements.addRequirement(new PlayerKillsRequirement(this));
|
||||||
requirements.addRequirement(new MobKillsRequirement(this));
|
requirements.addRequirement(new MobKillsRequirement(this));
|
||||||
requirements.addRequirement(new ItemRequirement(this));
|
requirements.addRequirement(new ItemRequirement(this));
|
||||||
|
requirements.addRequirement(new ItemhRequirement(this));
|
||||||
requirements.addRequirement(new UseItemRequirement(this));
|
requirements.addRequirement(new UseItemRequirement(this));
|
||||||
requirements.addRequirement(new TotalMobKillsRequirement(this));
|
requirements.addRequirement(new TotalMobKillsRequirement(this));
|
||||||
requirements.addRequirement(new CraftItemRequirement(this));
|
requirements.addRequirement(new CraftItemRequirement(this));
|
||||||
@@ -250,9 +291,13 @@ public class Rankup extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupPermissions() {
|
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() {
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package sh.okx.rankup;
|
package sh.okx.rankup;
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import net.milkbowl.vault.permission.Permission;
|
import net.milkbowl.vault.permission.Permission;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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,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;
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
package sh.okx.rankup.requirements.requirement;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import sh.okx.rankup.Rankup;
|
||||||
|
import sh.okx.rankup.requirements.ProgressiveRequirement;
|
||||||
|
import sh.okx.rankup.requirements.Requirement;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class ItemhRequirement extends ProgressiveRequirement {
|
||||||
|
public ItemhRequirement(Rankup plugin) {
|
||||||
|
super(plugin, "itemh", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ItemhRequirement(ItemRequirement clone) {
|
||||||
|
super(clone);
|
||||||
|
}
|
||||||
|
|
||||||
|
@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();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Requirement clone() {
|
||||||
|
return new ItemhRequirement(plugin);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
name: Rankup
|
name: Rankup
|
||||||
version: 3.5.6
|
version: ${version}
|
||||||
main: sh.okx.rankup.Rankup
|
main: sh.okx.rankup.Rankup
|
||||||
author: Okx
|
author: Okx
|
||||||
depend: [Vault]
|
depend: [Vault]
|
||||||
|
|||||||
Reference in New Issue
Block a user