Fix Badlion (tested), Fix Client channel registration and brand detection

This commit is contained in:
Lixfel
2024-08-18 15:36:50 +02:00
parent 5afdc04e1e
commit 09a8dc0786
4 changed files with 31 additions and 41 deletions
@@ -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.
@@ -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.
@@ -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));
@@ -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);
}
}