diff --git a/VotingPlugin/src/main/java/com/bencodez/votingplugin/VotingPluginMain.java b/VotingPlugin/src/main/java/com/bencodez/votingplugin/VotingPluginMain.java index 2f351ef0b1..e283d45ed9 100644 --- a/VotingPlugin/src/main/java/com/bencodez/votingplugin/VotingPluginMain.java +++ b/VotingPlugin/src/main/java/com/bencodez/votingplugin/VotingPluginMain.java @@ -91,6 +91,7 @@ import com.bencodez.votingplugin.placeholders.PlaceHolders; import com.bencodez.votingplugin.placeholders.VotingPluginExpansion; import com.bencodez.votingplugin.presets.VoteSitePresetSetupHandler; +import com.bencodez.votingplugin.rewards.VotingPluginRewardRegistrar; import com.bencodez.votingplugin.servicesites.ServiceSiteHandler; import com.bencodez.votingplugin.signs.Signs; import com.bencodez.votingplugin.specialrewards.NameMCLikeCheckerTask; @@ -699,133 +700,7 @@ public Object getObject(OfflinePlayer player) { nameMCLikeCheckerTask.runTaskTimerAsynchronously(this, 20L, interval); } - // Add rewards - getRewardHandler().addInjectedReward(new RewardInjectInt("Points", 0) { - - @Override - public String onRewardRequest(Reward reward, com.bencodez.advancedcore.api.user.AdvancedCoreUser user, - int num, HashMap placeholders) { - VotingPluginUser vpUser = getVotingPluginUserManager().getVotingPluginUser(user); - String str = "" + vpUser.addPoints(num); - debug("Setting points to " + str); - return str; - } - }.synchronize().asPlaceholder("newpoints").addEditButton( - new EditGUIButton(new ItemBuilder(Material.PAPER), new EditGUIValueNumber("Points", null) { - - @Override - public void setValue(Player player, Number value) { - RewardEditData reward = (RewardEditData) getInv().getData("Reward"); - reward.setValue("Points", value.intValue()); - } - }.addLore("Give player voting points"))).validator(new RewardInjectValidator() { - - @Override - public void onValidate(Reward reward, RewardInject inject, ConfigurationSection data) { - if (data.getInt(inject.getPath(), -1) == 0) { - warning(reward, inject, "Points can not be 0"); - } - } - })); - - getRewardHandler().addInjectedReward(new RewardInjectConfigurationSection("VoteBossBar") { - - @Override - public String onRewardRequested(Reward arg0, com.bencodez.advancedcore.api.user.AdvancedCoreUser user, - ConfigurationSection section, HashMap placeholders) { - if (section.getBoolean("Enabled")) { - user.sendBossBar( - PlaceholderUtils.replacePlaceHolder(section.getString("Message", ""), placeholders), - section.getString("Color", "BLUE"), section.getString("Style", "SOLID"), - (double) getVotingPluginUserManager().getVotingPluginUser(user).getSitesVotedOn() - / plugin.getVoteSites().size(), - section.getInt("Delay", 30)); - } - return null; - } - }); - - getRewardHandler().addInjectedReward(new RewardInjectConfigurationSection("WebhookReward") { - - @Override - public String onRewardRequested(Reward reward, AdvancedCoreUser user, ConfigurationSection section, - HashMap placeholders) { - - if (section == null || webhooks == null) { - return null; - } - - // Parse list from inside this section - List entries = WebhookRewardParser.parse(section); - - if (entries == null || entries.isEmpty()) { - return null; - } - - webhooks.createExecutor().executeAll(entries, (input) -> { - return PlaceholderUtils.replacePlaceHolder(input, placeholders); - }); - - return null; - } - }); - - getRewardHandler().addInjectedRequirements(new RequirementInjectConfigurationSection("VoteTotal") { - - @Override - public boolean onRequirementsRequested(Reward reward, AdvancedCoreUser acUser, ConfigurationSection section, - RewardOptions rewardOptions) { - boolean atleast = section.getBoolean("AtleastMode", false); - VotingPluginUser user = plugin.getVotingPluginUserManager().getVotingPluginUser(acUser); - - for (TopVoter top : TopVoter.values()) { - int required = section.getInt(top.toString(), -1); - if (required >= 0) { - int total = user.getTotal(top); - if (atleast) { - if (total < required) { - debug("Failed requirement " + top.toString() + " " + total + "/" + required); - return false; - } - } else { - if (total != required) { - debug("Failed requirement " + top.toString() + " " + total + "!=" + required); - return false; - } - } - } - } - - int pointsRequired = section.getInt("Points", -1); - if (pointsRequired >= 0) { - int points = user.getPoints(); - if (atleast) { - if (points < pointsRequired) { - debug("Failed requirement points " + points + "/" + pointsRequired); - return false; - } - } else { - if (points != pointsRequired) { - debug("Failed requirement points " + points + "!=" + pointsRequired); - return false; - } - } - } - - return true; - } - }); - - for (final TopVoter top : TopVoter.values()) { - getRewardHandler().addPlaceholder(new RewardPlaceholderHandle("Total_" + top.toString()) { - - @Override - public String getValue(Reward reward, com.bencodez.advancedcore.api.user.AdvancedCoreUser user) { - VotingPluginUser vUser = getVotingPluginUserManager().getVotingPluginUser(user); - return "" + vUser.getTotal(top); - } - }); - } + VotingPluginRewardRegistrar.register(this); plugin.getLogger().info("Enabled VotingPlugin " + plugin.getDescription().getVersion()); if (plugin.getDescription().getVersion().contains("SNAPSHOT")) { diff --git a/VotingPlugin/src/main/java/com/bencodez/votingplugin/rewards/VotingPluginRewardRegistrar.java b/VotingPlugin/src/main/java/com/bencodez/votingplugin/rewards/VotingPluginRewardRegistrar.java new file mode 100644 index 0000000000..330955f31b --- /dev/null +++ b/VotingPlugin/src/main/java/com/bencodez/votingplugin/rewards/VotingPluginRewardRegistrar.java @@ -0,0 +1,27 @@ +package com.bencodez.votingplugin.rewards; + +import com.bencodez.votingplugin.VotingPluginMain; +import com.bencodez.votingplugin.rewards.builtin.RewardPoints; +import com.bencodez.votingplugin.rewards.builtin.RewardVoteBossBar; +import com.bencodez.votingplugin.rewards.builtin.RewardWebhook; +import com.bencodez.votingplugin.rewards.builtin.placeholders.RewardTotalPlaceholder; +import com.bencodez.votingplugin.rewards.builtin.requirements.RequirementVoteTotal; +import com.bencodez.votingplugin.topvoter.TopVoter; + +/** Registers VotingPlugin-specific AdvancedCore reward extensions. */ +public final class VotingPluginRewardRegistrar { + + private VotingPluginRewardRegistrar() { + } + + public static void register(VotingPluginMain plugin) { + plugin.getRewardHandler().addInjectedReward(new RewardPoints(plugin)); + plugin.getRewardHandler().addInjectedReward(new RewardVoteBossBar(plugin)); + plugin.getRewardHandler().addInjectedReward(new RewardWebhook(plugin)); + plugin.getRewardHandler().addInjectedRequirements(new RequirementVoteTotal(plugin)); + + for (TopVoter topVoter : TopVoter.values()) { + plugin.getRewardHandler().addPlaceholder(new RewardTotalPlaceholder(plugin, topVoter)); + } + } +} diff --git a/VotingPlugin/src/main/java/com/bencodez/votingplugin/rewards/builtin/RewardPoints.java b/VotingPlugin/src/main/java/com/bencodez/votingplugin/rewards/builtin/RewardPoints.java new file mode 100644 index 0000000000..820e8e204f --- /dev/null +++ b/VotingPlugin/src/main/java/com/bencodez/votingplugin/rewards/builtin/RewardPoints.java @@ -0,0 +1,53 @@ +package com.bencodez.votingplugin.rewards.builtin; + +import java.util.HashMap; + +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; + +import com.bencodez.advancedcore.api.inventory.editgui.EditGUIButton; +import com.bencodez.advancedcore.api.inventory.editgui.valuetypes.EditGUIValueNumber; +import com.bencodez.advancedcore.api.item.ItemBuilder; +import com.bencodez.advancedcore.api.rewards.Reward; +import com.bencodez.advancedcore.api.rewards.RewardEditData; +import com.bencodez.advancedcore.api.rewards.injected.RewardInject; +import com.bencodez.advancedcore.api.rewards.injected.RewardInjectInt; +import com.bencodez.advancedcore.api.rewards.injected.RewardInjectValidator; +import com.bencodez.votingplugin.VotingPluginMain; +import com.bencodez.votingplugin.user.VotingPluginUser; + +/** VotingPlugin's injected Points reward. */ +public class RewardPoints extends RewardInjectInt { + + private final VotingPluginMain plugin; + + public RewardPoints(VotingPluginMain plugin) { + super("Points", 0); + this.plugin = plugin; + synchronize().asPlaceholder("newpoints").addEditButton( + new EditGUIButton(new ItemBuilder(Material.PAPER), new EditGUIValueNumber("Points", null) { + @Override + public void setValue(Player player, Number value) { + RewardEditData reward = (RewardEditData) getInv().getData("Reward"); + reward.setValue("Points", value.intValue()); + } + }.addLore("Give player voting points"))).validator(new RewardInjectValidator() { + @Override + public void onValidate(Reward reward, RewardInject inject, ConfigurationSection data) { + if (data.getInt(inject.getPath(), -1) == 0) { + warning(reward, inject, "Points can not be 0"); + } + } + }); + } + + @Override + public String onRewardRequest(Reward reward, com.bencodez.advancedcore.api.user.AdvancedCoreUser user, int num, + HashMap placeholders) { + VotingPluginUser vpUser = plugin.getVotingPluginUserManager().getVotingPluginUser(user); + String result = "" + vpUser.addPoints(num); + plugin.debug("Setting points to " + result); + return result; + } +} diff --git a/VotingPlugin/src/main/java/com/bencodez/votingplugin/rewards/builtin/RewardVoteBossBar.java b/VotingPlugin/src/main/java/com/bencodez/votingplugin/rewards/builtin/RewardVoteBossBar.java new file mode 100644 index 0000000000..0562bddfa2 --- /dev/null +++ b/VotingPlugin/src/main/java/com/bencodez/votingplugin/rewards/builtin/RewardVoteBossBar.java @@ -0,0 +1,34 @@ +package com.bencodez.votingplugin.rewards.builtin; + +import java.util.HashMap; + +import org.bukkit.configuration.ConfigurationSection; + +import com.bencodez.advancedcore.api.messages.PlaceholderUtils; +import com.bencodez.advancedcore.api.rewards.Reward; +import com.bencodez.advancedcore.api.rewards.injected.RewardInjectConfigurationSection; +import com.bencodez.votingplugin.VotingPluginMain; + +/** VotingPlugin's injected vote progress boss-bar reward. */ +public class RewardVoteBossBar extends RewardInjectConfigurationSection { + + private final VotingPluginMain plugin; + + public RewardVoteBossBar(VotingPluginMain plugin) { + super("VoteBossBar"); + this.plugin = plugin; + } + + @Override + public String onRewardRequested(Reward reward, com.bencodez.advancedcore.api.user.AdvancedCoreUser user, + ConfigurationSection section, HashMap placeholders) { + if (section.getBoolean("Enabled")) { + user.sendBossBar(PlaceholderUtils.replacePlaceHolder(section.getString("Message", ""), placeholders), + section.getString("Color", "BLUE"), section.getString("Style", "SOLID"), + (double) plugin.getVotingPluginUserManager().getVotingPluginUser(user).getSitesVotedOn() + / plugin.getVoteSites().size(), + section.getInt("Delay", 30)); + } + return null; + } +} diff --git a/VotingPlugin/src/main/java/com/bencodez/votingplugin/rewards/builtin/RewardWebhook.java b/VotingPlugin/src/main/java/com/bencodez/votingplugin/rewards/builtin/RewardWebhook.java new file mode 100644 index 0000000000..d1dc662b6d --- /dev/null +++ b/VotingPlugin/src/main/java/com/bencodez/votingplugin/rewards/builtin/RewardWebhook.java @@ -0,0 +1,39 @@ +package com.bencodez.votingplugin.rewards.builtin; + +import java.util.HashMap; +import java.util.List; + +import org.bukkit.configuration.ConfigurationSection; + +import com.bencodez.advancedcore.api.messages.PlaceholderUtils; +import com.bencodez.advancedcore.api.rewards.Reward; +import com.bencodez.advancedcore.api.rewards.injected.RewardInjectConfigurationSection; +import com.bencodez.votingplugin.VotingPluginMain; +import com.bencodez.votingplugin.webhook.WebhookRewardEntry; +import com.bencodez.votingplugin.webhook.WebhookRewardParser; + +/** VotingPlugin's injected webhook reward. */ +public class RewardWebhook extends RewardInjectConfigurationSection { + + private final VotingPluginMain plugin; + + public RewardWebhook(VotingPluginMain plugin) { + super("WebhookReward"); + this.plugin = plugin; + } + + @Override + public String onRewardRequested(Reward reward, com.bencodez.advancedcore.api.user.AdvancedCoreUser user, + ConfigurationSection section, HashMap placeholders) { + if (section == null || plugin.getWebhooks() == null) { + return null; + } + List entries = WebhookRewardParser.parse(section); + if (entries == null || entries.isEmpty()) { + return null; + } + plugin.getWebhooks().createExecutor().executeAll(entries, + input -> PlaceholderUtils.replacePlaceHolder(input, placeholders)); + return null; + } +} diff --git a/VotingPlugin/src/main/java/com/bencodez/votingplugin/rewards/builtin/placeholders/RewardTotalPlaceholder.java b/VotingPlugin/src/main/java/com/bencodez/votingplugin/rewards/builtin/placeholders/RewardTotalPlaceholder.java new file mode 100644 index 0000000000..753e07f6c4 --- /dev/null +++ b/VotingPlugin/src/main/java/com/bencodez/votingplugin/rewards/builtin/placeholders/RewardTotalPlaceholder.java @@ -0,0 +1,25 @@ +package com.bencodez.votingplugin.rewards.builtin.placeholders; + +import com.bencodez.advancedcore.api.rewards.Reward; +import com.bencodez.advancedcore.api.rewards.RewardPlaceholderHandle; +import com.bencodez.advancedcore.api.user.AdvancedCoreUser; +import com.bencodez.votingplugin.VotingPluginMain; +import com.bencodez.votingplugin.topvoter.TopVoter; + +/** Reward placeholder exposing one VotingPlugin total. */ +public class RewardTotalPlaceholder extends RewardPlaceholderHandle { + + private final VotingPluginMain plugin; + private final TopVoter topVoter; + + public RewardTotalPlaceholder(VotingPluginMain plugin, TopVoter topVoter) { + super("Total_" + topVoter.toString()); + this.plugin = plugin; + this.topVoter = topVoter; + } + + @Override + public String getValue(Reward reward, AdvancedCoreUser user) { + return "" + plugin.getVotingPluginUserManager().getVotingPluginUser(user).getTotal(topVoter); + } +} diff --git a/VotingPlugin/src/main/java/com/bencodez/votingplugin/rewards/builtin/requirements/RequirementVoteTotal.java b/VotingPlugin/src/main/java/com/bencodez/votingplugin/rewards/builtin/requirements/RequirementVoteTotal.java new file mode 100644 index 0000000000..d276ce6da3 --- /dev/null +++ b/VotingPlugin/src/main/java/com/bencodez/votingplugin/rewards/builtin/requirements/RequirementVoteTotal.java @@ -0,0 +1,51 @@ +package com.bencodez.votingplugin.rewards.builtin.requirements; + +import org.bukkit.configuration.ConfigurationSection; + +import com.bencodez.advancedcore.api.rewards.Reward; +import com.bencodez.advancedcore.api.rewards.RewardOptions; +import com.bencodez.advancedcore.api.rewards.injectedrequirement.RequirementInjectConfigurationSection; +import com.bencodez.advancedcore.api.user.AdvancedCoreUser; +import com.bencodez.votingplugin.VotingPluginMain; +import com.bencodez.votingplugin.topvoter.TopVoter; +import com.bencodez.votingplugin.user.VotingPluginUser; + +/** VotingPlugin vote-total/points reward requirement. */ +public class RequirementVoteTotal extends RequirementInjectConfigurationSection { + + private final VotingPluginMain plugin; + + public RequirementVoteTotal(VotingPluginMain plugin) { + super("VoteTotal"); + this.plugin = plugin; + } + + @Override + public boolean onRequirementsRequested(Reward reward, AdvancedCoreUser acUser, ConfigurationSection section, + RewardOptions rewardOptions) { + boolean atleast = section.getBoolean("AtleastMode", false); + VotingPluginUser user = plugin.getVotingPluginUserManager().getVotingPluginUser(acUser); + + for (TopVoter top : TopVoter.values()) { + int required = section.getInt(top.toString(), -1); + if (required < 0) { + continue; + } + int total = user.getTotal(top); + if (atleast ? total < required : total != required) { + plugin.debug("Failed requirement " + top + " " + total + (atleast ? "/" : "!=") + required); + return false; + } + } + + int pointsRequired = section.getInt("Points", -1); + if (pointsRequired >= 0) { + int points = user.getPoints(); + if (atleast ? points < pointsRequired : points != pointsRequired) { + plugin.debug("Failed requirement points " + points + (atleast ? "/" : "!=") + pointsRequired); + return false; + } + } + return true; + } +}