From 8624e3cef9b74816038c430ed1d5b363e6d7ff85 Mon Sep 17 00:00:00 2001 From: Nathan Martin Date: Fri, 30 Aug 2024 18:43:34 -0400 Subject: [PATCH 1/5] Fix Discord Webhooks duplicate messages on reload. --- .../plugin/velocity/lib/config/configs/WebhooksConfig.java | 2 ++ .../plugin/velocity/lib/webhook/WebhookEventManager.java | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/config/configs/WebhooksConfig.java b/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/config/configs/WebhooksConfig.java index 63c9aa2b5..91019c6cd 100644 --- a/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/config/configs/WebhooksConfig.java +++ b/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/config/configs/WebhooksConfig.java @@ -36,6 +36,8 @@ protected void register() throws IllegalStateException { Tinder api = Tinder.get(); PluginLogger logger = api.logger(); + WebhookEventManager.clear(); + Boolean enabled = IYAML.getValue(this.data, "enabled", Boolean.class); if(!enabled) return; diff --git a/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/webhook/WebhookEventManager.java b/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/webhook/WebhookEventManager.java index 98be94835..acdc2fa91 100644 --- a/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/webhook/WebhookEventManager.java +++ b/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/webhook/WebhookEventManager.java @@ -12,6 +12,11 @@ public class WebhookEventManager { private static Map> proxyListeners = new HashMap<>(); private static Map>> familyListeners = new HashMap<>(); + public static void clear() { + proxyListeners.clear(); + familyListeners.clear(); + } + /** * Registers a webhook to the proxy. * @param webhook The webhook to register. From 82004c36c52fb5ecf7f5719a2d05eda4bed78f49 Mon Sep 17 00:00:00 2001 From: Nathan Martin Date: Sat, 31 Aug 2024 09:25:16 -0400 Subject: [PATCH 2/5] Add some debug logging --- .../plugin/velocity/lib/server/MCLoader.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/server/MCLoader.java b/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/server/MCLoader.java index 18e7882bf..c4fa74b36 100644 --- a/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/server/MCLoader.java +++ b/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/server/MCLoader.java @@ -284,8 +284,12 @@ private PlayerConnectable.Request internalConnect(IPlayer player) { this.playerCount.incrementAndGet(); result.complete(ConnectionResult.success(Component.text("You successfully connected to the server!"), this)); return request; - } catch (Exception ignore) {} - } catch (Exception ignore) {} + } catch (Exception e) { + e.printStackTrace(); + } + } catch (Exception e) { + e.printStackTrace(); + } result.complete(ConnectionResult.failed(Component.text("Unable to connect you to the server!"))); return request; From 8657b2cad34b31a2030186aa0b3baa502c5e2057 Mon Sep 17 00:00:00 2001 From: Nathan Martin Date: Mon, 2 Sep 2024 16:56:24 -0400 Subject: [PATCH 3/5] Improve persistent conneciton handling in scalar families --- .../lib/family/scalar_family/ScalarFamily.java | 8 +++++++- .../plugin/velocity/lib/server/MCLoader.java | 11 +++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/family/scalar_family/ScalarFamily.java b/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/family/scalar_family/ScalarFamily.java index f0ee8aeb8..b6e5060f8 100644 --- a/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/family/scalar_family/ScalarFamily.java +++ b/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/family/scalar_family/ScalarFamily.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.Optional; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; import static group.aelysium.rustyconnector.toolkit.velocity.family.Metadata.SCALAR_FAMILY_META; import static group.aelysium.rustyconnector.toolkit.velocity.util.DependencyInjector.inject; @@ -134,7 +135,12 @@ public Request connect(IPlayer player) { return request; } - serverResponse = Optional.of(server.connect(player)); + Request r = server.connect(player); + serverResponse = Optional.of(r); + try { + if (r.result().get(10, TimeUnit.SECONDS).connected()) break; + } catch (Exception ignore) {} + this.loadBalancer.forceIterate(); } diff --git a/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/server/MCLoader.java b/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/server/MCLoader.java index c4fa74b36..459265bf7 100644 --- a/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/server/MCLoader.java +++ b/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/server/MCLoader.java @@ -33,6 +33,7 @@ import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicInteger; public class MCLoader implements IMCLoader { @@ -277,13 +278,19 @@ private PlayerConnectable.Request internalConnect(IPlayer player) { ConnectionRequestBuilder connection = player.resolve().orElseThrow().createConnectionRequest(this.registeredServer()); try { - ConnectionRequestBuilder.Result connectionResult = connection.connect().orTimeout(5, TimeUnit.SECONDS).get(); + ConnectionRequestBuilder.Result connectionResult = connection.connect().get(5, TimeUnit.SECONDS); - if (!connectionResult.isSuccessful()) throw new NoOutputException(); + if (!connectionResult.isSuccessful()) { + result.complete(ConnectionResult.failed(connectionResult.getReasonComponent().orElse(Component.text("An internal error occurred while establishing this connection!")))); + return request; + } this.playerCount.incrementAndGet(); result.complete(ConnectionResult.success(Component.text("You successfully connected to the server!"), this)); return request; + } catch (TimeoutException e) { + result.complete(ConnectionResult.failed(Component.text("The connection timed out."))); + return request; } catch (Exception e) { e.printStackTrace(); } From 10602fd8df09c9e25fb046e3773af33bd9b2152b Mon Sep 17 00:00:00 2001 From: Nathan Martin Date: Mon, 7 Oct 2024 16:57:43 -0400 Subject: [PATCH 4/5] Potential whitelist config fix --- plugin/gradle.properties | 2 +- .../velocity/config/WhitelistConfig.java | 5 +++- .../lib/config/configs/WhitelistConfig.java | 26 ++++++++++++++++--- .../velocity/lib/whitelist/Whitelist.java | 17 ++++-------- .../lib/whitelist/WhitelistPlayerFilter.java | 2 +- 5 files changed, 33 insertions(+), 19 deletions(-) diff --git a/plugin/gradle.properties b/plugin/gradle.properties index 1607f37c9..425bd5b19 100644 --- a/plugin/gradle.properties +++ b/plugin/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs = -Xmx4G java_version = 17 # Plugin Properties -plugin_version = 0.8.1 +plugin_version = 0.8.2 maven_group = group.aelysium.rustyconnector archives_base_name = rustyconnector config_version = 6 diff --git a/plugin/toolkit/src/main/java/group/aelysium/rustyconnector/toolkit/velocity/config/WhitelistConfig.java b/plugin/toolkit/src/main/java/group/aelysium/rustyconnector/toolkit/velocity/config/WhitelistConfig.java index 66597f7f9..06b6d1242 100644 --- a/plugin/toolkit/src/main/java/group/aelysium/rustyconnector/toolkit/velocity/config/WhitelistConfig.java +++ b/plugin/toolkit/src/main/java/group/aelysium/rustyconnector/toolkit/velocity/config/WhitelistConfig.java @@ -1,10 +1,13 @@ package group.aelysium.rustyconnector.toolkit.velocity.config; +import group.aelysium.rustyconnector.toolkit.velocity.whitelist.IWhitelist; +import group.aelysium.rustyconnector.toolkit.velocity.whitelist.IWhitelistPlayerFilter; + import java.util.List; public interface WhitelistConfig { boolean getUse_players(); - List getPlayers(); + List getPlayers(); boolean getUse_permission(); boolean getUse_country(); List getCountries(); diff --git a/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/config/configs/WhitelistConfig.java b/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/config/configs/WhitelistConfig.java index d895e60ff..bfd70e5b4 100644 --- a/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/config/configs/WhitelistConfig.java +++ b/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/config/configs/WhitelistConfig.java @@ -6,18 +6,22 @@ import group.aelysium.rustyconnector.plugin.velocity.central.Tinder; import group.aelysium.rustyconnector.plugin.velocity.lib.config.ConfigService; import group.aelysium.rustyconnector.plugin.velocity.lib.lang.ProxyLang; +import group.aelysium.rustyconnector.plugin.velocity.lib.whitelist.WhitelistPlayerFilter; import group.aelysium.rustyconnector.toolkit.core.config.IConfigService; import group.aelysium.rustyconnector.toolkit.core.config.IYAML; import group.aelysium.rustyconnector.toolkit.core.lang.LangFileMappings; +import group.aelysium.rustyconnector.toolkit.velocity.whitelist.IWhitelistPlayerFilter; import net.kyori.adventure.text.format.NamedTextColor; +import org.spongepowered.configurate.serialize.SerializationException; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; +import java.util.UUID; public class WhitelistConfig extends YAML implements group.aelysium.rustyconnector.toolkit.velocity.config.WhitelistConfig { private boolean use_players = false; - private List players = new ArrayList<>(); + private final List players = new ArrayList<>(); private boolean use_permission = false; @@ -31,7 +35,7 @@ public boolean getUse_players() { return use_players; } - public List getPlayers() { + public List getPlayers() { return players; } @@ -71,9 +75,23 @@ protected void register() throws IllegalStateException { PluginLogger logger = Tinder.get().logger(); this.use_players = IYAML.getValue(this.data,"use-players",Boolean.class); + try { - this.players = (IYAML.getValue(this.data,"players",List.class)); - } catch (ClassCastException e) { + IYAML.get(this.data,"players").childrenList().forEach(e -> { + try { + String username = e.node("username").get(String.class); + String uuid = e.node("uuid").get(String.class); + String ip = e.node("ip").get(String.class); + new WhitelistPlayerFilter( + username, + uuid == null ? null : UUID.fromString(uuid), + ip + ); + } catch (SerializationException ex) { + throw new RuntimeException(ex); + } + }); + } catch (Exception e) { throw new IllegalStateException("The node [players] in "+this.name()+" is invalid! Make sure you are using the correct type of data!"); } diff --git a/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/whitelist/Whitelist.java b/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/whitelist/Whitelist.java index 270d92b2e..363a1736a 100644 --- a/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/whitelist/Whitelist.java +++ b/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/whitelist/Whitelist.java @@ -10,6 +10,7 @@ import group.aelysium.rustyconnector.plugin.velocity.central.Tinder; import group.aelysium.rustyconnector.plugin.velocity.lib.config.configs.WhitelistConfig; import group.aelysium.rustyconnector.plugin.velocity.lib.Permission; +import group.aelysium.rustyconnector.toolkit.velocity.whitelist.IWhitelistPlayerFilter; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; @@ -20,7 +21,7 @@ public class Whitelist implements IWhitelist { private final String message; private final String name; private final String permission; - private final List playerFilters = new ArrayList<>(); + private final List playerFilters = new ArrayList<>(); private final boolean usePlayers; private final boolean usePermission; @@ -53,7 +54,7 @@ public boolean inverted() { return this.inverted; } - public List playerFilters() { + public List playerFilters() { return this.playerFilters; } @@ -125,16 +126,8 @@ public static Reference init(DependencyInjector.DI4, LangService whitelistConfig.isStrict(), whitelistConfig.isInverted() ); - if(whitelistConfig.getUse_players()) { - List players = whitelistConfig.getPlayers(); - Gson gson = new Gson(); - players.forEach(entry -> { - String json = gson.toJson(entry); - WhitelistPlayerFilter player = gson.fromJson(json, WhitelistPlayerFilter.class); - - whitelist.playerFilters().add(player); - }); - } + if(whitelistConfig.getUse_players()) + whitelist.playerFilters.addAll(whitelistConfig.getPlayers()); bootOutput.add(Component.text(" | Registered whitelist: "+whitelistName, NamedTextColor.YELLOW)); diff --git a/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/whitelist/WhitelistPlayerFilter.java b/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/whitelist/WhitelistPlayerFilter.java index edf5d414a..2f323c2f9 100644 --- a/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/whitelist/WhitelistPlayerFilter.java +++ b/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/whitelist/WhitelistPlayerFilter.java @@ -30,7 +30,7 @@ public WhitelistPlayerFilter(String username, UUID uuid, String ip) { } public static boolean validate(Whitelist whitelist, IPlayer playerToValidate) { - WhitelistPlayerFilter player = whitelist.playerFilters().stream() + IWhitelistPlayerFilter player = whitelist.playerFilters().stream() .filter(whitelistPlayerFilter -> whitelistPlayerFilter.username().equals(playerToValidate.username())) .findAny().orElse(null); if(player == null) return false; From ba346cd82247c0292616bf6a4648624c7e9e3b26 Mon Sep 17 00:00:00 2001 From: Nathan Martin Date: Mon, 7 Oct 2024 17:12:02 -0400 Subject: [PATCH 5/5] Fix whitelists not loading --- .../velocity/config/WhitelistConfig.java | 3 --- .../lib/config/configs/WhitelistConfig.java | 17 ----------------- 2 files changed, 20 deletions(-) diff --git a/plugin/toolkit/src/main/java/group/aelysium/rustyconnector/toolkit/velocity/config/WhitelistConfig.java b/plugin/toolkit/src/main/java/group/aelysium/rustyconnector/toolkit/velocity/config/WhitelistConfig.java index 06b6d1242..911ab0ea1 100644 --- a/plugin/toolkit/src/main/java/group/aelysium/rustyconnector/toolkit/velocity/config/WhitelistConfig.java +++ b/plugin/toolkit/src/main/java/group/aelysium/rustyconnector/toolkit/velocity/config/WhitelistConfig.java @@ -1,6 +1,5 @@ package group.aelysium.rustyconnector.toolkit.velocity.config; -import group.aelysium.rustyconnector.toolkit.velocity.whitelist.IWhitelist; import group.aelysium.rustyconnector.toolkit.velocity.whitelist.IWhitelistPlayerFilter; import java.util.List; @@ -9,8 +8,6 @@ public interface WhitelistConfig { boolean getUse_players(); List getPlayers(); boolean getUse_permission(); - boolean getUse_country(); - List getCountries(); String getMessage(); boolean isStrict(); boolean isInverted(); diff --git a/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/config/configs/WhitelistConfig.java b/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/config/configs/WhitelistConfig.java index bfd70e5b4..b67c11b19 100644 --- a/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/config/configs/WhitelistConfig.java +++ b/plugin/velocity/src/main/java/group/aelysium/rustyconnector/plugin/velocity/lib/config/configs/WhitelistConfig.java @@ -24,9 +24,6 @@ public class WhitelistConfig extends YAML implements group.aelysium.rustyconnect private final List players = new ArrayList<>(); private boolean use_permission = false; - - private boolean use_country = false; - private List countries = new ArrayList<>(); private String message = "You aren't whitelisted on this server!"; private boolean strict = false; private boolean inverted = false; @@ -43,14 +40,6 @@ public boolean getUse_permission() { return use_permission; } - public boolean getUse_country() { - return use_country; - } - - public List getCountries() { - return countries; - } - public String getMessage() { return message; } @@ -97,12 +86,6 @@ protected void register() throws IllegalStateException { this.use_permission = IYAML.getValue(this.data,"use-permission",Boolean.class); - this.use_country = IYAML.getValue(this.data,"use-country",Boolean.class); - if(this.use_country) - ProxyLang.BOXED_MESSAGE_COLORED.send(logger, "RustyConnector does not currently support country codes in whitelists. Setting `use-country` to false.", NamedTextColor.YELLOW); - this.use_country = false; - this.countries = new ArrayList<>(); - this.message = IYAML.getValue(data,"message",String.class); if(this.message.equalsIgnoreCase("")) throw new IllegalStateException("Whitelist kick messages cannot be empty!");