forked from SteamWar/SteamWar
Fix Badlion (tested), Fix Client channel registration and brand detection
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user