From 5046ddc5f3beae38db13afea9a8e5829d1648a11 Mon Sep 17 00:00:00 2001 From: EarthCow <56940983+EarthCow@users.noreply.github.com> Date: Sat, 30 May 2026 12:11:36 -0400 Subject: [PATCH 1/8] Velocity get CorePlayer directly & debug log identity check --- .../networkjoinmessages/velocity/VelocityMain.java | 2 +- .../velocity/listeners/PlayerListener.java | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/xyz/earthcow/networkjoinmessages/velocity/VelocityMain.java b/src/main/java/xyz/earthcow/networkjoinmessages/velocity/VelocityMain.java index 3ea6adb4..7cf69bc0 100644 --- a/src/main/java/xyz/earthcow/networkjoinmessages/velocity/VelocityMain.java +++ b/src/main/java/xyz/earthcow/networkjoinmessages/velocity/VelocityMain.java @@ -106,7 +106,7 @@ public void onProxyInitialization(ProxyInitializeEvent event) { velocityLogger.info("Successfully hooked into PremiumVanish!"); } - proxy.getEventManager().register(this, new PlayerListener(core.getCorePlayerListener())); + proxy.getEventManager().register(this, new PlayerListener(core.getCorePlayerListener(), velocityLogger)); registerCommands(); diff --git a/src/main/java/xyz/earthcow/networkjoinmessages/velocity/listeners/PlayerListener.java b/src/main/java/xyz/earthcow/networkjoinmessages/velocity/listeners/PlayerListener.java index 43ab428f..937fcc60 100644 --- a/src/main/java/xyz/earthcow/networkjoinmessages/velocity/listeners/PlayerListener.java +++ b/src/main/java/xyz/earthcow/networkjoinmessages/velocity/listeners/PlayerListener.java @@ -7,15 +7,18 @@ import xyz.earthcow.networkjoinmessages.common.abstraction.CorePlayer; import xyz.earthcow.networkjoinmessages.common.listeners.CorePlayerListener; import xyz.earthcow.networkjoinmessages.velocity.VelocityMain; +import xyz.earthcow.networkjoinmessages.velocity.abstraction.VelocityLogger; import xyz.earthcow.networkjoinmessages.velocity.abstraction.VelocityPlayer; import xyz.earthcow.networkjoinmessages.velocity.abstraction.VelocityServer; public class PlayerListener { private final CorePlayerListener corePlayerListener; + private final VelocityLogger logger; - public PlayerListener(CorePlayerListener corePlayerListener) { + public PlayerListener(CorePlayerListener corePlayerListener, VelocityLogger logger) { this.corePlayerListener = corePlayerListener; + this.logger = logger; } @Subscribe @@ -36,11 +39,12 @@ public void onServerConnected(ServerConnectedEvent event) { @Subscribe public void onDisconnect(DisconnectEvent event) { // Check that the player disconnected is not a duplicate user session (the same account tries to join the server while already joined) - CorePlayer corePlayer = VelocityMain.getInstance().getOrPutPlayer(new VelocityPlayer(event.getPlayer())); - if (corePlayer.getConnectionIdentity() != System.identityHashCode(event.getPlayer())) { + CorePlayer corePlayer = VelocityMain.getInstance().getPlayerManager().getPlayer(event.getPlayer().getUniqueId()); + if (corePlayer == null || corePlayer.getConnectionIdentity() != System.identityHashCode(event.getPlayer())) { + logger.debug("Ignoring disconnect event for " + (corePlayer == null ? "null" : corePlayer.getName()) + + " (" + event.getPlayer().getUsername() + ") - null or duplicate player identity"); return; } - corePlayerListener.onDisconnect(corePlayer); } } From 85513956aa2e20f02568f4afe11edc17d919abe2 Mon Sep 17 00:00:00 2001 From: EarthCow <56940983+EarthCow@users.noreply.github.com> Date: Sat, 30 May 2026 12:16:57 -0400 Subject: [PATCH 2/8] Bungee get CorePlayer directly & debug log identity check --- .../networkjoinmessages/bungee/BungeeMain.java | 2 +- .../bungee/listeners/PlayerListener.java | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/xyz/earthcow/networkjoinmessages/bungee/BungeeMain.java b/src/main/java/xyz/earthcow/networkjoinmessages/bungee/BungeeMain.java index 2398af88..bbd1391a 100644 --- a/src/main/java/xyz/earthcow/networkjoinmessages/bungee/BungeeMain.java +++ b/src/main/java/xyz/earthcow/networkjoinmessages/bungee/BungeeMain.java @@ -75,7 +75,7 @@ public void onEnable() { getProxy() .getPluginManager() - .registerListener(this, new PlayerListener(core.getCorePlayerListener())); + .registerListener(this, new PlayerListener(core.getCorePlayerListener(), bungeeLogger)); getProxy() .getPluginManager() diff --git a/src/main/java/xyz/earthcow/networkjoinmessages/bungee/listeners/PlayerListener.java b/src/main/java/xyz/earthcow/networkjoinmessages/bungee/listeners/PlayerListener.java index 2aca76fb..b9a49f67 100644 --- a/src/main/java/xyz/earthcow/networkjoinmessages/bungee/listeners/PlayerListener.java +++ b/src/main/java/xyz/earthcow/networkjoinmessages/bungee/listeners/PlayerListener.java @@ -8,6 +8,7 @@ import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.event.EventHandler; import xyz.earthcow.networkjoinmessages.bungee.BungeeMain; +import xyz.earthcow.networkjoinmessages.bungee.abstraction.BungeeLogger; import xyz.earthcow.networkjoinmessages.bungee.abstraction.BungeePlayer; import xyz.earthcow.networkjoinmessages.bungee.abstraction.BungeeServer; import xyz.earthcow.networkjoinmessages.common.abstraction.CorePlayer; @@ -16,9 +17,11 @@ public class PlayerListener implements Listener { private final CorePlayerListener corePlayerListener; + private final BungeeLogger logger; - public PlayerListener(CorePlayerListener corePlayerListener) { + public PlayerListener(CorePlayerListener corePlayerListener, BungeeLogger logger) { this.corePlayerListener = corePlayerListener; + this.logger = logger; } @EventHandler @@ -42,8 +45,10 @@ public void onServerConnected(ServerConnectedEvent e) { @EventHandler public void onDisconnect(PlayerDisconnectEvent event) { // Check that the player disconnected is not a duplicate user session (the same account tries to join the server while already joined) - CorePlayer corePlayer = BungeeMain.getInstance().getOrPutPlayer(new BungeePlayer(event.getPlayer())); - if (corePlayer.getConnectionIdentity() != System.identityHashCode(event.getPlayer())) { + CorePlayer corePlayer = BungeeMain.getInstance().getPlayerManager().getPlayer(event.getPlayer().getUniqueId()); + if (corePlayer == null || corePlayer.getConnectionIdentity() != System.identityHashCode(event.getPlayer())) { + logger.debug("Ignoring disconnect event for " + (corePlayer == null ? "null" : corePlayer.getName()) + + " (" + event.getPlayer().getName() + ") - null or duplicate player identity"); return; } From 790bfd8c94743e776fd2107dd908690405977ab8 Mon Sep 17 00:00:00 2001 From: EarthCow <56940983+EarthCow@users.noreply.github.com> Date: Sat, 30 May 2026 17:18:57 -0400 Subject: [PATCH 3/8] Remove unused CorePlugin#getCore --- .../xyz/earthcow/networkjoinmessages/bungee/BungeeMain.java | 5 ----- .../networkjoinmessages/common/abstraction/CorePlugin.java | 3 --- .../earthcow/networkjoinmessages/velocity/VelocityMain.java | 5 ----- 3 files changed, 13 deletions(-) diff --git a/src/main/java/xyz/earthcow/networkjoinmessages/bungee/BungeeMain.java b/src/main/java/xyz/earthcow/networkjoinmessages/bungee/BungeeMain.java index 2398af88..23ff41ef 100644 --- a/src/main/java/xyz/earthcow/networkjoinmessages/bungee/BungeeMain.java +++ b/src/main/java/xyz/earthcow/networkjoinmessages/bungee/BungeeMain.java @@ -124,11 +124,6 @@ public CoreCommandSender getConsole() { return console; } - @Override - public Core getCore() { - return core; - } - @Override public ServerType getServerType() { return ServerType.BUNGEE; diff --git a/src/main/java/xyz/earthcow/networkjoinmessages/common/abstraction/CorePlugin.java b/src/main/java/xyz/earthcow/networkjoinmessages/common/abstraction/CorePlugin.java index cafe8632..9345b748 100644 --- a/src/main/java/xyz/earthcow/networkjoinmessages/common/abstraction/CorePlugin.java +++ b/src/main/java/xyz/earthcow/networkjoinmessages/common/abstraction/CorePlugin.java @@ -1,6 +1,5 @@ package xyz.earthcow.networkjoinmessages.common.abstraction; -import xyz.earthcow.networkjoinmessages.common.Core; import xyz.earthcow.networkjoinmessages.common.modules.DiscordIntegration; import java.io.File; @@ -8,8 +7,6 @@ import java.util.UUID; public interface CorePlugin { - Core getCore(); - void disable(); ServerType getServerType(); diff --git a/src/main/java/xyz/earthcow/networkjoinmessages/velocity/VelocityMain.java b/src/main/java/xyz/earthcow/networkjoinmessages/velocity/VelocityMain.java index 3ea6adb4..f8f0cba3 100644 --- a/src/main/java/xyz/earthcow/networkjoinmessages/velocity/VelocityMain.java +++ b/src/main/java/xyz/earthcow/networkjoinmessages/velocity/VelocityMain.java @@ -266,11 +266,6 @@ public ServerType getServerType() { return ServerType.VELOCITY; } - @Override - public Core getCore() { - return core; - } - @Override public CoreCommandSender getConsole() { return console; From 8ab4be679748d045958917fdb87d743ac6bcb715 Mon Sep 17 00:00:00 2001 From: EarthCow <56940983+EarthCow@users.noreply.github.com> Date: Sat, 30 May 2026 17:19:57 -0400 Subject: [PATCH 4/8] Remove unused CorePlugin#getServerType & ServerType enum --- .../bungee/BungeeMain.java | 5 ----- .../common/abstraction/CorePlugin.java | 1 - .../common/abstraction/ServerType.java | 21 ------------------- .../velocity/VelocityMain.java | 5 ----- 4 files changed, 32 deletions(-) delete mode 100644 src/main/java/xyz/earthcow/networkjoinmessages/common/abstraction/ServerType.java diff --git a/src/main/java/xyz/earthcow/networkjoinmessages/bungee/BungeeMain.java b/src/main/java/xyz/earthcow/networkjoinmessages/bungee/BungeeMain.java index 23ff41ef..00bb550b 100644 --- a/src/main/java/xyz/earthcow/networkjoinmessages/bungee/BungeeMain.java +++ b/src/main/java/xyz/earthcow/networkjoinmessages/bungee/BungeeMain.java @@ -124,11 +124,6 @@ public CoreCommandSender getConsole() { return console; } - @Override - public ServerType getServerType() { - return ServerType.BUNGEE; - } - @Override public CoreLogger getCoreLogger() { return bungeeLogger; diff --git a/src/main/java/xyz/earthcow/networkjoinmessages/common/abstraction/CorePlugin.java b/src/main/java/xyz/earthcow/networkjoinmessages/common/abstraction/CorePlugin.java index 9345b748..da02d5df 100644 --- a/src/main/java/xyz/earthcow/networkjoinmessages/common/abstraction/CorePlugin.java +++ b/src/main/java/xyz/earthcow/networkjoinmessages/common/abstraction/CorePlugin.java @@ -9,7 +9,6 @@ public interface CorePlugin { void disable(); - ServerType getServerType(); File getDataFolder(); CoreLogger getCoreLogger(); diff --git a/src/main/java/xyz/earthcow/networkjoinmessages/common/abstraction/ServerType.java b/src/main/java/xyz/earthcow/networkjoinmessages/common/abstraction/ServerType.java deleted file mode 100644 index 686a96b1..00000000 --- a/src/main/java/xyz/earthcow/networkjoinmessages/common/abstraction/ServerType.java +++ /dev/null @@ -1,21 +0,0 @@ -package xyz.earthcow.networkjoinmessages.common.abstraction; - -public enum ServerType { - BUNGEE ("BungeeCord"), - VELOCITY("Velocity"); - - private final String displayName; - - ServerType() { - this(null); - } - - ServerType(String displayName) { - this.displayName = displayName; - } - - @Override - public String toString() { - return (displayName != null) ? displayName : super.toString(); - } -} \ No newline at end of file diff --git a/src/main/java/xyz/earthcow/networkjoinmessages/velocity/VelocityMain.java b/src/main/java/xyz/earthcow/networkjoinmessages/velocity/VelocityMain.java index f8f0cba3..68aa682a 100644 --- a/src/main/java/xyz/earthcow/networkjoinmessages/velocity/VelocityMain.java +++ b/src/main/java/xyz/earthcow/networkjoinmessages/velocity/VelocityMain.java @@ -261,11 +261,6 @@ public PremiumVanish getVanishAPI() { return premiumVanish; } - @Override - public ServerType getServerType() { - return ServerType.VELOCITY; - } - @Override public CoreCommandSender getConsole() { return console; From 52671d889c289ecf417516a1c94df58930caa3fb Mon Sep 17 00:00:00 2001 From: EarthCow <56940983+EarthCow@users.noreply.github.com> Date: Sat, 30 May 2026 20:14:39 -0400 Subject: [PATCH 5/8] Add publish to Modrinth workflow --- .github/workflows/publish-modrinth.yml | 35 ++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .github/workflows/publish-modrinth.yml diff --git a/.github/workflows/publish-modrinth.yml b/.github/workflows/publish-modrinth.yml new file mode 100644 index 00000000..0ebf124d --- /dev/null +++ b/.github/workflows/publish-modrinth.yml @@ -0,0 +1,35 @@ +name: Publish to Modrinth + +on: + release: + types: [published] + +jobs: + publish: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + java-version: '21' + distribution: 'temurin' + + - name: Build with Gradle + run: ./gradlew build + + - name: Publish to Modrinth + uses: cloudnode-pro/modrinth-publish@v2 + with: + token: ${{ secrets.MODRINTH_TOKEN }} + project: ${{ secrets.MODRINTH_PROJECT_ID }} + version: ${{ github.event.release.tag_name }} + changelog: ${{ github.event.release.body }} + loaders: |- + velocity + bungeecord + game-versions: ">=1.8" + files: build/libs/*.jar \ No newline at end of file From d95bd5099fad554a652500bfc6adf7595c1ffee1 Mon Sep 17 00:00:00 2001 From: EarthCow <56940983+EarthCow@users.noreply.github.com> Date: Sat, 30 May 2026 20:28:46 -0400 Subject: [PATCH 6/8] Disallow persist-credentials on checkout --- .github/workflows/publish-modrinth.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/publish-modrinth.yml b/.github/workflows/publish-modrinth.yml index 0ebf124d..f2bd9926 100644 --- a/.github/workflows/publish-modrinth.yml +++ b/.github/workflows/publish-modrinth.yml @@ -11,6 +11,8 @@ jobs: steps: - uses: actions/checkout@v4 + with: + persist-credentials: false - name: Set up JDK 21 uses: actions/setup-java@v4 From 27be75d2066d359182d56a11067856f37dca59e1 Mon Sep 17 00:00:00 2001 From: EarthCow <56940983+EarthCow@users.noreply.github.com> Date: Sat, 30 May 2026 20:29:28 -0400 Subject: [PATCH 7/8] Use vars instead of secrets for MODRINTH_PROJECT_ID --- .github/workflows/publish-modrinth.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish-modrinth.yml b/.github/workflows/publish-modrinth.yml index f2bd9926..c5a4e577 100644 --- a/.github/workflows/publish-modrinth.yml +++ b/.github/workflows/publish-modrinth.yml @@ -27,7 +27,7 @@ jobs: uses: cloudnode-pro/modrinth-publish@v2 with: token: ${{ secrets.MODRINTH_TOKEN }} - project: ${{ secrets.MODRINTH_PROJECT_ID }} + project: ${{ vars.MODRINTH_PROJECT_ID }} version: ${{ github.event.release.tag_name }} changelog: ${{ github.event.release.body }} loaders: |- From 5fc126a412be23d1ff6543967039596f4c5d0dab Mon Sep 17 00:00:00 2001 From: EarthCow <56940983+EarthCow@users.noreply.github.com> Date: Sat, 30 May 2026 20:35:11 -0400 Subject: [PATCH 8/8] Set read only permissions --- .github/workflows/publish-modrinth.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/publish-modrinth.yml b/.github/workflows/publish-modrinth.yml index c5a4e577..559ecf4b 100644 --- a/.github/workflows/publish-modrinth.yml +++ b/.github/workflows/publish-modrinth.yml @@ -4,6 +4,9 @@ on: release: types: [published] +permissions: + contents: read + jobs: publish: