mirror of
https://github.com/PaperMC/Waterfall.git
synced 2024-11-06 18:51:21 +01:00
384 lines
16 KiB
Diff
384 lines
16 KiB
Diff
From 22e56507775a8d2f89d7602977f80a584678b99f Mon Sep 17 00:00:00 2001
|
|
From: Juan Cruz Linsalata <LinsaFTW@users.noreply.github.com>
|
|
Date: Mon, 12 Oct 2020 15:40:53 -0300
|
|
Subject: [PATCH] FlameCord General Patch
|
|
|
|
|
|
diff --git a/flamecord/src/main/java/dev/_2lstudios/flamecord/FlameCord.java b/flamecord/src/main/java/dev/_2lstudios/flamecord/FlameCord.java
|
|
new file mode 100644
|
|
index 000000000..252612a31
|
|
--- /dev/null
|
|
+++ b/flamecord/src/main/java/dev/_2lstudios/flamecord/FlameCord.java
|
|
@@ -0,0 +1,34 @@
|
|
+package dev._2lstudios.flamecord;
|
|
+
|
|
+import java.util.Collection;
|
|
+import java.util.logging.Logger;
|
|
+
|
|
+import dev._2lstudios.flamecord.configuration.FlameCordConfiguration;
|
|
+import lombok.Getter;
|
|
+import net.md_5.bungee.config.ConfigurationProvider;
|
|
+import net.md_5.bungee.config.YamlConfiguration;
|
|
+
|
|
+public class FlameCord {
|
|
+ @Getter
|
|
+ private static FlameCord instance;
|
|
+ @Getter
|
|
+ private final FlameCordConfiguration flameCordConfiguration;
|
|
+ @Getter
|
|
+ private boolean running = true;
|
|
+
|
|
+ public static void renew(final Logger logger, final Collection<String> whitelistedAddresses) {
|
|
+ if (FlameCord.instance != null) {
|
|
+ FlameCord.instance.running = false;
|
|
+ }
|
|
+
|
|
+ final FlameCord instance = new FlameCord(logger, whitelistedAddresses);
|
|
+
|
|
+ FlameCord.instance = instance;
|
|
+ }
|
|
+
|
|
+ private FlameCord(final Logger logger, final Collection<String> whitelistedAddresses) {
|
|
+ final ConfigurationProvider configurationProvider = ConfigurationProvider.getProvider(YamlConfiguration.class);
|
|
+
|
|
+ this.flameCordConfiguration = new FlameCordConfiguration(configurationProvider);
|
|
+ }
|
|
+}
|
|
\ No newline at end of file
|
|
diff --git a/flamecord/src/main/java/dev/_2lstudios/flamecord/configuration/FlameCordConfiguration.java b/flamecord/src/main/java/dev/_2lstudios/flamecord/configuration/FlameCordConfiguration.java
|
|
new file mode 100644
|
|
index 000000000..81ded2243
|
|
--- /dev/null
|
|
+++ b/flamecord/src/main/java/dev/_2lstudios/flamecord/configuration/FlameCordConfiguration.java
|
|
@@ -0,0 +1,64 @@
|
|
+package dev._2lstudios.flamecord.configuration;
|
|
+
|
|
+import java.io.File;
|
|
+import java.io.IOException;
|
|
+import java.util.ArrayList;
|
|
+import java.util.Arrays;
|
|
+import java.util.Collection;
|
|
+import java.util.HashSet;
|
|
+
|
|
+import lombok.Getter;
|
|
+import net.md_5.bungee.config.Configuration;
|
|
+import net.md_5.bungee.config.ConfigurationProvider;
|
|
+
|
|
+public class FlameCordConfiguration {
|
|
+ public FlameCordConfiguration(final ConfigurationProvider configurationProvider) {
|
|
+ try {
|
|
+ final String fileName = "./flamecord.yml";
|
|
+ final File configurationFile = new File(fileName);
|
|
+ final Configuration configuration;
|
|
+ final boolean configurationExists = configurationFile.exists();
|
|
+
|
|
+ if (!configurationExists) {
|
|
+ configuration = new Configuration();
|
|
+ } else {
|
|
+ configuration = configurationProvider.load(configurationFile);
|
|
+ }
|
|
+
|
|
+ if (!configurationExists) {
|
|
+ configurationProvider.save(configuration, configurationFile);
|
|
+ }
|
|
+ } catch (final IOException e) {
|
|
+ e.printStackTrace();
|
|
+ }
|
|
+ }
|
|
+
|
|
+ private int setIfUnexistant(final String arg1, final int arg2, final Configuration configuration) {
|
|
+ return (int) setIfUnexistant(arg1, (Object) arg2, configuration);
|
|
+ }
|
|
+
|
|
+ private boolean setIfUnexistant(final String arg1, final boolean arg2, final Configuration configuration) {
|
|
+ return (boolean) setIfUnexistant(arg1, (Object) arg2, configuration);
|
|
+ }
|
|
+
|
|
+ private Object setIfUnexistant(final String arg1, final Object arg2, final Configuration configuration) {
|
|
+ if (!configuration.contains(arg1)) {
|
|
+ configuration.set(arg1, arg2);
|
|
+
|
|
+ return arg2;
|
|
+ } else {
|
|
+ return configuration.get(arg1);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ private Collection<String> setIfUnexistant(final String arg1, final Collection<String> arg2,
|
|
+ final Configuration configuration) {
|
|
+ if (!configuration.contains(arg1)) {
|
|
+ configuration.set(arg1, new ArrayList<>(arg2));
|
|
+
|
|
+ return arg2;
|
|
+ } else {
|
|
+ return new HashSet<>(configuration.getStringList(arg1));
|
|
+ }
|
|
+ }
|
|
+}
|
|
diff --git a/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java b/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java
|
|
index ec07ae6fd..91da8ab65 100644
|
|
--- a/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java
|
|
+++ b/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java
|
|
@@ -1,5 +1,6 @@
|
|
package net.md_5.bungee.protocol;
|
|
|
|
+import dev._2lstudios.flamecord.FlameCord;
|
|
import io.netty.buffer.ByteBuf;
|
|
import io.netty.buffer.ByteBufUtil;
|
|
import io.netty.channel.ChannelHandlerContext;
|
|
diff --git a/proxy/src/main/java/dev/_2lstudios/flamecord/commands/FlameCordCommand.java b/proxy/src/main/java/dev/_2lstudios/flamecord/commands/FlameCordCommand.java
|
|
new file mode 100644
|
|
index 000000000..a323598eb
|
|
--- /dev/null
|
|
+++ b/proxy/src/main/java/dev/_2lstudios/flamecord/commands/FlameCordCommand.java
|
|
@@ -0,0 +1,58 @@
|
|
+package dev._2lstudios.flamecord.commands;
|
|
+
|
|
+import java.util.Collection;
|
|
+import java.util.HashSet;
|
|
+
|
|
+import dev._2lstudios.flamecord.FlameCord;
|
|
+import net.md_5.bungee.BungeeCord;
|
|
+import net.md_5.bungee.api.CommandSender;
|
|
+import net.md_5.bungee.api.chat.TextComponent;
|
|
+import net.md_5.bungee.api.config.ServerInfo;
|
|
+import net.md_5.bungee.api.plugin.Command;
|
|
+
|
|
+public class FlameCordCommand extends Command {
|
|
+private final BungeeCord bungeeCord;
|
|
+
|
|
+ public FlameCordCommand(final BungeeCord bungeeCord) {
|
|
+ super("flamecord");
|
|
+
|
|
+ this.bungeeCord = bungeeCord;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void execute(final CommandSender sender, final String[] args) {
|
|
+ final FlameCord flameCord = FlameCord.getInstance();
|
|
+
|
|
+ if (sender.hasPermission("flamecord.usage")) {
|
|
+ if (args.length > 0) {
|
|
+ final String arg0 = args[0];
|
|
+
|
|
+ switch (arg0) {
|
|
+ case "reload": {
|
|
+ // FlameCord - Collect ips from servers
|
|
+ final Collection<String> whitelistedAddresses = new HashSet<>();
|
|
+
|
|
+ for (final ServerInfo serverInfo : bungeeCord.getServers().values()) {
|
|
+ whitelistedAddresses.add(serverInfo.getSocketAddress().toString());
|
|
+ }
|
|
+
|
|
+ FlameCord.renew(bungeeCord.getLogger(), whitelistedAddresses);
|
|
+ sender.sendMessage(TextComponent
|
|
+ .fromLegacyText("flamecord_reload"));
|
|
+ break;
|
|
+ }
|
|
+ default: {
|
|
+ sender.sendMessage(TextComponent.fromLegacyText("flamecord_help"));
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+ } else {
|
|
+ sender.sendMessage(TextComponent
|
|
+ .fromLegacyText("flamecord_help"));
|
|
+ }
|
|
+ } else {
|
|
+ sender.sendMessage(TextComponent
|
|
+ .fromLegacyText("flamecord_nopermission"));
|
|
+ }
|
|
+ }
|
|
+}
|
|
diff --git a/proxy/src/main/java/net/md_5/bungee/BungeeCord.java b/proxy/src/main/java/net/md_5/bungee/BungeeCord.java
|
|
index b3f77bcab..2a702d141 100644
|
|
--- a/proxy/src/main/java/net/md_5/bungee/BungeeCord.java
|
|
+++ b/proxy/src/main/java/net/md_5/bungee/BungeeCord.java
|
|
@@ -9,6 +9,9 @@ import com.google.common.collect.Sets;
|
|
import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
|
import com.google.gson.Gson;
|
|
import com.google.gson.GsonBuilder;
|
|
+
|
|
+import dev._2lstudios.flamecord.FlameCord;
|
|
+import dev._2lstudios.flamecord.commands.FlameCordCommand;
|
|
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
|
import io.github.waterfallmc.waterfall.conf.WaterfallConfiguration;
|
|
import io.github.waterfallmc.waterfall.event.ProxyExceptionEvent;
|
|
@@ -86,6 +89,12 @@ import net.md_5.bungee.conf.Configuration;
|
|
import net.md_5.bungee.conf.YamlConfig;
|
|
import net.md_5.bungee.forge.ForgeConstants;
|
|
import net.md_5.bungee.module.ModuleManager;
|
|
+import net.md_5.bungee.module.cmd.alert.CommandAlert;
|
|
+import net.md_5.bungee.module.cmd.find.CommandFind;
|
|
+import net.md_5.bungee.module.cmd.list.CommandList;
|
|
+import net.md_5.bungee.module.cmd.send.CommandSend;
|
|
+import net.md_5.bungee.module.cmd.server.CommandServer;
|
|
+import net.md_5.bungee.module.reconnect.yaml.YamlReconnectHandler;
|
|
import net.md_5.bungee.netty.PipelineUtils;
|
|
import net.md_5.bungee.protocol.DefinedPacket;
|
|
import net.md_5.bungee.protocol.ProtocolConstants;
|
|
@@ -233,11 +242,12 @@ public class BungeeCord extends ProxyServer
|
|
// Waterfall end
|
|
|
|
pluginManager = new PluginManager( this );
|
|
- getPluginManager().registerCommand( null, new CommandReload() );
|
|
- getPluginManager().registerCommand( null, new CommandEnd() );
|
|
- getPluginManager().registerCommand( null, new CommandIP() );
|
|
- getPluginManager().registerCommand( null, new CommandBungee() );
|
|
- getPluginManager().registerCommand( null, new CommandPerms() );
|
|
+ // FlameCord - We register commands in our new method
|
|
+ //getPluginManager().registerCommand( null, new CommandReload() );
|
|
+ //getPluginManager().registerCommand( null, new CommandEnd() );
|
|
+ //getPluginManager().registerCommand( null, new CommandIP() );
|
|
+ //getPluginManager().registerCommand( null, new CommandBungee() );
|
|
+ //getPluginManager().registerCommand( null, new CommandPerms() );
|
|
|
|
if ( !Boolean.getBoolean( "net.md_5.bungee.native.disable" ) )
|
|
{
|
|
@@ -286,6 +296,15 @@ public class BungeeCord extends ProxyServer
|
|
pluginManager.loadPlugins();
|
|
config.load();
|
|
|
|
+ // FlameCord - Renew and register modules
|
|
+ final Collection<String> whitelistedAddresses = new HashSet<>();
|
|
+
|
|
+ for (final ServerInfo serverInfo : getServers().values()) {
|
|
+ whitelistedAddresses.add(serverInfo.getSocketAddress().toString());
|
|
+ }
|
|
+
|
|
+ FlameCord.renew(logger, whitelistedAddresses);
|
|
+
|
|
if ( config.isForgeSupport() )
|
|
{
|
|
registerChannel( ForgeConstants.FML_TAG );
|
|
@@ -577,9 +596,7 @@ public class BungeeCord extends ProxyServer
|
|
String translation = "<translation '" + name + "' missing>";
|
|
try
|
|
{
|
|
- final String string = customBundle != null && customBundle.containsKey( name ) ? customBundle.getString( name ) : baseBundle.getString( name );
|
|
-
|
|
- translation = ( args.length == 0 ) ? string : MessageFormat.format( string, args );
|
|
+ translation = MessageFormat.format( customBundle != null && customBundle.containsKey( name ) ? customBundle.getString( name ) : baseBundle.getString( name ), args );
|
|
} catch ( MissingResourceException ex )
|
|
{
|
|
}
|
|
diff --git a/proxy/src/main/java/net/md_5/bungee/ServerConnector.java b/proxy/src/main/java/net/md_5/bungee/ServerConnector.java
|
|
index b25cede0e..1e01dea51 100644
|
|
--- a/proxy/src/main/java/net/md_5/bungee/ServerConnector.java
|
|
+++ b/proxy/src/main/java/net/md_5/bungee/ServerConnector.java
|
|
@@ -1,6 +1,8 @@
|
|
package net.md_5.bungee;
|
|
|
|
import com.google.common.base.Preconditions;
|
|
+
|
|
+import dev._2lstudios.flamecord.FlameCord;
|
|
import io.netty.buffer.ByteBuf;
|
|
import io.netty.buffer.ByteBufAllocator;
|
|
import java.net.InetSocketAddress;
|
|
@@ -164,7 +166,7 @@ public class ServerConnector extends PacketHandler
|
|
{
|
|
if ( packet.packet == null )
|
|
{
|
|
- throw new QuietException( "Unexpected packet received during server login process!\n" + BufUtil.dump( packet.buf, 16 ) );
|
|
+ throw new QuietException( "Unexpected packet received during server connector process!\n" + BufUtil.dump(packet.buf, 16) );
|
|
}
|
|
}
|
|
|
|
diff --git a/proxy/src/main/java/net/md_5/bungee/UserConnection.java b/proxy/src/main/java/net/md_5/bungee/UserConnection.java
|
|
index 6232f1ec0..bd5ce6a2e 100644
|
|
--- a/proxy/src/main/java/net/md_5/bungee/UserConnection.java
|
|
+++ b/proxy/src/main/java/net/md_5/bungee/UserConnection.java
|
|
@@ -36,6 +36,7 @@ import net.md_5.bungee.api.SkinConfiguration;
|
|
import net.md_5.bungee.api.Title;
|
|
import net.md_5.bungee.api.chat.BaseComponent;
|
|
import net.md_5.bungee.api.chat.TextComponent;
|
|
+import net.md_5.bungee.api.config.ListenerInfo;
|
|
import net.md_5.bungee.api.config.ServerInfo;
|
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
|
import net.md_5.bungee.api.event.PermissionCheckEvent;
|
|
@@ -66,6 +67,7 @@ import net.md_5.bungee.tab.ServerUnique;
|
|
import net.md_5.bungee.tab.TabList;
|
|
import net.md_5.bungee.util.CaseInsensitiveSet;
|
|
import net.md_5.bungee.util.ChatComponentTransformer;
|
|
+import net.md_5.bungee.util.QuietException;
|
|
|
|
@RequiredArgsConstructor
|
|
public final class UserConnection implements ProxiedPlayer
|
|
@@ -391,9 +393,11 @@ public final class UserConnection implements ProxiedPlayer
|
|
.option( ChannelOption.CONNECT_TIMEOUT_MILLIS, request.getConnectTimeout() )
|
|
.remoteAddress( target.getAddress() );
|
|
// Windows is bugged, multi homed users will just have to live with random connecting IPs
|
|
- if ( getPendingConnection().getListener().isSetLocalAddress() && !PlatformDependent.isWindows() && getPendingConnection().getListener().getSocketAddress() instanceof InetSocketAddress )
|
|
+ // FlameCord - Use listenerInfo
|
|
+ final ListenerInfo listenerInfo = getPendingConnection().getListener();
|
|
+ if ( listenerInfo.isSetLocalAddress() && !PlatformDependent.isWindows() && listenerInfo.getSocketAddress() instanceof InetSocketAddress )
|
|
{
|
|
- b.localAddress( getPendingConnection().getListener().getHost().getHostString(), 0 );
|
|
+ b.localAddress( listenerInfo.getHost().getHostString(), 0 );
|
|
}
|
|
b.connect().addListener( listener );
|
|
}
|
|
diff --git a/proxy/src/main/java/net/md_5/bungee/connection/InitialHandler.java b/proxy/src/main/java/net/md_5/bungee/connection/InitialHandler.java
|
|
index 72e0098dc..447940111 100644
|
|
--- a/proxy/src/main/java/net/md_5/bungee/connection/InitialHandler.java
|
|
+++ b/proxy/src/main/java/net/md_5/bungee/connection/InitialHandler.java
|
|
@@ -17,6 +17,8 @@ import java.util.logging.Level;
|
|
import javax.crypto.SecretKey;
|
|
import javax.crypto.spec.SecretKeySpec;
|
|
|
|
+import dev._2lstudios.flamecord.FlameCord;
|
|
+
|
|
import lombok.Getter;
|
|
import lombok.RequiredArgsConstructor;
|
|
import net.md_5.bungee.BungeeCord;
|
|
@@ -154,7 +156,7 @@ public class InitialHandler extends PacketHandler implements PendingConnection
|
|
{
|
|
if ( packet.packet == null )
|
|
{
|
|
- throw new QuietException( "Unexpected packet received during login process! " + BufUtil.dump( packet.buf, 16 ) );
|
|
+ throw new QuietException( "Unexpected packet received during server login process!\n" + BufUtil.dump(packet.buf, 16) );
|
|
}
|
|
}
|
|
|
|
diff --git a/proxy/src/main/java/net/md_5/bungee/connection/PingHandler.java b/proxy/src/main/java/net/md_5/bungee/connection/PingHandler.java
|
|
index a409d440b..3503c089d 100644
|
|
--- a/proxy/src/main/java/net/md_5/bungee/connection/PingHandler.java
|
|
+++ b/proxy/src/main/java/net/md_5/bungee/connection/PingHandler.java
|
|
@@ -1,6 +1,7 @@
|
|
package net.md_5.bungee.connection;
|
|
|
|
import com.google.gson.Gson;
|
|
+
|
|
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
|
import lombok.RequiredArgsConstructor;
|
|
import net.md_5.bungee.BungeeCord;
|
|
diff --git a/proxy/src/main/java/net/md_5/bungee/netty/HandlerBoss.java b/proxy/src/main/java/net/md_5/bungee/netty/HandlerBoss.java
|
|
index c0e4791f9..285433467 100644
|
|
--- a/proxy/src/main/java/net/md_5/bungee/netty/HandlerBoss.java
|
|
+++ b/proxy/src/main/java/net/md_5/bungee/netty/HandlerBoss.java
|
|
@@ -1,6 +1,8 @@
|
|
package net.md_5.bungee.netty;
|
|
|
|
import com.google.common.base.Preconditions;
|
|
+
|
|
+import dev._2lstudios.flamecord.FlameCord;
|
|
import io.netty.channel.ChannelHandlerContext;
|
|
import io.netty.channel.ChannelInboundHandlerAdapter;
|
|
import io.netty.handler.codec.CorruptedFrameException;
|
|
diff --git a/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java b/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java
|
|
index 654203abb..a840bc700 100644
|
|
--- a/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java
|
|
+++ b/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java
|
|
@@ -1,6 +1,8 @@
|
|
package net.md_5.bungee.netty;
|
|
|
|
import com.google.common.base.Preconditions;
|
|
+
|
|
+import dev._2lstudios.flamecord.FlameCord;
|
|
import io.github.waterfallmc.waterfall.event.ConnectionInitEvent;
|
|
import io.netty.buffer.PooledByteBufAllocator;
|
|
import io.netty.channel.Channel;
|
|
--
|
|
2.32.0.windows.1
|
|
|