diff --git a/src/main/java/net/tfminecraft/activitytf/ActivityPlugin.java b/src/main/java/net/tfminecraft/activitytf/ActivityPlugin.java index 0f1c97d..2f2f486 100644 --- a/src/main/java/net/tfminecraft/activitytf/ActivityPlugin.java +++ b/src/main/java/net/tfminecraft/activitytf/ActivityPlugin.java @@ -46,7 +46,15 @@ public void onEnable() { getServer().getPluginManager().registerEvents(new CraftListener(manager), this); getServer().getPluginManager().registerEvents(gui, this); - registerHooks(); + // Paper can enable soft dependencies after this plugin when their own dependencies form + // a cycle, so re-check them once every plugin has finished enabling. + getServer().getScheduler().runTask(this, () -> { + if (manager.getConfiguration().itemPluginsChanged()) { + getLogger().info("An item plugin finished enabling after activity - reloading the config."); + manager.reload(); + } + registerHooks(); + }); getLogger().info("activity has been enabled!"); } diff --git a/src/main/java/net/tfminecraft/activitytf/config/ActivityConfiguration.java b/src/main/java/net/tfminecraft/activitytf/config/ActivityConfiguration.java index 42cab5d..89da819 100644 --- a/src/main/java/net/tfminecraft/activitytf/config/ActivityConfiguration.java +++ b/src/main/java/net/tfminecraft/activitytf/config/ActivityConfiguration.java @@ -129,12 +129,7 @@ public void load() { FileConfiguration config = plugin.getConfig(); messages.reload(); - List missing = new ArrayList<>(); - for (String name : List.of("TLibs", "MMOItems", "MythicLib")) { - if (!Bukkit.getPluginManager().isPluginEnabled(name)) { - missing.add(name); - } - } + List missing = missingItemPathPlugins(); itemPathsUsable = missing.isEmpty(); missingItemPathPlugins = String.join(", ", missing); itemsAdderUsable = Bukkit.getPluginManager().isPluginEnabled("ItemsAdder"); @@ -1268,6 +1263,25 @@ public boolean itemPathsUsable() { return itemPathsUsable; } + private static List missingItemPathPlugins() { + List missing = new ArrayList<>(); + for (String name : List.of("TLibs", "MMOItems", "MythicLib")) { + if (!Bukkit.getPluginManager().isPluginEnabled(name)) { + missing.add(name); + } + } + return missing; + } + + /** + * True when an item plugin was enabled or disabled since the last load, e.g. when Paper + * breaks a dependency cycle by enabling MMOItems after this plugin. + */ + public boolean itemPluginsChanged() { + return itemPathsUsable != missingItemPathPlugins().isEmpty() + || itemsAdderUsable != Bukkit.getPluginManager().isPluginEnabled("ItemsAdder"); + } + public boolean itemsAdderUsable() { return itemsAdderUsable; }