From 4084c2819e9f63698aa69c2adaa19ab8faba1d46 Mon Sep 17 00:00:00 2001 From: okx-code Date: Sat, 10 Nov 2018 20:20:18 +0000 Subject: [PATCH] add advanced achievements requirements (untested) --- build.gradle | 6 ++- src/main/java/sh/okx/rankup/Rankup.java | 10 ++++- .../requirements/RequirementRegistry.java | 8 ---- .../requirement/GroupRequirement.java | 16 +++++--- .../requirement/PermissionRequirement.java | 15 +++++-- ...cedAchievementsAchievementRequirement.java | 41 +++++++++++++++++++ .../AdvancedAchievementsTotalRequirement.java | 33 +++++++++++++++ .../McMMOPowerLevelRequirement.java | 2 +- .../{ => mcmmo}/McMMOSkillRequirement.java | 2 +- src/main/resources/plugin.yml | 4 +- 10 files changed, 113 insertions(+), 24 deletions(-) create mode 100644 src/main/java/sh/okx/rankup/requirements/requirement/advancedachievements/AdvancedAchievementsAchievementRequirement.java create mode 100644 src/main/java/sh/okx/rankup/requirements/requirement/advancedachievements/AdvancedAchievementsTotalRequirement.java rename src/main/java/sh/okx/rankup/requirements/requirement/{ => mcmmo}/McMMOPowerLevelRequirement.java (93%) rename src/main/java/sh/okx/rankup/requirements/requirement/{ => mcmmo}/McMMOSkillRequirement.java (94%) diff --git a/build.gradle b/build.gradle index cede5dd..1b7dbd1 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group 'sh.okx' -version '3.2.1-beta.4' +version '3.3-beta' repositories { mavenCentral() @@ -19,6 +19,9 @@ repositories { maven { url 'http://repo.extendedclip.com/content/repositories/placeholderapi/' } + maven { + url 'https://raw.github.com/PyvesB/AdvancedAchievements/mvn-repo/' + } } dependencies { @@ -33,6 +36,7 @@ dependencies { exclude group: 'org.bukkit' } compile 'me.clip:placeholderapi:2.9.2' + compile 'com.hm.achievement:advanced-achievements-api:1.1.0' // if compiling this you will have to download and install mcMMO locally compile 'com.gmail.nossr50.mcMMO:mcMMO:1.6.0-SNAPSHOT' } diff --git a/src/main/java/sh/okx/rankup/Rankup.java b/src/main/java/sh/okx/rankup/Rankup.java index 80c0830..2ec6cbf 100644 --- a/src/main/java/sh/okx/rankup/Rankup.java +++ b/src/main/java/sh/okx/rankup/Rankup.java @@ -38,8 +38,10 @@ import sh.okx.rankup.requirements.operation.AnyOperation; import sh.okx.rankup.requirements.operation.NoneOperation; import sh.okx.rankup.requirements.operation.OneOperation; import sh.okx.rankup.requirements.requirement.GroupRequirement; -import sh.okx.rankup.requirements.requirement.McMMOPowerLevelRequirement; -import sh.okx.rankup.requirements.requirement.McMMOSkillRequirement; +import sh.okx.rankup.requirements.requirement.advancedachievements.AdvancedAchievementsAchievementRequirement; +import sh.okx.rankup.requirements.requirement.advancedachievements.AdvancedAchievementsTotalRequirement; +import sh.okx.rankup.requirements.requirement.mcmmo.McMMOPowerLevelRequirement; +import sh.okx.rankup.requirements.requirement.mcmmo.McMMOSkillRequirement; import sh.okx.rankup.requirements.requirement.MoneyRequirement; import sh.okx.rankup.requirements.requirement.PermissionRequirement; import sh.okx.rankup.requirements.requirement.PlaceholderRequirement; @@ -198,6 +200,10 @@ public class Rankup extends JavaPlugin { } requirementRegistry.addRequirement(new McMMOPowerLevelRequirement(this)); } + if (Bukkit.getPluginManager().isPluginEnabled("AdvancedAchievements")) { + requirementRegistry.addRequirement(new AdvancedAchievementsAchievementRequirement(this)); + requirementRegistry.addRequirement(new AdvancedAchievementsTotalRequirement(this)); + } operationRegistry = new OperationRegistry(); operationRegistry.addOperation("all", new AllOperation()); diff --git a/src/main/java/sh/okx/rankup/requirements/RequirementRegistry.java b/src/main/java/sh/okx/rankup/requirements/RequirementRegistry.java index a9a6f89..742e504 100644 --- a/src/main/java/sh/okx/rankup/requirements/RequirementRegistry.java +++ b/src/main/java/sh/okx/rankup/requirements/RequirementRegistry.java @@ -40,12 +40,4 @@ public class RequirementRegistry { } return requirements; } - - public void apply(Player player, Set requirements) { - for (Requirement requirement : requirements) { - if (requirement instanceof DeductibleRequirement) { - ((DeductibleRequirement) requirement).apply(player); - } - } - } } diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/GroupRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/GroupRequirement.java index f7c5d96..be6a39c 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/GroupRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/GroupRequirement.java @@ -15,16 +15,22 @@ public class GroupRequirement extends Requirement { @Override public boolean check(Player player) { - OUTER: - for (String requiredGroup : getValueString().split(" ")) { + return getRemaining(player) < 1; + } + + @Override + public double getRemaining(Player player) { + int matched = 0; + String[] groups = getValueString().split(" "); + for (String requiredGroup : groups) { for (String group : plugin.getPermissions().getPlayerGroups(null, player)) { if (group.equalsIgnoreCase(requiredGroup)) { - continue OUTER; + matched++; + break; } } - return false; } - return true; + return groups.length - matched; } @Override diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/PermissionRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/PermissionRequirement.java index eee79bb..b6dacfd 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/PermissionRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/PermissionRequirement.java @@ -15,12 +15,19 @@ public class PermissionRequirement extends Requirement { @Override public boolean check(Player player) { - for(String permission : getValueString().split(" ")) { - if(!player.hasPermission(permission)) { - return false; + return getRemaining(player) < 1; + } + + @Override + public double getRemaining(Player player) { + int matched = 0; + String[] permissions = getValueString().split(" "); + for(String permission : permissions) { + if(player.hasPermission(permission)) { + matched++; } } - return true; + return permissions.length - matched; } @Override diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/advancedachievements/AdvancedAchievementsAchievementRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/advancedachievements/AdvancedAchievementsAchievementRequirement.java new file mode 100644 index 0000000..3dbc56c --- /dev/null +++ b/src/main/java/sh/okx/rankup/requirements/requirement/advancedachievements/AdvancedAchievementsAchievementRequirement.java @@ -0,0 +1,41 @@ +package sh.okx.rankup.requirements.requirement.advancedachievements; + +import com.hm.achievement.api.AdvancedAchievementsAPI; +import com.hm.achievement.api.AdvancedAchievementsAPIFetcher; +import org.bukkit.entity.Player; +import sh.okx.rankup.Rankup; +import sh.okx.rankup.requirements.Requirement; + +public class AdvancedAchievementsAchievementRequirement extends Requirement { + public AdvancedAchievementsAchievementRequirement(Rankup plugin) { + super(plugin, "advancedachievements-achievement"); + } + + protected AdvancedAchievementsAchievementRequirement(Requirement clone) { + super(clone); + } + + @Override + public boolean check(Player player) { + return getRemaining(player) < 1; + } + + @Override + public double getRemaining(Player player) { + AdvancedAchievementsAPI api = AdvancedAchievementsAPIFetcher.fetchInstance().get(); + + int total = 0; + String[] achievements = getValueString().split(" "); + for (String achievement : achievements) { + if (api.hasPlayerReceivedAchievement(player.getUniqueId(), achievement)) { + total++; + } + } + return achievements.length - total; + } + + @Override + public Requirement clone() { + return new AdvancedAchievementsAchievementRequirement(this); + } +} diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/advancedachievements/AdvancedAchievementsTotalRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/advancedachievements/AdvancedAchievementsTotalRequirement.java new file mode 100644 index 0000000..8bfe315 --- /dev/null +++ b/src/main/java/sh/okx/rankup/requirements/requirement/advancedachievements/AdvancedAchievementsTotalRequirement.java @@ -0,0 +1,33 @@ +package sh.okx.rankup.requirements.requirement.advancedachievements; + +import com.hm.achievement.api.AdvancedAchievementsAPI; +import com.hm.achievement.api.AdvancedAchievementsAPIFetcher; +import org.bukkit.entity.Player; +import sh.okx.rankup.Rankup; +import sh.okx.rankup.requirements.Requirement; + +public class AdvancedAchievementsTotalRequirement extends Requirement { + public AdvancedAchievementsTotalRequirement(Rankup plugin) { + super(plugin, "advancedachievements-total"); + } + + protected AdvancedAchievementsTotalRequirement(Requirement clone) { + super(clone); + } + + @Override + public boolean check(Player player) { + return getRemaining(player) < 1; + } + + @Override + public double getRemaining(Player player) { + AdvancedAchievementsAPI api = AdvancedAchievementsAPIFetcher.fetchInstance().get(); + return getValueInt() - api.getPlayerTotalAchievements(player.getUniqueId()); + } + + @Override + public Requirement clone() { + return new AdvancedAchievementsTotalRequirement(this); + } +} diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/McMMOPowerLevelRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOPowerLevelRequirement.java similarity index 93% rename from src/main/java/sh/okx/rankup/requirements/requirement/McMMOPowerLevelRequirement.java rename to src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOPowerLevelRequirement.java index 1ee0b5c..026a62b 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/McMMOPowerLevelRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOPowerLevelRequirement.java @@ -1,4 +1,4 @@ -package sh.okx.rankup.requirements.requirement; +package sh.okx.rankup.requirements.requirement.mcmmo; import com.gmail.nossr50.util.player.UserManager; import org.bukkit.entity.Player; diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/McMMOSkillRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOSkillRequirement.java similarity index 94% rename from src/main/java/sh/okx/rankup/requirements/requirement/McMMOSkillRequirement.java rename to src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOSkillRequirement.java index d09f0c5..98590a4 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/McMMOSkillRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOSkillRequirement.java @@ -1,4 +1,4 @@ -package sh.okx.rankup.requirements.requirement; +package sh.okx.rankup.requirements.requirement.mcmmo; import com.gmail.nossr50.datatypes.skills.SkillType; import com.gmail.nossr50.util.player.UserManager; diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index ed88e0a..419247c 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,9 +1,9 @@ name: Rankup -version: 3.2.1-beta.4 +version: 3.3-beta main: sh.okx.rankup.Rankup author: Okx depend: [Vault] -softdepend: [PlaceholderAPI, mcMMO] +softdepend: [PlaceholderAPI, mcMMO, AdvancedAchievements] api-version: 1.13 commands: