diff --git a/FightSystem/build.gradle.kts b/FightSystem/build.gradle.kts index 6f0c40a7..a9a84cbd 100644 --- a/FightSystem/build.gradle.kts +++ b/FightSystem/build.gradle.kts @@ -57,6 +57,7 @@ tasks.register("WarGear21") { description = "Run a WarGear 1.21 Fight Server" dependsOn(":SpigotCore:shadowJar") dependsOn(":FightSystem:shadowJar") + dependsOn(":KotlinCore:shadowJar") template = "WarGear21" worldName = "arenas/Pentraki" config = "WarGear20.yml" diff --git a/SpigotCore/SpigotCore_Main/src/com/comphenix/tinyprotocol/TinyProtocol.java b/SpigotCore/SpigotCore_Main/src/com/comphenix/tinyprotocol/TinyProtocol.java index c0a869d0..ec599390 100644 --- a/SpigotCore/SpigotCore_Main/src/com/comphenix/tinyprotocol/TinyProtocol.java +++ b/SpigotCore/SpigotCore_Main/src/com/comphenix/tinyprotocol/TinyProtocol.java @@ -57,7 +57,7 @@ public class TinyProtocol { public static final TinyProtocol instance = new TinyProtocol(Core.getInstance()); private final Map, List>> packetFilters = new HashMap<>(); - private final Set> globalFilters = new HashSet<>(); + private final Set> globalClientboundFilters = new HashSet<>(); public static void init() { // enforce init @@ -235,8 +235,8 @@ public class TinyProtocol { packetFilters.getOrDefault(packetType, Collections.emptyList()).remove(filter); } - public void addGlobalFilter(BiFunction filter) { - globalFilters.add(filter); + public void addGlobalClientboundFilter(BiFunction filter) { + globalClientboundFilters.add(filter); } /** @@ -450,6 +450,13 @@ public class TinyProtocol { public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { try { msg = filterPacket(player, msg); + + if(msg instanceof Packet) { + for (BiFunction filter : globalClientboundFilters) { + msg = filter.apply(player, msg); + if (msg == null) break; + } + } } catch (Exception e) { plugin.getLogger().log(Level.SEVERE, "Error in onPacketOutAsync().", e); } @@ -473,11 +480,6 @@ public class TinyProtocol { if (packet == null) break; } - for (BiFunction filter : globalFilters) { - packet = filter.apply(player, packet); - if (packet == null) break; - } - return packet; } } diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/ChunkHider.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/ChunkHider.java index 7262a6f4..d643dd44 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/ChunkHider.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/ChunkHider.java @@ -56,6 +56,7 @@ public abstract class ChunkHider { private final int SECTION_SPAN_SIZE = 16; 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 BIOMES_PER_SECTION = 64; @@ -108,6 +109,8 @@ public abstract class ChunkHider { int palletLength = ProtocolUtils.readVarInt(in); int[] pallet = ProtocolUtils.readVarIntArray(in, palletLength); + System.out.println(Arrays.toString(pallet)); + long[] rawData = readSectionDataFromBuffer(in, bitsPerBlock, BLOCKS_PER_SECTION); SimpleBitStorage data = new SimpleBitStorage(bitsPerBlock, BLOCKS_PER_SECTION, rawData); @@ -128,6 +131,7 @@ public abstract class ChunkHider { int worldZ = sectionZ * chunkZ; int blockId = resolvedData[blockDataIndex]; + System.out.println("DEV - " + blockId); Block block = BuiltInRegistries.BLOCK.get(blockId).get().value(); 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){ short bitsPerBiome = oldData.readShort(); newData.writeShort(bitsPerBiome); - + System.out.println(bitsPerBiome); if(bitsPerBiome == 0) { int sectionBiomeId = ProtocolUtils.readVarInt(oldData); 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); ProtocolUtils.writeVarInt(newData, palletLength); diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/TechHider.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/TechHider.java index 013b02bf..43d27615 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/TechHider.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/TechHider.java @@ -14,6 +14,7 @@ import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntList; import it.unimi.dsi.fastutil.shorts.ShortArraySet; import it.unimi.dsi.fastutil.shorts.ShortSets; +import net.minecraft.network.UnconfiguredPipelineHandler; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.phys.Vec3; @@ -26,6 +27,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.SectionPos; import net.minecraft.network.PacketListener; 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.ClientboundCustomPayloadPacket; 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.ClientboundLoginDisconnectPacket; 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.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. */ public abstract class TechHider { - private final Set>> bypassingPackets; + private final Set> bypassingPackets; private final Map>, BiFunction, Packet>> packetProcessors; private final Block blockUsedForObfuscation; @@ -210,6 +213,7 @@ public abstract class TechHider { ClientboundCookieRequestPacket.class, // 5.1.6 Cookie Request // --- 6.1.x Configuration Protocol --- + ClientboundSelectKnownPacks.class, ClientboundCustomPayloadPacket.class, // 6.1.2 Clientbound Plugin Message ClientboundFinishConfigurationPacket.class, // 6.1.4 Finish Configuration ClientboundKeepAlivePacket.class, // 6.1.5 Clientbound Keep Alive @@ -440,14 +444,19 @@ public abstract class TechHider { this.packetProcessors = processors; - TinyProtocol.instance.addGlobalFilter((player, packet) -> { + TinyProtocol.instance.addGlobalClientboundFilter((player, packet) -> { + System.out.println(packet.getClass().toString()); + if(bypassingPackets.contains(packet.getClass())) { + System.out.println("bypassing"); return packet; } else if(packetProcessors.containsKey(packet.getClass())) { + System.out.println("processing"); return packetProcessors.get(packet.getClass()).apply(player, (Packet) packet); } else { + System.out.println("dropping"); return null; } });