diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/RPGRegions.java b/rpgregions/src/main/java/net/islandearth/rpgregions/RPGRegions.java index c78a431..00504b8 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/RPGRegions.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/RPGRegions.java @@ -48,6 +48,7 @@ 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.PlaceholderConsoleCommandReward; import net.islandearth.rpgregions.rewards.PlayerCommandReward; import net.islandearth.rpgregions.rewards.QuestReward; import net.islandearth.rpgregions.rewards.RegionDiscoverReward; @@ -75,221 +76,222 @@ import java.util.concurrent.ExecutionException; import java.util.logging.Level; public final class RPGRegions extends JavaPlugin implements IRPGRegionsAPI { - - private RPGRegionsManagers managers; - private PaperCommandManager commandManager; - public PaperCommandManager getCommandManager() { - return commandManager; - } + private RPGRegionsManagers managers; + private PaperCommandManager commandManager; - @Override - public Translator getTranslator() { - return translator; - } + public PaperCommandManager getCommandManager() { + return commandManager; + } - private Translator translator; + @Override + public Translator getTranslator() { + return translator; + } - @Override - public void onEnable() { - RPGRegionsAPI.setAPI(this); - this.createConfig(); - this.generateLang(); - this.commandManager = new PaperCommandManager(this); - try { - this.managers = new RPGRegionsManagers(this); - } catch (ReflectiveOperationException | IOException | CouldNotStartException e) { - getLogger().log(Level.SEVERE, "Error starting managers, please report this!", e); - Bukkit.getPluginManager().disablePlugin(this); - return; - } - this.registerRewards(); - this.registerRequirements(); - this.registerEffects(); - this.registerListeners(); - this.registerCommands(); - this.translator = Translator.of(this); - this.registerTasks(); - this.registerMetrics(); + private Translator translator; - // Tell integration to enable - if (managers.getIntegrationManager() instanceof RPGRegionsIntegration rpgRegionsIntegration) { - rpgRegionsIntegration.onEnable(); - } - } + @Override + public void onEnable() { + RPGRegionsAPI.setAPI(this); + this.createConfig(); + this.generateLang(); + this.commandManager = new PaperCommandManager(this); + try { + this.managers = new RPGRegionsManagers(this); + } catch (ReflectiveOperationException | IOException | CouldNotStartException e) { + getLogger().log(Level.SEVERE, "Error starting managers, please report this!", e); + Bukkit.getPluginManager().disablePlugin(this); + return; + } + this.registerRewards(); + this.registerRequirements(); + this.registerEffects(); + this.registerListeners(); + this.registerCommands(); + this.translator = Translator.of(this); + this.registerTasks(); + this.registerMetrics(); - @Override - public void onDisable() { - translator.close(); + // Tell integration to enable + if (managers.getIntegrationManager() instanceof RPGRegionsIntegration rpgRegionsIntegration) { + rpgRegionsIntegration.onEnable(); + } + } - if (managers == null || managers.getRegionsCache() == null || managers.getStorageManager() == null) { - getLogger().warning("Unable to save data as managers were null"); - } else { - // Save all player data (quit event not called for shutdown) - Bukkit.getOnlinePlayers().forEach(player -> { - if (managers.getStorageManager().getCachedAccounts().containsKey(player.getUniqueId())) { - try { - this.getManagers().getStorageManager().removeCachedAccount(player.getUniqueId()).get(); - } catch (InterruptedException | ExecutionException e) { - Thread.currentThread().interrupt(); - } - } - }); + @Override + public void onDisable() { + translator.close(); - // Tell integration to save - if (managers.getIntegrationManager() instanceof RPGRegionsIntegration rpgRegionsIntegration) { - rpgRegionsIntegration.onDisable(); - } + if (managers == null || managers.getRegionsCache() == null || managers.getStorageManager() == null) { + getLogger().warning("Unable to save data as managers were null"); + } else { + // Save all player data (quit event not called for shutdown) + Bukkit.getOnlinePlayers().forEach(player -> { + if (managers.getStorageManager().getCachedAccounts().containsKey(player.getUniqueId())) { + try { + this.getManagers().getStorageManager().removeCachedAccount(player.getUniqueId()).get(); + } catch (InterruptedException | ExecutionException e) { + Thread.currentThread().interrupt(); + } + } + }); - // Save all region configs - managers.getRegionsCache().getConfiguredRegions().forEach((id, region) -> region.save(this)); - } + // Tell integration to save + if (managers.getIntegrationManager() instanceof RPGRegionsIntegration rpgRegionsIntegration) { + rpgRegionsIntegration.onDisable(); + } - RPGRegionsAPI.setAPI(null); - DB.close(); - } + // Save all region configs + managers.getRegionsCache().getConfiguredRegions().forEach((id, region) -> region.save(this)); + } - @Override - public RPGRegionsManagers getManagers() { - return managers; - } + RPGRegionsAPI.setAPI(null); + DB.close(); + } - private void generateLang() { - Translations.generateLang(this); - } + @Override + public RPGRegionsManagers getManagers() { + return managers; + } - private void createConfig() { - saveDefaultConfig(); // Moved to config.yml - } + private void generateLang() { + Translations.generateLang(this); + } - private void registerListeners() { - PluginManager pm = Bukkit.getPluginManager(); - pm.registerEvents(new ServerReloadListener(this), this); - pm.registerEvents(new ConnectionListener(this), this); - pm.registerEvents(new RegionListener(this), this); - pm.registerEvents(new MoveListener(this), this); - } + private void createConfig() { + saveDefaultConfig(); // Moved to config.yml + } - private void registerCommands() { - final PaperCommandManager manager = commandManager; - manager.enableUnstableAPI("help"); - manager.getCommandCompletions().registerAsyncCompletion("regions", context -> ImmutableList.copyOf(getManagers().getRegionsCache().getConfiguredRegions().keySet())); - manager.getCommandCompletions().registerAsyncCompletion("integration-regions", context -> ImmutableList.copyOf(this.getManagers().getIntegrationManager().getAllRegionNames(context.getPlayer().getWorld()))); - manager.getCommandCompletions().registerAsyncCompletion("async", context -> ImmutableList.of("--async")); - manager.getCommandCompletions().registerAsyncCompletion("region-types", context -> ImmutableList.of("Cuboid", "Poly")); - manager.getCommandCompletions().registerAsyncCompletion("offline-players", context -> { - List players = new ArrayList<>(); - if (!getConfig().getBoolean("settings.server.tabcomplete.search-offline-players")) { - for (Player player : Bukkit.getOnlinePlayers()) { - players.add(player.getName()); - } - return ImmutableList.copyOf(players); - } + private void registerListeners() { + PluginManager pm = Bukkit.getPluginManager(); + pm.registerEvents(new ServerReloadListener(this), this); + pm.registerEvents(new ConnectionListener(this), this); + pm.registerEvents(new RegionListener(this), this); + pm.registerEvents(new MoveListener(this), this); + } - for (OfflinePlayer offlinePlayer : Bukkit.getOfflinePlayers()) { - players.add(offlinePlayer.getName()); - } - return ImmutableList.copyOf(players); - }); - manager.getCommandCompletions().registerAsyncCompletion("schematics", context -> { - File schematicFolder = new File("plugins/WorldEdit/schematics/"); - List files = new ArrayList<>(); - for (File file : schematicFolder.listFiles()) { - files.add(file.getName()); - } - return files; - }); - manager.getCommandContexts().registerContext(ConfiguredRegion.class, context -> { - String id = context.popFirstArg(); - for (ConfiguredRegion region : managers.getRegionsCache().getConfiguredRegions().values()) { - if (region.getId().equals(id)) { - return region; - } - } - throw new InvalidCommandArgument("Could not find a region with that id."); - }); - manager.registerCommand(new RPGRegionsCommand(this)); - manager.registerCommand(new DiscoveriesCommand(this)); - manager.registerCommand(new RPGRegionsDebugCommand(this)); - } + private void registerCommands() { + final PaperCommandManager manager = commandManager; + manager.enableUnstableAPI("help"); + manager.getCommandCompletions().registerAsyncCompletion("regions", context -> ImmutableList.copyOf(getManagers().getRegionsCache().getConfiguredRegions().keySet())); + manager.getCommandCompletions().registerAsyncCompletion("integration-regions", context -> ImmutableList.copyOf(this.getManagers().getIntegrationManager().getAllRegionNames(context.getPlayer().getWorld()))); + manager.getCommandCompletions().registerAsyncCompletion("async", context -> ImmutableList.of("--async")); + manager.getCommandCompletions().registerAsyncCompletion("region-types", context -> ImmutableList.of("Cuboid", "Poly")); + manager.getCommandCompletions().registerAsyncCompletion("offline-players", context -> { + List players = new ArrayList<>(); + if (!getConfig().getBoolean("settings.server.tabcomplete.search-offline-players")) { + for (Player player : Bukkit.getOnlinePlayers()) { + players.add(player.getName()); + } + return ImmutableList.copyOf(players); + } - 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); - registry.register(QuestReward.class); - registry.register(TeleportReward.class); - registry.register(RegionDiscoverReward.class); - } + for (OfflinePlayer offlinePlayer : Bukkit.getOfflinePlayers()) { + players.add(offlinePlayer.getName()); + } + return ImmutableList.copyOf(players); + }); + manager.getCommandCompletions().registerAsyncCompletion("schematics", context -> { + File schematicFolder = new File("plugins/WorldEdit/schematics/"); + List files = new ArrayList<>(); + for (File file : schematicFolder.listFiles()) { + files.add(file.getName()); + } + return files; + }); + manager.getCommandContexts().registerContext(ConfiguredRegion.class, context -> { + String id = context.popFirstArg(); + for (ConfiguredRegion region : managers.getRegionsCache().getConfiguredRegions().values()) { + if (region.getId().equals(id)) { + return region; + } + } + throw new InvalidCommandArgument("Could not find a region with that id."); + }); + manager.registerCommand(new RPGRegionsCommand(this)); + manager.registerCommand(new DiscoveriesCommand(this)); + manager.registerCommand(new RPGRegionsDebugCommand(this)); + } - private void registerRequirements() { - RPGRegionsRegistry registry = (RegionRequirementRegistry) managers.getRegistry(RegionRequirementRegistry.class); - if (registry == null) { - getLogger().warning("Unable to register requirements"); - return; - } + 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); + registry.register(QuestReward.class); + registry.register(TeleportReward.class); + registry.register(RegionDiscoverReward.class); + registry.register(PlaceholderConsoleCommandReward.class); + } - registry.register(AlonsoLevelRequirement.class); - registry.register(ItemRequirement.class); - registry.register(LevelRequirement.class); - registry.register(MoneyRequirement.class); - registry.register(PlaceholderRequirement.class); - registry.register(DependencyRequirement.class); - registry.register(QuestRequirement.class); - registry.register(PermissionRequirement.class); - } + private void registerRequirements() { + RPGRegionsRegistry registry = (RegionRequirementRegistry) managers.getRegistry(RegionRequirementRegistry.class); + if (registry == null) { + getLogger().warning("Unable to register requirements"); + return; + } - private void registerEffects() { - RPGRegionsRegistry registry = (RegionEffectRegistry) managers.getRegistry(RegionEffectRegistry.class); - if (registry == null) { - getLogger().warning("Unable to register effects"); - return; - } - registry.register(PotionRegionEffect.class); - registry.register(FogEffect.class); - registry.register(VanishEffect.class); - } + registry.register(AlonsoLevelRequirement.class); + registry.register(ItemRequirement.class); + registry.register(LevelRequirement.class); + registry.register(MoneyRequirement.class); + registry.register(PlaceholderRequirement.class); + registry.register(DependencyRequirement.class); + registry.register(QuestRequirement.class); + registry.register(PermissionRequirement.class); + } - @Override - public Gson getGson() { - return new GsonBuilder() - .registerTypeAdapter(DiscoveryReward.class, new AbstractAdapter(null)) - .registerTypeAdapter(RegionEffect.class, new AbstractAdapter(null)) - .registerTypeAdapter(RegionRequirement.class, new AbstractAdapter(null)) - .registerTypeAdapter(RPGRegionsRegion.class, new AbstractAdapter(null)) - .registerTypeHierarchyAdapter(PotionEffect.class, new PotionEffectAdapter(this)) - .registerTypeHierarchyAdapter(ItemStack.class, new ItemStackAdapter()) - .registerTypeHierarchyAdapter(Location.class, new LocationAdapter()) - .setPrettyPrinting() - .serializeNulls().create(); - } + private void registerEffects() { + RPGRegionsRegistry registry = (RegionEffectRegistry) managers.getRegistry(RegionEffectRegistry.class); + if (registry == null) { + getLogger().warning("Unable to register effects"); + return; + } + registry.register(PotionRegionEffect.class); + registry.register(FogEffect.class); + registry.register(VanishEffect.class); + } - @Override - public boolean hasHeadDatabase() { - return Bukkit.getPluginManager().getPlugin("HeadDatabase") != null; - } + @Override + public Gson getGson() { + return new GsonBuilder() + .registerTypeAdapter(DiscoveryReward.class, new AbstractAdapter(null)) + .registerTypeAdapter(RegionEffect.class, new AbstractAdapter(null)) + .registerTypeAdapter(RegionRequirement.class, new AbstractAdapter(null)) + .registerTypeAdapter(RPGRegionsRegion.class, new AbstractAdapter(null)) + .registerTypeHierarchyAdapter(PotionEffect.class, new PotionEffectAdapter(this)) + .registerTypeHierarchyAdapter(ItemStack.class, new ItemStackAdapter()) + .registerTypeHierarchyAdapter(Location.class, new LocationAdapter()) + .setPrettyPrinting() + .serializeNulls().create(); + } - private void registerTasks() { - if (Bukkit.getPluginManager().getPlugin("Dynmap") != null - && getConfig().getBoolean("settings.external.dynmap")) { - Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new DynmapTask(this), 0L, 20L); - getLogger().info("Registered support for Dynmap."); - } - } + @Override + public boolean hasHeadDatabase() { + return Bukkit.getPluginManager().getPlugin("HeadDatabase") != null; + } - private void registerMetrics() { - Metrics metrics = new Metrics(this, 2066); - // regions_discovered chart currently causes lag due to bStats not running it async :( - if (getConfig().getBoolean("settings.metrics.send_custom_info")) { + private void registerTasks() { + if (Bukkit.getPluginManager().getPlugin("Dynmap") != null + && getConfig().getBoolean("settings.external.dynmap")) { + Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new DynmapTask(this), 0L, 20L); + getLogger().info("Registered support for Dynmap."); + } + } + + private void registerMetrics() { + Metrics metrics = new Metrics(this, 2066); + // regions_discovered chart currently causes lag due to bStats not running it async :( + if (getConfig().getBoolean("settings.metrics.send_custom_info")) { /*metrics.addCustomChart(new SingleLineChart("regions_discovered", () -> { debug("Submitting custom metrics on thread: " + Thread.currentThread().getName()); int discoveries = 0; @@ -302,23 +304,23 @@ public final class RPGRegions extends JavaPlugin implements IRPGRegionsAPI { } return discoveries; }));*/ - } - metrics.addCustomChart(new SingleLineChart("regions_configured", () -> getManagers().getRegionsCache().getConfiguredRegions().size())); - metrics.addCustomChart(new SimplePie("storage_mode", () -> getConfig().getString("settings.storage.mode"))); - metrics.addCustomChart(new SimplePie("integration_type", () -> getConfig().getString("settings.integration.name"))); - } + } + metrics.addCustomChart(new SingleLineChart("regions_configured", () -> getManagers().getRegionsCache().getConfiguredRegions().size())); + metrics.addCustomChart(new SimplePie("storage_mode", () -> getConfig().getString("settings.storage.mode"))); + metrics.addCustomChart(new SimplePie("integration_type", () -> getConfig().getString("settings.integration.name"))); + } - @Override - public boolean debug() { - return this.getConfig().getBoolean("settings.dev.debug"); - } + @Override + public boolean debug() { + return this.getConfig().getBoolean("settings.dev.debug"); + } - @Override - public void debug(String debug) { - if (debug()) this.debug(debug, Level.INFO); - } + @Override + public void debug(String debug) { + if (debug()) this.debug(debug, Level.INFO); + } - public void debug(String debug, Level level) { - if (debug()) this.getLogger().log(level, "[Debug] " + debug); - } + public void debug(String debug, Level level) { + if (debug()) this.getLogger().log(level, "[Debug] " + debug); + } } diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/gui/element/CompareTypeGuiFieldElement.java b/rpgregions/src/main/java/net/islandearth/rpgregions/gui/element/CompareTypeGuiFieldElement.java index 25e9f64..652277e 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/gui/element/CompareTypeGuiFieldElement.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/gui/element/CompareTypeGuiFieldElement.java @@ -4,7 +4,7 @@ import com.google.common.base.Enums; import com.google.common.base.Optional; import net.islandearth.rpgregions.chat.preset.ReturnValueConversationPreset; import net.islandearth.rpgregions.gui.IGuiEditable; -import net.islandearth.rpgregions.requirements.PlaceholderRequirement; +import net.islandearth.rpgregions.utils.PlaceholderCompareType; import org.apache.commons.lang.reflect.FieldUtils; import org.bukkit.ChatColor; import org.bukkit.entity.Player; @@ -20,17 +20,17 @@ public class CompareTypeGuiFieldElement implements IGuiFieldElement { public CompletableFuture set(Player player, IGuiEditable guiEditable, Field field, Object value) { CompletableFuture completableFuture = new CompletableFuture<>(); new ReturnValueConversationPreset(player, "Enter the compare type, valid compares are: " - + Arrays.toString(PlaceholderRequirement.CompareType.values()) + ".", input -> { - Optional compareType = Enums.getIfPresent(PlaceholderRequirement.CompareType.class,input.toUpperCase()); + + Arrays.toString(PlaceholderCompareType.values()) + ".", input -> { + Optional compareType = Enums.getIfPresent(PlaceholderCompareType.class,input.toUpperCase()); if (compareType.isPresent()) { try { - FieldUtils.writeField(field, guiEditable, PlaceholderRequirement.CompareType.valueOf(input.toUpperCase())); + FieldUtils.writeField(field, guiEditable, PlaceholderCompareType.valueOf(input.toUpperCase())); } catch (IllegalAccessException e) { e.printStackTrace(); } } else { player.sendMessage(ChatColor.RED + "Could not find a compare type with that name. " - + Arrays.toString(PlaceholderRequirement.CompareType.values())); + + Arrays.toString(PlaceholderCompareType.values())); } completableFuture.complete(null); }); @@ -39,7 +39,7 @@ public class CompareTypeGuiFieldElement implements IGuiFieldElement { @Override public List> getType() { - return Arrays.asList(PlaceholderRequirement.CompareType.class); + return Arrays.asList(PlaceholderCompareType.class); } @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 cdc48c5..2b550ec 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 me.clip.placeholderapi.PlaceholderAPI; import net.islandearth.rpgregions.api.IRPGRegionsAPI; import net.islandearth.rpgregions.gui.GuiEditable; import org.bukkit.Bukkit; @@ -23,7 +24,11 @@ public class ConsoleCommandReward extends DiscoveryReward { @Override public void award(Player player) { - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), command.replace("%player%", player.getName())); + String command = this.command.replace("%player%", player.getName()); + if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) { + command = PlaceholderAPI.setPlaceholders(player, command); + } + Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), command); } @Override 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 3962bfc..64527a9 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/PlayerCommandReward.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/PlayerCommandReward.java @@ -1,7 +1,9 @@ package net.islandearth.rpgregions.rewards; +import me.clip.placeholderapi.PlaceholderAPI; import net.islandearth.rpgregions.api.IRPGRegionsAPI; import net.islandearth.rpgregions.gui.GuiEditable; +import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -22,7 +24,11 @@ public class PlayerCommandReward extends DiscoveryReward { @Override public void award(Player player) { - player.performCommand(command.replace("%player%", player.getName())); + String command = this.command.replace("%player%", player.getName()); + if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) { + command = PlaceholderAPI.setPlaceholders(player, command); + } + player.performCommand(command); } @Override