Fix SteamwarConnectionListener
Some checks failed
SteamWarCI Build failed

This commit is contained in:
2025-06-11 11:42:42 +02:00
parent affad49bf5
commit 1ed0f88702
2 changed files with 5 additions and 35 deletions

View File

@ -39,4 +39,5 @@ dependencies {
compileOnly 'net.md-5:bungeecord-api:1.21-R0.1-SNAPSHOT' compileOnly 'net.md-5:bungeecord-api:1.21-R0.1-SNAPSHOT'
compileOnly 'net.md-5:bungeecord-proxy:1.21-R0.1-SNAPSHOT' compileOnly 'net.md-5:bungeecord-proxy:1.21-R0.1-SNAPSHOT'
// compileOnly 'codecrafter47.bungeetablistplus:bungeetablistplus-api-bungee:3.5.2' // compileOnly 'codecrafter47.bungeetablistplus:bungeetablistplus-api-bungee:3.5.2'
implementation 'it.unimi.dsi:fastutil-core:8.5.15'
} }

View File

@ -20,9 +20,9 @@
package de.steamwar.listener; package de.steamwar.listener;
import de.steamwar.ConfigSystem; import de.steamwar.ConfigSystem;
import gnu.trove.map.TIntObjectMap;
import gnu.trove.map.TObjectIntMap;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.objects.Object2IntMap;
import net.md_5.bungee.BungeeCord; import net.md_5.bungee.BungeeCord;
import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.event.PostLoginEvent; import net.md_5.bungee.api.event.PostLoginEvent;
@ -64,7 +64,7 @@ public class SteamwarConnectionListener implements Listener {
Protocol.DirectionData directionData = Protocol.HANDSHAKE.TO_SERVER; Protocol.DirectionData directionData = Protocol.HANDSHAKE.TO_SERVER;
Field directionDataProtocols = Protocol.DirectionData.class.getDeclaredField("protocols"); Field directionDataProtocols = Protocol.DirectionData.class.getDeclaredField("protocols");
directionDataProtocols.setAccessible(true); directionDataProtocols.setAccessible(true);
TIntObjectMap protocols = (TIntObjectMap) directionDataProtocols.get(directionData); Int2ObjectMap protocols = (Int2ObjectMap) directionDataProtocols.get(directionData);
Class<?> protocolDataClass = Class.forName("net.md_5.bungee.protocol.Protocol$ProtocolData"); Class<?> protocolDataClass = Class.forName("net.md_5.bungee.protocol.Protocol$ProtocolData");
Field protocolDataPacketMap = protocolDataClass.getDeclaredField("packetMap"); Field protocolDataPacketMap = protocolDataClass.getDeclaredField("packetMap");
@ -82,44 +82,13 @@ public class SteamwarConnectionListener implements Listener {
for (int version : ProtocolConstants.SUPPORTED_VERSION_IDS) { for (int version : ProtocolConstants.SUPPORTED_VERSION_IDS) {
Object protocolData = protocols.get(version); Object protocolData = protocols.get(version);
TObjectIntMap<Class<? extends DefinedPacket>> packetMap = (TObjectIntMap<Class<? extends DefinedPacket>>) protocolDataPacketMap.get(protocolData); Object2IntMap<Class<? extends DefinedPacket>> packetMap = (Object2IntMap<Class<? extends DefinedPacket>>) protocolDataPacketMap.get(protocolData);
Supplier<? extends DefinedPacket>[] packetConstructors = (Supplier<? extends DefinedPacket>[]) protocolDataPacketConstructors.get(protocolData); Supplier<? extends DefinedPacket>[] packetConstructors = (Supplier<? extends DefinedPacket>[]) protocolDataPacketConstructors.get(protocolData);
packetMap.put(Handshake.class, packetID); packetMap.put(Handshake.class, packetID);
packetConstructors[packetID] = SteamwarHandshake::new; packetConstructors[packetID] = SteamwarHandshake::new;
} }
/*
Field FIELD_TO_SERVER = Protocol.class.getDeclaredField("TO_SERVER");
FIELD_TO_SERVER.setAccessible(true);
Protocol.DirectionData o = FIELD_TO_SERVER.get(Protocol.HANDSHAKE);
Class<?> directionDataClazz = Class.forName("net.md_5.bungee.protocol.Protocol$DirectionData");
Class<?> protocolMappingClazz = Class.forName("net.md_5.bungee.protocol.Protocol$ProtocolMapping");
Field FIELD_PROTOCOLS = directionDataClazz.getDeclaredField("protocols");
Object protocols = FIELD_PROTOCOLS.get(protocolMapping);
Method method = Arrays.stream(directionDataClazz.getDeclaredMethods())
.filter(m -> m.getName().equals("registerPacket"))
.filter(m -> m.getParameterCount() == 3)
.filter(m -> m.getParameterTypes()[0] == Class.class)
.filter(m -> m.getParameterTypes()[1] == Supplier.class)
.filter(m -> m.getParameterTypes()[2].isArray())
.findFirst()
.orElseThrow(() -> new RuntimeException("Could not find registerPacket method"));
method.setAccessible(true);
Object protocolMappingArray = Array.newInstance(protocolMappingClazz, 1);
Array.set(protocolMappingArray, 0, protocolMapping);
method.invoke(o, Handshake.class, new Supplier<Handshake>() {
@Override
public Handshake get() {
return new SteamwarHandshake();
}
}, protocolMappingArray);
*/
chField = InitialHandler.class.getDeclaredField("ch"); chField = InitialHandler.class.getDeclaredField("ch");
chField.setAccessible(true); chField.setAccessible(true);