mirror of
https://github.com/proxiodev/RedisBungee.git
synced 2025-04-16 07:47:07 +00:00
Allow to customize ping events priority via handle-motd-order
This commit is contained in:
parent
22f505e8a2
commit
b5901366af
@ -0,0 +1,7 @@
|
||||
package com.imaginarycode.minecraft.redisbungee.api.config;
|
||||
|
||||
public enum HandleMotdOrder {
|
||||
FIRST,
|
||||
NORMAL,
|
||||
LAST
|
||||
}
|
@ -25,12 +25,13 @@ public class RedisBungeeConfiguration {
|
||||
|
||||
private final boolean handleReconnectToLastServer;
|
||||
private final boolean handleMotd;
|
||||
private final HandleMotdOrder handleMotdOrder;
|
||||
|
||||
private final CommandsConfiguration commandsConfiguration;
|
||||
private final String networkId;
|
||||
|
||||
|
||||
public RedisBungeeConfiguration(String networkId, String proxyId, List<String> exemptAddresses, boolean kickWhenOnline, boolean handleReconnectToLastServer, boolean handleMotd, CommandsConfiguration commandsConfiguration) {
|
||||
public RedisBungeeConfiguration(String networkId, String proxyId, List<String> exemptAddresses, boolean kickWhenOnline, boolean handleReconnectToLastServer, boolean handleMotd, HandleMotdOrder handleMotdOrder, CommandsConfiguration commandsConfiguration) {
|
||||
this.proxyId = proxyId;
|
||||
ImmutableList.Builder<InetAddress> addressBuilder = ImmutableList.builder();
|
||||
for (String s : exemptAddresses) {
|
||||
@ -40,6 +41,7 @@ public class RedisBungeeConfiguration {
|
||||
this.kickWhenOnline = kickWhenOnline;
|
||||
this.handleReconnectToLastServer = handleReconnectToLastServer;
|
||||
this.handleMotd = handleMotd;
|
||||
this.handleMotdOrder = handleMotdOrder;
|
||||
this.commandsConfiguration = commandsConfiguration;
|
||||
this.networkId = networkId;
|
||||
}
|
||||
@ -60,6 +62,10 @@ public class RedisBungeeConfiguration {
|
||||
return this.handleMotd;
|
||||
}
|
||||
|
||||
public HandleMotdOrder handleMotdPriority() {
|
||||
return handleMotdOrder;
|
||||
}
|
||||
|
||||
public boolean handleReconnectToLastServer() {
|
||||
return this.handleReconnectToLastServer;
|
||||
}
|
||||
|
@ -14,6 +14,7 @@ package com.imaginarycode.minecraft.redisbungee.api.config.loaders;
|
||||
import com.google.common.reflect.TypeToken;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeeMode;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.config.HandleMotdOrder;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.config.RedisBungeeConfiguration;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.summoners.JedisClusterSummoner;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.summoners.JedisPooledSummoner;
|
||||
@ -104,6 +105,16 @@ public interface ConfigLoader extends GenericConfigLoader {
|
||||
plugin.logInfo("handle reconnect to last server: {}", reconnectToLastServer);
|
||||
plugin.logInfo("handle motd: {}", handleMotd);
|
||||
|
||||
HandleMotdOrder handleMotdOrder = HandleMotdOrder.NORMAL;
|
||||
String handleMotdOrderName = node.getNode("handle-motd-priority").getString();
|
||||
if (handleMotdOrderName != null) {
|
||||
try {
|
||||
handleMotdOrder = HandleMotdOrder.valueOf(handleMotdOrderName.toUpperCase(Locale.ROOT));
|
||||
} catch (IllegalArgumentException e) {
|
||||
plugin.logWarn("handle motd order value '{}' is unsupported (allowed: {})", handleMotdOrderName, HandleMotdOrder.values());
|
||||
}
|
||||
}
|
||||
plugin.logInfo("handle motd order: {}", handleMotdOrder);
|
||||
|
||||
// commands
|
||||
boolean redisBungeeEnabled = node.getNode("commands", "redisbungee", "enabled").getBoolean(true);
|
||||
@ -130,7 +141,8 @@ public interface ConfigLoader extends GenericConfigLoader {
|
||||
boolean installPlist = node.getNode("commands", "redisbungee-legacy", "subcommands", "plist", "install").getBoolean(false);
|
||||
|
||||
|
||||
RedisBungeeConfiguration configuration = new RedisBungeeConfiguration(networkId, proxyId, exemptAddresses, kickWhenOnline, reconnectToLastServer, handleMotd, new RedisBungeeConfiguration.CommandsConfiguration(
|
||||
RedisBungeeConfiguration configuration = new RedisBungeeConfiguration(networkId, proxyId, exemptAddresses, kickWhenOnline, reconnectToLastServer, handleMotd, handleMotdOrder,
|
||||
new RedisBungeeConfiguration.CommandsConfiguration(
|
||||
redisBungeeEnabled, redisBungeeLegacyEnabled,
|
||||
new RedisBungeeConfiguration.LegacySubCommandsConfiguration(
|
||||
findEnabled, glistEnabled, ipEnabled,
|
||||
|
@ -77,6 +77,13 @@ kick-when-online: true
|
||||
# you can disable this when you want to handle motd yourself, use RedisBungee api to get total players when needed :)
|
||||
handle-motd: true
|
||||
|
||||
# MOTD plugins compatibility setting
|
||||
# Allowed values: FIRST, NORMAL, LAST
|
||||
# This option enables RedisBungee to manage various interactions between other plugins and the online player count,
|
||||
# which is dynamically updated to a global player count in ping responses if the handle-motd option is enabled.
|
||||
# If you encounter issues with other plugins accessing or modifying the player count, try using a value of FIRST or LAST.
|
||||
handle-motd-order: NORMAL
|
||||
|
||||
# A list of IP addresses for which RedisBungee will not modify the response for, useful for automatic
|
||||
# restart scripts.
|
||||
# Automatically disabled if handle-motd is disabled.
|
||||
|
@ -17,6 +17,7 @@ import com.google.common.io.ByteArrayDataInput;
|
||||
import com.google.common.io.ByteArrayDataOutput;
|
||||
import com.google.common.io.ByteStreams;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.config.HandleMotdOrder;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer;
|
||||
import net.md_5.bungee.api.AbstractReconnectHandler;
|
||||
@ -29,6 +30,7 @@ import net.md_5.bungee.api.event.ProxyPingEvent;
|
||||
import net.md_5.bungee.api.event.ServerConnectEvent;
|
||||
import net.md_5.bungee.api.plugin.Listener;
|
||||
import net.md_5.bungee.event.EventHandler;
|
||||
import net.md_5.bungee.event.EventPriority;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@ -42,8 +44,31 @@ public class RedisBungeeListener implements Listener {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPing(ProxyPingEvent event) {
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
private void onPingFirst(ProxyPingEvent event) {
|
||||
if (plugin.configuration().handleMotdPriority() != HandleMotdOrder.FIRST) {
|
||||
return;
|
||||
}
|
||||
onPing0(event);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL)
|
||||
private void onPingNormal(ProxyPingEvent event) {
|
||||
if (plugin.configuration().handleMotdPriority() != HandleMotdOrder.NORMAL) {
|
||||
return;
|
||||
}
|
||||
onPing0(event);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
private void onPingLast(ProxyPingEvent event) {
|
||||
if (plugin.configuration().handleMotdPriority() != HandleMotdOrder.LAST) {
|
||||
return;
|
||||
}
|
||||
onPing0(event);
|
||||
}
|
||||
|
||||
private void onPing0(ProxyPingEvent event) {
|
||||
if (!plugin.configuration().handleMotd()) return;
|
||||
if (plugin.configuration().getExemptAddresses().contains(event.getConnection().getAddress().getAddress())) return;
|
||||
ServerInfo forced = AbstractReconnectHandler.getForcedHost(event.getConnection());
|
||||
|
@ -17,6 +17,7 @@ import com.google.common.io.ByteArrayDataInput;
|
||||
import com.google.common.io.ByteArrayDataOutput;
|
||||
import com.google.common.io.ByteStreams;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.config.HandleMotdOrder;
|
||||
import com.velocitypowered.api.event.PostOrder;
|
||||
import com.velocitypowered.api.event.Subscribe;
|
||||
import com.velocitypowered.api.event.connection.PluginMessageEvent;
|
||||
@ -41,8 +42,31 @@ public class RedisBungeeListener {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Subscribe(order = PostOrder.LAST) // some plugins changes it online players so we need to be executed as last
|
||||
public void onPing(ProxyPingEvent event) {
|
||||
@Subscribe(order = PostOrder.FIRST)
|
||||
public void onPingFirst(ProxyPingEvent event) {
|
||||
if (plugin.configuration().handleMotdPriority() != HandleMotdOrder.FIRST) {
|
||||
return;
|
||||
}
|
||||
onPing0(event);
|
||||
}
|
||||
|
||||
@Subscribe(order = PostOrder.NORMAL)
|
||||
public void onPingNormal(ProxyPingEvent event) {
|
||||
if (plugin.configuration().handleMotdPriority() != HandleMotdOrder.NORMAL) {
|
||||
return;
|
||||
}
|
||||
onPing0(event);
|
||||
}
|
||||
|
||||
@Subscribe(order = PostOrder.LAST)
|
||||
public void onPingLast(ProxyPingEvent event) {
|
||||
if (plugin.configuration().handleMotdPriority() != HandleMotdOrder.LAST) {
|
||||
return;
|
||||
}
|
||||
onPing0(event);
|
||||
}
|
||||
|
||||
private void onPing0(ProxyPingEvent event) {
|
||||
if (!plugin.configuration().handleMotd()) return;
|
||||
if (plugin.configuration().getExemptAddresses().contains(event.getConnection().getRemoteAddress().getAddress())) return;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user