diff --git a/CHANGELOG.md b/CHANGELOG.md index 3756c94..8ea42cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## 8.15.2 +- Added generic hook for 3rd plugin GUIs + ## 8.15.1 - Fixed dirt in containers being affected by the right-click hotkey even though the player had no dirt in his inventory diff --git a/pom.xml b/pom.xml index 1c4ae4c..3ee2a20 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ ChestSort https://www.chestsort.de Automatically sorts your chests! - 8.15.1 + 8.15.2-SNAPSHOT jar diff --git a/src/main/java/de/jeff_media/ChestSort/ChestSortListener.java b/src/main/java/de/jeff_media/ChestSort/ChestSortListener.java index 7079b9e..ea32588 100644 --- a/src/main/java/de/jeff_media/ChestSort/ChestSortListener.java +++ b/src/main/java/de/jeff_media/ChestSort/ChestSortListener.java @@ -334,6 +334,13 @@ public class ChestSortListener implements Listener { boolean isAPICall = isAPICall(event.getClickedInventory()); + // Detect generic GUIs + if(!isAPICall && + (plugin.genericHook.isPluginGUI(event.getInventory()) + || plugin.genericHook.isPluginGUI(event.getInventory()))) { + return; + } + // Possible fix for #57 if (!isAPICall && (event.getClickedInventory().getHolder() != null && event.getClickedInventory().getHolder() == p @@ -445,6 +452,7 @@ public class ChestSortListener implements Listener { } private boolean isAPICall(Inventory inv) { + if(inv==null) return false; return inv.getHolder() instanceof ISortable; } @@ -497,6 +505,13 @@ public class ChestSortListener implements Listener { return; } + // Detect generic GUIs + if(!isAPICall(e.getInventory()) && !isAPICall(e.getClickedInventory()) && + (plugin.genericHook.isPluginGUI(e.getInventory()) + || plugin.genericHook.isPluginGUI(e.getInventory()))) { + return; + } + // Don't sort inventories belonging to BossShopPro if (e.getInventory() != null && e.getInventory().getHolder() != null && e.getInventory().getHolder().getClass().getName().equalsIgnoreCase("org.black_ixx.bossshop.core.BSShopHolder")) { return; diff --git a/src/main/java/de/jeff_media/ChestSort/ChestSortPlugin.java b/src/main/java/de/jeff_media/ChestSort/ChestSortPlugin.java index a748c41..2649d31 100644 --- a/src/main/java/de/jeff_media/ChestSort/ChestSortPlugin.java +++ b/src/main/java/de/jeff_media/ChestSort/ChestSortPlugin.java @@ -41,6 +41,7 @@ import java.util.Iterator; import java.util.Map; import java.util.UUID; +import de.jeff_media.ChestSort.hooks.GenericGUIHook; import de.jeff_media.PluginUpdateChecker.PluginUpdateChecker; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; @@ -68,7 +69,7 @@ public class ChestSortPlugin extends JavaPlugin implements de.jeff_media.ChestSo String sortingMethod; ArrayList disabledWorlds; ChestSortAPIHandler api; - final int currentConfigVersion = 37; + final int currentConfigVersion = 38; boolean usingMatchingConfig = true; protected boolean debug = false; boolean verbose = true; @@ -77,6 +78,8 @@ public class ChestSortPlugin extends JavaPlugin implements de.jeff_media.ChestSo public boolean hookCrackShot = false; public boolean hookInventoryPages = false; public boolean hookMinepacks = false; + + public GenericGUIHook genericHook; private static long updateCheckInterval = 4*60*60; // in seconds. We check on startup and every 4 hours @@ -125,6 +128,10 @@ public class ChestSortPlugin extends JavaPlugin implements de.jeff_media.ChestSo return perPlayerSettings.get(p.getUniqueId().toString()).sortingEnabled; } + public void debug(String t) { + if(debug) getLogger().warning("[DEBUG] "+t); + } + // Creates the default configuration file // Also checks the config-version of an already existing file. If the existing // config is too @@ -199,6 +206,7 @@ public class ChestSortPlugin extends JavaPlugin implements de.jeff_media.ChestSo getConfig().addDefault("hook-crackshot-prefix", "crackshot_weapon"); getConfig().addDefault("hook-inventorypages", true); getConfig().addDefault("hook-minepacks", true); + getConfig().addDefault("hook-generic",true); getConfig().addDefault("verbose", true); // Prints some information in onEnable() } @@ -447,6 +455,8 @@ public class ChestSortPlugin extends JavaPlugin implements de.jeff_media.ChestSo hookMinepacks = getConfig().getBoolean("hook-minepacks") && Bukkit.getPluginManager().getPlugin("Minepacks") instanceof MinepacksPlugin; + genericHook = new GenericGUIHook(this,getConfig().getBoolean("hook-generic")); + saveDefaultCategories(); verbose = getConfig().getBoolean("verbose"); diff --git a/src/main/java/de/jeff_media/ChestSort/hooks/GenericGUIHook.java b/src/main/java/de/jeff_media/ChestSort/hooks/GenericGUIHook.java new file mode 100644 index 0000000..04e4c44 --- /dev/null +++ b/src/main/java/de/jeff_media/ChestSort/hooks/GenericGUIHook.java @@ -0,0 +1,25 @@ +package de.jeff_media.ChestSort.hooks; + +import de.jeff_media.ChestSort.ChestSortPlugin; +import org.bukkit.inventory.Inventory; + +public class GenericGUIHook { + + ChestSortPlugin main; + boolean enabled; + + public GenericGUIHook(ChestSortPlugin main, boolean enabled) { + this.main=main; + this.enabled=enabled; + } + + public boolean isPluginGUI(Inventory inv) { + if(!enabled) return false; + if(inv.getHolder()!=null && inv.getHolder().getClass().getName().contains("GUI")) { + main.debug("Generic GUI detected by class name containing \"GUI\""); + return true; + } + return false; + } + +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index af265f8..09f1fc3 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -200,7 +200,8 @@ hook-headdatabase: true # 3rd party plugin's GUI and then prevents it from being sorted. # If you encounter any problems, like a sortable GUI inventory, # please open a new issue at Github: -# https://github.com/JEFF-Media-GbR/Spigot-ChestSort/issues +# https://github.com/JEFF-Media-GbR/Spigot-ChestSort/issues +hook-generic: true ########################## ##### Sorting Method ##### @@ -576,4 +577,4 @@ log: false # Please DO NOT change the following line manually! # It is used by the automatic config updater. -config-version: 37 +config-version: 38 diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index d078b01..2539cb2 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,6 +1,6 @@ main: de.jeff_media.ChestSort.ChestSortPlugin name: ChestSort -version: 8.15.1 +version: 8.15.2-SNAPSHOT api-version: "1.13" description: Allows automatic chest sorting author: mfnalex