Skip to content

Commit

Permalink
fix async misfire of paper list ping event
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Nov 17, 2020
1 parent 085560e commit 0b9f9ea
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 20 deletions.
Expand Up @@ -17,9 +17,11 @@ public boolean applyDetermination(ScriptPath path, ObjectTag determinationObj) {
String lower = CoreUtilities.toLowerCase(determination);
if (lower.startsWith("protocol_version:") && ArgumentHelper.matchesInteger(determination.substring("protocol_version:".length()))) {
((PaperServerListPingEvent) event).setProtocolVersion(Integer.parseInt(determination.substring("protocol_version:".length())));
return true;
}
else if (lower.startsWith("version_name:")) {
((PaperServerListPingEvent) event).setVersion(determination.substring("version_name:".length()));
return true;
}
}
return super.applyDetermination(path, determinationObj);
Expand All @@ -38,7 +40,6 @@ else if (name.equals("version_name")) {

@EventHandler
public void onListPing(PaperServerListPingEvent event) {
this.event = event;
fire(event);
syncFire(event);
}
}
Expand Up @@ -3,6 +3,7 @@
import com.denizenscript.denizen.events.BukkitScriptEvent;
import com.denizenscript.denizen.utilities.DenizenAPI;
import com.denizenscript.denizen.utilities.Utilities;
import com.denizenscript.denizencore.objects.ArgumentHelper;
import com.denizenscript.denizencore.objects.core.ElementTag;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.utilities.CoreUtilities;
Expand Down Expand Up @@ -100,8 +101,8 @@ public boolean applyDetermination(ScriptPath path, ObjectTag determinationObj) {
}
if (determination.length() > 0 && !determination.equalsIgnoreCase("none")) {
List<String> values = CoreUtilities.split(determination, '|', 2);
if (new ElementTag(values.get(0)).isInt()) {
event.setMaxPlayers(new ElementTag(values.get(0)).asInt());
if (ArgumentHelper.matchesInteger(values.get(0))) {
event.setMaxPlayers(Integer.parseInt(values.get(0)));
if (values.size() == 2) {
event.setMotd(values.get(1));
}
Expand Down Expand Up @@ -133,26 +134,30 @@ else if (name.equals("address")) {
return super.getContext(name);
}

public void syncFire(ServerListPingEvent event) {
this.event = event;
if (!Bukkit.isPrimaryThread()) {
BukkitScriptEvent altEvent = (BukkitScriptEvent) clone();
Future future = Bukkit.getScheduler().callSyncMethod(DenizenAPI.getCurrentInstance(), () -> {
altEvent.fire();
return null;
});
try {
future.get(5, TimeUnit.SECONDS);
}
catch (Throwable ex) {
Debug.echoError(ex);
}
return;
}
fire(event);
}

public static class ListPingScriptEventSpigotImpl extends ListPingScriptEvent {

@EventHandler
public void onListPing(ServerListPingEvent event) {
this.event = event;
if (!Bukkit.isPrimaryThread()) {
BukkitScriptEvent altEvent = (BukkitScriptEvent) clone();
Future future = Bukkit.getScheduler().callSyncMethod(DenizenAPI.getCurrentInstance(), () -> {
altEvent.fire();
return null;
});
try {
future.get(5, TimeUnit.SECONDS);
}
catch (Throwable ex) {
Debug.echoError(ex);
}
return;
}
fire(event);
syncFire(event);
}
}
}

0 comments on commit 0b9f9ea

Please sign in to comment.