forked from SteamWar/SteamWar
Add chunk skipping optimisation
This commit is contained in:
@@ -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<Region> getHiddenRegions() {
|
||||
return Fight.teams().stream().map(FightTeam::getExtendRegion).collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
private Region getHiddenRegion(Player player) {
|
||||
if (Config.isReferee(player)) return Region.EMPTY;
|
||||
|
||||
|
||||
@@ -536,8 +536,13 @@ public abstract class TechHider {
|
||||
}
|
||||
|
||||
private ClientboundLevelChunkWithLightPacket processChunkWithLight(Player p, ClientboundLevelChunkWithLightPacket packet) {
|
||||
if(isEveryonePrivilegedToAccessAllDataWithinChunk(packet.getX(), packet.getZ())) {
|
||||
return packet;
|
||||
}
|
||||
else {
|
||||
return chunkHider.processLevelChunkWithLightPacket(p, packet);
|
||||
}
|
||||
}
|
||||
|
||||
private Packet<? extends PacketListener> proccessPositionBasedPacket(Player player, int blockX, int blockY, int blockZ, Packet<? extends PacketListener> packet) {
|
||||
if(isPlayerPrivilegedToAccessPosition(player, blockX, blockY, blockZ)) {
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user