9
0
mirror of https://gitlab.com/SamB440/rpgregions-2.git synced 2025-12-28 11:19:24 +00:00

feature: allow PAPI parsing in command rewards if available

This commit is contained in:
SamB440
2022-05-28 17:30:56 +01:00
parent 9e47c3a6b5
commit 324288800f
4 changed files with 228 additions and 215 deletions

View File

@@ -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<String> 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<String> 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<String> 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<DiscoveryReward> 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<String> 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<RegionRequirement> registry = (RegionRequirementRegistry) managers.getRegistry(RegionRequirementRegistry.class);
if (registry == null) {
getLogger().warning("Unable to register requirements");
return;
}
private void registerRewards() {
RPGRegionsRegistry<DiscoveryReward> 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<RegionRequirement> registry = (RegionRequirementRegistry) managers.getRegistry(RegionRequirementRegistry.class);
if (registry == null) {
getLogger().warning("Unable to register requirements");
return;
}
private void registerEffects() {
RPGRegionsRegistry<RegionEffect> 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<DiscoveryReward>(null))
.registerTypeAdapter(RegionEffect.class, new AbstractAdapter<RegionEffect>(null))
.registerTypeAdapter(RegionRequirement.class, new AbstractAdapter<RegionRequirement>(null))
.registerTypeAdapter(RPGRegionsRegion.class, new AbstractAdapter<RPGRegionsRegion>(null))
.registerTypeHierarchyAdapter(PotionEffect.class, new PotionEffectAdapter(this))
.registerTypeHierarchyAdapter(ItemStack.class, new ItemStackAdapter())
.registerTypeHierarchyAdapter(Location.class, new LocationAdapter())
.setPrettyPrinting()
.serializeNulls().create();
}
private void registerEffects() {
RPGRegionsRegistry<RegionEffect> 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<DiscoveryReward>(null))
.registerTypeAdapter(RegionEffect.class, new AbstractAdapter<RegionEffect>(null))
.registerTypeAdapter(RegionRequirement.class, new AbstractAdapter<RegionRequirement>(null))
.registerTypeAdapter(RPGRegionsRegion.class, new AbstractAdapter<RPGRegionsRegion>(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);
}
}

View File

@@ -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<Void> set(Player player, IGuiEditable guiEditable, Field field, Object value) {
CompletableFuture<Void> completableFuture = new CompletableFuture<>();
new ReturnValueConversationPreset(player, "Enter the compare type, valid compares are: "
+ Arrays.toString(PlaceholderRequirement.CompareType.values()) + ".", input -> {
Optional<PlaceholderRequirement.CompareType> compareType = Enums.getIfPresent(PlaceholderRequirement.CompareType.class,input.toUpperCase());
+ Arrays.toString(PlaceholderCompareType.values()) + ".", input -> {
Optional<PlaceholderCompareType> 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<Class<?>> getType() {
return Arrays.asList(PlaceholderRequirement.CompareType.class);
return Arrays.asList(PlaceholderCompareType.class);
}
@Override

View File

@@ -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

View File

@@ -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