Skip to content

Commit

Permalink
Try to fix PerWorldPlugins in custom performance softwares of Spigot/…
Browse files Browse the repository at this point in the history
…Paper without the class TimedRegisteredListener
  • Loading branch information
TonimatasDEV committed Feb 13, 2024
1 parent 3b7dca0 commit 15a58e4
Showing 1 changed file with 40 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,24 @@ public static void convert() {
Field executorField = RegisteredListener.class.getDeclaredField("executor");
executorField.setAccessible(true);

if (registeredListener instanceof TimedRegisteredListener) {
// RegisteredListener to PerWorldTimedRegisteredListener.
handlerList.register(new PerWorldTimedRegisteredListener(registeredListener.getListener(), (EventExecutor) executorField.get(registeredListener), registeredListener.getPriority(), registeredListener.getPlugin(), registeredListener.isIgnoringCancelled()));
} else {
// Create handled variable
boolean handled = false;

// Use try because, some performance server softwares delete TimedRegisteredListener class
try {
if (registeredListener instanceof TimedRegisteredListener) {
// RegisteredListener to PerWorldTimedRegisteredListener.
handlerList.register(new PerWorldTimedRegisteredListener(registeredListener.getListener(), (EventExecutor) executorField.get(registeredListener), registeredListener.getPriority(), registeredListener.getPlugin(), registeredListener.isIgnoringCancelled()));

// Change handled to true
handled = true;
}
} catch (Exception ignore) {
// Do nothing
}

// Check if already handled
if (!handled) {
// RegisteredListener to PerWorldRegisteredListener.
handlerList.register(new PerWorldRegisteredListener(registeredListener.getListener(), (EventExecutor) executorField.get(registeredListener), registeredListener.getPriority(), registeredListener.getPlugin(), registeredListener.isIgnoringCancelled()));
}
Expand All @@ -44,15 +58,32 @@ public static void convert() {
}

public static void setWorldsToEvents() {
// Get PerWorldPlugins
Plugin perWorldPlugins = PerWorldPlugins.getInstance();

for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
// Check if the plugin is PerWorldPlugins
if (plugin.equals(perWorldPlugins)) continue;

for (RegisteredListener registeredListener : HandlerList.getRegisteredListeners(plugin)) {
if (registeredListener instanceof PerWorldRegisteredListener) {
((PerWorldRegisteredListener) registeredListener).setDisabledWorlds();
} else if (registeredListener instanceof PerWorldTimedRegisteredListener){

// Create handled variable
boolean handled = false;

// Use try because, some performance server softwares delete TimedRegisteredListener class
try {
if (registeredListener instanceof PerWorldRegisteredListener) {
// RegisteredListener to PerWorldTimedRegisteredListener.
((PerWorldRegisteredListener) registeredListener).setDisabledWorlds();
// Change handled to true
handled = true;
}
} catch (Exception ignore) {
// Do nothing
}

// Check if it is handled or is a PerWorldTimeRegisteredListener
if (!handled && registeredListener instanceof PerWorldTimedRegisteredListener){
((PerWorldTimedRegisteredListener) registeredListener).setDisabledWorlds();
}
}
Expand Down

0 comments on commit 15a58e4

Please sign in to comment.