From ea2cb74be6bd8786692dcf6d2e46a430ec8f0e47 Mon Sep 17 00:00:00 2001 From: Tux Date: Sun, 10 Jan 2016 14:05:55 -0500 Subject: [PATCH] Revert "Remove async ping event, too many plugins break with it." This reverts commit 3b2d157943b4b5728f9b83053fa4630c9c2c7622. --- .../redisbungee/RedisBungeeListener.java | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeListener.java b/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeListener.java index 98851f8..dda2122 100644 --- a/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeListener.java +++ b/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeListener.java @@ -2,6 +2,7 @@ package com.imaginarycode.minecraft.redisbungee; import com.google.common.base.Joiner; import com.google.common.collect.HashMultimap; +import com.google.common.collect.ImmutableList; import com.google.common.collect.Multimap; import com.google.common.io.ByteArrayDataInput; import com.google.common.io.ByteArrayDataOutput; @@ -11,6 +12,8 @@ import com.imaginarycode.minecraft.redisbungee.util.RedisCallable; import lombok.AllArgsConstructor; import net.md_5.bungee.api.AbstractReconnectHandler; import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.ServerPing; import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.ComponentBuilder; import net.md_5.bungee.api.chat.TextComponent; @@ -42,6 +45,8 @@ public class RedisBungeeListener implements Listener { private final RedisBungee plugin; private final List exemptAddresses; + private static final List ASYNC_PING_EVENT_HOSTILE = ImmutableList.of("ServerListPlus", "SwiftMOTD"); + @EventHandler(priority = EventPriority.LOWEST) public void onLogin(final LoginEvent event) { event.registerIntent(plugin); @@ -141,7 +146,27 @@ public class RedisBungeeListener implements Listener { return; } - event.getResponse().getPlayers().setOnline(plugin.getCount()); + boolean runAsync = true; + for (String s : ASYNC_PING_EVENT_HOSTILE) { + if (ProxyServer.getInstance().getPluginManager().getPlugin(s) != null) { + runAsync = false; + break; + } + } + + if (runAsync) { + event.registerIntent(plugin); + plugin.getProxy().getScheduler().runAsync(plugin, new Runnable() { + @Override + public void run() { + event.getResponse().getPlayers().setOnline(plugin.getCount()); + event.completeIntent(plugin); + } + }); + } else { + // Async ping event will not work as an async-hostile plugin was found, so perform the ping modification synchronously. + event.getResponse().getPlayers().setOnline(plugin.getCount()); + } } @EventHandler