384 lines
16 KiB
Diff
384 lines
16 KiB
Diff
|
From d22662f6826b0cced8e7cd3c4052fb87b502d0d7 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 00000000..8e69160d
|
||
|
--- /dev/null
|
||
|
+++ b/flamecord/src/main/java/dev/_2lstudios/flamecord/FlameCord.java
|
||
|
@@ -0,0 +1,35 @@
|
||
|
+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;
|
||
|
+
|
||
|
+ public static void reload(final Logger logger, final Collection<String> whitelistedAddresses) {
|
||
|
+ if (FlameCord.instance != null) {
|
||
|
+ instance.reload(logger);
|
||
|
+ } else {
|
||
|
+ FlameCord.instance = new FlameCord(logger, whitelistedAddresses);
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ @Getter
|
||
|
+ private FlameCordConfiguration flameCordConfiguration;
|
||
|
+
|
||
|
+ private void reload(final Logger logger) {
|
||
|
+ final ConfigurationProvider configurationProvider = ConfigurationProvider.getProvider(YamlConfiguration.class);
|
||
|
+
|
||
|
+ this.flameCordConfiguration = new FlameCordConfiguration(configurationProvider);
|
||
|
+ }
|
||
|
+
|
||
|
+ private FlameCord(final Logger logger, final Collection<String> whitelistedAddresses) {
|
||
|
+ reload(logger);
|
||
|
+ }
|
||
|
+}
|
||
|
\ No newline at end of file
|
||
|
diff --git a/flamecord/src/main/java/dev/_2lstudios/flamecord/configuration/FlameConfig.java b/flamecord/src/main/java/dev/_2lstudios/flamecord/configuration/FlameConfig.java
|
||
|
new file mode 100644
|
||
|
index 00000000..cfbd55c3
|
||
|
--- /dev/null
|
||
|
+++ b/flamecord/src/main/java/dev/_2lstudios/flamecord/configuration/FlameConfig.java
|
||
|
@@ -0,0 +1,38 @@
|
||
|
+package dev._2lstudios.flamecord.configuration;
|
||
|
+
|
||
|
+import java.util.ArrayList;
|
||
|
+import java.util.Collection;
|
||
|
+import java.util.HashSet;
|
||
|
+
|
||
|
+import net.md_5.bungee.config.Configuration;
|
||
|
+
|
||
|
+public class FlameConfig {
|
||
|
+ int setIfUnexistant(final String arg1, final int arg2, final Configuration configuration) {
|
||
|
+ return (int) setIfUnexistant(arg1, (Object) arg2, configuration);
|
||
|
+ }
|
||
|
+
|
||
|
+ boolean setIfUnexistant(final String arg1, final boolean arg2, final Configuration configuration) {
|
||
|
+ return (boolean) setIfUnexistant(arg1, (Object) arg2, configuration);
|
||
|
+ }
|
||
|
+
|
||
|
+ 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);
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ 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/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 00000000..c8148e90
|
||
|
--- /dev/null
|
||
|
+++ b/flamecord/src/main/java/dev/_2lstudios/flamecord/configuration/FlameCordConfiguration.java
|
||
|
@@ -0,0 +1,33 @@
|
||
|
+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 extends FlameConfig {
|
||
|
+ 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);
|
||
|
+ }
|
||
|
+
|
||
|
+ configurationProvider.save(configuration, configurationFile);
|
||
|
+ } catch (final IOException e) {
|
||
|
+ e.printStackTrace();
|
||
|
+ }
|
||
|
+ }
|
||
|
+}
|
||
|
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 4b9b80b9..aa35f870 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 00000000..91d60bfb
|
||
|
--- /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.reload(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 0de754d5..a09d6baf 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,8 @@ 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 edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
||
|
import io.github.waterfallmc.waterfall.conf.WaterfallConfiguration;
|
||
|
import io.github.waterfallmc.waterfall.event.ProxyExceptionEvent;
|
||
|
@@ -233,11 +235,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 +289,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.reload(logger, whitelistedAddresses);
|
||
|
+
|
||
|
if ( config.isForgeSupport() )
|
||
|
{
|
||
|
registerChannel( ForgeConstants.FML_TAG );
|
||
|
@@ -577,9 +589,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 2ee16684..3a41769a 100644
|
||
|
--- a/proxy/src/main/java/net/md_5/bungee/ServerConnector.java
|
||
|
+++ b/proxy/src/main/java/net/md_5/bungee/ServerConnector.java
|
||
|
@@ -2,6 +2,8 @@ package net.md_5.bungee;
|
||
|
|
||
|
import com.google.common.base.Joiner;
|
||
|
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;
|
||
|
@@ -165,7 +167,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 935d2e30..e8eb555c 100644
|
||
|
--- a/proxy/src/main/java/net/md_5/bungee/UserConnection.java
|
||
|
+++ b/proxy/src/main/java/net/md_5/bungee/UserConnection.java
|
||
|
@@ -35,6 +35,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;
|
||
|
@@ -65,6 +66,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 0b5faf6b..39c54cf1 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
|
||
|
@@ -19,6 +19,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;
|
||
|
@@ -157,7 +159,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 a409d440..3503c089 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 33605007..89a6d14a 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 654203ab..a840bc70 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
|
||
|
|