mirror of
https://github.com/proxiodev/RedisBungee.git
synced 2025-04-20 01:27: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 handleReconnectToLastServer;
|
||||||
private final boolean handleMotd;
|
private final boolean handleMotd;
|
||||||
|
private final HandleMotdOrder handleMotdOrder;
|
||||||
|
|
||||||
private final CommandsConfiguration commandsConfiguration;
|
private final CommandsConfiguration commandsConfiguration;
|
||||||
private final String networkId;
|
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;
|
this.proxyId = proxyId;
|
||||||
ImmutableList.Builder<InetAddress> addressBuilder = ImmutableList.builder();
|
ImmutableList.Builder<InetAddress> addressBuilder = ImmutableList.builder();
|
||||||
for (String s : exemptAddresses) {
|
for (String s : exemptAddresses) {
|
||||||
@ -40,6 +41,7 @@ public class RedisBungeeConfiguration {
|
|||||||
this.kickWhenOnline = kickWhenOnline;
|
this.kickWhenOnline = kickWhenOnline;
|
||||||
this.handleReconnectToLastServer = handleReconnectToLastServer;
|
this.handleReconnectToLastServer = handleReconnectToLastServer;
|
||||||
this.handleMotd = handleMotd;
|
this.handleMotd = handleMotd;
|
||||||
|
this.handleMotdOrder = handleMotdOrder;
|
||||||
this.commandsConfiguration = commandsConfiguration;
|
this.commandsConfiguration = commandsConfiguration;
|
||||||
this.networkId = networkId;
|
this.networkId = networkId;
|
||||||
}
|
}
|
||||||
@ -60,6 +62,10 @@ public class RedisBungeeConfiguration {
|
|||||||
return this.handleMotd;
|
return this.handleMotd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public HandleMotdOrder handleMotdPriority() {
|
||||||
|
return handleMotdOrder;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean handleReconnectToLastServer() {
|
public boolean handleReconnectToLastServer() {
|
||||||
return this.handleReconnectToLastServer;
|
return this.handleReconnectToLastServer;
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,7 @@ package com.imaginarycode.minecraft.redisbungee.api.config.loaders;
|
|||||||
import com.google.common.reflect.TypeToken;
|
import com.google.common.reflect.TypeToken;
|
||||||
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeeMode;
|
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeeMode;
|
||||||
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin;
|
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.config.RedisBungeeConfiguration;
|
||||||
import com.imaginarycode.minecraft.redisbungee.api.summoners.JedisClusterSummoner;
|
import com.imaginarycode.minecraft.redisbungee.api.summoners.JedisClusterSummoner;
|
||||||
import com.imaginarycode.minecraft.redisbungee.api.summoners.JedisPooledSummoner;
|
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 reconnect to last server: {}", reconnectToLastServer);
|
||||||
plugin.logInfo("handle motd: {}", handleMotd);
|
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
|
// commands
|
||||||
boolean redisBungeeEnabled = node.getNode("commands", "redisbungee", "enabled").getBoolean(true);
|
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);
|
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,
|
redisBungeeEnabled, redisBungeeLegacyEnabled,
|
||||||
new RedisBungeeConfiguration.LegacySubCommandsConfiguration(
|
new RedisBungeeConfiguration.LegacySubCommandsConfiguration(
|
||||||
findEnabled, glistEnabled, ipEnabled,
|
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 :)
|
# you can disable this when you want to handle motd yourself, use RedisBungee api to get total players when needed :)
|
||||||
handle-motd: true
|
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
|
# A list of IP addresses for which RedisBungee will not modify the response for, useful for automatic
|
||||||
# restart scripts.
|
# restart scripts.
|
||||||
# Automatically disabled if handle-motd is disabled.
|
# 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.ByteArrayDataOutput;
|
||||||
import com.google.common.io.ByteStreams;
|
import com.google.common.io.ByteStreams;
|
||||||
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin;
|
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.Component;
|
||||||
import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer;
|
import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer;
|
||||||
import net.md_5.bungee.api.AbstractReconnectHandler;
|
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.event.ServerConnectEvent;
|
||||||
import net.md_5.bungee.api.plugin.Listener;
|
import net.md_5.bungee.api.plugin.Listener;
|
||||||
import net.md_5.bungee.event.EventHandler;
|
import net.md_5.bungee.event.EventHandler;
|
||||||
|
import net.md_5.bungee.event.EventPriority;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@ -42,8 +44,31 @@ public class RedisBungeeListener implements Listener {
|
|||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
public void onPing(ProxyPingEvent event) {
|
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().handleMotd()) return;
|
||||||
if (plugin.configuration().getExemptAddresses().contains(event.getConnection().getAddress().getAddress())) return;
|
if (plugin.configuration().getExemptAddresses().contains(event.getConnection().getAddress().getAddress())) return;
|
||||||
ServerInfo forced = AbstractReconnectHandler.getForcedHost(event.getConnection());
|
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.ByteArrayDataOutput;
|
||||||
import com.google.common.io.ByteStreams;
|
import com.google.common.io.ByteStreams;
|
||||||
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin;
|
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.PostOrder;
|
||||||
import com.velocitypowered.api.event.Subscribe;
|
import com.velocitypowered.api.event.Subscribe;
|
||||||
import com.velocitypowered.api.event.connection.PluginMessageEvent;
|
import com.velocitypowered.api.event.connection.PluginMessageEvent;
|
||||||
@ -41,8 +42,31 @@ public class RedisBungeeListener {
|
|||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe(order = PostOrder.LAST) // some plugins changes it online players so we need to be executed as last
|
@Subscribe(order = PostOrder.FIRST)
|
||||||
public void onPing(ProxyPingEvent event) {
|
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().handleMotd()) return;
|
||||||
if (plugin.configuration().getExemptAddresses().contains(event.getConnection().getRemoteAddress().getAddress())) return;
|
if (plugin.configuration().getExemptAddresses().contains(event.getConnection().getRemoteAddress().getAddress())) return;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user