mirror of
				https://github.com/proxiodev/RedisBungee.git
				synced 2025-10-31 15:58:03 +00:00 
			
		
		
		
	If we find an async ping event-hostile plugin (currently only ServerListPlus), run the ping handling handler synchronously.
This is meant as a move to attempt to introduce a better mechanism for handling async events in a more sane way.
This commit is contained in:
		
							parent
							
								
									121040ad90
								
							
						
					
					
						commit
						d1bfb9e162
					
				| @ -28,6 +28,7 @@ package com.imaginarycode.minecraft.redisbungee; | |||||||
| 
 | 
 | ||||||
| import com.google.common.base.Joiner; | import com.google.common.base.Joiner; | ||||||
| import com.google.common.collect.HashMultimap; | import com.google.common.collect.HashMultimap; | ||||||
|  | import com.google.common.collect.ImmutableList; | ||||||
| import com.google.common.collect.Multimap; | import com.google.common.collect.Multimap; | ||||||
| import com.google.common.io.ByteArrayDataInput; | import com.google.common.io.ByteArrayDataInput; | ||||||
| import com.google.common.io.ByteArrayDataOutput; | import com.google.common.io.ByteArrayDataOutput; | ||||||
| @ -37,6 +38,7 @@ import com.imaginarycode.minecraft.redisbungee.util.RedisCallable; | |||||||
| import lombok.AllArgsConstructor; | import lombok.AllArgsConstructor; | ||||||
| import net.md_5.bungee.api.AbstractReconnectHandler; | import net.md_5.bungee.api.AbstractReconnectHandler; | ||||||
| import net.md_5.bungee.api.ChatColor; | 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.ServerPing; | ||||||
| import net.md_5.bungee.api.chat.BaseComponent; | import net.md_5.bungee.api.chat.BaseComponent; | ||||||
| import net.md_5.bungee.api.chat.ComponentBuilder; | import net.md_5.bungee.api.chat.ComponentBuilder; | ||||||
| @ -69,6 +71,8 @@ public class RedisBungeeListener implements Listener { | |||||||
|     private final RedisBungee plugin; |     private final RedisBungee plugin; | ||||||
|     private final List<InetAddress> exemptAddresses; |     private final List<InetAddress> exemptAddresses; | ||||||
| 
 | 
 | ||||||
|  |     private static final List<String> ASYNC_PING_EVENT_HOSTILE = ImmutableList.of("ServerListPlus"); | ||||||
|  | 
 | ||||||
|     @EventHandler(priority = EventPriority.LOWEST) |     @EventHandler(priority = EventPriority.LOWEST) | ||||||
|     public void onLogin(final LoginEvent event) { |     public void onLogin(final LoginEvent event) { | ||||||
|         event.registerIntent(plugin); |         event.registerIntent(plugin); | ||||||
| @ -179,20 +183,39 @@ public class RedisBungeeListener implements Listener { | |||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         event.registerIntent(plugin); |         boolean runAsync = true; | ||||||
|         plugin.getProxy().getScheduler().runAsync(plugin, new Runnable() { |         for (String s : ASYNC_PING_EVENT_HOSTILE) { | ||||||
|             @Override |             if (ProxyServer.getInstance().getPluginManager().getPlugin(s) != null) { | ||||||
|             public void run() { |                 runAsync = false; | ||||||
|                 ServerPing old = event.getResponse(); |                 break; | ||||||
|                 ServerPing reply = new ServerPing(); |  | ||||||
|                 reply.setPlayers(new ServerPing.Players(old.getPlayers().getMax(), plugin.getCount(), old.getPlayers().getSample())); |  | ||||||
|                 reply.setDescription(old.getDescription()); |  | ||||||
|                 reply.setFavicon(old.getFaviconObject()); |  | ||||||
|                 reply.setVersion(old.getVersion()); |  | ||||||
|                 event.setResponse(reply); |  | ||||||
|                 event.completeIntent(plugin); |  | ||||||
|             } |             } | ||||||
|         }); |         } | ||||||
|  | 
 | ||||||
|  |         if (runAsync) { | ||||||
|  |             event.registerIntent(plugin); | ||||||
|  |             plugin.getProxy().getScheduler().runAsync(plugin, new Runnable() { | ||||||
|  |                 @Override | ||||||
|  |                 public void run() { | ||||||
|  |                     ServerPing old = event.getResponse(); | ||||||
|  |                     ServerPing reply = new ServerPing(); | ||||||
|  |                     reply.setPlayers(new ServerPing.Players(old.getPlayers().getMax(), plugin.getCount(), old.getPlayers().getSample())); | ||||||
|  |                     reply.setDescription(old.getDescription()); | ||||||
|  |                     reply.setFavicon(old.getFaviconObject()); | ||||||
|  |                     reply.setVersion(old.getVersion()); | ||||||
|  |                     event.setResponse(reply); | ||||||
|  |                     event.completeIntent(plugin); | ||||||
|  |                 } | ||||||
|  |             }); | ||||||
|  |         } else { | ||||||
|  |             // Async ping event will not work as an async-hostile plugin was found, so perform the ping modification synchronously. | ||||||
|  |             ServerPing old = event.getResponse(); | ||||||
|  |             ServerPing reply = new ServerPing(); | ||||||
|  |             reply.setPlayers(new ServerPing.Players(old.getPlayers().getMax(), plugin.getCount(), old.getPlayers().getSample())); | ||||||
|  |             reply.setDescription(old.getDescription()); | ||||||
|  |             reply.setFavicon(old.getFaviconObject()); | ||||||
|  |             reply.setVersion(old.getVersion()); | ||||||
|  |             event.setResponse(reply); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @EventHandler |     @EventHandler | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Tux
						Tux