From bede8caa82dd8d92c45a40bbb87f4a804406fa56 Mon Sep 17 00:00:00 2001 From: D4rkr34lm Date: Thu, 21 May 2026 20:20:18 +0200 Subject: [PATCH 1/5] Add chunk skipping optimisation --- .../steamwar/fightsystem/utils/TechHiderWrapper.java | 10 ++++++++++ .../src/de/steamwar/techhider/TechHider.java | 8 +++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/TechHiderWrapper.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/TechHiderWrapper.java index 193f851b..c840d84f 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/TechHiderWrapper.java +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/TechHiderWrapper.java @@ -22,6 +22,7 @@ package de.steamwar.fightsystem.utils; import de.steamwar.Reflection; import de.steamwar.core.CraftbukkitWrapper; import de.steamwar.fightsystem.Config; +import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.events.BoardingEvent; import de.steamwar.fightsystem.events.TeamLeaveEvent; import de.steamwar.fightsystem.events.TeamSpawnEvent; @@ -107,6 +108,11 @@ public class TechHiderWrapper extends StateDependent implements Listener { Region hiddenRegion = getHiddenRegion(p); return !hiddenRegion.inRegion(blockX, blockY, blockZ) || !blockEntityTypeToObfuscate.contains(type); } + + @Override + public boolean isEveryonePrivilegedToAccessAllDataWithinChunk(int chunkX, int chunkZ) { + return getHiddenRegions().stream().allMatch(region -> region.chunkOutside(chunkX, chunkZ)); + } }; new StateDependentListener(ENABLED, FightState.Schem, this); @@ -158,6 +164,10 @@ public class TechHiderWrapper extends StateDependent implements Listener { }); } + private Set getHiddenRegions() { + return Fight.teams().stream().map(FightTeam::getExtendRegion).collect(Collectors.toSet()); + } + private Region getHiddenRegion(Player player) { if (Config.isReferee(player)) return Region.EMPTY; diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/TechHider.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/TechHider.java index 4d848379..c68878db 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/TechHider.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/TechHider.java @@ -536,7 +536,12 @@ public abstract class TechHider { } private ClientboundLevelChunkWithLightPacket processChunkWithLight(Player p, ClientboundLevelChunkWithLightPacket packet) { - return chunkHider.processLevelChunkWithLightPacket(p, packet); + if(isEveryonePrivilegedToAccessAllDataWithinChunk(packet.getX(), packet.getZ())) { + return packet; + } + else { + return chunkHider.processLevelChunkWithLightPacket(p, packet); + } } private Packet proccessPositionBasedPacket(Player player, int blockX, int blockY, int blockZ, Packet packet) { @@ -562,4 +567,5 @@ public abstract class TechHider { public abstract boolean isPlayerPrivilegedToAccessBlock(Player p, int blockX, int blockY, int blockZ, Block block); public abstract boolean isPlayerPrivilegedToAccessEntity(Player p, int entityId); public abstract boolean isPlayerPrivilegedToAccessBlocEntity(Player p, int blockX, int blockY, int blockZ, BlockEntityType type); + public abstract boolean isEveryonePrivilegedToAccessAllDataWithinChunk(int chunkX, int chunkZ); } From 29d0c8978c1ad518cb3cc0be6bb2cff9017ae276 Mon Sep 17 00:00:00 2001 From: D4rkr34lm Date: Thu, 21 May 2026 22:00:15 +0200 Subject: [PATCH 2/5] Rmeove old player join quickfix --- .../listener/PlayerJoinListener.java | 74 ------------------- 1 file changed, 74 deletions(-) delete mode 100644 FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/listener/PlayerJoinListener.java diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/listener/PlayerJoinListener.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/listener/PlayerJoinListener.java deleted file mode 100644 index 71ecf2a7..00000000 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/listener/PlayerJoinListener.java +++ /dev/null @@ -1,74 +0,0 @@ -package de.steamwar.fightsystem.listener; - -import de.steamwar.fightsystem.states.FightState; -import de.steamwar.fightsystem.states.StateDependentListener; -import de.steamwar.linkage.Linked; -import net.minecraft.network.protocol.game.ClientboundForgetLevelChunkPacket; -import net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.chunk.LevelChunk; -import org.bukkit.Bukkit; -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.craftbukkit.CraftWorld; -import org.bukkit.craftbukkit.entity.CraftPlayer; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; - -@Linked -public class PlayerJoinListener implements Listener { - - public PlayerJoinListener() { - new StateDependentListener(true, FightState.All, this); - } - - @EventHandler() - public void onPlayerJoin(PlayerJoinEvent event) { - Player player = event.getPlayer(); - World world = player.getWorld(); - - Location loc = player.getLocation(); - int viewDistance = Bukkit.getViewDistance(); - - int chunkX = loc.getChunk().getX(); - int chunkZ = loc.getChunk().getZ(); - - // Iterate through the chunks around the player and force a resend - for (int x = -viewDistance; x <= viewDistance; x++) { - for (int z = -viewDistance; z <= viewDistance; z++) { - Chunk chunk = world.getChunkAt(chunkX + x, chunkZ + z); - this.forceRefreshChunkForPlayer(player, chunk); - } - } - } - - public void forceRefreshChunkForPlayer(Player player, Chunk bukkitChunk) { - ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); - CraftWorld craftWorld = (CraftWorld) bukkitChunk.getWorld(); - - int chunkX = bukkitChunk.getX(); - int chunkZ = bukkitChunk.getZ(); - - LevelChunk nmsChunk = craftWorld.getHandle().getChunkSource().getChunk(chunkX, chunkZ, false); - if (nmsChunk == null) { - // Chunk isn't loaded in memory on the server side; - return; - } - - ClientboundForgetLevelChunkPacket unloadPacket = new ClientboundForgetLevelChunkPacket(new ChunkPos(chunkX, chunkZ)); - serverPlayer.connection.send(unloadPacket); - - ClientboundLevelChunkWithLightPacket loadPacket = new ClientboundLevelChunkWithLightPacket( - nmsChunk, - craftWorld.getHandle().getLightEngine(), - null, - null, - true - ); - serverPlayer.connection.send(loadPacket); - } -} From 21f6394359b1f57be14310543f2b2e85e7967ca4 Mon Sep 17 00:00:00 2001 From: D4rkr34lm Date: Thu, 21 May 2026 22:20:40 +0200 Subject: [PATCH 3/5] Fix section packet being unnececarily reconstructed --- .../SpigotCore_Main/src/de/steamwar/techhider/TechHider.java | 1 - 1 file changed, 1 deletion(-) diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/TechHider.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/TechHider.java index c68878db..24cc88b6 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/TechHider.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/TechHider.java @@ -491,7 +491,6 @@ public abstract class TechHider { if (isPlayerPrivilegedToAccessPosition(p, worldX, worldY, worldZ) && isPlayerPrivilegedToAccessBlock(p, worldX, worldY, worldZ, block)) { // TODO statefull !!! - modified = true; filteredPos.add(posShort); filteredStates.add(state); } else if(isPlayerPrivilegedToAccessPosition(p, worldX, worldY, worldZ)){ From e55ca911c4a8270051634b838f1c79f7732f00e1 Mon Sep 17 00:00:00 2001 From: D4rkr34lm Date: Fri, 22 May 2026 20:41:05 +0200 Subject: [PATCH 4/5] Inline get all regions --- .../de/steamwar/fightsystem/utils/TechHiderWrapper.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/TechHiderWrapper.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/TechHiderWrapper.java index 8e0f7f04..5f8926eb 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/TechHiderWrapper.java +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/TechHiderWrapper.java @@ -113,7 +113,8 @@ public class TechHiderWrapper extends StateDependent implements Listener { @Override public boolean isEveryonePrivilegedToAccessAllDataWithinChunk(int chunkX, int chunkZ) { - return getHiddenRegions().stream().allMatch(region -> region.chunkOutside(chunkX, chunkZ)); + Set hiddenRegions = Fight.teams().stream().map(FightTeam::getExtendRegion).collect(Collectors.toSet()); + return hiddenRegions.stream().allMatch(region -> region.chunkOutside(chunkX, chunkZ)); } @Override @@ -171,10 +172,6 @@ public class TechHiderWrapper extends StateDependent implements Listener { }); } - private Set getHiddenRegions() { - return Fight.teams().stream().map(FightTeam::getExtendRegion).collect(Collectors.toSet()); - } - private Region getHiddenRegion(Player player) { if (Config.isReferee(player)) return Region.EMPTY; From 1810cb7546d949b1f52bb430ce97228f15e7f001 Mon Sep 17 00:00:00 2001 From: D4rkr34lm Date: Fri, 22 May 2026 20:51:24 +0200 Subject: [PATCH 5/5] Fix inlineing --- .../src/de/steamwar/fightsystem/utils/TechHiderWrapper.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/TechHiderWrapper.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/TechHiderWrapper.java index 5f8926eb..bbacf038 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/TechHiderWrapper.java +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/TechHiderWrapper.java @@ -113,11 +113,10 @@ public class TechHiderWrapper extends StateDependent implements Listener { @Override public boolean isEveryonePrivilegedToAccessAllDataWithinChunk(int chunkX, int chunkZ) { - Set hiddenRegions = Fight.teams().stream().map(FightTeam::getExtendRegion).collect(Collectors.toSet()); - return hiddenRegions.stream().allMatch(region -> region.chunkOutside(chunkX, chunkZ)); + return Fight.teams().stream().map(FightTeam::getExtendRegion).allMatch(region -> region.chunkOutside(chunkX, chunkZ)); } - @Override + @Override public boolean isPlayerPrivalegedToPerformAction(Player p) { return !(p.getGameMode() == GameMode.SPECTATOR); }