diff --git a/api/src/main/java/net/islandearth/rpgregions/effects/RegionEffect.java b/api/src/main/java/net/islandearth/rpgregions/effects/RegionEffect.java index 7399c09..a61a119 100644 --- a/api/src/main/java/net/islandearth/rpgregions/effects/RegionEffect.java +++ b/api/src/main/java/net/islandearth/rpgregions/effects/RegionEffect.java @@ -1,8 +1,10 @@ package net.islandearth.rpgregions.effects; +import net.islandearth.rpgregions.api.IRPGRegionsAPI; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import java.util.ArrayList; import java.util.List; public abstract class RegionEffect { @@ -11,7 +13,11 @@ public abstract class RegionEffect { private final List ignoreItems; private final boolean ignorePerm; - public RegionEffect(boolean wearingRequired, List ignoreItems) { + public RegionEffect(IRPGRegionsAPI api) { + this(api, false, new ArrayList<>()); + } + + public RegionEffect(IRPGRegionsAPI api, boolean wearingRequired, List ignoreItems) { this.wearingRequired = wearingRequired; this.ignoreItems = ignoreItems; this.ignorePerm = true; diff --git a/api/src/main/java/net/islandearth/rpgregions/managers/IRPGRegionsManagers.java b/api/src/main/java/net/islandearth/rpgregions/managers/IRPGRegionsManagers.java index d1c22b8..074bd13 100644 --- a/api/src/main/java/net/islandearth/rpgregions/managers/IRPGRegionsManagers.java +++ b/api/src/main/java/net/islandearth/rpgregions/managers/IRPGRegionsManagers.java @@ -3,6 +3,7 @@ package net.islandearth.rpgregions.managers; import net.islandearth.rpgregions.api.integrations.IntegrationManager; import net.islandearth.rpgregions.managers.data.IRPGRegionsCache; import net.islandearth.rpgregions.managers.data.IStorageManager; +import net.islandearth.rpgregions.managers.registry.IRPGRegionsRegistry; public interface IRPGRegionsManagers { @@ -13,4 +14,6 @@ public interface IRPGRegionsManagers { IRPGRegionsCache getRegionsCache(); IRegenerationManager getRegenerationManager(); + + IRPGRegionsRegistry getRegistry(Class> clazz); } diff --git a/api/src/main/java/net/islandearth/rpgregions/managers/registry/IRPGRegionsRegistry.java b/api/src/main/java/net/islandearth/rpgregions/managers/registry/IRPGRegionsRegistry.java new file mode 100644 index 0000000..a0b4548 --- /dev/null +++ b/api/src/main/java/net/islandearth/rpgregions/managers/registry/IRPGRegionsRegistry.java @@ -0,0 +1,32 @@ +package net.islandearth.rpgregions.managers.registry; + +import com.google.common.collect.ImmutableMap; +import net.islandearth.rpgregions.api.IRPGRegionsAPI; +import org.bukkit.Material; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public interface IRPGRegionsRegistry { + + @NotNull + ImmutableMap> get(); + + /** + * Attempts to register a class. + * @param clazz class to register + * @throws IllegalArgumentException if class is already registered + */ + void register(Class clazz); + + @Nullable + T getNew(String name, IRPGRegionsAPI plugin, Object... data); + + @Nullable + T getNew(Class clazz, IRPGRegionsAPI plugin, Object... data); + + String getRegistryName(); + + Class getImplementation(); + + Material getIcon(); +} diff --git a/api/src/main/java/net/islandearth/rpgregions/requirements/DependencyRequirement.java b/api/src/main/java/net/islandearth/rpgregions/requirements/DependencyRequirement.java index 9acdb89..f0b0c71 100644 --- a/api/src/main/java/net/islandearth/rpgregions/requirements/DependencyRequirement.java +++ b/api/src/main/java/net/islandearth/rpgregions/requirements/DependencyRequirement.java @@ -1,17 +1,23 @@ package net.islandearth.rpgregions.requirements; import com.google.common.collect.ImmutableList; +import net.islandearth.rpgregions.api.IRPGRegionsAPI; import org.bukkit.entity.Player; +import java.util.ArrayList; import java.util.Collections; import java.util.List; public class DependencyRequirement extends RegionRequirement { private final List requiredRegions; - - public DependencyRequirement(List requiredRegions) { - super(); + + public DependencyRequirement(IRPGRegionsAPI api) { + this(api, new ArrayList<>()); + } + + public DependencyRequirement(IRPGRegionsAPI api, List requiredRegions) { + super(api); this.requiredRegions = requiredRegions; } diff --git a/api/src/main/java/net/islandearth/rpgregions/requirements/RegionRequirement.java b/api/src/main/java/net/islandearth/rpgregions/requirements/RegionRequirement.java index cff6314..fabef18 100644 --- a/api/src/main/java/net/islandearth/rpgregions/requirements/RegionRequirement.java +++ b/api/src/main/java/net/islandearth/rpgregions/requirements/RegionRequirement.java @@ -1,20 +1,27 @@ package net.islandearth.rpgregions.requirements; +import net.islandearth.rpgregions.api.IRPGRegionsAPI; import org.bukkit.entity.Player; public abstract class RegionRequirement { + private final IRPGRegionsAPI api; private final PreventType preventType; - public RegionRequirement() { - super(); + public RegionRequirement(IRPGRegionsAPI api) { + this.api = api; this.preventType = PreventType.TELEPORT; } - public RegionRequirement(PreventType preventType) { + public RegionRequirement(IRPGRegionsAPI api, PreventType preventType) { + this.api = api; this.preventType = preventType; } + public IRPGRegionsAPI getApi() { + return api; + } + /** * Checks whether this player meets the requirements to enter. * @param player player to check diff --git a/api/src/main/java/net/islandearth/rpgregions/rewards/DiscoveryReward.java b/api/src/main/java/net/islandearth/rpgregions/rewards/DiscoveryReward.java index 80c0041..3e825e8 100644 --- a/api/src/main/java/net/islandearth/rpgregions/rewards/DiscoveryReward.java +++ b/api/src/main/java/net/islandearth/rpgregions/rewards/DiscoveryReward.java @@ -1,9 +1,20 @@ package net.islandearth.rpgregions.rewards; +import net.islandearth.rpgregions.api.IRPGRegionsAPI; import org.bukkit.entity.Player; public abstract class DiscoveryReward { + private final IRPGRegionsAPI api; + + public DiscoveryReward(IRPGRegionsAPI api) { + this.api = api; + } + + public IRPGRegionsAPI getAPI() { + return api; + } + /** * Awards this reward to the specified player * @param player player to award to diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/RPGRegions.java b/rpgregions/src/main/java/net/islandearth/rpgregions/RPGRegions.java index ab63ed7..0120916 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/RPGRegions.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/RPGRegions.java @@ -13,7 +13,9 @@ import net.islandearth.languagy.api.language.Translator; import net.islandearth.rpgregions.api.IRPGRegionsAPI; import net.islandearth.rpgregions.api.RPGRegionsAPI; import net.islandearth.rpgregions.commands.RPGRegionsCommand; +import net.islandearth.rpgregions.effects.PotionRegionEffect; import net.islandearth.rpgregions.effects.RegionEffect; +import net.islandearth.rpgregions.effects.RegionEffectRegistry; import net.islandearth.rpgregions.gson.AbstractAdapter; import net.islandearth.rpgregions.gson.ItemStackAdapter; import net.islandearth.rpgregions.gson.LocationAdapter; @@ -24,8 +26,23 @@ import net.islandearth.rpgregions.listener.RegionListener; import net.islandearth.rpgregions.managers.RPGRegionsManagers; import net.islandearth.rpgregions.managers.data.account.RPGRegionsAccount; import net.islandearth.rpgregions.managers.data.region.ConfiguredRegion; +import net.islandearth.rpgregions.managers.registry.RPGRegionsRegistry; +import net.islandearth.rpgregions.requirements.AlonsoLevelRequirement; +import net.islandearth.rpgregions.requirements.DependencyRequirement; +import net.islandearth.rpgregions.requirements.LevelRequirement; +import net.islandearth.rpgregions.requirements.MoneyRequirement; +import net.islandearth.rpgregions.requirements.PlaceholderRequirement; import net.islandearth.rpgregions.requirements.RegionRequirement; +import net.islandearth.rpgregions.requirements.RegionRequirementRegistry; +import net.islandearth.rpgregions.rewards.AlonsoLevelReward; +import net.islandearth.rpgregions.rewards.ConsoleCommandReward; import net.islandearth.rpgregions.rewards.DiscoveryReward; +import net.islandearth.rpgregions.rewards.ExperienceReward; +import net.islandearth.rpgregions.rewards.ItemReward; +import net.islandearth.rpgregions.rewards.MessageReward; +import net.islandearth.rpgregions.rewards.MoneyReward; +import net.islandearth.rpgregions.rewards.PlayerCommandReward; +import net.islandearth.rpgregions.rewards.RegionRewardRegistry; import net.islandearth.rpgregions.translation.Translations; import net.islandearth.rpgregions.utils.XMaterial; import net.islandearth.rpgregions.utils.XSound; @@ -79,6 +96,9 @@ public final class RPGRegions extends JavaPlugin implements IRPGRegionsAPI, Lang Bukkit.getPluginManager().disablePlugin(this); return; } + this.registerRewards(); + this.registerRequirements(); + this.registerEffects(); this.registerListeners(); this.registerCommands(); this.hook(this); @@ -233,6 +253,43 @@ public final class RPGRegions extends JavaPlugin implements IRPGRegionsAPI, Lang manager.registerCommand(new RPGRegionsCommand(this)); } + private void registerRewards() { + RPGRegionsRegistry registry = (RegionRewardRegistry) managers.getRegistry(RegionRewardRegistry.class); + if (registry == null) { + getLogger().warning("Unable to register rewards"); + return; + } + registry.register(ConsoleCommandReward.class); + registry.register(ExperienceReward.class); + registry.register(ItemReward.class); + registry.register(MessageReward.class); + registry.register(MoneyReward.class); + registry.register(PlayerCommandReward.class); + registry.register(AlonsoLevelReward.class); + } + + private void registerRequirements() { + RPGRegionsRegistry registry = (RegionRequirementRegistry) managers.getRegistry(RegionRequirementRegistry.class); + if (registry == null) { + getLogger().warning("Unable to register requirements"); + return; + } + registry.register(LevelRequirement.class); + registry.register(AlonsoLevelRequirement.class); + registry.register(MoneyRequirement.class); + registry.register(PlaceholderRequirement.class); + registry.register(DependencyRequirement.class); + } + + private void registerEffects() { + RPGRegionsRegistry registry = (RegionEffectRegistry) managers.getRegistry(RegionEffectRegistry.class); + if (registry == null) { + getLogger().warning("Unable to register effects"); + return; + } + registry.register(PotionRegionEffect.class); + } + @Override public void onLanguagyHook() { translator.setDisplay(XMaterial.MAP.parseMaterial()); diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/commands/RPGRegionsCommand.java b/rpgregions/src/main/java/net/islandearth/rpgregions/commands/RPGRegionsCommand.java index c0fa568..4be478e 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/commands/RPGRegionsCommand.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/commands/RPGRegionsCommand.java @@ -130,7 +130,7 @@ public class RPGRegionsCommand extends BaseCommand { @CommandCompletion("@regions") public void onAddItem(Player player, ConfiguredRegion configuredRegion) { if (configuredRegion != null) { - configuredRegion.getRewards().add(new ItemReward(player.getInventory().getItemInMainHand())); + configuredRegion.getRewards().add(new ItemReward(plugin, player.getInventory().getItemInMainHand())); player.sendMessage(ChatColor.GREEN + "Item added to configuration!"); } else { player.sendMessage(ChatColor.RED + "No region exists by that name."); diff --git a/api/src/main/java/net/islandearth/rpgregions/effects/PotionRegionEffect.java b/rpgregions/src/main/java/net/islandearth/rpgregions/effects/PotionRegionEffect.java similarity index 60% rename from api/src/main/java/net/islandearth/rpgregions/effects/PotionRegionEffect.java rename to rpgregions/src/main/java/net/islandearth/rpgregions/effects/PotionRegionEffect.java index f9e4952..293382a 100644 --- a/api/src/main/java/net/islandearth/rpgregions/effects/PotionRegionEffect.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/effects/PotionRegionEffect.java @@ -1,8 +1,10 @@ package net.islandearth.rpgregions.effects; +import net.islandearth.rpgregions.api.IRPGRegionsAPI; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; import java.util.List; @@ -10,8 +12,13 @@ public class PotionRegionEffect extends RegionEffect { private final PotionEffect potionEffect; - public PotionRegionEffect(PotionEffect potionEffect, boolean wearingRequired, List ignoreItems) { - super(wearingRequired, ignoreItems); + public PotionRegionEffect(IRPGRegionsAPI api) { + super(api); + this.potionEffect = new PotionEffect(PotionEffectType.REGENERATION, 1, 1); + } + + public PotionRegionEffect(IRPGRegionsAPI api, PotionEffect potionEffect, boolean wearingRequired, List ignoreItems) { + super(api, wearingRequired, ignoreItems); this.potionEffect = potionEffect; } diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/effects/RegionEffectRegistry.java b/rpgregions/src/main/java/net/islandearth/rpgregions/effects/RegionEffectRegistry.java new file mode 100644 index 0000000..d84343d --- /dev/null +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/effects/RegionEffectRegistry.java @@ -0,0 +1,37 @@ +package net.islandearth.rpgregions.effects; + +import net.islandearth.rpgregions.api.IRPGRegionsAPI; +import net.islandearth.rpgregions.managers.registry.RPGRegionsRegistry; +import org.bukkit.Material; +import org.jetbrains.annotations.Nullable; + +import java.lang.reflect.Constructor; + +public final class RegionEffectRegistry extends RPGRegionsRegistry { + + @Override + public @Nullable RegionEffect getNew(Class clazz, IRPGRegionsAPI plugin, Object... data) { + try { + Constructor constructor = clazz.getConstructor(IRPGRegionsAPI.class); + return (RegionEffect) constructor.newInstance(plugin); + } catch (ReflectiveOperationException e) { + e.printStackTrace(); + } + return null; + } + + @Override + public String getRegistryName() { + return "effects"; + } + + @Override + public Class getImplementation() { + return RegionEffect.class; + } + + @Override + public Material getIcon() { + return Material.POTION; + } +} diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/managers/RPGRegionsManagers.java b/rpgregions/src/main/java/net/islandearth/rpgregions/managers/RPGRegionsManagers.java index 82f9eee..42eb48e 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/managers/RPGRegionsManagers.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/managers/RPGRegionsManagers.java @@ -7,21 +7,26 @@ import net.islandearth.rpgregions.api.integrations.hooks.PlaceholderRegionHook; import net.islandearth.rpgregions.command.IconCommand; import net.islandearth.rpgregions.effects.PotionRegionEffect; import net.islandearth.rpgregions.effects.RegionEffect; +import net.islandearth.rpgregions.effects.RegionEffectRegistry; import net.islandearth.rpgregions.managers.data.IRPGRegionsCache; import net.islandearth.rpgregions.managers.data.IStorageManager; import net.islandearth.rpgregions.managers.data.RPGRegionsCache; import net.islandearth.rpgregions.managers.data.StorageType; import net.islandearth.rpgregions.managers.data.region.ConfiguredRegion; import net.islandearth.rpgregions.managers.regeneration.RegenerationManager; +import net.islandearth.rpgregions.managers.registry.IRPGRegionsRegistry; +import net.islandearth.rpgregions.managers.registry.RPGRegionsRegistry; import net.islandearth.rpgregions.regenerate.Regenerate; import net.islandearth.rpgregions.regenerate.entity.RegeneratingEntity; import net.islandearth.rpgregions.requirements.PlaceholderRequirement; +import net.islandearth.rpgregions.requirements.RegionRequirementRegistry; import net.islandearth.rpgregions.rewards.ConsoleCommandReward; import net.islandearth.rpgregions.rewards.DiscoveryReward; import net.islandearth.rpgregions.rewards.ExperienceReward; import net.islandearth.rpgregions.rewards.ItemReward; import net.islandearth.rpgregions.rewards.MessageReward; import net.islandearth.rpgregions.rewards.PlayerCommandReward; +import net.islandearth.rpgregions.rewards.RegionRewardRegistry; import net.islandearth.rpgregions.utils.ItemStackBuilder; import net.islandearth.rpgregions.utils.XMaterial; import net.islandearth.rpgregions.utils.XSound; @@ -31,6 +36,7 @@ import org.bukkit.entity.EntityType; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; +import org.jetbrains.annotations.Nullable; import java.io.File; import java.io.FileReader; @@ -43,6 +49,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -52,6 +60,7 @@ public class RPGRegionsManagers implements IRPGRegionsManagers { private IntegrationManager integrationManager; private final IRPGRegionsCache regionsCache; private final IRegenerationManager regenerationManager; + private final Map>, RPGRegionsRegistry> registry; public RPGRegionsManagers(RPGRegions plugin) throws ReflectiveOperationException, IllegalStateException, IOException { StorageType.valueOf(plugin.getConfig().getString("settings.storage.mode").toUpperCase()) @@ -64,23 +73,27 @@ public class RPGRegionsManagers implements IRPGRegionsManagers { .ifPresent(integrationManager1 -> integrationManager = integrationManager1); this.regionsCache = new RPGRegionsCache(plugin); + this.registry = new ConcurrentHashMap<>(); + registry.put(RegionRequirementRegistry.class, new RegionRequirementRegistry()); + registry.put(RegionRewardRegistry.class, new RegionRewardRegistry()); + registry.put(RegionEffectRegistry.class, new RegionEffectRegistry()); File folder = new File(plugin.getDataFolder() + "/regions/"); if (!folder.exists()) folder.mkdirs(); // Generate an example config List rewards = new ArrayList<>(); - rewards.add(new ExperienceReward(10)); - rewards.add(new ItemReward(new ItemStack(XMaterial.IRON_BARS.parseMaterial()))); - rewards.add(new PlayerCommandReward("say I discovered a region!")); - rewards.add(new ConsoleCommandReward("say Server sees you discovered a region!")); - rewards.add(new MessageReward(Collections.singletonList("&aExample message as a reward"))); + rewards.add(new ExperienceReward(plugin, 10)); + rewards.add(new ItemReward(plugin, new ItemStack(XMaterial.IRON_BARS.parseMaterial()))); + rewards.add(new PlayerCommandReward(plugin, "say I discovered a region!")); + rewards.add(new ConsoleCommandReward(plugin, "say Server sees you discovered a region!")); + rewards.add(new MessageReward(plugin, Collections.singletonList("&aExample message as a reward"))); List effects = new ArrayList<>(); - if (!plugin.isLegacyServer()) effects.add(new PotionRegionEffect( + if (!plugin.isLegacyServer()) effects.add(new PotionRegionEffect(plugin, new PotionEffect(PotionEffectType.GLOWING, 100, 1, true, true, true), true, Collections.singletonList(new ItemStackBuilder(Material.IRON_CHESTPLATE).build()))); - else effects.add(new PotionRegionEffect( + else effects.add(new PotionRegionEffect(plugin, new PotionEffect(PotionEffectType.GLOWING, 100, 1, true, true), true, Collections.singletonList(new ItemStackBuilder(Material.IRON_CHESTPLATE).build()))); @@ -162,4 +175,14 @@ public class RPGRegionsManagers implements IRPGRegionsManagers { public IRegenerationManager getRegenerationManager() { return regenerationManager; } + + public Map>, RPGRegionsRegistry> getRegistry() { + return registry; + } + + @Nullable + @Override + public IRPGRegionsRegistry getRegistry(Class> clazz) { + return registry.get(clazz); + } } diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/managers/registry/RPGRegionsRegistry.java b/rpgregions/src/main/java/net/islandearth/rpgregions/managers/registry/RPGRegionsRegistry.java new file mode 100644 index 0000000..e867682 --- /dev/null +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/managers/registry/RPGRegionsRegistry.java @@ -0,0 +1,56 @@ +package net.islandearth.rpgregions.managers.registry; + +import com.google.common.collect.ImmutableMap; +import net.islandearth.rpgregions.api.IRPGRegionsAPI; +import org.bukkit.Material; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public abstract class RPGRegionsRegistry implements IRPGRegionsRegistry { + + private final Map> registeredClasses; + + protected RPGRegionsRegistry() { + this.registeredClasses = new ConcurrentHashMap<>(); + } + + @NotNull + protected Map> getRegisteredClasses() { + return registeredClasses; + } + + @NotNull + @Override + public ImmutableMap> get() { + return ImmutableMap.copyOf(registeredClasses); + } + + @Override + public void register(Class clazz) { + if (registeredClasses.containsKey(clazz.getSimpleName())) + throw new IllegalArgumentException(clazz.getSimpleName() + " is already registered!"); + registeredClasses.put(clazz.getSimpleName(), clazz); + } + + @Nullable + @Override + public T getNew(String name, IRPGRegionsAPI plugin, Object... data) { + return getNew(registeredClasses.get(name), plugin, data); + } + + @Nullable + @Override + public abstract T getNew(Class clazz, IRPGRegionsAPI plugin, Object... data); + + @Override + public abstract String getRegistryName(); + + @Override + public abstract Class getImplementation(); + + @Override + public abstract Material getIcon(); +} diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/requirements/AlonsoLevelRequirement.java b/rpgregions/src/main/java/net/islandearth/rpgregions/requirements/AlonsoLevelRequirement.java index 6343bb4..4b3f04f 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/requirements/AlonsoLevelRequirement.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/requirements/AlonsoLevelRequirement.java @@ -1,12 +1,17 @@ package net.islandearth.rpgregions.requirements; import com.alonsoaliaga.alonsolevels.api.AlonsoLevelsAPI; +import net.islandearth.rpgregions.api.IRPGRegionsAPI; import org.bukkit.entity.Player; public class AlonsoLevelRequirement extends LevelRequirement { - public AlonsoLevelRequirement(int level) { - super(level); + public AlonsoLevelRequirement(IRPGRegionsAPI api) { + this(api, 1); + } + + public AlonsoLevelRequirement(IRPGRegionsAPI api, int level) { + super(api, level); } @Override diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/requirements/LevelRequirement.java b/rpgregions/src/main/java/net/islandearth/rpgregions/requirements/LevelRequirement.java index 59bbf94..55c8721 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/requirements/LevelRequirement.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/requirements/LevelRequirement.java @@ -1,13 +1,18 @@ package net.islandearth.rpgregions.requirements; +import net.islandearth.rpgregions.api.IRPGRegionsAPI; import org.bukkit.entity.Player; public class LevelRequirement extends RegionRequirement { private final int level; - public LevelRequirement(int level) { - super(); + public LevelRequirement(IRPGRegionsAPI api) { + this(api, 1); + } + + public LevelRequirement(IRPGRegionsAPI api, int level) { + super(api); this.level = level; } diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/requirements/MoneyRequirement.java b/rpgregions/src/main/java/net/islandearth/rpgregions/requirements/MoneyRequirement.java index 3f3cfde..24b934e 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/requirements/MoneyRequirement.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/requirements/MoneyRequirement.java @@ -1,5 +1,6 @@ package net.islandearth.rpgregions.requirements; +import net.islandearth.rpgregions.api.IRPGRegionsAPI; import net.milkbowl.vault.economy.Economy; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -8,9 +9,13 @@ import org.bukkit.plugin.RegisteredServiceProvider; public class MoneyRequirement extends RegionRequirement { private final double money; - - public MoneyRequirement(int money) { - super(); + + public MoneyRequirement(IRPGRegionsAPI api) { + this(api, 20); + } + + public MoneyRequirement(IRPGRegionsAPI api, int money) { + super(api); this.money = money; } diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/requirements/PlaceholderRequirement.java b/rpgregions/src/main/java/net/islandearth/rpgregions/requirements/PlaceholderRequirement.java index e8fc52d..9400119 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/requirements/PlaceholderRequirement.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/requirements/PlaceholderRequirement.java @@ -1,6 +1,7 @@ package net.islandearth.rpgregions.requirements; import me.clip.placeholderapi.PlaceholderAPI; +import net.islandearth.rpgregions.api.IRPGRegionsAPI; import org.bukkit.entity.Player; public class PlaceholderRequirement extends RegionRequirement { @@ -8,9 +9,12 @@ public class PlaceholderRequirement extends RegionRequirement { private final CompareType integerCompareType; private final String placeholder; private final String equal; - - public PlaceholderRequirement(String placeholder, String equal) { - super(); + + public PlaceholderRequirement(IRPGRegionsAPI api) { + this(api, "", ""); + } + public PlaceholderRequirement(IRPGRegionsAPI api, String placeholder, String equal) { + super(api); this.integerCompareType = CompareType.GREATER_THAN_OR_EQUAL_TO; this.placeholder = placeholder; this.equal = equal; diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/requirements/RegionRequirementRegistry.java b/rpgregions/src/main/java/net/islandearth/rpgregions/requirements/RegionRequirementRegistry.java new file mode 100644 index 0000000..06b57dc --- /dev/null +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/requirements/RegionRequirementRegistry.java @@ -0,0 +1,37 @@ +package net.islandearth.rpgregions.requirements; + +import net.islandearth.rpgregions.api.IRPGRegionsAPI; +import net.islandearth.rpgregions.managers.registry.RPGRegionsRegistry; +import org.bukkit.Material; +import org.jetbrains.annotations.Nullable; + +import java.lang.reflect.Constructor; + +public final class RegionRequirementRegistry extends RPGRegionsRegistry { + + @Override + public @Nullable RegionRequirement getNew(Class clazz, IRPGRegionsAPI plugin, Object... data) { + try { + Constructor constructor = clazz.getConstructor(); + return (RegionRequirement) constructor.newInstance(); + } catch (ReflectiveOperationException e) { + e.printStackTrace(); + } + return null; + } + + @Override + public String getRegistryName() { + return "requirements"; + } + + @Override + public Class getImplementation() { + return RegionRequirement.class; + } + + @Override + public Material getIcon() { + return Material.REDSTONE; + } +} diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/AlonsoLevelReward.java b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/AlonsoLevelReward.java index 2239995..2c07341 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/AlonsoLevelReward.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/AlonsoLevelReward.java @@ -1,12 +1,17 @@ package net.islandearth.rpgregions.rewards; import com.alonsoaliaga.alonsolevels.api.AlonsoLevelsAPI; +import net.islandearth.rpgregions.api.IRPGRegionsAPI; import org.bukkit.entity.Player; public class AlonsoLevelReward extends LevelReward { - public AlonsoLevelReward(int level) { - super(level); + public AlonsoLevelReward(IRPGRegionsAPI api) { + super(api); + } + + public AlonsoLevelReward(IRPGRegionsAPI api, int level) { + super(api, level); } @Override diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/ConsoleCommandReward.java b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/ConsoleCommandReward.java index e9d4645..731edbe 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/ConsoleCommandReward.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/ConsoleCommandReward.java @@ -1,5 +1,6 @@ package net.islandearth.rpgregions.rewards; +import net.islandearth.rpgregions.api.IRPGRegionsAPI; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -7,7 +8,13 @@ public class ConsoleCommandReward extends DiscoveryReward { private final String command; - public ConsoleCommandReward(String command) { + public ConsoleCommandReward(IRPGRegionsAPI api) { + super(api); + this.command = "say example"; + } + + public ConsoleCommandReward(IRPGRegionsAPI api, String command) { + super(api); this.command = command; } diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/ExperienceReward.java b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/ExperienceReward.java index 826e2a0..e3339b8 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/ExperienceReward.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/ExperienceReward.java @@ -1,12 +1,19 @@ package net.islandearth.rpgregions.rewards; +import net.islandearth.rpgregions.api.IRPGRegionsAPI; import org.bukkit.entity.Player; public class ExperienceReward extends DiscoveryReward { private final int xp; - - public ExperienceReward(int xp) { + + public ExperienceReward(IRPGRegionsAPI api) { + super(api); + this.xp = 20; + } + + public ExperienceReward(IRPGRegionsAPI api, int xp) { + super(api); this.xp = xp; } diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/ItemReward.java b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/ItemReward.java index cb2be2c..4113b7d 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/ItemReward.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/ItemReward.java @@ -1,13 +1,20 @@ package net.islandearth.rpgregions.rewards; +import net.islandearth.rpgregions.api.IRPGRegionsAPI; +import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; public class ItemReward extends DiscoveryReward { private final ItemStack item; - - public ItemReward(ItemStack item) { + + public ItemReward(IRPGRegionsAPI api) { + super(api); + this.item = new ItemStack(Material.DIRT); + } + public ItemReward(IRPGRegionsAPI api, ItemStack item) { + super(api); this.item = item; } diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/LevelReward.java b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/LevelReward.java index 8e59c99..fe04c67 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/LevelReward.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/LevelReward.java @@ -1,11 +1,18 @@ package net.islandearth.rpgregions.rewards; +import net.islandearth.rpgregions.api.IRPGRegionsAPI; + public abstract class LevelReward extends DiscoveryReward { private final int level; - public LevelReward(int level) { - super(); + public LevelReward(IRPGRegionsAPI api) { + super(api); + this.level = 1; + } + + public LevelReward(IRPGRegionsAPI api, int level) { + super(api); this.level = level; } diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/MessageReward.java b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/MessageReward.java index 7c28724..90382e1 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/MessageReward.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/MessageReward.java @@ -1,8 +1,10 @@ package net.islandearth.rpgregions.rewards; +import net.islandearth.rpgregions.api.IRPGRegionsAPI; import org.bukkit.ChatColor; import org.bukkit.entity.Player; +import java.util.ArrayList; import java.util.List; /** @@ -12,7 +14,13 @@ public class MessageReward extends DiscoveryReward { private final List messages; - public MessageReward(List messages) { + public MessageReward(IRPGRegionsAPI api) { + super(api); + this.messages = new ArrayList<>(); + } + + public MessageReward(IRPGRegionsAPI api, List messages) { + super(api); this.messages = messages; } diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/MoneyReward.java b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/MoneyReward.java index 617a6cb..1ce23ed 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/MoneyReward.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/MoneyReward.java @@ -1,5 +1,6 @@ package net.islandearth.rpgregions.rewards; +import net.islandearth.rpgregions.api.IRPGRegionsAPI; import net.milkbowl.vault.economy.Economy; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -9,7 +10,12 @@ public class MoneyReward extends DiscoveryReward { private final int amount; - public MoneyReward(int amount) { + public MoneyReward(IRPGRegionsAPI api) { + super(api); + this.amount = 20; + } + public MoneyReward(IRPGRegionsAPI api, int amount) { + super(api); this.amount = amount; } diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/PlayerCommandReward.java b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/PlayerCommandReward.java index 9c9fd6f..5bf870d 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/PlayerCommandReward.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/PlayerCommandReward.java @@ -1,12 +1,19 @@ package net.islandearth.rpgregions.rewards; +import net.islandearth.rpgregions.api.IRPGRegionsAPI; import org.bukkit.entity.Player; public class PlayerCommandReward extends DiscoveryReward { private final String command; - public PlayerCommandReward(String command) { + public PlayerCommandReward(IRPGRegionsAPI api) { + super(api); + this.command = "say example"; + } + + public PlayerCommandReward(IRPGRegionsAPI api, String command) { + super(api); this.command = command; } diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/RegionRewardRegistry.java b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/RegionRewardRegistry.java new file mode 100644 index 0000000..57bdc21 --- /dev/null +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/RegionRewardRegistry.java @@ -0,0 +1,37 @@ +package net.islandearth.rpgregions.rewards; + +import net.islandearth.rpgregions.api.IRPGRegionsAPI; +import net.islandearth.rpgregions.managers.registry.RPGRegionsRegistry; +import org.bukkit.Material; +import org.jetbrains.annotations.Nullable; + +import java.lang.reflect.Constructor; + +public final class RegionRewardRegistry extends RPGRegionsRegistry { + + @Override + public @Nullable DiscoveryReward getNew(Class clazz, IRPGRegionsAPI plugin, Object... data) { + try { + Constructor constructor = clazz.getConstructor(IRPGRegionsAPI.class); + return (DiscoveryReward) constructor.newInstance(plugin); + } catch (ReflectiveOperationException e) { + e.printStackTrace(); + } + return null; + } + + @Override + public String getRegistryName() { + return "rewards"; + } + + @Override + public Class getImplementation() { + return DiscoveryReward.class; + } + + @Override + public Material getIcon() { + return Material.GOLD_NUGGET; + } +}