diff --git a/build.gradle b/build.gradle index 9c4488e..cae7d52 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ plugins { } group 'sh.okx' -version '3.5.7-alpha.2' +version '3.5.6' repositories { mavenCentral() diff --git a/src/main/java/sh/okx/rankup/Rankup.java b/src/main/java/sh/okx/rankup/Rankup.java index 8dbc0e2..c0a4dbe 100644 --- a/src/main/java/sh/okx/rankup/Rankup.java +++ b/src/main/java/sh/okx/rankup/Rankup.java @@ -31,6 +31,8 @@ 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 sh.okx.rankup.requirements.DeductibleRequirement; +import sh.okx.rankup.requirements.NonDeductibleRequirement; import sh.okx.rankup.requirements.Requirement; import sh.okx.rankup.requirements.RequirementRegistry; import sh.okx.rankup.requirements.requirement.*; @@ -259,7 +261,7 @@ public class Rankup extends JavaPlugin { private void registerRequirements() { requirements = new RequirementRegistry(); - requirements.addRequirement(new XpLevelRequirement(this)); + registerDeductible(new XpLevelRequirement(this)); requirements.addRequirement(new PlaytimeMinutesRequirement(this)); requirements.addRequirement(new GroupRequirement(this)); requirements.addRequirement(new PermissionRequirement(this)); @@ -268,13 +270,12 @@ public class Rankup extends JavaPlugin { requirements.addRequirement(new BlockBreakRequirement(this)); requirements.addRequirement(new PlayerKillsRequirement(this)); requirements.addRequirement(new MobKillsRequirement(this)); - requirements.addRequirement(new ItemRequirement(this)); - requirements.addRequirement(new ItemhRequirement(this)); + registerDeductible(new ItemRequirement(this)); requirements.addRequirement(new UseItemRequirement(this)); requirements.addRequirement(new TotalMobKillsRequirement(this)); requirements.addRequirement(new CraftItemRequirement(this)); if (economy != null) { - requirements.addRequirement(new MoneyRequirement(this)); + registerDeductible(new MoneyRequirement(this)); } PluginManager pluginManager = Bukkit.getPluginManager(); @@ -291,6 +292,11 @@ public class Rankup extends JavaPlugin { } } + private void registerDeductible(DeductibleRequirement requirement) { + requirements.addRequirement(requirement); + requirements.addRequirement(new NonDeductibleRequirement(requirement, requirement.getName() + "h")); + } + private boolean setupPermissions() { RegisteredServiceProvider rsp = getServer().getServicesManager().getRegistration(Permission.class); if (rsp == null) { diff --git a/src/main/java/sh/okx/rankup/requirements/NonDeductibleRequirement.java b/src/main/java/sh/okx/rankup/requirements/NonDeductibleRequirement.java new file mode 100644 index 0000000..a17df0e --- /dev/null +++ b/src/main/java/sh/okx/rankup/requirements/NonDeductibleRequirement.java @@ -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); + } +} diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/ItemhRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/ItemhRequirement.java deleted file mode 100644 index 35ca8d3..0000000 --- a/src/main/java/sh/okx/rankup/requirements/requirement/ItemhRequirement.java +++ /dev/null @@ -1,33 +0,0 @@ -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); - } -} diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/TotalMobKillsRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/TotalMobKillsRequirement.java index 6baea68..2e0142b 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/TotalMobKillsRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/TotalMobKillsRequirement.java @@ -11,7 +11,7 @@ public class TotalMobKillsRequirement extends ProgressiveRequirement { super(plugin, "total-mob-kills"); } - protected TotalMobKillsRequirement(Requirement clone) { + private TotalMobKillsRequirement(Requirement clone) { super(clone); }