This commit is contained in:
D4rkr34lm
2026-05-21 12:13:41 +02:00
parent a1d22b7d77
commit dc0365834a
4 changed files with 28 additions and 12 deletions
+1
View File
@@ -57,6 +57,7 @@ tasks.register<FightServer>("WarGear21") {
description = "Run a WarGear 1.21 Fight Server" description = "Run a WarGear 1.21 Fight Server"
dependsOn(":SpigotCore:shadowJar") dependsOn(":SpigotCore:shadowJar")
dependsOn(":FightSystem:shadowJar") dependsOn(":FightSystem:shadowJar")
dependsOn(":KotlinCore:shadowJar")
template = "WarGear21" template = "WarGear21"
worldName = "arenas/Pentraki" worldName = "arenas/Pentraki"
config = "WarGear20.yml" config = "WarGear20.yml"
@@ -57,7 +57,7 @@ public class TinyProtocol {
public static final TinyProtocol instance = new TinyProtocol(Core.getInstance()); public static final TinyProtocol instance = new TinyProtocol(Core.getInstance());
private final Map<Class<?>, List<BiFunction<Player, Object, Object>>> packetFilters = new HashMap<>(); private final Map<Class<?>, List<BiFunction<Player, Object, Object>>> packetFilters = new HashMap<>();
private final Set<BiFunction<Player, Object, Object>> globalFilters = new HashSet<>(); private final Set<BiFunction<Player, Object, Object>> globalClientboundFilters = new HashSet<>();
public static void init() { public static void init() {
// enforce init // enforce init
@@ -235,8 +235,8 @@ public class TinyProtocol {
packetFilters.getOrDefault(packetType, Collections.emptyList()).remove(filter); packetFilters.getOrDefault(packetType, Collections.emptyList()).remove(filter);
} }
public void addGlobalFilter(BiFunction<Player, Object, Object> filter) { public void addGlobalClientboundFilter(BiFunction<Player, Object, Object> filter) {
globalFilters.add(filter); globalClientboundFilters.add(filter);
} }
/** /**
@@ -450,6 +450,13 @@ public class TinyProtocol {
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
try { try {
msg = filterPacket(player, msg); msg = filterPacket(player, msg);
if(msg instanceof Packet<?>) {
for (BiFunction<Player, Object, Object> filter : globalClientboundFilters) {
msg = filter.apply(player, msg);
if (msg == null) break;
}
}
} catch (Exception e) { } catch (Exception e) {
plugin.getLogger().log(Level.SEVERE, "Error in onPacketOutAsync().", e); plugin.getLogger().log(Level.SEVERE, "Error in onPacketOutAsync().", e);
} }
@@ -473,11 +480,6 @@ public class TinyProtocol {
if (packet == null) break; if (packet == null) break;
} }
for (BiFunction<Player, Object, Object> filter : globalFilters) {
packet = filter.apply(player, packet);
if (packet == null) break;
}
return packet; return packet;
} }
} }
@@ -56,6 +56,7 @@ public abstract class ChunkHider {
private final int SECTION_SPAN_SIZE = 16; private final int SECTION_SPAN_SIZE = 16;
private final byte BIT_PER_BLOCK_INDIRECTION_LIMIT = 8; private final byte BIT_PER_BLOCK_INDIRECTION_LIMIT = 8;
private final byte BIT_PER_BIOME_INDIRECTION_LIMIT = 3;
private final int BLOCKS_PER_SECTION = 4096; private final int BLOCKS_PER_SECTION = 4096;
private final int BIOMES_PER_SECTION = 64; private final int BIOMES_PER_SECTION = 64;
@@ -108,6 +109,8 @@ public abstract class ChunkHider {
int palletLength = ProtocolUtils.readVarInt(in); int palletLength = ProtocolUtils.readVarInt(in);
int[] pallet = ProtocolUtils.readVarIntArray(in, palletLength); int[] pallet = ProtocolUtils.readVarIntArray(in, palletLength);
System.out.println(Arrays.toString(pallet));
long[] rawData = readSectionDataFromBuffer(in, bitsPerBlock, BLOCKS_PER_SECTION); long[] rawData = readSectionDataFromBuffer(in, bitsPerBlock, BLOCKS_PER_SECTION);
SimpleBitStorage data = new SimpleBitStorage(bitsPerBlock, BLOCKS_PER_SECTION, rawData); SimpleBitStorage data = new SimpleBitStorage(bitsPerBlock, BLOCKS_PER_SECTION, rawData);
@@ -128,6 +131,7 @@ public abstract class ChunkHider {
int worldZ = sectionZ * chunkZ; int worldZ = sectionZ * chunkZ;
int blockId = resolvedData[blockDataIndex]; int blockId = resolvedData[blockDataIndex];
System.out.println("DEV - " + blockId);
Block block = BuiltInRegistries.BLOCK.get(blockId).get().value(); Block block = BuiltInRegistries.BLOCK.get(blockId).get().value();
if(isPlayerPrivilegedToAccessPosition(player, worldX, worldY, worldZ) && isPlayerPrivilegedToAccessBlock(player, worldX, worldY, worldZ, block)) { if(isPlayerPrivilegedToAccessPosition(player, worldX, worldY, worldZ) && isPlayerPrivilegedToAccessBlock(player, worldX, worldY, worldZ, block)) {
@@ -271,12 +275,12 @@ public abstract class ChunkHider {
private void copyOverSectionBiomeData(ByteBuf oldData, ByteBuf newData){ private void copyOverSectionBiomeData(ByteBuf oldData, ByteBuf newData){
short bitsPerBiome = oldData.readShort(); short bitsPerBiome = oldData.readShort();
newData.writeShort(bitsPerBiome); newData.writeShort(bitsPerBiome);
System.out.println(bitsPerBiome);
if(bitsPerBiome == 0) { if(bitsPerBiome == 0) {
int sectionBiomeId = ProtocolUtils.readVarInt(oldData); int sectionBiomeId = ProtocolUtils.readVarInt(oldData);
ProtocolUtils.writeVarInt(newData, sectionBiomeId); ProtocolUtils.writeVarInt(newData, sectionBiomeId);
} }
else if(bitsPerBiome <= BIT_PER_BLOCK_INDIRECTION_LIMIT) { else if(bitsPerBiome <= BIT_PER_BIOME_INDIRECTION_LIMIT) {
int palletLength = ProtocolUtils.readVarInt(oldData); int palletLength = ProtocolUtils.readVarInt(oldData);
ProtocolUtils.writeVarInt(newData, palletLength); ProtocolUtils.writeVarInt(newData, palletLength);
@@ -14,6 +14,7 @@ import it.unimi.dsi.fastutil.ints.IntArrayList;
import it.unimi.dsi.fastutil.ints.IntList; import it.unimi.dsi.fastutil.ints.IntList;
import it.unimi.dsi.fastutil.shorts.ShortArraySet; import it.unimi.dsi.fastutil.shorts.ShortArraySet;
import it.unimi.dsi.fastutil.shorts.ShortSets; import it.unimi.dsi.fastutil.shorts.ShortSets;
import net.minecraft.network.UnconfiguredPipelineHandler;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
@@ -26,6 +27,7 @@ import net.minecraft.core.BlockPos;
import net.minecraft.core.SectionPos; import net.minecraft.core.SectionPos;
import net.minecraft.network.PacketListener; import net.minecraft.network.PacketListener;
import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.handshake.ClientIntentionPacket;
import net.minecraft.network.protocol.common.ClientboundClearDialogPacket; import net.minecraft.network.protocol.common.ClientboundClearDialogPacket;
import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket; import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket;
import net.minecraft.network.protocol.common.ClientboundCustomReportDetailsPacket; import net.minecraft.network.protocol.common.ClientboundCustomReportDetailsPacket;
@@ -162,6 +164,7 @@ import net.minecraft.network.protocol.login.ClientboundHelloPacket;
import net.minecraft.network.protocol.login.ClientboundLoginCompressionPacket; import net.minecraft.network.protocol.login.ClientboundLoginCompressionPacket;
import net.minecraft.network.protocol.login.ClientboundLoginDisconnectPacket; import net.minecraft.network.protocol.login.ClientboundLoginDisconnectPacket;
import net.minecraft.network.protocol.login.ClientboundLoginFinishedPacket; import net.minecraft.network.protocol.login.ClientboundLoginFinishedPacket;
import net.minecraft.network.protocol.configuration.ClientboundSelectKnownPacks;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
@@ -171,7 +174,7 @@ import net.minecraft.world.level.block.state.BlockState;
* way that is also compliant with the principle of default-deny. * way that is also compliant with the principle of default-deny.
*/ */
public abstract class TechHider { public abstract class TechHider {
private final Set<Class<? extends Packet<? extends PacketListener>>> bypassingPackets; private final Set<Class<?>> bypassingPackets;
private final Map<Class<? extends Packet<? extends PacketListener>>, BiFunction<Player, Packet<? extends PacketListener>, Packet<? extends PacketListener>>> packetProcessors; private final Map<Class<? extends Packet<? extends PacketListener>>, BiFunction<Player, Packet<? extends PacketListener>, Packet<? extends PacketListener>>> packetProcessors;
private final Block blockUsedForObfuscation; private final Block blockUsedForObfuscation;
@@ -210,6 +213,7 @@ public abstract class TechHider {
ClientboundCookieRequestPacket.class, // 5.1.6 Cookie Request ClientboundCookieRequestPacket.class, // 5.1.6 Cookie Request
// --- 6.1.x Configuration Protocol --- // --- 6.1.x Configuration Protocol ---
ClientboundSelectKnownPacks.class,
ClientboundCustomPayloadPacket.class, // 6.1.2 Clientbound Plugin Message ClientboundCustomPayloadPacket.class, // 6.1.2 Clientbound Plugin Message
ClientboundFinishConfigurationPacket.class, // 6.1.4 Finish Configuration ClientboundFinishConfigurationPacket.class, // 6.1.4 Finish Configuration
ClientboundKeepAlivePacket.class, // 6.1.5 Clientbound Keep Alive ClientboundKeepAlivePacket.class, // 6.1.5 Clientbound Keep Alive
@@ -440,14 +444,19 @@ public abstract class TechHider {
this.packetProcessors = processors; this.packetProcessors = processors;
TinyProtocol.instance.addGlobalFilter((player, packet) -> { TinyProtocol.instance.addGlobalClientboundFilter((player, packet) -> {
System.out.println(packet.getClass().toString());
if(bypassingPackets.contains(packet.getClass())) { if(bypassingPackets.contains(packet.getClass())) {
System.out.println("bypassing");
return packet; return packet;
} }
else if(packetProcessors.containsKey(packet.getClass())) { else if(packetProcessors.containsKey(packet.getClass())) {
System.out.println("processing");
return packetProcessors.get(packet.getClass()).apply(player, (Packet<? extends PacketListener>) packet); return packetProcessors.get(packet.getClass()).apply(player, (Packet<? extends PacketListener>) packet);
} }
else { else {
System.out.println("dropping");
return null; return null;
} }
}); });