Readd anti xray and oversized block entity patches
This commit is contained in:
		
					parent
					
						
							
								0b0aa1201b
							
						
					
				
			
			
				commit
				
					
						886e4f56b5
					
				
			
		
					 9 changed files with 40 additions and 59 deletions
				
			
		| 
						 | 
				
			
			@ -9,7 +9,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 | 
			
		|||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
			
		||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
 | 
			
		||||
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
 | 
			
		||||
         return new OldCraftChunkData(world.getMinHeight(), world.getMaxHeight(), handle.registryAccess().registryOrThrow(Registries.BIOME));
 | 
			
		||||
         return new OldCraftChunkData(world.getMinHeight(), world.getMaxHeight(), handle.registryAccess().registryOrThrow(Registries.BIOME), world); // Paper - Anti-Xray - Add parameters
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
+    // Paper start
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1099,41 +1099,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 | 
			
		|||
     }
 | 
			
		||||
 
 | 
			
		||||
     public ClientboundLevelChunkWithLightPacket(FriendlyByteBuf buf) {
 | 
			
		||||
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
 | 
			
		||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | 
			
		||||
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
 | 
			
		||||
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
 | 
			
		||||
@@ -0,0 +0,0 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
 | 
			
		||||
 
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
-    public void updateChunkTracking(ServerPlayer player, ChunkPos pos, MutableObject<ClientboundLevelChunkWithLightPacket> packet, boolean oldWithinViewDistance, boolean newWithinViewDistance) { // Paper - public
 | 
			
		||||
+    public void updateChunkTracking(ServerPlayer player, ChunkPos pos, MutableObject<java.util.Map<Object, ClientboundLevelChunkWithLightPacket>> packet, boolean oldWithinViewDistance, boolean newWithinViewDistance) { // Paper - public // Paper - Anti-Xray - Bypass
 | 
			
		||||
         io.papermc.paper.util.TickThread.ensureTickThread(this.level, pos, "May not update chunk tracking for chunk async"); // Paper - replace chunk loader system
 | 
			
		||||
         io.papermc.paper.util.TickThread.ensureTickThread(player, "May not update chunk tracking for player async"); // Paper - replace chunk loader system
 | 
			
		||||
         if (player.level() == this.level) {
 | 
			
		||||
@@ -0,0 +0,0 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
 | 
			
		||||
         });
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
-    private void playerLoadedChunk(ServerPlayer player, MutableObject<ClientboundLevelChunkWithLightPacket> cachedDataPacket, LevelChunk chunk) {
 | 
			
		||||
-        if (cachedDataPacket.getValue() == null) {
 | 
			
		||||
-            cachedDataPacket.setValue(new ClientboundLevelChunkWithLightPacket(chunk, this.lightEngine, (BitSet) null, (BitSet) null));
 | 
			
		||||
+    // Paper start - Anti-Xray - Bypass
 | 
			
		||||
+    private void playerLoadedChunk(ServerPlayer player, MutableObject<java.util.Map<Object, ClientboundLevelChunkWithLightPacket>> cachedDataPackets, LevelChunk chunk) {
 | 
			
		||||
+        if (cachedDataPackets.getValue() == null) {
 | 
			
		||||
+            cachedDataPackets.setValue(new java.util.HashMap<>());
 | 
			
		||||
         }
 | 
			
		||||
 
 | 
			
		||||
-        player.trackChunk(chunk.getPos(), (Packet) cachedDataPacket.getValue());
 | 
			
		||||
+        Boolean shouldModify = chunk.getLevel().chunkPacketBlockController.shouldModify(player, chunk);
 | 
			
		||||
+        player.trackChunk(chunk.getPos(), (Packet) cachedDataPackets.getValue().computeIfAbsent(shouldModify, (s) -> {
 | 
			
		||||
+            return new ClientboundLevelChunkWithLightPacket(chunk, this.lightEngine, (BitSet) null, (BitSet) null, (Boolean) s);
 | 
			
		||||
+        }));
 | 
			
		||||
+        // Paper end
 | 
			
		||||
         DebugPackets.sendPoiPacketsForChunk(this.level, chunk.getPos());
 | 
			
		||||
         List<Entity> list = Lists.newArrayList();
 | 
			
		||||
         List<Entity> list1 = Lists.newArrayList();
 | 
			
		||||
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
 | 
			
		||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | 
			
		||||
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
 | 
			
		||||
| 
						 | 
				
			
			@ -1169,6 +1134,22 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 | 
			
		|||
     }
 | 
			
		||||
 
 | 
			
		||||
     public void destroyAndAck(BlockPos pos, int sequence, String reason) {
 | 
			
		||||
diff --git a/src/main/java/net/minecraft/server/network/PlayerChunkSender.java b/src/main/java/net/minecraft/server/network/PlayerChunkSender.java
 | 
			
		||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | 
			
		||||
--- a/src/main/java/net/minecraft/server/network/PlayerChunkSender.java
 | 
			
		||||
+++ b/src/main/java/net/minecraft/server/network/PlayerChunkSender.java
 | 
			
		||||
@@ -0,0 +0,0 @@ public class PlayerChunkSender {
 | 
			
		||||
 
 | 
			
		||||
     public static void sendChunk(ServerGamePacketListenerImpl handler, ServerLevel world, LevelChunk chunk) { // Paper - rewrite chunk loader - public
 | 
			
		||||
         handler.player.serverLevel().chunkSource.chunkMap.getVisibleChunkIfPresent(chunk.getPos().toLong()).addPlayer(handler.player);
 | 
			
		||||
-        handler.send(new ClientboundLevelChunkWithLightPacket(chunk, world.getLightEngine(), (BitSet)null, (BitSet)null));
 | 
			
		||||
+        // Paper start - Anti-Xray
 | 
			
		||||
+        final boolean shouldModify = world.chunkPacketBlockController.shouldModify(handler.player, chunk);
 | 
			
		||||
+        handler.send(new ClientboundLevelChunkWithLightPacket(chunk, world.getLightEngine(), (BitSet)null, (BitSet)null, shouldModify));
 | 
			
		||||
+        // Paper end - Anti-Xray
 | 
			
		||||
         ChunkPos chunkPos = chunk.getPos();
 | 
			
		||||
         DebugPackets.sendPoiPacketsForChunk(world, chunkPos);
 | 
			
		||||
     }
 | 
			
		||||
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
 | 
			
		||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | 
			
		||||
--- a/src/main/java/net/minecraft/world/level/Level.java
 | 
			
		||||
| 
						 | 
				
			
			@ -1470,7 +1451,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 | 
			
		|||
 
 | 
			
		||||
     @Override
 | 
			
		||||
@@ -0,0 +0,0 @@ public class PalettedContainer<T> implements PaletteResize<T>, PalettedContainer
 | 
			
		||||
             return 1 + this.palette.getSerializedSize() + FriendlyByteBuf.getVarIntSize(this.storage.getSize()) + this.storage.getRaw().length * 8;
 | 
			
		||||
             return 1 + this.palette.getSerializedSize() + VarInt.getByteSize(this.storage.getRaw().length) + this.storage.getRaw().length * 8;
 | 
			
		||||
         }
 | 
			
		||||
 
 | 
			
		||||
-        public void write(FriendlyByteBuf buf) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1482,7 +1463,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 | 
			
		|||
+            if (chunkPacketInfo != null) {
 | 
			
		||||
+                chunkPacketInfo.setBits(chunkSectionIndex, this.configuration.bits());
 | 
			
		||||
+                chunkPacketInfo.setPalette(chunkSectionIndex, this.palette);
 | 
			
		||||
+                chunkPacketInfo.setIndex(chunkSectionIndex, buf.writerIndex() + FriendlyByteBuf.getVarIntSize(this.storage.getRaw().length));
 | 
			
		||||
+                chunkPacketInfo.setIndex(chunkSectionIndex, buf.writerIndex() + VarInt.getByteSize(this.storage.getRaw().length));
 | 
			
		||||
+            }
 | 
			
		||||
+            // Paper end
 | 
			
		||||
+
 | 
			
		||||
| 
						 | 
				
			
			@ -30,7 +30,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 | 
			
		|||
+    }
 | 
			
		||||
+    // Paper end
 | 
			
		||||
 
 | 
			
		||||
     public static final Codec<PalettedContainer<BlockState>> BLOCK_STATE_CODEC = PalettedContainer.codecRW(Block.BLOCK_STATE_REGISTRY, BlockState.CODEC, PalettedContainer.Strategy.SECTION_STATES, Blocks.AIR.defaultBlockState());
 | 
			
		||||
     public static final Codec<PalettedContainer<BlockState>> BLOCK_STATE_CODEC = PalettedContainer.codecRW(Block.BLOCK_STATE_REGISTRY, BlockState.CODEC, PalettedContainer.Strategy.SECTION_STATES, Blocks.AIR.defaultBlockState(), null); // Paper - Anti-Xray - Add preset block states
 | 
			
		||||
     private static final Logger LOGGER = LogUtils.getLogger();
 | 
			
		||||
@@ -0,0 +0,0 @@ public class ChunkSerializer {
 | 
			
		||||
         nbttagcompound.putInt("xPos", chunkcoordintpair.x);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2633,9 +2633,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 | 
			
		|||
--- a/src/main/java/net/minecraft/world/level/Level.java
 | 
			
		||||
+++ b/src/main/java/net/minecraft/world/level/Level.java
 | 
			
		||||
@@ -0,0 +0,0 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
 | 
			
		||||
         this.keepSpawnInMemory = this.paperConfig().spawn.keepSpawnLoaded; // Paper
 | 
			
		||||
         this.entityLimiter = new org.spigotmc.TickLimiter(spigotConfig.entityMaxTickTime);
 | 
			
		||||
         this.tileLimiter = new org.spigotmc.TickLimiter(spigotConfig.tileMaxTickTime);
 | 
			
		||||
         this.chunkPacketBlockController = this.paperConfig().anticheat.antiXray.enabled ? new com.destroystokyo.paper.antixray.ChunkPacketBlockControllerAntiXray(this, executor) : com.destroystokyo.paper.antixray.ChunkPacketBlockController.NO_OPERATION_INSTANCE; // Paper - Anti-Xray
 | 
			
		||||
+        // Paper start - optimise collisions
 | 
			
		||||
+        this.minSection = io.papermc.paper.util.WorldUtil.getMinSection(this);
 | 
			
		||||
+        this.maxSection = io.papermc.paper.util.WorldUtil.getMaxSection(this);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,10 +17,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 | 
			
		|||
     private final byte[] buffer;
 | 
			
		||||
     private final List<ClientboundLevelChunkPacketData.BlockEntityInfo> blockEntitiesData;
 | 
			
		||||
+    // Paper start
 | 
			
		||||
+    private final java.util.List<net.minecraft.network.protocol.Packet> extraPackets = new java.util.ArrayList<>();
 | 
			
		||||
+    private final java.util.List<net.minecraft.network.protocol.Packet<?>> extraPackets = new java.util.ArrayList<>();
 | 
			
		||||
+    private static final int TE_LIMIT = Integer.getInteger("Paper.excessiveTELimit", 750);
 | 
			
		||||
+
 | 
			
		||||
+    public List<net.minecraft.network.protocol.Packet> getExtraPackets() {
 | 
			
		||||
+    public List<net.minecraft.network.protocol.Packet<?>> getExtraPackets() {
 | 
			
		||||
+        return this.extraPackets;
 | 
			
		||||
+    }
 | 
			
		||||
+    // Paper end
 | 
			
		||||
| 
						 | 
				
			
			@ -57,7 +57,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 | 
			
		|||
+
 | 
			
		||||
+    // Paper start - handle over-sized TE packets
 | 
			
		||||
+    @Override
 | 
			
		||||
+    public java.util.List<Packet> getExtraPackets() {
 | 
			
		||||
+    public java.util.List<Packet<?>> getExtraPackets() {
 | 
			
		||||
+        return this.chunkData.getExtraPackets();
 | 
			
		||||
+    }
 | 
			
		||||
+    // Paper end
 | 
			
		||||
| 
						 | 
				
			
			@ -422,9 +422,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 | 
			
		|||
-
 | 
			
		||||
             }
 | 
			
		||||
-        }
 | 
			
		||||
-
 | 
			
		||||
-        a a0 = new a();
 | 
			
		||||
 
 | 
			
		||||
-        a a0 = new a();
 | 
			
		||||
-
 | 
			
		||||
-        this.states.count(a0);
 | 
			
		||||
-        this.nonEmptyBlockCount = (short) a0.nonEmptyBlockCount;
 | 
			
		||||
-        this.tickingBlockCount = (short) a0.tickingBlockCount;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,14 +21,14 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 | 
			
		|||
     // Paper end - rewrite player chunk loader
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +0,0 @@ public class PlayerChunkSender {
 | 
			
		||||
     public static void sendChunk(ServerGamePacketListenerImpl handler, ServerLevel world, LevelChunk chunk) { // Paper - rewrite chunk loader - public
 | 
			
		||||
         handler.player.serverLevel().chunkSource.chunkMap.getVisibleChunkIfPresent(chunk.getPos().toLong()).addPlayer(handler.player);
 | 
			
		||||
         handler.send(new ClientboundLevelChunkWithLightPacket(chunk, world.getLightEngine(), (BitSet)null, (BitSet)null));
 | 
			
		||||
+        // Paper start
 | 
			
		||||
         final boolean shouldModify = world.chunkPacketBlockController.shouldModify(handler.player, chunk);
 | 
			
		||||
         handler.send(new ClientboundLevelChunkWithLightPacket(chunk, world.getLightEngine(), (BitSet)null, (BitSet)null, shouldModify));
 | 
			
		||||
         // Paper end - Anti-Xray
 | 
			
		||||
+        // Paper start - PlayerChunkLoadEvent
 | 
			
		||||
+        if (io.papermc.paper.event.packet.PlayerChunkLoadEvent.getHandlerList().getRegisteredListeners().length > 0) {
 | 
			
		||||
+            new io.papermc.paper.event.packet.PlayerChunkLoadEvent(new org.bukkit.craftbukkit.CraftChunk(chunk), handler.getPlayer().getBukkitEntity()).callEvent();
 | 
			
		||||
+        }
 | 
			
		||||
+        // Paper end
 | 
			
		||||
+        // Paper end - PlayerChunkLoadEvent
 | 
			
		||||
         ChunkPos chunkPos = chunk.getPos();
 | 
			
		||||
         DebugPackets.sendPoiPacketsForChunk(world, chunkPos);
 | 
			
		||||
     }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 | 
			
		|||
--- a/src/main/java/net/minecraft/world/level/chunk/PalettedContainer.java
 | 
			
		||||
+++ b/src/main/java/net/minecraft/world/level/chunk/PalettedContainer.java
 | 
			
		||||
@@ -0,0 +0,0 @@ public class PalettedContainer<T> implements PaletteResize<T>, PalettedContainer
 | 
			
		||||
     public final IdMap<T> registry;
 | 
			
		||||
     private final T @org.jetbrains.annotations.Nullable [] presetValues; // Paper - Anti-Xray - Add preset values
 | 
			
		||||
     private volatile PalettedContainer.Data<T> data;
 | 
			
		||||
     private final PalettedContainer.Strategy strategy;
 | 
			
		||||
-    private final ThreadingDetector threadingDetector = new ThreadingDetector("PalettedContainer");
 | 
			
		||||
| 
						 | 
				
			
			@ -34,7 +34,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 | 
			
		|||
+        // this.threadingDetector.checkAndUnlock(); // Paper - disable this
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
     public static <T> Codec<PalettedContainer<T>> codecRW(IdMap<T> idList, Codec<T> entryCodec, PalettedContainer.Strategy paletteProvider, T defaultValue) {
 | 
			
		||||
     // Paper start - Anti-Xray - Add preset values
 | 
			
		||||
@@ -0,0 +0,0 @@ public class PalettedContainer<T> implements PaletteResize<T>, PalettedContainer
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
| 
						 | 
				
			
			@ -42,8 +42,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 | 
			
		|||
-    public int onResize(int newBits, T object) {
 | 
			
		||||
+    public synchronized int onResize(int newBits, T object) { // Paper - synchronize
 | 
			
		||||
         PalettedContainer.Data<T> data = this.data;
 | 
			
		||||
         PalettedContainer.Data<T> data2 = this.createOrReuseData(data, newBits);
 | 
			
		||||
         data2.copyFrom(data.palette, data.storage);
 | 
			
		||||
 
 | 
			
		||||
         // Paper start - Anti-Xray - Add preset values
 | 
			
		||||
@@ -0,0 +0,0 @@ public class PalettedContainer<T> implements PaletteResize<T>, PalettedContainer
 | 
			
		||||
         return this.getAndSet(this.strategy.getIndex(x, y, z), value);
 | 
			
		||||
     }
 | 
			
		||||
| 
						 | 
				
			
			@ -72,11 +72,11 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 | 
			
		|||
 
 | 
			
		||||
         try {
 | 
			
		||||
@@ -0,0 +0,0 @@ public class PalettedContainer<T> implements PaletteResize<T>, PalettedContainer
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
     @Override
 | 
			
		||||
-    public void write(FriendlyByteBuf buf) {
 | 
			
		||||
+    public synchronized void write(FriendlyByteBuf buf) { // Paper - synchronize
 | 
			
		||||
     @Deprecated @io.papermc.paper.annotation.DoNotUse public void write(FriendlyByteBuf buf) { this.write(buf, null, 0); }
 | 
			
		||||
     @Override
 | 
			
		||||
-    public void write(FriendlyByteBuf buf, @Nullable com.destroystokyo.paper.antixray.ChunkPacketInfo<T> chunkPacketInfo, int chunkSectionIndex) {
 | 
			
		||||
+    public synchronized void write(FriendlyByteBuf buf, @Nullable com.destroystokyo.paper.antixray.ChunkPacketInfo<T> chunkPacketInfo, int chunkSectionIndex) { // Paper - synchronize
 | 
			
		||||
         this.acquire();
 | 
			
		||||
 
 | 
			
		||||
         try {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,7 +37,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 | 
			
		|||
+
 | 
			
		||||
     public abstract ResourceKey<LevelStem> getTypeKey();
 | 
			
		||||
 
 | 
			
		||||
     protected Level(WritableLevelData worlddatamutable, ResourceKey<Level> resourcekey, RegistryAccess iregistrycustom, Holder<DimensionType> holder, Supplier<ProfilerFiller> supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function<org.spigotmc.SpigotWorldConfig, io.papermc.paper.configuration.WorldConfiguration> paperWorldConfigCreator) { // Paper
 | 
			
		||||
     protected Level(WritableLevelData worlddatamutable, ResourceKey<Level> resourcekey, RegistryAccess iregistrycustom, Holder<DimensionType> holder, Supplier<ProfilerFiller> supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function<org.spigotmc.SpigotWorldConfig, io.papermc.paper.configuration.WorldConfiguration> paperWorldConfigCreator, java.util.concurrent.Executor executor) { // Paper - Async-Anti-Xray - Pass executor
 | 
			
		||||
diff --git a/src/main/java/net/minecraft/world/level/gameevent/GameEventDispatcher.java b/src/main/java/net/minecraft/world/level/gameevent/GameEventDispatcher.java
 | 
			
		||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | 
			
		||||
--- a/src/main/java/net/minecraft/world/level/gameevent/GameEventDispatcher.java
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue