From 522cfc8acd932f41cebbdfc2008810cd735d1cd2 Mon Sep 17 00:00:00 2001 From: SamB440 Date: Fri, 9 Jul 2021 21:42:40 +0100 Subject: [PATCH] Add information for main-thread blocking classes --- rpgregions/build.gradle | 2 +- .../hooks/PlaceholderRegionHook.java | 3 ++- .../commands/RPGRegionsDebugCommand.java | 22 ++++++++++++++++ .../managers/RPGRegionsManagers.java | 25 +++++++++++++++++++ .../requirements/QuestRequirement.java | 3 ++- .../rpgregions/rewards/QuestReward.java | 3 ++- .../rpgregions/thread/Blocking.java | 13 ++++++++++ 7 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 rpgregions/src/main/java/net/islandearth/rpgregions/thread/Blocking.java diff --git a/rpgregions/build.gradle b/rpgregions/build.gradle index 997b580..be55c9a 100644 --- a/rpgregions/build.gradle +++ b/rpgregions/build.gradle @@ -49,7 +49,7 @@ dependencies { testImplementation 'org.reflections:reflections:0.9.12' implementation 'net.wesjd:anvilgui:1.5.1-SNAPSHOT' // anvilgui - implementation 'com.github.stefvanschie.inventoryframework:IF:0.9.9' // inventory framework + implementation 'com.github.stefvanschie.inventoryframework:IF:0.10.0' // inventory framework implementation 'com.gitlab.samb440:languagy:2.0.3-RELEASE' // languagy implementation 'co.aikar:acf-paper:0.5.0-SNAPSHOT' // commands implementation 'co.aikar:idb-core:1.0.0-SNAPSHOT' // database diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/api/integrations/hooks/PlaceholderRegionHook.java b/rpgregions/src/main/java/net/islandearth/rpgregions/api/integrations/hooks/PlaceholderRegionHook.java index 87eafec..c906fde 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/api/integrations/hooks/PlaceholderRegionHook.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/api/integrations/hooks/PlaceholderRegionHook.java @@ -3,12 +3,13 @@ package net.islandearth.rpgregions.api.integrations.hooks; import me.clip.placeholderapi.expansion.PlaceholderExpansion; import net.islandearth.rpgregions.RPGRegions; import net.islandearth.rpgregions.managers.data.account.RPGRegionsAccount; +import net.islandearth.rpgregions.thread.Blocking; import net.islandearth.rpgregions.translation.Translations; import org.bukkit.entity.Player; import java.util.concurrent.ExecutionException; -public class PlaceholderRegionHook extends PlaceholderExpansion { +public class PlaceholderRegionHook extends PlaceholderExpansion implements Blocking { private final RPGRegions plugin; diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/commands/RPGRegionsDebugCommand.java b/rpgregions/src/main/java/net/islandearth/rpgregions/commands/RPGRegionsDebugCommand.java index 35d0679..f3d1fd6 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/commands/RPGRegionsDebugCommand.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/commands/RPGRegionsDebugCommand.java @@ -8,7 +8,11 @@ import co.aikar.commands.annotation.Subcommand; import co.aikar.idb.DB; import co.aikar.idb.Database; import net.islandearth.rpgregions.RPGRegions; +import net.islandearth.rpgregions.effects.RegionEffect; import net.islandearth.rpgregions.managers.data.IStorageManager; +import net.islandearth.rpgregions.requirements.RegionRequirement; +import net.islandearth.rpgregions.rewards.DiscoveryReward; +import net.islandearth.rpgregions.thread.Blocking; import org.apache.commons.lang.StringUtils; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; @@ -43,6 +47,24 @@ public class RPGRegionsDebugCommand extends BaseCommand { sender.sendMessage(ChatColor.GRAY + "Driver: " + connection.getMetaData().getDriverName()); sender.sendMessage(ChatColor.GRAY + "Version: " + connection.getMetaData().getDriverVersion()); } + + plugin.getManagers().getRegionsCache().getConfiguredRegions().forEach((name, configuredRegion) -> { + for (DiscoveryReward reward : configuredRegion.getRewards()) { + if (reward instanceof Blocking) { + sender.sendMessage(ChatColor.RED + "Region " + name + " has blocking class " + reward + "."); + } + } + for (RegionRequirement requirement : configuredRegion.getRequirements()) { + if (requirement instanceof Blocking) { + sender.sendMessage(ChatColor.RED + "Region " + name + " has blocking class " + requirement + "."); + } + } + for (RegionEffect effect : configuredRegion.getEffects()) { + if (effect instanceof Blocking) { + sender.sendMessage(ChatColor.RED + "Region " + name + " has blocking class " + effect + "."); + } + } + }); } @Subcommand("cache") 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 351407c..0f22439 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/managers/RPGRegionsManagers.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/managers/RPGRegionsManagers.java @@ -27,6 +27,7 @@ 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.RegionRequirement; import net.islandearth.rpgregions.requirements.RegionRequirementRegistry; import net.islandearth.rpgregions.rewards.ConsoleCommandReward; import net.islandearth.rpgregions.rewards.DiscoveryReward; @@ -35,6 +36,7 @@ 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.thread.Blocking; import net.islandearth.rpgregions.utils.ItemStackBuilder; import net.islandearth.rpgregions.utils.XSound; import org.bukkit.Bukkit; @@ -137,6 +139,7 @@ public class RPGRegionsManagers implements IRPGRegionsManagers { try (Reader reader = new FileReader(file)) { ConfiguredRegion region = plugin.getGson().fromJson(reader, ConfiguredRegion.class); if (!region.getId().equals("exampleconfig")) regionsCache.addConfiguredRegion(region); + warnBlocking(plugin, region); } catch (Exception e) { plugin.getLogger().log(Level.SEVERE, "Error loading region config " + file.getName() + ".", e); } @@ -163,6 +166,28 @@ public class RPGRegionsManagers implements IRPGRegionsManagers { guiFieldElementRegistry.register(new CompareTypeGuiFieldElement()); } + private void warnBlocking(RPGRegions plugin, ConfiguredRegion region) { + List blocking = new ArrayList<>(); + for (DiscoveryReward reward : region.getRewards()) { + if (reward instanceof Blocking) { + blocking.add((Blocking) reward); + } + } + for (RegionRequirement requirement : region.getRequirements()) { + if (requirement instanceof Blocking) { + blocking.add((Blocking) requirement); + } + } + for (RegionEffect effect : region.getEffects()) { + if (effect instanceof Blocking) { + blocking.add((Blocking) effect); + } + } + for (Blocking blockingClass : blocking) { + blockingClass.log(plugin); + } + } + @Override public IStorageManager getStorageManager() { return storageManager; diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/requirements/QuestRequirement.java b/rpgregions/src/main/java/net/islandearth/rpgregions/requirements/QuestRequirement.java index a996b53..f028fcb 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/requirements/QuestRequirement.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/requirements/QuestRequirement.java @@ -5,12 +5,13 @@ import me.blackvein.quests.Quester; import me.blackvein.quests.Quests; import net.islandearth.rpgregions.api.IRPGRegionsAPI; import net.islandearth.rpgregions.gui.GuiEditable; +import net.islandearth.rpgregions.thread.Blocking; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import java.util.concurrent.ExecutionException; -public class QuestRequirement extends RegionRequirement { +public class QuestRequirement extends RegionRequirement implements Blocking { @GuiEditable("Quest id") private final String questId; diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/QuestReward.java b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/QuestReward.java index c2e9106..0a9373f 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/QuestReward.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/QuestReward.java @@ -5,12 +5,13 @@ import me.blackvein.quests.Quester; import me.blackvein.quests.Quests; import net.islandearth.rpgregions.api.IRPGRegionsAPI; import net.islandearth.rpgregions.gui.GuiEditable; +import net.islandearth.rpgregions.thread.Blocking; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import java.util.concurrent.ExecutionException; -public class QuestReward extends DiscoveryReward { +public class QuestReward extends DiscoveryReward implements Blocking { @GuiEditable("Quest id") private final String questId; diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/thread/Blocking.java b/rpgregions/src/main/java/net/islandearth/rpgregions/thread/Blocking.java new file mode 100644 index 0000000..1276455 --- /dev/null +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/thread/Blocking.java @@ -0,0 +1,13 @@ +package net.islandearth.rpgregions.thread; + +import net.islandearth.rpgregions.RPGRegions; + +/** + * Used to indicate a class has main-thread blocking code. + */ +public interface Blocking { + + default void log(RPGRegions plugin) { + plugin.getLogger().warning("This class (" + this.getClass().getSimpleName() + ") has main-thread blocking code."); + } +}