From a13b7636ff6685500143e9e1907e792a846ecd8e Mon Sep 17 00:00:00 2001 From: Pierre Maurice Schwang Date: Fri, 1 Aug 2025 01:02:11 +0200 Subject: [PATCH 1/2] feat: start work on paper anti-x-ray support --- .../ext/fawe/v1_20_R2/PaperweightAdapter.java | 3 +- .../fawe/v1_20_R2/PaperweightFaweAdapter.java | 3 +- .../PaperweightFaweWorldNativeAccess.java | 10 ++++-- .../fawe/v1_20_R2/PaperweightGetBlocks.java | 6 ++-- .../v1_20_R2/PaperweightPlatformAdapter.java | 32 +++++++++++++++++-- .../PaperweightStarlightRelighter.java | 2 +- .../ext.fawe/v1_20_R3/PaperweightAdapter.java | 3 +- .../fawe/v1_20_R3/PaperweightFaweAdapter.java | 3 +- .../PaperweightFaweWorldNativeAccess.java | 10 ++++-- .../fawe/v1_20_R3/PaperweightGetBlocks.java | 6 ++-- .../v1_20_R3/PaperweightPlatformAdapter.java | 32 +++++++++++++++++-- .../PaperweightStarlightRelighter.java | 2 +- .../ext.fawe/v1_20_R4/PaperweightAdapter.java | 3 +- .../fawe/v1_20_R4/PaperweightFaweAdapter.java | 3 +- .../PaperweightFaweWorldNativeAccess.java | 10 ++++-- .../fawe/v1_20_R4/PaperweightGetBlocks.java | 6 ++-- .../v1_20_R4/PaperweightPlatformAdapter.java | 32 +++++++++++++++++-- .../PaperweightStarlightRelighter.java | 2 +- .../ext/fawe/v1_21_R1/PaperweightAdapter.java | 3 +- .../fawe/v1_21_R1/PaperweightFaweAdapter.java | 3 +- .../PaperweightFaweWorldNativeAccess.java | 10 ++++-- .../fawe/v1_21_R1/PaperweightGetBlocks.java | 6 ++-- .../v1_21_R1/PaperweightPlatformAdapter.java | 32 +++++++++++++++++-- .../PaperweightStarlightRelighter.java | 2 +- .../ext/fawe/v1_21_4/PaperweightAdapter.java | 3 +- .../fawe/v1_21_4/PaperweightFaweAdapter.java | 3 +- .../PaperweightFaweWorldNativeAccess.java | 10 ++++-- .../fawe/v1_21_4/PaperweightGetBlocks.java | 6 ++-- .../v1_21_4/PaperweightPlatformAdapter.java | 32 +++++++++++++++++-- .../PaperweightStarlightRelighter.java | 2 +- .../ext/fawe/v1_21_5/PaperweightAdapter.java | 3 +- .../fawe/v1_21_5/PaperweightFaweAdapter.java | 3 +- .../PaperweightFaweWorldNativeAccess.java | 10 ++++-- .../fawe/v1_21_5/PaperweightGetBlocks.java | 6 ++-- .../v1_21_5/PaperweightPlatformAdapter.java | 32 +++++++++++++++++-- .../PaperweightStarlightRelighter.java | 2 +- .../ext/fawe/v1_21_6/PaperweightAdapter.java | 3 +- .../fawe/v1_21_6/PaperweightFaweAdapter.java | 3 +- .../PaperweightFaweWorldNativeAccess.java | 10 ++++-- .../fawe/v1_21_6/PaperweightGetBlocks.java | 6 ++-- .../v1_21_6/PaperweightPlatformAdapter.java | 32 +++++++++++++++++-- .../PaperweightStarlightRelighter.java | 2 +- .../adapter/AbstractBukkitGetBlocks.java | 2 +- .../bukkit/adapter/NMSAdapter.java | 6 ++-- .../bukkit/adapter/StarlightRelighter.java | 4 +++ .../core/FAWEPlatformAdapterImpl.java | 4 ++- .../processor/lighting/NMSRelighter.java | 6 +++- .../com/sk89q/worldedit/util/SideEffect.java | 4 +-- .../src/main/resources/lang/strings.json | 2 ++ 49 files changed, 342 insertions(+), 78 deletions(-) diff --git a/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_20_R2/PaperweightAdapter.java b/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_20_R2/PaperweightAdapter.java index cd56dfbb16..78ccfcb3f6 100644 --- a/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_20_R2/PaperweightAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_20_R2/PaperweightAdapter.java @@ -863,7 +863,8 @@ private ResourceKey getWorldDimKey(Environment env) { SideEffect.HISTORY, SideEffect.HEIGHTMAPS, SideEffect.LIGHTING, - SideEffect.NEIGHBORS + SideEffect.NEIGHBORS, + SideEffect.PAPER_ANTI_XRAY //FAWE end ); diff --git a/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightFaweAdapter.java b/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightFaweAdapter.java index 6b20bc44f8..5c6a53e977 100644 --- a/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightFaweAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightFaweAdapter.java @@ -309,7 +309,8 @@ public BaseBlock getFullBlock(final Location location) { SideEffect.HISTORY, SideEffect.HEIGHTMAPS, SideEffect.LIGHTING, - SideEffect.NEIGHBORS + SideEffect.NEIGHBORS, + SideEffect.PAPER_ANTI_XRAY ); @Override diff --git a/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightFaweWorldNativeAccess.java b/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightFaweWorldNativeAccess.java index 352e9b9583..bd139a8a55 100644 --- a/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightFaweWorldNativeAccess.java +++ b/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightFaweWorldNativeAccess.java @@ -252,7 +252,10 @@ public void run(Object value) { return; } for (IntPair chunk : toSend) { - PaperweightPlatformAdapter.sendChunk(chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z()); + PaperweightPlatformAdapter.sendChunk( + chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z(), + sideEffectSet != null && sideEffectSet.shouldApply(SideEffect.PAPER_ANTI_XRAY) + ); } } }; @@ -268,7 +271,10 @@ public void run(Object value) { sideEffectSet != null && sideEffectSet.shouldApply(SideEffect.UPDATE) )); for (IntPair chunk : cachedChunksToSend) { - PaperweightPlatformAdapter.sendChunk(chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z()); + PaperweightPlatformAdapter.sendChunk( + chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z(), + sideEffectSet != null && sideEffectSet.shouldApply(SideEffect.PAPER_ANTI_XRAY) + ); } } }; diff --git a/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightGetBlocks.java b/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightGetBlocks.java index be0203337e..54a8674b6a 100644 --- a/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightGetBlocks.java +++ b/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightGetBlocks.java @@ -747,7 +747,7 @@ protected > T internalCall( if (!set .getSideEffectSet() .shouldApply(SideEffect.LIGHTING) || !Settings.settings().LIGHTING.DELAY_PACKET_SENDING || finalMask == 0 && biomes != null) { - this.send(); + this.send(set.getSideEffectSet().shouldApply(SideEffect.PAPER_ANTI_XRAY)); } if (finalizer != null) { finalizer.run(); @@ -788,9 +788,9 @@ private void updateGet( } @Override - public void send() { + public void send(boolean obfuscateAntiXRay) { synchronized (sendLock) { - PaperweightPlatformAdapter.sendChunk(new IntPair(chunkX, chunkZ), serverLevel, chunkX, chunkZ); + PaperweightPlatformAdapter.sendChunk(new IntPair(chunkX, chunkZ), serverLevel, chunkX, chunkZ, obfuscateAntiXRay); } } diff --git a/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightPlatformAdapter.java b/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightPlatformAdapter.java index c117164ce0..9731a840fa 100644 --- a/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightPlatformAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightPlatformAdapter.java @@ -1,5 +1,7 @@ package com.sk89q.worldedit.bukkit.adapter.impl.fawe.v1_20_R2; +import com.destroystokyo.paper.antixray.ChunkPacketBlockControllerAntiXray; +import com.destroystokyo.paper.antixray.ChunkPacketInfoAntiXray; import com.destroystokyo.paper.util.maplist.EntityList; import com.fastasyncworldedit.bukkit.adapter.CachedBukkitAdapter; import com.fastasyncworldedit.bukkit.adapter.DelegateSemaphore; @@ -25,6 +27,7 @@ import net.minecraft.core.Holder; import net.minecraft.core.IdMap; import net.minecraft.core.Registry; +import net.minecraft.network.protocol.game.ClientboundLevelChunkPacketData; import net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ChunkHolder; @@ -106,6 +109,8 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { private static final Field fieldRemove; + private static final Field fieldChunkData; + private static final Logger LOGGER = LogManagerCompat.getLogger(); static final boolean POST_CHUNK_REWRITE; @@ -211,6 +216,16 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { ); palettedContaienrGet.setAccessible(true); PALETTED_CONTAINER_GET = lookup.unreflect(palettedContaienrGet); + + if (PaperLib.isPaper()) { + fieldChunkData = ClientboundLevelChunkWithLightPacket.class.getDeclaredField(Refraction.pickName( + "chunkData", + "d" + )); + fieldChunkData.setAccessible(true); + } else { + fieldChunkData = null; // not needed on Spigot as we don't touch Anti-X-Ray there + } } catch (RuntimeException | Error e) { throw e; } catch (Exception e) { @@ -343,7 +358,7 @@ public static ChunkHolder getPlayerChunk(ServerLevel nmsWorld, final int chunkX, } @SuppressWarnings("deprecation") - public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int chunkZ) { + public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int chunkZ, boolean obfuscateAntiXRay) { ChunkHolder chunkHolder = getPlayerChunk(nmsWorld, chunkX, chunkZ); if (chunkHolder == null) { return; @@ -378,8 +393,19 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int nmsWorld.getChunkSource().getLightEngine(), null, null, - false // last false is to not bother with x-ray + false // false so we can handle anti-X-Ray ourselves ); + if (obfuscateAntiXRay && nmsWorld.chunkPacketBlockController instanceof ChunkPacketBlockControllerAntiXray antiXray) { + ChunkPacketInfoAntiXray info = antiXray.getChunkPacketInfo(packet, levelChunk); + info.setNearbyChunks( + nmsWorld.getChunkIfLoaded(chunkX - 1, chunkZ), + nmsWorld.getChunkIfLoaded(chunkX + 1, chunkZ), + nmsWorld.getChunkIfLoaded(chunkX, chunkZ - 1), + nmsWorld.getChunkIfLoaded(chunkX, chunkZ + 1) + ); + fieldChunkData.set(packet, new ClientboundLevelChunkPacketData(levelChunk, info)); + antiXray.obfuscate(info); + } } else { // deprecated on paper - deprecation suppressed packet = new ClientboundLevelChunkWithLightPacket( @@ -390,6 +416,8 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int ); } nearbyPlayers(nmsWorld, coordIntPair).forEach(p -> p.connection.send(packet)); + } catch (IllegalAccessException e) { + LOGGER.error("Failed to reflectively apply anti x-ray data", e); } finally { NMSAdapter.endChunkPacketSend(nmsWorld.getWorld().getName(), pair, lockHolder); } diff --git a/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightStarlightRelighter.java b/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightStarlightRelighter.java index b92835a82c..b99e601708 100644 --- a/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightStarlightRelighter.java +++ b/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightStarlightRelighter.java @@ -68,7 +68,7 @@ protected void postProcessChunks(Set coords) { int x = pos.x; int z = pos.z; if (delay) { // we still need to send the block changes of that chunk - PaperweightPlatformAdapter.sendChunk(new IntPair(x, z), serverLevel, x, z); + PaperweightPlatformAdapter.sendChunk(new IntPair(x, z), serverLevel, x, z, this.obfuscateAntiXRay); } serverLevel.getChunkSource().removeTicketAtLevel(FAWE_TICKET, pos, LIGHT_LEVEL, Unit.INSTANCE); } diff --git a/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext.fawe/v1_20_R3/PaperweightAdapter.java b/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext.fawe/v1_20_R3/PaperweightAdapter.java index c0d9612302..723e71f902 100644 --- a/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext.fawe/v1_20_R3/PaperweightAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext.fawe/v1_20_R3/PaperweightAdapter.java @@ -862,7 +862,8 @@ private ResourceKey getWorldDimKey(Environment env) { SideEffect.HISTORY, SideEffect.HEIGHTMAPS, SideEffect.LIGHTING, - SideEffect.NEIGHBORS + SideEffect.NEIGHBORS, + SideEffect.PAPER_ANTI_XRAY //FAWE end ); diff --git a/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightFaweAdapter.java b/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightFaweAdapter.java index ba8de057b9..673bee813b 100644 --- a/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightFaweAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightFaweAdapter.java @@ -308,7 +308,8 @@ public BaseBlock getFullBlock(final Location location) { SideEffect.HISTORY, SideEffect.HEIGHTMAPS, SideEffect.LIGHTING, - SideEffect.NEIGHBORS + SideEffect.NEIGHBORS, + SideEffect.PAPER_ANTI_XRAY ); @Override diff --git a/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightFaweWorldNativeAccess.java b/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightFaweWorldNativeAccess.java index 4fb3e04851..6ae47cf56c 100644 --- a/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightFaweWorldNativeAccess.java +++ b/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightFaweWorldNativeAccess.java @@ -252,7 +252,10 @@ public void run(Object value) { return; } for (IntPair chunk : toSend) { - PaperweightPlatformAdapter.sendChunk(chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z()); + PaperweightPlatformAdapter.sendChunk( + chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z(), + sideEffectSet != null && sideEffectSet.shouldApply(SideEffect.PAPER_ANTI_XRAY) + ); } } }; @@ -268,7 +271,10 @@ public void run(Object value) { sideEffectSet != null && sideEffectSet.shouldApply(SideEffect.UPDATE) )); for (IntPair chunk : cachedChunksToSend) { - PaperweightPlatformAdapter.sendChunk(chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z()); + PaperweightPlatformAdapter.sendChunk( + chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z(), + sideEffectSet != null && sideEffectSet.shouldApply(SideEffect.PAPER_ANTI_XRAY) + ); } } }; diff --git a/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightGetBlocks.java b/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightGetBlocks.java index b08afe5456..3340497955 100644 --- a/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightGetBlocks.java +++ b/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightGetBlocks.java @@ -748,7 +748,7 @@ protected > T internalCall( if (!set .getSideEffectSet() .shouldApply(SideEffect.LIGHTING) || !Settings.settings().LIGHTING.DELAY_PACKET_SENDING || finalMask == 0 && biomes != null) { - this.send(); + this.send(set.getSideEffectSet().shouldApply(SideEffect.PAPER_ANTI_XRAY)); } if (finalizer != null) { finalizer.run(); @@ -789,9 +789,9 @@ private void updateGet( } @Override - public void send() { + public void send(boolean obfuscateAntiXRay) { synchronized (sendLock) { - PaperweightPlatformAdapter.sendChunk(new IntPair(chunkX, chunkZ), serverLevel, chunkX, chunkZ); + PaperweightPlatformAdapter.sendChunk(new IntPair(chunkX, chunkZ), serverLevel, chunkX, chunkZ, obfuscateAntiXRay); } } diff --git a/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightPlatformAdapter.java b/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightPlatformAdapter.java index 1d12d7b583..56b829e4a0 100644 --- a/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightPlatformAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightPlatformAdapter.java @@ -1,5 +1,7 @@ package com.sk89q.worldedit.bukkit.adapter.impl.fawe.v1_20_R3; +import com.destroystokyo.paper.antixray.ChunkPacketBlockControllerAntiXray; +import com.destroystokyo.paper.antixray.ChunkPacketInfoAntiXray; import com.destroystokyo.paper.util.maplist.EntityList; import com.fastasyncworldedit.bukkit.adapter.CachedBukkitAdapter; import com.fastasyncworldedit.bukkit.adapter.DelegateSemaphore; @@ -25,6 +27,7 @@ import net.minecraft.core.Holder; import net.minecraft.core.IdMap; import net.minecraft.core.Registry; +import net.minecraft.network.protocol.game.ClientboundLevelChunkPacketData; import net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ChunkHolder; @@ -106,6 +109,8 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { private static final Field fieldRemove; + private static final Field fieldChunkData; + private static final Logger LOGGER = LogManagerCompat.getLogger(); static final boolean POST_CHUNK_REWRITE; @@ -211,6 +216,16 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { ); palettedContaienrGet.setAccessible(true); PALETTED_CONTAINER_GET = lookup.unreflect(palettedContaienrGet); + + if (PaperLib.isPaper()) { + fieldChunkData = ClientboundLevelChunkWithLightPacket.class.getDeclaredField(Refraction.pickName( + "chunkData", + "d" + )); + fieldChunkData.setAccessible(true); + } else { + fieldChunkData = null; // not needed on Spigot as we don't touch Anti-X-Ray there + } } catch (RuntimeException | Error e) { throw e; } catch (Exception e) { @@ -343,7 +358,7 @@ public static ChunkHolder getPlayerChunk(ServerLevel nmsWorld, final int chunkX, } @SuppressWarnings("deprecation") - public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int chunkZ) { + public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int chunkZ, boolean obfuscateAntiXRay) { ChunkHolder chunkHolder = getPlayerChunk(nmsWorld, chunkX, chunkZ); if (chunkHolder == null) { return; @@ -378,8 +393,19 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int nmsWorld.getChunkSource().getLightEngine(), null, null, - false // last false is to not bother with x-ray + false // false so we can handle anti-X-Ray ourselves ); + if (obfuscateAntiXRay && nmsWorld.chunkPacketBlockController instanceof ChunkPacketBlockControllerAntiXray antiXray) { + ChunkPacketInfoAntiXray info = antiXray.getChunkPacketInfo(packet, levelChunk); + info.setNearbyChunks( + nmsWorld.getChunkIfLoaded(chunkX - 1, chunkZ), + nmsWorld.getChunkIfLoaded(chunkX + 1, chunkZ), + nmsWorld.getChunkIfLoaded(chunkX, chunkZ - 1), + nmsWorld.getChunkIfLoaded(chunkX, chunkZ + 1) + ); + fieldChunkData.set(packet, new ClientboundLevelChunkPacketData(levelChunk, info)); + antiXray.obfuscate(info); + } } else { // deprecated on paper - deprecation suppressed packet = new ClientboundLevelChunkWithLightPacket( @@ -390,6 +416,8 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int ); } nearbyPlayers(nmsWorld, coordIntPair).forEach(p -> p.connection.send(packet)); + } catch (IllegalAccessException e) { + LOGGER.error("Failed to reflectively apply anti x-ray data", e); } finally { NMSAdapter.endChunkPacketSend(nmsWorld.getWorld().getName(), pair, lockHolder); } diff --git a/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightStarlightRelighter.java b/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightStarlightRelighter.java index a1ce327f9c..c2fb7f73d7 100644 --- a/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightStarlightRelighter.java +++ b/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightStarlightRelighter.java @@ -68,7 +68,7 @@ protected void postProcessChunks(Set coords) { int x = pos.x; int z = pos.z; if (delay) { // we still need to send the block changes of that chunk - PaperweightPlatformAdapter.sendChunk(new IntPair(x, z), serverLevel, x, z); + PaperweightPlatformAdapter.sendChunk(new IntPair(x, z), serverLevel, x, z, this.obfuscateAntiXRay); } serverLevel.getChunkSource().removeTicketAtLevel(FAWE_TICKET, pos, LIGHT_LEVEL, Unit.INSTANCE); } diff --git a/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext.fawe/v1_20_R4/PaperweightAdapter.java b/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext.fawe/v1_20_R4/PaperweightAdapter.java index 970b45faec..cbe85f0bbf 100644 --- a/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext.fawe/v1_20_R4/PaperweightAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext.fawe/v1_20_R4/PaperweightAdapter.java @@ -886,7 +886,8 @@ private ResourceKey getWorldDimKey(Environment env) { SideEffect.HISTORY, SideEffect.HEIGHTMAPS, SideEffect.LIGHTING, - SideEffect.NEIGHBORS + SideEffect.NEIGHBORS, + SideEffect.PAPER_ANTI_XRAY //FAWE end ); diff --git a/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightFaweAdapter.java b/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightFaweAdapter.java index dae0b48b92..9d21b284f1 100644 --- a/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightFaweAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightFaweAdapter.java @@ -317,7 +317,8 @@ public BaseBlock getFullBlock(final Location location) { SideEffect.HISTORY, SideEffect.HEIGHTMAPS, SideEffect.LIGHTING, - SideEffect.NEIGHBORS + SideEffect.NEIGHBORS, + SideEffect.PAPER_ANTI_XRAY ); @Override diff --git a/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightFaweWorldNativeAccess.java b/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightFaweWorldNativeAccess.java index 4fa9988b81..b8f4a8bc5b 100644 --- a/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightFaweWorldNativeAccess.java +++ b/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightFaweWorldNativeAccess.java @@ -253,7 +253,10 @@ public void run(Object value) { return; } for (IntPair chunk : toSend) { - PaperweightPlatformAdapter.sendChunk(chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z()); + PaperweightPlatformAdapter.sendChunk( + chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z(), + sideEffectSet != null && sideEffectSet.shouldApply(SideEffect.PAPER_ANTI_XRAY) + ); } } }; @@ -269,7 +272,10 @@ public void run(Object value) { sideEffectSet != null && sideEffectSet.shouldApply(SideEffect.UPDATE) )); for (IntPair chunk : cachedChunksToSend) { - PaperweightPlatformAdapter.sendChunk(chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z()); + PaperweightPlatformAdapter.sendChunk( + chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z(), + sideEffectSet != null && sideEffectSet.shouldApply(SideEffect.PAPER_ANTI_XRAY) + ); } } }; diff --git a/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightGetBlocks.java b/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightGetBlocks.java index a03f3d9475..f65f2f6d8b 100644 --- a/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightGetBlocks.java +++ b/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightGetBlocks.java @@ -749,7 +749,7 @@ protected > T internalCall( if (!set .getSideEffectSet() .shouldApply(SideEffect.LIGHTING) || !Settings.settings().LIGHTING.DELAY_PACKET_SENDING || finalMask == 0 && biomes != null) { - this.send(); + this.send(set.getSideEffectSet().shouldApply(SideEffect.PAPER_ANTI_XRAY)); } if (finalizer != null) { finalizer.run(); @@ -790,9 +790,9 @@ private void updateGet( } @Override - public void send() { + public void send(boolean obfuscateAntiXRay) { synchronized (sendLock) { - PaperweightPlatformAdapter.sendChunk(new IntPair(chunkX, chunkZ), serverLevel, chunkX, chunkZ); + PaperweightPlatformAdapter.sendChunk(new IntPair(chunkX, chunkZ), serverLevel, chunkX, chunkZ, obfuscateAntiXRay); } } diff --git a/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightPlatformAdapter.java b/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightPlatformAdapter.java index 3f59f2bb89..947a93ad2e 100644 --- a/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightPlatformAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightPlatformAdapter.java @@ -1,5 +1,7 @@ package com.sk89q.worldedit.bukkit.adapter.impl.fawe.v1_20_R4; +import com.destroystokyo.paper.antixray.ChunkPacketBlockControllerAntiXray; +import com.destroystokyo.paper.antixray.ChunkPacketInfoAntiXray; import com.destroystokyo.paper.util.maplist.EntityList; import com.fastasyncworldedit.bukkit.adapter.CachedBukkitAdapter; import com.fastasyncworldedit.bukkit.adapter.DelegateSemaphore; @@ -24,6 +26,7 @@ import net.minecraft.core.Holder; import net.minecraft.core.IdMap; import net.minecraft.core.Registry; +import net.minecraft.network.protocol.game.ClientboundLevelChunkPacketData; import net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ChunkHolder; @@ -105,6 +108,8 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { private static final Field fieldRemove; + private static final Field fieldChunkData; + private static final Logger LOGGER = LogManagerCompat.getLogger(); static final boolean POST_CHUNK_REWRITE; @@ -210,6 +215,16 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { ); palettedContaienrGet.setAccessible(true); PALETTED_CONTAINER_GET = lookup.unreflect(palettedContaienrGet); + + if (PaperLib.isPaper()) { + fieldChunkData = ClientboundLevelChunkWithLightPacket.class.getDeclaredField(Refraction.pickName( + "chunkData", + "d" + )); + fieldChunkData.setAccessible(true); + } else { + fieldChunkData = null; // not needed on Spigot as we don't touch Anti-X-Ray there + } } catch (RuntimeException | Error e) { throw e; } catch (Exception e) { @@ -342,7 +357,7 @@ public static ChunkHolder getPlayerChunk(ServerLevel nmsWorld, final int chunkX, } @SuppressWarnings("deprecation") - public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int chunkZ) { + public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int chunkZ, boolean obfuscateAntiXRay) { ChunkHolder chunkHolder = getPlayerChunk(nmsWorld, chunkX, chunkZ); if (chunkHolder == null) { return; @@ -372,8 +387,19 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int nmsWorld.getChunkSource().getLightEngine(), null, null, - false // last false is to not bother with x-ray + false // false so we can handle anti-X-Ray ourselves ); + if (obfuscateAntiXRay && nmsWorld.chunkPacketBlockController instanceof ChunkPacketBlockControllerAntiXray antiXray) { + ChunkPacketInfoAntiXray info = antiXray.getChunkPacketInfo(packet, levelChunk); + info.setNearbyChunks( + nmsWorld.getChunkIfLoaded(chunkX - 1, chunkZ), + nmsWorld.getChunkIfLoaded(chunkX + 1, chunkZ), + nmsWorld.getChunkIfLoaded(chunkX, chunkZ - 1), + nmsWorld.getChunkIfLoaded(chunkX, chunkZ + 1) + ); + fieldChunkData.set(packet, new ClientboundLevelChunkPacketData(levelChunk, info)); + antiXray.obfuscate(info); + } } else { // deprecated on paper - deprecation suppressed packet = new ClientboundLevelChunkWithLightPacket( @@ -384,6 +410,8 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int ); } nearbyPlayers(nmsWorld, coordIntPair).forEach(p -> p.connection.send(packet)); + } catch (IllegalAccessException e) { + LOGGER.error("Failed to reflectively apply anti x-ray data", e); } finally { NMSAdapter.endChunkPacketSend(nmsWorld.getWorld().getName(), pair, lockHolder); } diff --git a/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightStarlightRelighter.java b/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightStarlightRelighter.java index c7b61575c8..305bdbfa18 100644 --- a/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightStarlightRelighter.java +++ b/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightStarlightRelighter.java @@ -68,7 +68,7 @@ protected void postProcessChunks(Set coords) { int x = pos.x; int z = pos.z; if (delay) { // we still need to send the block changes of that chunk - PaperweightPlatformAdapter.sendChunk(new IntPair(x, z), serverLevel, x, z); + PaperweightPlatformAdapter.sendChunk(new IntPair(x, z), serverLevel, x, z, this.obfuscateAntiXRay); } serverLevel.getChunkSource().removeTicketAtLevel(FAWE_TICKET, pos, LIGHT_LEVEL, Unit.INSTANCE); } diff --git a/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_21_R1/PaperweightAdapter.java b/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_21_R1/PaperweightAdapter.java index a021cccf3f..fda7876561 100644 --- a/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_21_R1/PaperweightAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_21_R1/PaperweightAdapter.java @@ -887,7 +887,8 @@ private ResourceKey getWorldDimKey(Environment env) { SideEffect.HISTORY, SideEffect.HEIGHTMAPS, SideEffect.LIGHTING, - SideEffect.NEIGHBORS + SideEffect.NEIGHBORS, + SideEffect.PAPER_ANTI_XRAY //FAWE end ); diff --git a/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightFaweAdapter.java b/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightFaweAdapter.java index 7d2e9ced35..2b25af0e5f 100644 --- a/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightFaweAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightFaweAdapter.java @@ -317,7 +317,8 @@ public BaseBlock getFullBlock(final Location location) { SideEffect.HISTORY, SideEffect.HEIGHTMAPS, SideEffect.LIGHTING, - SideEffect.NEIGHBORS + SideEffect.NEIGHBORS, + SideEffect.PAPER_ANTI_XRAY ); @Override diff --git a/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightFaweWorldNativeAccess.java b/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightFaweWorldNativeAccess.java index f7c2dc8e84..bdea87876a 100644 --- a/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightFaweWorldNativeAccess.java +++ b/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightFaweWorldNativeAccess.java @@ -253,7 +253,10 @@ public void run(Object value) { return; } for (IntPair chunk : toSend) { - PaperweightPlatformAdapter.sendChunk(chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z()); + PaperweightPlatformAdapter.sendChunk( + chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z(), + sideEffectSet != null && sideEffectSet.shouldApply(SideEffect.PAPER_ANTI_XRAY) + ); } } }; @@ -269,7 +272,10 @@ public void run(Object value) { sideEffectSet != null && sideEffectSet.shouldApply(SideEffect.UPDATE) )); for (IntPair chunk : cachedChunksToSend) { - PaperweightPlatformAdapter.sendChunk(chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z()); + PaperweightPlatformAdapter.sendChunk( + chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z(), + sideEffectSet != null && sideEffectSet.shouldApply(SideEffect.PAPER_ANTI_XRAY) + ); } } }; diff --git a/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightGetBlocks.java b/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightGetBlocks.java index 9fbc1ef64e..0604dbf81c 100644 --- a/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightGetBlocks.java +++ b/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightGetBlocks.java @@ -746,7 +746,7 @@ protected > T internalCall( if (!set .getSideEffectSet() .shouldApply(SideEffect.LIGHTING) || !Settings.settings().LIGHTING.DELAY_PACKET_SENDING || finalMask == 0 && biomes != null) { - this.send(); + this.send(set.getSideEffectSet().shouldApply(SideEffect.PAPER_ANTI_XRAY)); } if (finalizer != null) { finalizer.run(); @@ -824,9 +824,9 @@ private void updateGet( } @Override - public void send() { + public void send(boolean obfuscateAntiXRay) { synchronized (sendLock) { - PaperweightPlatformAdapter.sendChunk(new IntPair(chunkX, chunkZ), serverLevel, chunkX, chunkZ); + PaperweightPlatformAdapter.sendChunk(new IntPair(chunkX, chunkZ), serverLevel, chunkX, chunkZ, obfuscateAntiXRay); } } diff --git a/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightPlatformAdapter.java b/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightPlatformAdapter.java index 9749ed6864..7b99020554 100644 --- a/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightPlatformAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightPlatformAdapter.java @@ -2,6 +2,8 @@ import ca.spottedleaf.moonrise.patches.chunk_system.level.entity.ChunkEntitySlices; import ca.spottedleaf.moonrise.patches.chunk_system.scheduling.ChunkHolderManager; +import com.destroystokyo.paper.antixray.ChunkPacketBlockControllerAntiXray; +import com.destroystokyo.paper.antixray.ChunkPacketInfoAntiXray; import com.fastasyncworldedit.bukkit.adapter.CachedBukkitAdapter; import com.fastasyncworldedit.bukkit.adapter.DelegateSemaphore; import com.fastasyncworldedit.bukkit.adapter.NMSAdapter; @@ -24,6 +26,7 @@ import net.minecraft.core.Holder; import net.minecraft.core.IdMap; import net.minecraft.core.Registry; +import net.minecraft.network.protocol.game.ClientboundLevelChunkPacketData; import net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ChunkHolder; @@ -104,6 +107,8 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { private static final Field fieldRemove; + private static final Field fieldChunkData; + private static final Logger LOGGER = LogManagerCompat.getLogger(); private static Method PAPER_CHUNK_GEN_ALL_ENTITIES; @@ -194,6 +199,16 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { ); palettedContaienrGet.setAccessible(true); PALETTED_CONTAINER_GET = lookup.unreflect(palettedContaienrGet); + + if (PaperLib.isPaper()) { + fieldChunkData = ClientboundLevelChunkWithLightPacket.class.getDeclaredField(Refraction.pickName( + "chunkData", + "d" + )); + fieldChunkData.setAccessible(true); + } else { + fieldChunkData = null; // not needed on Spigot as we don't touch Anti-X-Ray there + } } catch (RuntimeException | Error e) { throw e; } catch (Exception e) { @@ -326,7 +341,7 @@ public static ChunkHolder getPlayerChunk(ServerLevel nmsWorld, final int chunkX, } @SuppressWarnings("deprecation") - public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int chunkZ) { + public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int chunkZ, boolean obfuscateAntiXRay) { ChunkHolder chunkHolder = getPlayerChunk(nmsWorld, chunkX, chunkZ); if (chunkHolder == null) { return; @@ -356,8 +371,19 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int nmsWorld.getChunkSource().getLightEngine(), null, null, - false // last false is to not bother with x-ray + false // false so we can handle anti-X-Ray ourselves ); + if (obfuscateAntiXRay && nmsWorld.chunkPacketBlockController instanceof ChunkPacketBlockControllerAntiXray antiXray) { + ChunkPacketInfoAntiXray info = antiXray.getChunkPacketInfo(packet, levelChunk); + info.setNearbyChunks( + nmsWorld.getChunkIfLoaded(chunkX - 1, chunkZ), + nmsWorld.getChunkIfLoaded(chunkX + 1, chunkZ), + nmsWorld.getChunkIfLoaded(chunkX, chunkZ - 1), + nmsWorld.getChunkIfLoaded(chunkX, chunkZ + 1) + ); + fieldChunkData.set(packet, new ClientboundLevelChunkPacketData(levelChunk, info)); + antiXray.obfuscate(info); + } } else { // deprecated on paper - deprecation suppressed packet = new ClientboundLevelChunkWithLightPacket( @@ -368,6 +394,8 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int ); } nearbyPlayers(nmsWorld, coordIntPair).forEach(p -> p.connection.send(packet)); + } catch (IllegalAccessException e) { + LOGGER.error("Failed to reflectively apply anti x-ray data", e); } finally { NMSAdapter.endChunkPacketSend(nmsWorld.getWorld().getName(), pair, lockHolder); } diff --git a/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightStarlightRelighter.java b/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightStarlightRelighter.java index aa7b19b39d..9f37c20a34 100644 --- a/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightStarlightRelighter.java +++ b/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightStarlightRelighter.java @@ -71,7 +71,7 @@ protected void postProcessChunks(Set coords) { int x = pos.x; int z = pos.z; if (delay) { // we still need to send the block changes of that chunk - PaperweightPlatformAdapter.sendChunk(new IntPair(x, z), serverLevel, x, z); + PaperweightPlatformAdapter.sendChunk(new IntPair(x, z), serverLevel, x, z, this.obfuscateAntiXRay); } serverLevel.getChunkSource().removeTicketAtLevel(FAWE_TICKET, pos, LIGHT_LEVEL, Unit.INSTANCE); } diff --git a/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_21_4/PaperweightAdapter.java b/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_21_4/PaperweightAdapter.java index 6873a51229..9b7453599c 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_21_4/PaperweightAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_21_4/PaperweightAdapter.java @@ -843,7 +843,8 @@ private ResourceKey getWorldDimKey(Environment env) { SideEffect.HISTORY, SideEffect.HEIGHTMAPS, SideEffect.LIGHTING, - SideEffect.NEIGHBORS + SideEffect.NEIGHBORS, + SideEffect.PAPER_ANTI_XRAY //FAWE end ); diff --git a/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightFaweAdapter.java b/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightFaweAdapter.java index 7c6e608ea6..9d9ffa4928 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightFaweAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightFaweAdapter.java @@ -303,7 +303,8 @@ public BaseBlock getFullBlock(final Location location) { SideEffect.HISTORY, SideEffect.HEIGHTMAPS, SideEffect.LIGHTING, - SideEffect.NEIGHBORS + SideEffect.NEIGHBORS, + SideEffect.PAPER_ANTI_XRAY ); @Override diff --git a/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightFaweWorldNativeAccess.java b/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightFaweWorldNativeAccess.java index 60a1d5c13a..067358e2b5 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightFaweWorldNativeAccess.java +++ b/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightFaweWorldNativeAccess.java @@ -254,7 +254,10 @@ public void run(Object value) { return; } for (IntPair chunk : toSend) { - PaperweightPlatformAdapter.sendChunk(chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z()); + PaperweightPlatformAdapter.sendChunk( + chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z(), + sideEffectSet != null && sideEffectSet.shouldApply(SideEffect.PAPER_ANTI_XRAY) + ); } } }; @@ -270,7 +273,10 @@ public void run(Object value) { sideEffectSet != null && sideEffectSet.shouldApply(SideEffect.UPDATE) )); for (IntPair chunk : cachedChunksToSend) { - PaperweightPlatformAdapter.sendChunk(chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z()); + PaperweightPlatformAdapter.sendChunk( + chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z(), + sideEffectSet != null && sideEffectSet.shouldApply(SideEffect.PAPER_ANTI_XRAY) + ); } } }; diff --git a/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightGetBlocks.java b/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightGetBlocks.java index c2bbe67998..419dd6b587 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightGetBlocks.java +++ b/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightGetBlocks.java @@ -742,7 +742,7 @@ protected > T internalCall( if (!set .getSideEffectSet() .shouldApply(SideEffect.LIGHTING) || !Settings.settings().LIGHTING.DELAY_PACKET_SENDING || finalMask == 0 && biomes != null) { - this.send(); + this.send(set.getSideEffectSet().shouldApply(SideEffect.PAPER_ANTI_XRAY)); } if (finalizer != null) { finalizer.run(); @@ -783,9 +783,9 @@ private void updateGet( } @Override - public void send() { + public void send(boolean obfuscateAntiXRay) { synchronized (sendLock) { - PaperweightPlatformAdapter.sendChunk(new IntPair(chunkX, chunkZ), serverLevel, chunkX, chunkZ); + PaperweightPlatformAdapter.sendChunk(new IntPair(chunkX, chunkZ), serverLevel, chunkX, chunkZ, obfuscateAntiXRay); } } diff --git a/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightPlatformAdapter.java b/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightPlatformAdapter.java index 7a8c8afb78..167e7db3ca 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightPlatformAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightPlatformAdapter.java @@ -20,10 +20,13 @@ import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockTypesCache; import io.papermc.lib.PaperLib; +import io.papermc.paper.antixray.ChunkPacketBlockControllerAntiXray; +import io.papermc.paper.antixray.ChunkPacketInfoAntiXray; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; import net.minecraft.core.IdMap; import net.minecraft.core.Registry; +import net.minecraft.network.protocol.game.ClientboundLevelChunkPacketData; import net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ChunkHolder; @@ -103,6 +106,8 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { private static final Field fieldRemove; + private static final Field fieldChunkData; + private static final Logger LOGGER = LogManagerCompat.getLogger(); private static Field SERVER_LEVEL_ENTITY_MANAGER; @@ -186,6 +191,16 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { ); palettedContaienrGet.setAccessible(true); PALETTED_CONTAINER_GET = lookup.unreflect(palettedContaienrGet); + + if (PaperLib.isPaper()) { + fieldChunkData = ClientboundLevelChunkWithLightPacket.class.getDeclaredField(Refraction.pickName( + "chunkData", + "d" + )); + fieldChunkData.setAccessible(true); + } else { + fieldChunkData = null; // not needed on Spigot as we don't touch Anti-X-Ray there + } } catch (RuntimeException | Error e) { throw e; } catch (Exception e) { @@ -318,7 +333,7 @@ public static ChunkHolder getPlayerChunk(ServerLevel nmsWorld, final int chunkX, } @SuppressWarnings("deprecation") - public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int chunkZ) { + public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int chunkZ, boolean obfuscateAntiXRay) { ChunkHolder chunkHolder = getPlayerChunk(nmsWorld, chunkX, chunkZ); if (chunkHolder == null) { return; @@ -348,8 +363,19 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int nmsWorld.getLightEngine(), null, null, - false // last false is to not bother with x-ray + false // false so we can handle anti-X-Ray ourselves ); + if (obfuscateAntiXRay && nmsWorld.chunkPacketBlockController instanceof ChunkPacketBlockControllerAntiXray antiXray) { + ChunkPacketInfoAntiXray info = antiXray.getChunkPacketInfo(packet, levelChunk); + info.setNearbyChunks( + nmsWorld.getChunkIfLoaded(chunkX - 1, chunkZ), + nmsWorld.getChunkIfLoaded(chunkX + 1, chunkZ), + nmsWorld.getChunkIfLoaded(chunkX, chunkZ - 1), + nmsWorld.getChunkIfLoaded(chunkX, chunkZ + 1) + ); + fieldChunkData.set(packet, new ClientboundLevelChunkPacketData(levelChunk, info)); + antiXray.obfuscate(info); + } } else { // deprecated on paper - deprecation suppressed packet = new ClientboundLevelChunkWithLightPacket( @@ -360,6 +386,8 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int ); } nearbyPlayers(nmsWorld, pos).forEach(p -> p.connection.send(packet)); + } catch (IllegalAccessException e) { + LOGGER.error("Failed to reflectively apply anti x-ray data", e); } finally { NMSAdapter.endChunkPacketSend(nmsWorld.getWorld().getName(), pair, lockHolder); } diff --git a/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightStarlightRelighter.java b/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightStarlightRelighter.java index 42fa1d6341..18d9e1aea7 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightStarlightRelighter.java +++ b/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightStarlightRelighter.java @@ -71,7 +71,7 @@ protected void postProcessChunks(Set coords) { int x = pos.x; int z = pos.z; if (delay) { // we still need to send the block changes of that chunk - PaperweightPlatformAdapter.sendChunk(new IntPair(x, z), serverLevel, x, z); + PaperweightPlatformAdapter.sendChunk(new IntPair(x, z), serverLevel, x, z, this.obfuscateAntiXRay); } serverLevel.getChunkSource().removeTicketAtLevel(FAWE_TICKET, pos, LIGHT_LEVEL, Unit.INSTANCE); } diff --git a/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_21_5/PaperweightAdapter.java b/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_21_5/PaperweightAdapter.java index 381aea3285..35942928dd 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_21_5/PaperweightAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_21_5/PaperweightAdapter.java @@ -837,7 +837,8 @@ private ResourceKey getWorldDimKey(Environment env) { SideEffect.VALIDATION, SideEffect.ENTITY_AI, SideEffect.EVENTS, - SideEffect.UPDATE + SideEffect.UPDATE, + SideEffect.PAPER_ANTI_XRAY ); @Override diff --git a/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightFaweAdapter.java b/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightFaweAdapter.java index 030fe92d51..c4b9cb3f44 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightFaweAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightFaweAdapter.java @@ -303,7 +303,8 @@ public BaseBlock getFullBlock(final Location location) { SideEffect.HISTORY, SideEffect.HEIGHTMAPS, SideEffect.LIGHTING, - SideEffect.NEIGHBORS + SideEffect.NEIGHBORS, + SideEffect.PAPER_ANTI_XRAY ); @Override diff --git a/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightFaweWorldNativeAccess.java b/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightFaweWorldNativeAccess.java index f5a49fbb67..a349c091ef 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightFaweWorldNativeAccess.java +++ b/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightFaweWorldNativeAccess.java @@ -254,7 +254,10 @@ public void run(Object value) { return; } for (IntPair chunk : toSend) { - PaperweightPlatformAdapter.sendChunk(chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z()); + PaperweightPlatformAdapter.sendChunk( + chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z(), + sideEffectSet != null && sideEffectSet.shouldApply(SideEffect.PAPER_ANTI_XRAY) + ); } } }; @@ -270,7 +273,10 @@ public void run(Object value) { sideEffectSet.shouldApply(SideEffect.UPDATE) ? 0 : 512 )); for (IntPair chunk : cachedChunksToSend) { - PaperweightPlatformAdapter.sendChunk(chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z()); + PaperweightPlatformAdapter.sendChunk( + chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z(), + sideEffectSet != null && sideEffectSet.shouldApply(SideEffect.PAPER_ANTI_XRAY) + ); } } }; diff --git a/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightGetBlocks.java b/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightGetBlocks.java index 77e918f003..67b7bc82f3 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightGetBlocks.java +++ b/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightGetBlocks.java @@ -742,7 +742,7 @@ protected > T internalCall( if (!set .getSideEffectSet() .shouldApply(SideEffect.LIGHTING) || !Settings.settings().LIGHTING.DELAY_PACKET_SENDING || finalMask == 0 && biomes != null) { - this.send(); + this.send(set.getSideEffectSet().shouldApply(SideEffect.PAPER_ANTI_XRAY)); } if (finalizer != null) { finalizer.run(); @@ -783,9 +783,9 @@ private void updateGet( } @Override - public void send() { + public void send(boolean obfuscateAntiXRay) { synchronized (sendLock) { - PaperweightPlatformAdapter.sendChunk(new IntPair(chunkX, chunkZ), serverLevel, chunkX, chunkZ); + PaperweightPlatformAdapter.sendChunk(new IntPair(chunkX, chunkZ), serverLevel, chunkX, chunkZ, obfuscateAntiXRay); } } diff --git a/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightPlatformAdapter.java b/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightPlatformAdapter.java index e2f39600da..9f31b887e3 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightPlatformAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightPlatformAdapter.java @@ -20,10 +20,13 @@ import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockTypesCache; import io.papermc.lib.PaperLib; +import io.papermc.paper.antixray.ChunkPacketBlockControllerAntiXray; +import io.papermc.paper.antixray.ChunkPacketInfoAntiXray; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; import net.minecraft.core.IdMap; import net.minecraft.core.Registry; +import net.minecraft.network.protocol.game.ClientboundLevelChunkPacketData; import net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ChunkHolder; @@ -102,6 +105,8 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { private static final Field fieldRemove; + private static final Field fieldChunkData; + private static final Logger LOGGER = LogManagerCompat.getLogger(); private static Field SERVER_LEVEL_ENTITY_MANAGER; @@ -185,6 +190,16 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { ); palettedContainerGet.setAccessible(true); PALETTED_CONTAINER_GET = lookup.unreflect(palettedContainerGet); + + if (PaperLib.isPaper()) { + fieldChunkData = ClientboundLevelChunkWithLightPacket.class.getDeclaredField(Refraction.pickName( + "chunkData", + "d" + )); + fieldChunkData.setAccessible(true); + } else { + fieldChunkData = null; // not needed on Spigot as we don't touch Anti-X-Ray there + } } catch (RuntimeException | Error e) { throw e; } catch (Exception e) { @@ -317,7 +332,7 @@ public static ChunkHolder getPlayerChunk(ServerLevel nmsWorld, final int chunkX, } @SuppressWarnings("deprecation") - public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int chunkZ) { + public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int chunkZ, boolean obfuscateAntiXRay) { ChunkHolder chunkHolder = getPlayerChunk(nmsWorld, chunkX, chunkZ); if (chunkHolder == null) { return; @@ -347,8 +362,19 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int nmsWorld.getLightEngine(), null, null, - false // last false is to not bother with x-ray + false // false so we can handle anti-X-Ray ourselves ); + if (obfuscateAntiXRay && nmsWorld.chunkPacketBlockController instanceof ChunkPacketBlockControllerAntiXray antiXray) { + ChunkPacketInfoAntiXray info = antiXray.getChunkPacketInfo(packet, levelChunk); + info.setNearbyChunks( + nmsWorld.getChunkIfLoaded(chunkX - 1, chunkZ), + nmsWorld.getChunkIfLoaded(chunkX + 1, chunkZ), + nmsWorld.getChunkIfLoaded(chunkX, chunkZ - 1), + nmsWorld.getChunkIfLoaded(chunkX, chunkZ + 1) + ); + fieldChunkData.set(packet, new ClientboundLevelChunkPacketData(levelChunk, info)); + antiXray.obfuscate(info); + } } else { // deprecated on paper - deprecation suppressed packet = new ClientboundLevelChunkWithLightPacket( @@ -359,6 +385,8 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int ); } nearbyPlayers(nmsWorld, pos).forEach(p -> p.connection.send(packet)); + } catch (IllegalAccessException e) { + LOGGER.error("Failed to reflectively apply anti x-ray data", e); } finally { NMSAdapter.endChunkPacketSend(nmsWorld.getWorld().getName(), pair, lockHolder); } diff --git a/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightStarlightRelighter.java b/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightStarlightRelighter.java index 97f8fed3d7..5733039185 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightStarlightRelighter.java +++ b/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightStarlightRelighter.java @@ -72,7 +72,7 @@ protected void postProcessChunks(Set coords) { int x = pos.x; int z = pos.z; if (delay) { // we still need to send the block changes of that chunk - PaperweightPlatformAdapter.sendChunk(new IntPair(x, z), serverLevel, x, z); + PaperweightPlatformAdapter.sendChunk(new IntPair(x, z), serverLevel, x, z, this.obfuscateAntiXRay); } serverLevel.getChunkSource().removeTicketAtLevel(FAWE_TICKET, pos, LIGHT_LEVEL); } diff --git a/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_21_6/PaperweightAdapter.java b/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_21_6/PaperweightAdapter.java index 947e75d9f5..12bfd0e30d 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_21_6/PaperweightAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_21_6/PaperweightAdapter.java @@ -866,7 +866,8 @@ private ResourceKey getWorldDimKey(Environment env) { SideEffect.VALIDATION, SideEffect.ENTITY_AI, SideEffect.EVENTS, - SideEffect.UPDATE + SideEffect.UPDATE, + SideEffect.PAPER_ANTI_XRAY ); @Override diff --git a/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightFaweAdapter.java b/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightFaweAdapter.java index e9833694aa..36aa5268da 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightFaweAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightFaweAdapter.java @@ -313,7 +313,8 @@ public BaseBlock getFullBlock(final Location location) { SideEffect.HISTORY, SideEffect.HEIGHTMAPS, SideEffect.LIGHTING, - SideEffect.NEIGHBORS + SideEffect.NEIGHBORS, + SideEffect.PAPER_ANTI_XRAY ); @Override diff --git a/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightFaweWorldNativeAccess.java b/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightFaweWorldNativeAccess.java index e29ee82dbb..10ee827521 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightFaweWorldNativeAccess.java +++ b/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightFaweWorldNativeAccess.java @@ -259,7 +259,10 @@ public void run(Object value) { return; } for (IntPair chunk : toSend) { - PaperweightPlatformAdapter.sendChunk(chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z()); + PaperweightPlatformAdapter.sendChunk( + chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z(), + sideEffectSet != null && sideEffectSet.shouldApply(SideEffect.PAPER_ANTI_XRAY) + ); } } }; @@ -275,7 +278,10 @@ public void run(Object value) { sideEffectSet.shouldApply(SideEffect.UPDATE) ? 0 : 512 )); for (IntPair chunk : cachedChunksToSend) { - PaperweightPlatformAdapter.sendChunk(chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z()); + PaperweightPlatformAdapter.sendChunk( + chunk, getLevel().getWorld().getHandle(), chunk.x(), chunk.z(), + sideEffectSet != null && sideEffectSet.shouldApply(SideEffect.PAPER_ANTI_XRAY) + ); } } }; diff --git a/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightGetBlocks.java b/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightGetBlocks.java index d88bd0f3d3..e410396eea 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightGetBlocks.java +++ b/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightGetBlocks.java @@ -750,7 +750,7 @@ protected > T internalCall( if (!set .getSideEffectSet() .shouldApply(SideEffect.LIGHTING) || !Settings.settings().LIGHTING.DELAY_PACKET_SENDING || finalMask == 0 && biomes != null) { - this.send(); + this.send(set.getSideEffectSet().shouldApply(SideEffect.PAPER_ANTI_XRAY)); } if (finalizer != null) { finalizer.run(); @@ -791,9 +791,9 @@ private void updateGet( } @Override - public void send() { + public void send(boolean obfuscateAntiXRay) { synchronized (sendLock) { - PaperweightPlatformAdapter.sendChunk(new IntPair(chunkX, chunkZ), serverLevel, chunkX, chunkZ); + PaperweightPlatformAdapter.sendChunk(new IntPair(chunkX, chunkZ), serverLevel, chunkX, chunkZ, obfuscateAntiXRay); } } diff --git a/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightPlatformAdapter.java b/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightPlatformAdapter.java index 745c36229f..8dce6b98e2 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightPlatformAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightPlatformAdapter.java @@ -20,11 +20,14 @@ import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockTypesCache; import io.papermc.lib.PaperLib; +import io.papermc.paper.antixray.ChunkPacketBlockControllerAntiXray; +import io.papermc.paper.antixray.ChunkPacketInfoAntiXray; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; import net.minecraft.core.IdMap; import net.minecraft.core.Registry; import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.protocol.game.ClientboundLevelChunkPacketData; import net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket; import net.minecraft.server.MinecraftServer; import net.minecraft.server.dedicated.DedicatedServer; @@ -108,6 +111,8 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { private static final Field fieldRemove; + private static final Field fieldChunkData; + private static final Logger LOGGER = LogManagerCompat.getLogger(); private static Field SERVER_LEVEL_ENTITY_MANAGER; @@ -191,6 +196,16 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { ); palettedContainerGet.setAccessible(true); PALETTED_CONTAINER_GET = lookup.unreflect(palettedContainerGet); + + if (PaperLib.isPaper()) { + fieldChunkData = ClientboundLevelChunkWithLightPacket.class.getDeclaredField(Refraction.pickName( + "chunkData", + "d" + )); + fieldChunkData.setAccessible(true); + } else { + fieldChunkData = null; // not needed on Spigot as we don't touch Anti-X-Ray there + } } catch (RuntimeException | Error e) { throw e; } catch (Exception e) { @@ -346,7 +361,7 @@ public static ChunkHolder getPlayerChunk(ServerLevel nmsWorld, final int chunkX, } @SuppressWarnings("deprecation") - public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int chunkZ) { + public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int chunkZ, boolean obfuscateAntiXRay) { ChunkHolder chunkHolder = getPlayerChunk(nmsWorld, chunkX, chunkZ); if (chunkHolder == null) { return; @@ -376,8 +391,19 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int nmsWorld.getLightEngine(), null, null, - false // last false is to not bother with x-ray + false // false so we can handle anti-X-Ray ourselves ); + if (obfuscateAntiXRay && nmsWorld.chunkPacketBlockController instanceof ChunkPacketBlockControllerAntiXray antiXray) { + ChunkPacketInfoAntiXray info = antiXray.getChunkPacketInfo(packet, levelChunk); + info.setNearbyChunks( + nmsWorld.getChunkIfLoaded(chunkX - 1, chunkZ), + nmsWorld.getChunkIfLoaded(chunkX + 1, chunkZ), + nmsWorld.getChunkIfLoaded(chunkX, chunkZ - 1), + nmsWorld.getChunkIfLoaded(chunkX, chunkZ + 1) + ); + fieldChunkData.set(packet, new ClientboundLevelChunkPacketData(levelChunk, info)); + antiXray.obfuscate(info); + } } else { // deprecated on paper - deprecation suppressed packet = new ClientboundLevelChunkWithLightPacket( @@ -388,6 +414,8 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int ); } nearbyPlayers(nmsWorld, pos).forEach(p -> p.connection.send(packet)); + } catch (IllegalAccessException e) { + LOGGER.error("Failed to reflectively apply anti x-ray data", e); } finally { NMSAdapter.endChunkPacketSend(nmsWorld.getWorld().getName(), pair, lockHolder); } diff --git a/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightStarlightRelighter.java b/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightStarlightRelighter.java index b347475fea..98d086204b 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightStarlightRelighter.java +++ b/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightStarlightRelighter.java @@ -72,7 +72,7 @@ protected void postProcessChunks(Set coords) { int x = pos.x; int z = pos.z; if (delay) { // we still need to send the block changes of that chunk - PaperweightPlatformAdapter.sendChunk(new IntPair(x, z), serverLevel, x, z); + PaperweightPlatformAdapter.sendChunk(new IntPair(x, z), serverLevel, x, z, this.obfuscateAntiXRay); } serverLevel.getChunkSource().removeTicketAtLevel(FAWE_TICKET, pos, LIGHT_LEVEL); } diff --git a/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/adapter/AbstractBukkitGetBlocks.java b/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/adapter/AbstractBukkitGetBlocks.java index 97d0461cb7..50acdd6dd0 100644 --- a/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/adapter/AbstractBukkitGetBlocks.java +++ b/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/adapter/AbstractBukkitGetBlocks.java @@ -52,7 +52,7 @@ protected AbstractBukkitGetBlocks( this.chunkPos = new IntPair(chunkX, chunkZ); } - protected abstract void send(); + protected abstract void send(boolean obfuscateAntiXRay); protected abstract CompletableFuture ensureLoaded(ServerLevel serverLevel); diff --git a/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/adapter/NMSAdapter.java b/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/adapter/NMSAdapter.java index b2ff497de3..521f48a6eb 100644 --- a/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/adapter/NMSAdapter.java +++ b/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/adapter/NMSAdapter.java @@ -95,11 +95,11 @@ private static void mapPalette( } @Override - public void sendChunk(IChunkGet chunk, int mask, boolean lighting) { - if (!(chunk instanceof AbstractBukkitGetBlocks)) { + public void sendChunk(IChunkGet chunk, int mask, boolean lighting, boolean obfuscateAntiXRay) { + if (!(chunk instanceof AbstractBukkitGetBlocks abstractBukkitGetBlocks)) { throw new IllegalArgumentException("(IChunkGet) chunk not of type BukkitGetBlocks"); } - ((AbstractBukkitGetBlocks) chunk).send(); + abstractBukkitGetBlocks.send(obfuscateAntiXRay); } /** diff --git a/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/adapter/StarlightRelighter.java b/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/adapter/StarlightRelighter.java index 6ce77e165d..cd2eeb5560 100644 --- a/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/adapter/StarlightRelighter.java +++ b/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/adapter/StarlightRelighter.java @@ -6,6 +6,8 @@ import com.fastasyncworldedit.core.util.MathMan; import com.fastasyncworldedit.core.util.TaskManager; import com.sk89q.worldedit.internal.util.LogManagerCompat; +import com.sk89q.worldedit.util.SideEffect; +import io.papermc.lib.PaperLib; import it.unimi.dsi.fastutil.longs.Long2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.longs.LongArraySet; import it.unimi.dsi.fastutil.longs.LongIterator; @@ -41,10 +43,12 @@ public abstract class StarlightRelighter implements Rel private final ReentrantLock areaLock = new ReentrantLock(); private final NMSRelighter delegate; protected final SERVER_LEVEL serverLevel; + protected final boolean obfuscateAntiXRay; protected StarlightRelighter(SERVER_LEVEL serverLevel, IQueueExtent queue) { this.serverLevel = serverLevel; this.delegate = new NMSRelighter(queue); + this.obfuscateAntiXRay = PaperLib.isPaper() && queue.getSideEffectSet().shouldApply(SideEffect.PAPER_ANTI_XRAY); } protected Set convertChunkKeysToChunkPos(LongSet chunks) { diff --git a/worldedit-core/src/main/java/com/fastasyncworldedit/core/FAWEPlatformAdapterImpl.java b/worldedit-core/src/main/java/com/fastasyncworldedit/core/FAWEPlatformAdapterImpl.java index 9f9e175e7f..973d1ed422 100644 --- a/worldedit-core/src/main/java/com/fastasyncworldedit/core/FAWEPlatformAdapterImpl.java +++ b/worldedit-core/src/main/java/com/fastasyncworldedit/core/FAWEPlatformAdapterImpl.java @@ -1,9 +1,11 @@ package com.fastasyncworldedit.core; import com.fastasyncworldedit.core.queue.IChunkGet; +import org.jetbrains.annotations.ApiStatus; +@ApiStatus.Internal public interface FAWEPlatformAdapterImpl { - void sendChunk(IChunkGet chunk, int mask, boolean lighting); + void sendChunk(IChunkGet chunk, int mask, boolean lighting, boolean obfuscateAntiXRay); } diff --git a/worldedit-core/src/main/java/com/fastasyncworldedit/core/extent/processor/lighting/NMSRelighter.java b/worldedit-core/src/main/java/com/fastasyncworldedit/core/extent/processor/lighting/NMSRelighter.java index 663144aba7..527ae7195e 100644 --- a/worldedit-core/src/main/java/com/fastasyncworldedit/core/extent/processor/lighting/NMSRelighter.java +++ b/worldedit-core/src/main/java/com/fastasyncworldedit/core/extent/processor/lighting/NMSRelighter.java @@ -14,6 +14,7 @@ import com.sk89q.worldedit.registry.state.EnumProperty; import com.sk89q.worldedit.registry.state.Property; import com.sk89q.worldedit.util.Direction; +import com.sk89q.worldedit.util.SideEffect; import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockTypes; import com.sk89q.worldedit.world.registry.BlockMaterial; @@ -931,7 +932,10 @@ public void run(Object value) { ChunkHolder chunk = (ChunkHolder) queue.getOrCreateChunk(x, z); chunk.setBitMask(bitMask); chunk.flushLightToGet(); - Fawe.platform().getPlatformAdapter().sendChunk(chunk.getOrCreateGet(), bitMask, true); + Fawe.platform().getPlatformAdapter().sendChunk( + chunk.getOrCreateGet(), bitMask, true, + queue.getSideEffectSet().shouldApply(SideEffect.PAPER_ANTI_XRAY) + ); iter.remove(); } finished.set(true); diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/util/SideEffect.java b/worldedit-core/src/main/java/com/sk89q/worldedit/util/SideEffect.java index 49d8bc26d7..08edda3c56 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/util/SideEffect.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/util/SideEffect.java @@ -24,16 +24,16 @@ import java.util.Locale; public enum SideEffect { - //FAWE start - adjust defaults, add history and heightmaps + //FAWE start - adjust defaults, add history, heightmaps and anti-x-ray HISTORY(State.ON, true), HEIGHTMAPS(State.ON, true), LIGHTING(Settings.settings().LIGHTING.MODE == 0 ? State.OFF : State.ON, true), NEIGHBORS(State.OFF, true), UPDATE(State.OFF, true), - //FAWE end VALIDATION(State.OFF, true), ENTITY_AI(State.OFF, true), EVENTS(State.OFF, true), + PAPER_ANTI_XRAY(State.OFF, true), /** * Internal use only. */ diff --git a/worldedit-core/src/main/resources/lang/strings.json b/worldedit-core/src/main/resources/lang/strings.json index bc0fc39249..9cc029e7b2 100644 --- a/worldedit-core/src/main/resources/lang/strings.json +++ b/worldedit-core/src/main/resources/lang/strings.json @@ -649,6 +649,8 @@ "worldedit.sideeffect.entity_ai.description": "Updates Entity AI paths for the block changes", "worldedit.sideeffect.events": "Mod/Plugin Events", "worldedit.sideeffect.events.description": "Tells other mods/plugins about these changes when applicable", + "worldedit.sideeffect.paper_anti_xray": "Anti-X-Ray Obfuscation", + "worldedit.sideeffect.paper_anti_xray.description": "Obfuscates block changes with Papers anti-x-ray system (if enabled)", "worldedit.sideeffect.state.on": "On", "worldedit.sideeffect.state.delayed": "Delayed", "worldedit.sideeffect.state.off": "Off", From ae32e176c780385971d9b44012d5c03cb3f2579d Mon Sep 17 00:00:00 2001 From: Pierre Maurice Schwang Date: Wed, 20 Aug 2025 21:54:35 +0200 Subject: [PATCH 2/2] chore: simplify anti-xray (still doesn't work) --- .../v1_20_R2/PaperweightPlatformAdapter.java | 30 +------------------ .../v1_20_R3/PaperweightPlatformAdapter.java | 30 +------------------ .../v1_20_R4/PaperweightPlatformAdapter.java | 30 +------------------ .../v1_21_R1/PaperweightPlatformAdapter.java | 30 +------------------ .../v1_21_4/PaperweightPlatformAdapter.java | 30 +------------------ .../v1_21_5/PaperweightPlatformAdapter.java | 30 +------------------ .../v1_21_6/PaperweightPlatformAdapter.java | 30 +------------------ 7 files changed, 7 insertions(+), 203 deletions(-) diff --git a/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightPlatformAdapter.java b/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightPlatformAdapter.java index 9731a840fa..07e3c61df0 100644 --- a/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightPlatformAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightPlatformAdapter.java @@ -1,7 +1,5 @@ package com.sk89q.worldedit.bukkit.adapter.impl.fawe.v1_20_R2; -import com.destroystokyo.paper.antixray.ChunkPacketBlockControllerAntiXray; -import com.destroystokyo.paper.antixray.ChunkPacketInfoAntiXray; import com.destroystokyo.paper.util.maplist.EntityList; import com.fastasyncworldedit.bukkit.adapter.CachedBukkitAdapter; import com.fastasyncworldedit.bukkit.adapter.DelegateSemaphore; @@ -27,7 +25,6 @@ import net.minecraft.core.Holder; import net.minecraft.core.IdMap; import net.minecraft.core.Registry; -import net.minecraft.network.protocol.game.ClientboundLevelChunkPacketData; import net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ChunkHolder; @@ -109,8 +106,6 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { private static final Field fieldRemove; - private static final Field fieldChunkData; - private static final Logger LOGGER = LogManagerCompat.getLogger(); static final boolean POST_CHUNK_REWRITE; @@ -216,16 +211,6 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { ); palettedContaienrGet.setAccessible(true); PALETTED_CONTAINER_GET = lookup.unreflect(palettedContaienrGet); - - if (PaperLib.isPaper()) { - fieldChunkData = ClientboundLevelChunkWithLightPacket.class.getDeclaredField(Refraction.pickName( - "chunkData", - "d" - )); - fieldChunkData.setAccessible(true); - } else { - fieldChunkData = null; // not needed on Spigot as we don't touch Anti-X-Ray there - } } catch (RuntimeException | Error e) { throw e; } catch (Exception e) { @@ -393,19 +378,8 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int nmsWorld.getChunkSource().getLightEngine(), null, null, - false // false so we can handle anti-X-Ray ourselves + obfuscateAntiXRay ); - if (obfuscateAntiXRay && nmsWorld.chunkPacketBlockController instanceof ChunkPacketBlockControllerAntiXray antiXray) { - ChunkPacketInfoAntiXray info = antiXray.getChunkPacketInfo(packet, levelChunk); - info.setNearbyChunks( - nmsWorld.getChunkIfLoaded(chunkX - 1, chunkZ), - nmsWorld.getChunkIfLoaded(chunkX + 1, chunkZ), - nmsWorld.getChunkIfLoaded(chunkX, chunkZ - 1), - nmsWorld.getChunkIfLoaded(chunkX, chunkZ + 1) - ); - fieldChunkData.set(packet, new ClientboundLevelChunkPacketData(levelChunk, info)); - antiXray.obfuscate(info); - } } else { // deprecated on paper - deprecation suppressed packet = new ClientboundLevelChunkWithLightPacket( @@ -416,8 +390,6 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int ); } nearbyPlayers(nmsWorld, coordIntPair).forEach(p -> p.connection.send(packet)); - } catch (IllegalAccessException e) { - LOGGER.error("Failed to reflectively apply anti x-ray data", e); } finally { NMSAdapter.endChunkPacketSend(nmsWorld.getWorld().getName(), pair, lockHolder); } diff --git a/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightPlatformAdapter.java b/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightPlatformAdapter.java index 56b829e4a0..a3d908d4f5 100644 --- a/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightPlatformAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightPlatformAdapter.java @@ -1,7 +1,5 @@ package com.sk89q.worldedit.bukkit.adapter.impl.fawe.v1_20_R3; -import com.destroystokyo.paper.antixray.ChunkPacketBlockControllerAntiXray; -import com.destroystokyo.paper.antixray.ChunkPacketInfoAntiXray; import com.destroystokyo.paper.util.maplist.EntityList; import com.fastasyncworldedit.bukkit.adapter.CachedBukkitAdapter; import com.fastasyncworldedit.bukkit.adapter.DelegateSemaphore; @@ -27,7 +25,6 @@ import net.minecraft.core.Holder; import net.minecraft.core.IdMap; import net.minecraft.core.Registry; -import net.minecraft.network.protocol.game.ClientboundLevelChunkPacketData; import net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ChunkHolder; @@ -109,8 +106,6 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { private static final Field fieldRemove; - private static final Field fieldChunkData; - private static final Logger LOGGER = LogManagerCompat.getLogger(); static final boolean POST_CHUNK_REWRITE; @@ -216,16 +211,6 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { ); palettedContaienrGet.setAccessible(true); PALETTED_CONTAINER_GET = lookup.unreflect(palettedContaienrGet); - - if (PaperLib.isPaper()) { - fieldChunkData = ClientboundLevelChunkWithLightPacket.class.getDeclaredField(Refraction.pickName( - "chunkData", - "d" - )); - fieldChunkData.setAccessible(true); - } else { - fieldChunkData = null; // not needed on Spigot as we don't touch Anti-X-Ray there - } } catch (RuntimeException | Error e) { throw e; } catch (Exception e) { @@ -393,19 +378,8 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int nmsWorld.getChunkSource().getLightEngine(), null, null, - false // false so we can handle anti-X-Ray ourselves + obfuscateAntiXRay ); - if (obfuscateAntiXRay && nmsWorld.chunkPacketBlockController instanceof ChunkPacketBlockControllerAntiXray antiXray) { - ChunkPacketInfoAntiXray info = antiXray.getChunkPacketInfo(packet, levelChunk); - info.setNearbyChunks( - nmsWorld.getChunkIfLoaded(chunkX - 1, chunkZ), - nmsWorld.getChunkIfLoaded(chunkX + 1, chunkZ), - nmsWorld.getChunkIfLoaded(chunkX, chunkZ - 1), - nmsWorld.getChunkIfLoaded(chunkX, chunkZ + 1) - ); - fieldChunkData.set(packet, new ClientboundLevelChunkPacketData(levelChunk, info)); - antiXray.obfuscate(info); - } } else { // deprecated on paper - deprecation suppressed packet = new ClientboundLevelChunkWithLightPacket( @@ -416,8 +390,6 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int ); } nearbyPlayers(nmsWorld, coordIntPair).forEach(p -> p.connection.send(packet)); - } catch (IllegalAccessException e) { - LOGGER.error("Failed to reflectively apply anti x-ray data", e); } finally { NMSAdapter.endChunkPacketSend(nmsWorld.getWorld().getName(), pair, lockHolder); } diff --git a/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightPlatformAdapter.java b/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightPlatformAdapter.java index 947a93ad2e..1062fc8f89 100644 --- a/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightPlatformAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightPlatformAdapter.java @@ -1,7 +1,5 @@ package com.sk89q.worldedit.bukkit.adapter.impl.fawe.v1_20_R4; -import com.destroystokyo.paper.antixray.ChunkPacketBlockControllerAntiXray; -import com.destroystokyo.paper.antixray.ChunkPacketInfoAntiXray; import com.destroystokyo.paper.util.maplist.EntityList; import com.fastasyncworldedit.bukkit.adapter.CachedBukkitAdapter; import com.fastasyncworldedit.bukkit.adapter.DelegateSemaphore; @@ -26,7 +24,6 @@ import net.minecraft.core.Holder; import net.minecraft.core.IdMap; import net.minecraft.core.Registry; -import net.minecraft.network.protocol.game.ClientboundLevelChunkPacketData; import net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ChunkHolder; @@ -108,8 +105,6 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { private static final Field fieldRemove; - private static final Field fieldChunkData; - private static final Logger LOGGER = LogManagerCompat.getLogger(); static final boolean POST_CHUNK_REWRITE; @@ -215,16 +210,6 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { ); palettedContaienrGet.setAccessible(true); PALETTED_CONTAINER_GET = lookup.unreflect(palettedContaienrGet); - - if (PaperLib.isPaper()) { - fieldChunkData = ClientboundLevelChunkWithLightPacket.class.getDeclaredField(Refraction.pickName( - "chunkData", - "d" - )); - fieldChunkData.setAccessible(true); - } else { - fieldChunkData = null; // not needed on Spigot as we don't touch Anti-X-Ray there - } } catch (RuntimeException | Error e) { throw e; } catch (Exception e) { @@ -387,19 +372,8 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int nmsWorld.getChunkSource().getLightEngine(), null, null, - false // false so we can handle anti-X-Ray ourselves + obfuscateAntiXRay ); - if (obfuscateAntiXRay && nmsWorld.chunkPacketBlockController instanceof ChunkPacketBlockControllerAntiXray antiXray) { - ChunkPacketInfoAntiXray info = antiXray.getChunkPacketInfo(packet, levelChunk); - info.setNearbyChunks( - nmsWorld.getChunkIfLoaded(chunkX - 1, chunkZ), - nmsWorld.getChunkIfLoaded(chunkX + 1, chunkZ), - nmsWorld.getChunkIfLoaded(chunkX, chunkZ - 1), - nmsWorld.getChunkIfLoaded(chunkX, chunkZ + 1) - ); - fieldChunkData.set(packet, new ClientboundLevelChunkPacketData(levelChunk, info)); - antiXray.obfuscate(info); - } } else { // deprecated on paper - deprecation suppressed packet = new ClientboundLevelChunkWithLightPacket( @@ -410,8 +384,6 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int ); } nearbyPlayers(nmsWorld, coordIntPair).forEach(p -> p.connection.send(packet)); - } catch (IllegalAccessException e) { - LOGGER.error("Failed to reflectively apply anti x-ray data", e); } finally { NMSAdapter.endChunkPacketSend(nmsWorld.getWorld().getName(), pair, lockHolder); } diff --git a/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightPlatformAdapter.java b/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightPlatformAdapter.java index 7b99020554..8cffcabeb0 100644 --- a/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightPlatformAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightPlatformAdapter.java @@ -2,8 +2,6 @@ import ca.spottedleaf.moonrise.patches.chunk_system.level.entity.ChunkEntitySlices; import ca.spottedleaf.moonrise.patches.chunk_system.scheduling.ChunkHolderManager; -import com.destroystokyo.paper.antixray.ChunkPacketBlockControllerAntiXray; -import com.destroystokyo.paper.antixray.ChunkPacketInfoAntiXray; import com.fastasyncworldedit.bukkit.adapter.CachedBukkitAdapter; import com.fastasyncworldedit.bukkit.adapter.DelegateSemaphore; import com.fastasyncworldedit.bukkit.adapter.NMSAdapter; @@ -26,7 +24,6 @@ import net.minecraft.core.Holder; import net.minecraft.core.IdMap; import net.minecraft.core.Registry; -import net.minecraft.network.protocol.game.ClientboundLevelChunkPacketData; import net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ChunkHolder; @@ -107,8 +104,6 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { private static final Field fieldRemove; - private static final Field fieldChunkData; - private static final Logger LOGGER = LogManagerCompat.getLogger(); private static Method PAPER_CHUNK_GEN_ALL_ENTITIES; @@ -199,16 +194,6 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { ); palettedContaienrGet.setAccessible(true); PALETTED_CONTAINER_GET = lookup.unreflect(palettedContaienrGet); - - if (PaperLib.isPaper()) { - fieldChunkData = ClientboundLevelChunkWithLightPacket.class.getDeclaredField(Refraction.pickName( - "chunkData", - "d" - )); - fieldChunkData.setAccessible(true); - } else { - fieldChunkData = null; // not needed on Spigot as we don't touch Anti-X-Ray there - } } catch (RuntimeException | Error e) { throw e; } catch (Exception e) { @@ -371,19 +356,8 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int nmsWorld.getChunkSource().getLightEngine(), null, null, - false // false so we can handle anti-X-Ray ourselves + obfuscateAntiXRay ); - if (obfuscateAntiXRay && nmsWorld.chunkPacketBlockController instanceof ChunkPacketBlockControllerAntiXray antiXray) { - ChunkPacketInfoAntiXray info = antiXray.getChunkPacketInfo(packet, levelChunk); - info.setNearbyChunks( - nmsWorld.getChunkIfLoaded(chunkX - 1, chunkZ), - nmsWorld.getChunkIfLoaded(chunkX + 1, chunkZ), - nmsWorld.getChunkIfLoaded(chunkX, chunkZ - 1), - nmsWorld.getChunkIfLoaded(chunkX, chunkZ + 1) - ); - fieldChunkData.set(packet, new ClientboundLevelChunkPacketData(levelChunk, info)); - antiXray.obfuscate(info); - } } else { // deprecated on paper - deprecation suppressed packet = new ClientboundLevelChunkWithLightPacket( @@ -394,8 +368,6 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int ); } nearbyPlayers(nmsWorld, coordIntPair).forEach(p -> p.connection.send(packet)); - } catch (IllegalAccessException e) { - LOGGER.error("Failed to reflectively apply anti x-ray data", e); } finally { NMSAdapter.endChunkPacketSend(nmsWorld.getWorld().getName(), pair, lockHolder); } diff --git a/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightPlatformAdapter.java b/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightPlatformAdapter.java index 167e7db3ca..1cfbb1b9fa 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightPlatformAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightPlatformAdapter.java @@ -20,13 +20,10 @@ import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockTypesCache; import io.papermc.lib.PaperLib; -import io.papermc.paper.antixray.ChunkPacketBlockControllerAntiXray; -import io.papermc.paper.antixray.ChunkPacketInfoAntiXray; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; import net.minecraft.core.IdMap; import net.minecraft.core.Registry; -import net.minecraft.network.protocol.game.ClientboundLevelChunkPacketData; import net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ChunkHolder; @@ -106,8 +103,6 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { private static final Field fieldRemove; - private static final Field fieldChunkData; - private static final Logger LOGGER = LogManagerCompat.getLogger(); private static Field SERVER_LEVEL_ENTITY_MANAGER; @@ -191,16 +186,6 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { ); palettedContaienrGet.setAccessible(true); PALETTED_CONTAINER_GET = lookup.unreflect(palettedContaienrGet); - - if (PaperLib.isPaper()) { - fieldChunkData = ClientboundLevelChunkWithLightPacket.class.getDeclaredField(Refraction.pickName( - "chunkData", - "d" - )); - fieldChunkData.setAccessible(true); - } else { - fieldChunkData = null; // not needed on Spigot as we don't touch Anti-X-Ray there - } } catch (RuntimeException | Error e) { throw e; } catch (Exception e) { @@ -363,19 +348,8 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int nmsWorld.getLightEngine(), null, null, - false // false so we can handle anti-X-Ray ourselves + obfuscateAntiXRay ); - if (obfuscateAntiXRay && nmsWorld.chunkPacketBlockController instanceof ChunkPacketBlockControllerAntiXray antiXray) { - ChunkPacketInfoAntiXray info = antiXray.getChunkPacketInfo(packet, levelChunk); - info.setNearbyChunks( - nmsWorld.getChunkIfLoaded(chunkX - 1, chunkZ), - nmsWorld.getChunkIfLoaded(chunkX + 1, chunkZ), - nmsWorld.getChunkIfLoaded(chunkX, chunkZ - 1), - nmsWorld.getChunkIfLoaded(chunkX, chunkZ + 1) - ); - fieldChunkData.set(packet, new ClientboundLevelChunkPacketData(levelChunk, info)); - antiXray.obfuscate(info); - } } else { // deprecated on paper - deprecation suppressed packet = new ClientboundLevelChunkWithLightPacket( @@ -386,8 +360,6 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int ); } nearbyPlayers(nmsWorld, pos).forEach(p -> p.connection.send(packet)); - } catch (IllegalAccessException e) { - LOGGER.error("Failed to reflectively apply anti x-ray data", e); } finally { NMSAdapter.endChunkPacketSend(nmsWorld.getWorld().getName(), pair, lockHolder); } diff --git a/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightPlatformAdapter.java b/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightPlatformAdapter.java index 9f31b887e3..e49b862d74 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightPlatformAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightPlatformAdapter.java @@ -20,13 +20,10 @@ import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockTypesCache; import io.papermc.lib.PaperLib; -import io.papermc.paper.antixray.ChunkPacketBlockControllerAntiXray; -import io.papermc.paper.antixray.ChunkPacketInfoAntiXray; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; import net.minecraft.core.IdMap; import net.minecraft.core.Registry; -import net.minecraft.network.protocol.game.ClientboundLevelChunkPacketData; import net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ChunkHolder; @@ -105,8 +102,6 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { private static final Field fieldRemove; - private static final Field fieldChunkData; - private static final Logger LOGGER = LogManagerCompat.getLogger(); private static Field SERVER_LEVEL_ENTITY_MANAGER; @@ -190,16 +185,6 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { ); palettedContainerGet.setAccessible(true); PALETTED_CONTAINER_GET = lookup.unreflect(palettedContainerGet); - - if (PaperLib.isPaper()) { - fieldChunkData = ClientboundLevelChunkWithLightPacket.class.getDeclaredField(Refraction.pickName( - "chunkData", - "d" - )); - fieldChunkData.setAccessible(true); - } else { - fieldChunkData = null; // not needed on Spigot as we don't touch Anti-X-Ray there - } } catch (RuntimeException | Error e) { throw e; } catch (Exception e) { @@ -362,19 +347,8 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int nmsWorld.getLightEngine(), null, null, - false // false so we can handle anti-X-Ray ourselves + obfuscateAntiXRay ); - if (obfuscateAntiXRay && nmsWorld.chunkPacketBlockController instanceof ChunkPacketBlockControllerAntiXray antiXray) { - ChunkPacketInfoAntiXray info = antiXray.getChunkPacketInfo(packet, levelChunk); - info.setNearbyChunks( - nmsWorld.getChunkIfLoaded(chunkX - 1, chunkZ), - nmsWorld.getChunkIfLoaded(chunkX + 1, chunkZ), - nmsWorld.getChunkIfLoaded(chunkX, chunkZ - 1), - nmsWorld.getChunkIfLoaded(chunkX, chunkZ + 1) - ); - fieldChunkData.set(packet, new ClientboundLevelChunkPacketData(levelChunk, info)); - antiXray.obfuscate(info); - } } else { // deprecated on paper - deprecation suppressed packet = new ClientboundLevelChunkWithLightPacket( @@ -385,8 +359,6 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int ); } nearbyPlayers(nmsWorld, pos).forEach(p -> p.connection.send(packet)); - } catch (IllegalAccessException e) { - LOGGER.error("Failed to reflectively apply anti x-ray data", e); } finally { NMSAdapter.endChunkPacketSend(nmsWorld.getWorld().getName(), pair, lockHolder); } diff --git a/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightPlatformAdapter.java b/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightPlatformAdapter.java index 8dce6b98e2..b59537221b 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightPlatformAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightPlatformAdapter.java @@ -20,14 +20,11 @@ import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockTypesCache; import io.papermc.lib.PaperLib; -import io.papermc.paper.antixray.ChunkPacketBlockControllerAntiXray; -import io.papermc.paper.antixray.ChunkPacketInfoAntiXray; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; import net.minecraft.core.IdMap; import net.minecraft.core.Registry; import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.protocol.game.ClientboundLevelChunkPacketData; import net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket; import net.minecraft.server.MinecraftServer; import net.minecraft.server.dedicated.DedicatedServer; @@ -111,8 +108,6 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { private static final Field fieldRemove; - private static final Field fieldChunkData; - private static final Logger LOGGER = LogManagerCompat.getLogger(); private static Field SERVER_LEVEL_ENTITY_MANAGER; @@ -196,16 +191,6 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { ); palettedContainerGet.setAccessible(true); PALETTED_CONTAINER_GET = lookup.unreflect(palettedContainerGet); - - if (PaperLib.isPaper()) { - fieldChunkData = ClientboundLevelChunkWithLightPacket.class.getDeclaredField(Refraction.pickName( - "chunkData", - "d" - )); - fieldChunkData.setAccessible(true); - } else { - fieldChunkData = null; // not needed on Spigot as we don't touch Anti-X-Ray there - } } catch (RuntimeException | Error e) { throw e; } catch (Exception e) { @@ -391,19 +376,8 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int nmsWorld.getLightEngine(), null, null, - false // false so we can handle anti-X-Ray ourselves + obfuscateAntiXRay ); - if (obfuscateAntiXRay && nmsWorld.chunkPacketBlockController instanceof ChunkPacketBlockControllerAntiXray antiXray) { - ChunkPacketInfoAntiXray info = antiXray.getChunkPacketInfo(packet, levelChunk); - info.setNearbyChunks( - nmsWorld.getChunkIfLoaded(chunkX - 1, chunkZ), - nmsWorld.getChunkIfLoaded(chunkX + 1, chunkZ), - nmsWorld.getChunkIfLoaded(chunkX, chunkZ - 1), - nmsWorld.getChunkIfLoaded(chunkX, chunkZ + 1) - ); - fieldChunkData.set(packet, new ClientboundLevelChunkPacketData(levelChunk, info)); - antiXray.obfuscate(info); - } } else { // deprecated on paper - deprecation suppressed packet = new ClientboundLevelChunkWithLightPacket( @@ -414,8 +388,6 @@ public static void sendChunk(IntPair pair, ServerLevel nmsWorld, int chunkX, int ); } nearbyPlayers(nmsWorld, pos).forEach(p -> p.connection.send(packet)); - } catch (IllegalAccessException e) { - LOGGER.error("Failed to reflectively apply anti x-ray data", e); } finally { NMSAdapter.endChunkPacketSend(nmsWorld.getWorld().getName(), pair, lockHolder); }