From bede8caa82dd8d92c45a40bbb87f4a804406fa56 Mon Sep 17 00:00:00 2001 From: D4rkr34lm Date: Thu, 21 May 2026 20:20:18 +0200 Subject: [PATCH] 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); }