diff --git a/VelocityCore/src/de/steamwar/messages/BungeeCore.properties b/VelocityCore/src/de/steamwar/messages/BungeeCore.properties index 6b92436c..5bb5238b 100644 --- a/VelocityCore/src/de/steamwar/messages/BungeeCore.properties +++ b/VelocityCore/src/de/steamwar/messages/BungeeCore.properties @@ -130,7 +130,6 @@ USAGE_ALERT=§8/§7alert §8[§emessage§8] USAGE_IGNORE=§8/§7ignore §8[§eplayer§8] #ModListener -CLIENT_DISALLOWED=Attempted use of client {0} MOD_RED_SING=Attempted use of mod {0} MOD_RED_PLUR=Attempted use of mods:\n{0} MOD_YELLOW_SING=§7Deactivate the mod §e{0}§7 to continue playing on §eSteam§8War§7. diff --git a/VelocityCore/src/de/steamwar/messages/BungeeCore_de.properties b/VelocityCore/src/de/steamwar/messages/BungeeCore_de.properties index fb4067c8..edc46c77 100644 --- a/VelocityCore/src/de/steamwar/messages/BungeeCore_de.properties +++ b/VelocityCore/src/de/steamwar/messages/BungeeCore_de.properties @@ -115,7 +115,6 @@ USAGE_ALERT=§8/§7alert §8[§eNachricht§8] USAGE_IGNORE=§8/§7ignore §8[§eSpieler§8] #ModListener -CLIENT_DISALLOWED=Versuchte Benutzung des Clients {0} MOD_RED_SING=Versuchte Benutzung des Mods {0} MOD_RED_PLUR=Versuchte Benutzung der Mods:\n{0} MOD_YELLOW_SING=§7Deaktiviere den Mod §e{0}§7, um weiter auf §eSteam§8War §7spielen zu können. diff --git a/VelocityCore/src/de/steamwar/velocitycore/listeners/PluginMessage.java b/VelocityCore/src/de/steamwar/velocitycore/listeners/PluginMessage.java index cdb36137..bd67e805 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/listeners/PluginMessage.java +++ b/VelocityCore/src/de/steamwar/velocitycore/listeners/PluginMessage.java @@ -22,9 +22,12 @@ package de.steamwar.velocitycore.listeners; import com.lunarclient.apollo.ApolloManager; import com.velocitypowered.api.event.Subscribe; import com.velocitypowered.api.event.connection.PluginMessageEvent; +import com.velocitypowered.api.event.player.PlayerChannelRegisterEvent; +import com.velocitypowered.api.event.player.PlayerClientBrandEvent; import com.velocitypowered.api.network.ProtocolVersion; import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.ServerConnection; +import com.velocitypowered.api.proxy.messages.ChannelIdentifier; import com.velocitypowered.api.proxy.messages.ChannelMessageSource; import com.velocitypowered.api.proxy.messages.LegacyChannelIdentifier; import com.velocitypowered.api.proxy.messages.MinecraftChannelIdentifier; @@ -373,11 +376,11 @@ public class PluginMessage extends BasicListener { )) register(channel, false, directional(UNKNOWN, DROP)); - register("REGISTER", false, directional(this::serverRegistersChannel, this::clientRegistersChannel)); - register("minecraft:register", false, directional(this::serverRegistersChannel, this::clientRegistersChannel)); + register("REGISTER", false, directional(this::serverRegistersChannel, UNKNOWN)); + register("minecraft:register", false, directional(this::serverRegistersChannel, UNKNOWN)); - register("MC|Brand", false, directional(this::steamWarBrand, this::userBrand)); - register("minecraft:brand", false, directional(this::steamWarBrand, this::userBrand)); + register("MC|Brand", false, directional(this::steamWarBrand, UNKNOWN)); + register("minecraft:brand", false, directional(this::steamWarBrand, UNKNOWN)); //Needs to be registered cause paper refuses to send PluginMessages on unregistered channels... register("sw:bridge", true, directional(onlySWSource(async(event -> NetworkPacket.handle(new ServerMetaInfo((ServerConnection) event.getSource()), event.getData()))), UNKNOWN)); @@ -401,6 +404,15 @@ public class PluginMessage extends BasicListener { // Hackclientlike modsuppressor for labymod: https://github.com/Neocraftr/LabyMod-NeoEssentials (Potentially recognizable from NO Addons/NO Mods?) https://github.com/Neocraftr/LabyMod-NeoEssentials/blob/master/src/main/java/de/neocraftr/neoessentials/utils/BytecodeMethods.java } + @Subscribe + public void onClientChannelRegister(PlayerChannelRegisterEvent event) { + Player player = event.getPlayer(); + + for(ChannelIdentifier channel : event.getChannels()) { + channelRegisterHandlers.getOrDefault(channel.getId(), p -> VelocityCore.getLogger().log(Level.WARNING, () -> p.getUsername() + " registered unknown channel " + channel)).accept(player); + } + } + @Subscribe public void onPluginMessage(PluginMessageEvent event) { event.setResult(PluginMessageEvent.ForwardResult.handled()); @@ -412,6 +424,20 @@ public class PluginMessage extends BasicListener { } } + @Subscribe + public void onClientBrand(PlayerClientBrandEvent event) { + Player player = event.getPlayer(); + + String brand = event.getBrand(); + boolean lunarclient = brand.startsWith("lunarclient:"); + + VelocityCore.getLogger().log(knownBrands.contains(brand) || lunarclient ? Level.INFO : Level.WARNING, () -> player.getUsername() + " joins with brand: " + brand); + if(lunarclient) + lunar.sendRestrictions(player); + if(brand.equals("badlion")) + badlion.sendRestrictions(player); + } + private void registerPassthroughToClient(String... channels) { for(String channel : channels) { channelRegisterHandlers.put(channel, player -> {}); @@ -437,16 +463,6 @@ public class PluginMessage extends BasicListener { VelocityCore.getProxy().getChannelRegistrar().register(channel.indexOf(':') != -1 ? MinecraftChannelIdentifier.from(channel) : new LegacyChannelIdentifier(channel)); } - private void clientRegistersChannel(PluginMessageEvent event) { - Player player = (Player) event.getSource(); - - for(String channel : new String(event.getData()).split("\0")) { - channelRegisterHandlers.getOrDefault(channel, p -> VelocityCore.getLogger().log(Level.WARNING, () -> p.getUsername() + " registered unknown channel " + channel)).accept(player); - } - - PASS_THROUGH.handle(event); - } - private void serverRegistersChannel(PluginMessageEvent event) { Player player = (Player) event.getTarget(); @@ -455,22 +471,6 @@ public class PluginMessage extends BasicListener { send(player, "REGISTER", "minecraft:register", String.join("\0", channels).getBytes()); } - private void userBrand(PluginMessageEvent event) { - Player player = (Player) event.getSource(); - - ByteBuf buf = Unpooled.wrappedBuffer(event.getData()); - String brand = ProtocolUtils.readString(buf); - boolean lunarclient = brand.startsWith("lunarclient:"); - - VelocityCore.getLogger().log(knownBrands.contains(brand) || lunarclient ? Level.INFO : Level.WARNING, () -> player.getUsername() + " joins with brand: " + brand); - if(lunarclient) - lunar.sendRestrictions(player); - if(brand.equals("badlion")) - badlion.sendRestrictions(player); - - PASS_THROUGH.handle(event); - } - private void steamWarBrand(PluginMessageEvent event) { Player player = (Player) event.getTarget(); String brand = Chatter.of(player).parseToLegacy("STEAMWAR_BRAND", "Velocity", player.getCurrentServer().map(serverConnection -> serverConnection.getServerInfo().getName()).orElse(""), new String(event.getData(), 1, event.getData().length - 1)); diff --git a/VelocityCore/src/de/steamwar/velocitycore/mods/Badlion.java b/VelocityCore/src/de/steamwar/velocitycore/mods/Badlion.java index fa48ba7d..57cc3986 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/mods/Badlion.java +++ b/VelocityCore/src/de/steamwar/velocitycore/mods/Badlion.java @@ -22,7 +22,6 @@ package de.steamwar.velocitycore.mods; import com.google.gson.JsonObject; import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.messages.MinecraftChannelIdentifier; -import de.steamwar.messages.Chatter; public class Badlion { // https://github.com/BadlionClient/BadlionClientModAPI @@ -47,17 +46,10 @@ public class Badlion { modsDisallowed.add("ToggleSprint", disabled); modsDisallowed.add("TNT Time", disabled); - JsonObject json = new JsonObject(); - json.add("modsDisallowed", modsDisallowed); - - packet = json.toString().getBytes(); + packet = modsDisallowed.toString().getBytes(); } public void sendRestrictions(Player player) { - // TODO: Remove when Badlion is fixed, or we fixed the Badlion packet - Chatter sender = Chatter.of(player); - player.disconnect(sender.parse("CLIENT_DISALLOWED", "Badlion")); - player.sendPluginMessage(MinecraftChannelIdentifier.from("badlion:mods"), packet); } }