EntityTrackerSystems class

Пакет: com.hypixel.hytale.server.core.modules.entity.tracker

Файл: com/hypixel/hytale/server/core/modules/entity/tracker/EntityTrackerSystems.java

Поля (130)

МодификаторыТипИмя
public static final Set<Dependency<EntityStore>> DEPENDENCIES
public static final Set<Dependency<EntityStore>> DEPENDENCIES
public static final Set<Dependency<EntityStore>> DEPENDENCIES
public static final Set<Dependency<EntityStore>> DEPENDENCIES
public static final Set<Dependency<EntityStore>> DEPENDENCIES
public static final Set<Dependency<EntityStore>> DEPENDENCIES
public static double ENTITY_LOD_RATIO
public static final double ENTITY_LOD_RATIO_DEFAULT
public static final ThreadLocal<IntList> INT_LIST_THREAD_LOCAL
public static final HytaleLogger LOGGER
private final ComponentType<EntityStore, BoundingBox> boundingBoxComponentType
private final Set<Dependency<EntityStore>> dependencies
private final Set<Dependency<EntityStore>> dependencies
private final Set<Dependency<EntityStore>> dependencies
private final ComponentType<EntityStore, EffectControllerComponent> effectControllerComponentType
private final ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> entityViewerComponentType
private final ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> entityViewerComponentType
private final ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> entityViewerComponentType
private final ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> entityViewerComponentType
private final ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> entityViewerComponentType
private final ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> entityViewerComponentType
private final ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> entityViewerComponentType
public int hiddenCount
Iterator iteratorx
private final StampedLock lock
public int lodExcludedCount
private final ComponentType<EntityStore, ModelComponent> modelComponentType
public Map<Ref<EntityStore>, EntityTrackerSystems.EntityViewer> newlyVisibleTo
public IPacketReceiver packetReceiver
private final ComponentType<EntityStore, PlayerRef> playerRefComponentType
private final ComponentType<EntityStore, PlayerSettings> playerSettingsComponentType
private final ComponentType<EntityStore, PlayerSkinComponent> playerSkinComponentType
public Map<Ref<EntityStore>, EntityTrackerSystems.EntityViewer> previousVisibleTo
private final Query<EntityStore> query
private final Query<EntityStore> query
private final Query<EntityStore> query
private final Query<EntityStore> query
private final Query<EntityStore> query
private final Query<EntityStore> query
private final StampedLock removeLock
private final EnumSet<ComponentUpdateType> removed
public Reference2IntMap<Ref<EntityStore>> sent
private final List<ComponentUpdate> updates
public Map<Ref<EntityStore>, EntityTrackerSystems.EntityUpdate> updates
private final StampedLock updatesLock
private final ComponentType<EntityStore, UUIDComponent> uuidComponentType
EntityTrackerSystems.EntityViewer var1
EntityTrackerSystems.Visible var10
List var10
EntityScaleComponent var10
Iterator var10
Ref var10
it.unimi.dsi.fastutil.objects.Reference2IntMap.Entry var10
Ref var11
Ref var11
BoundingBox var11
Ref var11
boolean var12
UUIDComponent var12
TransformComponent var12
int var12
boolean var13
double var13
com.hypixel.hytale.protocol.EntityUpdate var13
EntityTrackerSystems.EntityUpdate var14
double var15
EntityUpdates var16
Ref var17
int var18
NetworkId var19
EntityTrackerSystems.EntityViewer var2
EntityTrackerSystems.EntityViewer var2
long var2
long var2
int var3
ObjectIterator var3
EntityEffectsUpdate var3
PlayerSkinUpdate var3
long var3
EntityUpdates var4
Ref var4
EntityEffectsUpdate var4
EntityTrackerSystems.Visible var5
ModelUpdate var5
Ref var6
EntityTrackerSystems.EntityViewer var6
EntityTrackerSystems.Visible var6
TransformComponent var6
EntityTrackerSystems.Visible var6
EntityTrackerSystems.EntityViewer var6
EntityTrackerSystems.Visible var6
EntityTrackerSystems.Visible var6
PlayerSettings var6
EntityTrackerSystems.EntityViewer var6
EntityTrackerSystems.Visible var6
EntityTrackerSystems.EntityViewer var6
EntityTrackerSystems.EntityViewer var7
Map var7
Vector3d var7
EffectControllerComponent var7
ModelComponent var7
PlayerSkinComponent var7
EntityTrackerSystems.EntityViewer var7
TransformComponent var7
IntList var7
EntityTrackerSystems.EntityViewer var8
Ref var8
float var8
var8
PlayerRef var8
Vector3d var8
int var8
SpatialStructure var9
boolean var9
var9
PropUpdate var9
HiddenPlayersManager var9
Iterator var9
ObjectIterator var9
public int viewRadiusBlocks
public Set<Ref<EntityStore>> visible
private final ComponentType<EntityStore, EntityTrackerSystems.Visible> visibleComponentType
private final ComponentType<EntityStore, EntityTrackerSystems.Visible> visibleComponentType
private final ComponentType<EntityStore, EntityTrackerSystems.Visible> visibleComponentType
private final ComponentType<EntityStore, EntityTrackerSystems.Visible> visibleComponentType
private final ComponentType<EntityStore, EntityTrackerSystems.Visible> visibleComponentType
private final ComponentType<EntityStore, EntityTrackerSystems.Visible> visibleComponentType
private final ComponentType<EntityStore, EntityTrackerSystems.Visible> visibleComponentType
private final ComponentType<EntityStore, EntityTrackerSystems.Visible> visibleComponentType
public Map<Ref<EntityStore>, EntityTrackerSystems.EntityViewer> visibleTo

Методы (113)

МодификаторыВозвратСигнатура
public AddToVisiblepublic AddToVisible(@Nonnull ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> var1, @Nonnull ComponentType<EntityStore, EntityTrackerSystems.Visible> var2)
public ClearEntityViewerspublic ClearEntityViewers(@Nonnull ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> var1)
public ClearPreviouslyVisiblepublic ClearPreviouslyVisible(@Nonnull ComponentType<EntityStore, EntityTrackerSystems.Visible> var1)
public CollectVisiblepublic CollectVisible(@Nonnull ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> var1)
public EffectControllerSystempublic EffectControllerSystem(@Nonnull ComponentType<EntityStore, EntityTrackerSystems.Visible> var1, @Nonnull ComponentType<EntityStore, EffectControllerComponent> var2)
public EnsureVisibleComponentpublic EnsureVisibleComponent(@Nonnull ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> var1, @Nonnull ComponentType<EntityStore, EntityTrackerSystems.Visible> var2)
public EntityModelpublic EntityModel(@Nonnull ComponentType<EntityStore, EntityTrackerSystems.Visible> var1)
public EntitySkinpublic EntitySkin(@Nonnull ComponentType<EntityStore, EntityTrackerSystems.Visible> var1, @Nonnull ComponentType<EntityStore, PlayerSkinComponent> var2)
public EntityUpdatepublic EntityUpdate()
public EntityUpdatepublic EntityUpdate(@Nonnull EntityTrackerSystems.EntityUpdate var1)
public EntityViewerpublic EntityViewer(int var1, @Nonnull IPacketReceiver var2)
public EntityViewerpublic EntityViewer(@Nonnull EntityTrackerSystems.EntityViewer var1)
public HideFromPlayerpublic HideFromPlayer(@Nonnull ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> var1)
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("Entity is not visible!")
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("Invalid entity network id: " + var17)
public LODCullpublic LODCull(@Nonnull ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> var1)
public RemoveEmptyVisibleComponentpublic RemoveEmptyVisibleComponent(@Nonnull ComponentType<EntityStore, EntityTrackerSystems.Visible> var1)
public RemoveVisibleComponentpublic RemoveVisibleComponent(@Nonnull ComponentType<EntityStore, EntityTrackerSystems.Visible> var1)
public SendPacketspublic SendPackets(@Nonnull ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> var1)
public Visiblepublic Visible()
public void addViewerParallelpublic void addViewerParallel(@Nonnull Ref<EntityStore> var1, @Nonnull EntityTrackerSystems.EntityViewer var2)
static boolean clearboolean clear(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1)
static boolean clearboolean clear(@Nonnull Holder<EntityStore> var0)
abstract clear clear(var0, var1)
public EntityTrackerSystems.EntityUpdate clonepublic EntityTrackerSystems.EntityUpdate clone()
public Component<EntityStore> clonepublic Component<EntityStore> clone()
public Component<EntityStore> clonepublic Component<EntityStore> clone()
static boolean despawnAllboolean despawnAll(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1)
for for(Ref var9 : var7.visible)
for for(Ref var8 : var6.visible)
public static ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> getComponentTypepublic static ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> getComponentType()
public static ComponentType<EntityStore, EntityTrackerSystems.Visible> getComponentTypepublic static ComponentType<EntityStore, EntityTrackerSystems.Visible> getComponentType()
public Set<Dependency<EntityStore>> getDependenciespublic Set<Dependency<EntityStore>> getDependencies()
public Set<Dependency<EntityStore>> getDependenciespublic Set<Dependency<EntityStore>> getDependencies()
public Set<Dependency<EntityStore>> getDependenciespublic Set<Dependency<EntityStore>> getDependencies()
public Set<Dependency<EntityStore>> getDependenciespublic Set<Dependency<EntityStore>> getDependencies()
public Set<Dependency<EntityStore>> getDependenciespublic Set<Dependency<EntityStore>> getDependencies()
public Set<Dependency<EntityStore>> getDependenciespublic Set<Dependency<EntityStore>> getDependencies()
public Set<Dependency<EntityStore>> getDependenciespublic Set<Dependency<EntityStore>> getDependencies()
public Set<Dependency<EntityStore>> getDependenciespublic Set<Dependency<EntityStore>> getDependencies()
public Set<Dependency<EntityStore>> getDependenciespublic Set<Dependency<EntityStore>> getDependencies()
public SystemGroup<EntityStore> getGrouppublic SystemGroup<EntityStore> getGroup()
public SystemGroup<EntityStore> getGrouppublic SystemGroup<EntityStore> getGroup()
public SystemGroup<EntityStore> getGrouppublic SystemGroup<EntityStore> getGroup()
public SystemGroup<EntityStore> getGrouppublic SystemGroup<EntityStore> getGroup()
public SystemGroup<EntityStore> getGrouppublic SystemGroup<EntityStore> getGroup()
public SystemGroup<EntityStore> getGrouppublic SystemGroup<EntityStore> getGroup()
public SystemGroup<EntityStore> getGrouppublic SystemGroup<EntityStore> getGroup()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
if if(var2 == null)
if if(var2 == null)
if if(var5 != null)
if if(var1 == null)
if if(var10 != null)
if if(var10 != null)
if if(var13 || var9)
if if(var3)
if if(var11 != null)
if if(var12 != null)
if if(var15 < ENTITY_LOD_RATIO * var13)
if if(var12 == -1)
public boolean isParallelpublic boolean isParallel(int var1, int var2)
public boolean isParallelpublic boolean isParallel(int var1, int var2)
public boolean isParallelpublic boolean isParallel(int var1, int var2)
public boolean isParallelpublic boolean isParallel(int var1, int var2)
public boolean isParallelpublic boolean isParallel(int var1, int var2)
public boolean isParallelpublic boolean isParallel(int var1, int var2)
public boolean isParallelpublic boolean isParallel(int var1, int var2)
public boolean isParallelpublic boolean isParallel(int var1, int var2)
public boolean isParallelpublic boolean isParallel(int var1, int var2)
public boolean isParallelpublic boolean isParallel(int var1, int var2)
public boolean isParallelpublic boolean isParallel(int var1, int var2)
public boolean isParallelpublic boolean isParallel(int var1, int var2)
public void onEntityAddpublic void onEntityAdd(@Nonnull Holder<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3)
public void onEntityRemovedpublic void onEntityRemoved(@Nonnull Holder<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3)
private static void queueFullUpdateprivate static void queueFullUpdate(@Nonnull Ref<EntityStore> var0, @Nonnull EffectControllerComponent var1, @Nonnull Map<Ref<EntityStore>, EntityTrackerSystems.EntityViewer> var2)
abstract queueFullUpdate queueFullUpdate(var8, var7, var6.newlyVisibleTo)
public void queueRemovepublic void queueRemove(@Nonnull ComponentUpdateType var1)
public void queueRemovepublic void queueRemove(@Nonnull Ref<EntityStore> var1, @Nonnull ComponentUpdateType var2)
public void queueUpdatepublic void queueUpdate(@Nonnull ComponentUpdate var1)
public void queueUpdatepublic void queueUpdate(@Nonnull Ref<EntityStore> var1, @Nonnull ComponentUpdate var2)
private static void queueUpdatesForprivate static void queueUpdatesFor(@Nonnull Ref<EntityStore> var0, @Nonnull EffectControllerComponent var1, @Nonnull Map<Ref<EntityStore>, EntityTrackerSystems.EntityViewer> var2, @Nonnull Map<Ref<EntityStore>, EntityTrackerSystems.EntityViewer> var3)
private static void queueUpdatesForprivate static void queueUpdatesFor(@Nonnull Ref<EntityStore> var0, @Nullable ModelComponent var1, float var2, boolean var3, @Nonnull Map<Ref<EntityStore>, EntityTrackerSystems.EntityViewer> var4)
private static void queueUpdatesForprivate static void queueUpdatesFor(@Nonnull Ref<EntityStore> var0, @Nonnull PlayerSkinComponent var1, @Nonnull Map<Ref<EntityStore>, EntityTrackerSystems.EntityViewer> var2)
abstract queueUpdatesFor queueUpdatesFor(var8, var7, var6.visibleTo, var6.newlyVisibleTo)
abstract queueUpdatesFor queueUpdatesFor(var11, var7, var8, var12, var6.visibleTo)
abstract queueUpdatesFor queueUpdatesFor(var11, var7, var8, var12, var6.newlyVisibleTo)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)
public ComponentUpdateType[] toRemovedArraypublic ComponentUpdateType[] toRemovedArray()
public ComponentUpdate[] toUpdatesArraypublic ComponentUpdate[] toUpdatesArray()

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.entity.tracker;

class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.Archetype;
class="kw">import com.hypixel.hytale.component.ArchetypeChunk;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Component;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.RemoveReason;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.SystemGroup;
class="kw">import com.hypixel.hytale.component.dependency.Dependency;
class="kw">import com.hypixel.hytale.component.dependency.Order;
class="kw">import com.hypixel.hytale.component.dependency.SystemDependency;
class="kw">import com.hypixel.hytale.component.dependency.SystemGroupDependency;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.spatial.SpatialResource;
class="kw">import com.hypixel.hytale.component.spatial.SpatialStructure;
class="kw">import com.hypixel.hytale.component.system.HolderSystem;
class="kw">import com.hypixel.hytale.component.system.tick.EntityTickingSystem;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.protocol.ComponentUpdate;
class="kw">import com.hypixel.hytale.protocol.ComponentUpdateType;
class="kw">import com.hypixel.hytale.protocol.EntityEffectsUpdate;
class="kw">import com.hypixel.hytale.protocol.ModelUpdate;
class="kw">import com.hypixel.hytale.protocol.PlayerSkinUpdate;
class="kw">import com.hypixel.hytale.protocol.PropUpdate;
class="kw">import com.hypixel.hytale.protocol.packets.entities.EntityUpdates;
class="kw">import com.hypixel.hytale.server.core.entity.UUIDComponent;
class="kw">import com.hypixel.hytale.server.core.entity.effect.EffectControllerComponent;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.HiddenPlayersManager;
class="kw">import com.hypixel.hytale.server.core.modules.entity.EntityModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.BoundingBox;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.EntityScaleComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.ModelComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.PropComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.player.PlayerSettings;
class="kw">import com.hypixel.hytale.server.core.modules.entity.player.PlayerSkinComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.system.NetworkSendableSpatialSystem;
class="kw">import com.hypixel.hytale.server.core.receiver.IPacketReceiver;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.ints.IntArrayList;
class="kw">import it.unimi.dsi.fastutil.ints.IntList;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import it.unimi.dsi.fastutil.objects.Reference2IntMap;
class="kw">import it.unimi.dsi.fastutil.objects.Reference2IntOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet;
class="kw">import java.util.Collections;
class="kw">import java.util.EnumSet;
class="kw">import java.util.Iterator;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.Set;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.concurrent.ConcurrentHashMap;
class="kw">import java.util.concurrent.locks.StampedLock;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class EntityTrackerSystems {
   @Nonnull
   class="kw">public class="kw">static class="kw">final SystemGroup<EntityStore> FIND_VISIBLE_ENTITIES_GROUP = EntityStore.REGISTRY.registerSystemGroup();
   @Nonnull
   class="kw">public class="kw">static class="kw">final SystemGroup<EntityStore> QUEUE_UPDATE_GROUP = EntityStore.REGISTRY.registerSystemGroup();

   class="kw">public EntityTrackerSystems() {
   }

   class="kw">public class="kw">static boolean despawnAll(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1) {
      if (!var0.isValid()) {
         class="kw">return false;
      }

      EntityTrackerSystems.EntityViewer var2 = var1.getComponent(var0, EntityTrackerSystems.EntityViewer.getComponentType());
      if (var2 == null) {
         class="kw">return false;
      }

      int var3 = var2.sent.removeInt(var0);
      EntityUpdates var4 = new EntityUpdates();
      var4.removed = var2.sent.values().toIntArray();
      var2.packetReceiver.writeNoCache(var4);
      clear(var0, var1);
      var2.sent.put(var0, var3);
      class="kw">return true;
   }

   class="kw">public class="kw">static boolean clear(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1) {
      if (!var0.isValid()) {
         class="kw">return false;
      }

      EntityTrackerSystems.EntityViewer var2 = var1.getComponent(var0, EntityTrackerSystems.EntityViewer.getComponentType());
      if (var2 == null) {
         class="kw">return false;
      }

      ObjectIterator var3 = var2.sent.keySet().iterator();

      while (var3.hasNext()) {
         Ref var4 = (Ref<EntityStore>)var3.next();
         if (var4 != null && var4.isValid()) {
            EntityTrackerSystems.Visible var5 = var1.getComponent(var4, EntityTrackerSystems.Visible.getComponentType());
            if (var5 != null) {
               var5.visibleTo.remove(var0);
            }
         }
      }

      var2.sent.clear();
      class="kw">return true;
   }

   class="kw">public class="kw">static boolean clear(@Nonnull Holder<EntityStore> var0) {
      EntityTrackerSystems.EntityViewer var1 = var0.getComponent(EntityTrackerSystems.EntityViewer.getComponentType());
      if (var1 == null) {
         class="kw">return false;
      }

      var1.sent.clear();
      class="kw">return true;
   }

   class="kw">public class="kw">static class AddToVisible class="kw">extends EntityTickingSystem<EntityStore> {
      @Nonnull
      class="kw">public class="kw">static class="kw">final Set<Dependency<EntityStore>> DEPENDENCIES = Collections.singleton(
         new SystemDependency<>(Order.AFTER, EntityTrackerSystems.EnsureVisibleComponent.class)
      );
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> entityViewerComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, EntityTrackerSystems.Visible> visibleComponentType;

      class="kw">public AddToVisible(
         @Nonnull ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> var1, @Nonnull ComponentType<EntityStore, EntityTrackerSystems.Visible> var2
      ) {
         this.entityViewerComponentType = var1;
         this.visibleComponentType = var2;
      }

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return DEPENDENCIES;
      }

      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.entityViewerComponentType;
      }

      @Override
      class="kw">public boolean isParallel(int var1, int var2) {
         class="kw">return EntityTickingSystem.maybeUseParallel(var1, var2);
      }

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         Ref var6 = var3.getReferenceTo(var2);
         EntityTrackerSystems.EntityViewer var7 = var3.getComponent(var2, this.entityViewerComponentType);
         assert var7 != null;

         for (Ref var9 : var7.visible) {
            if (var9 != null && var9.isValid()) {
               EntityTrackerSystems.Visible var10 = var5.getComponent(var9, this.visibleComponentType);
               if (var10 != null) {
                  var10.addViewerParallel(var6, var7);
               }
            }
         }
      }
   }

   class="kw">public class="kw">static class ClearEntityViewers class="kw">extends EntityTickingSystem<EntityStore> {
      @Nonnull
      class="kw">public class="kw">static class="kw">final Set<Dependency<EntityStore>> DEPENDENCIES = Collections.singleton(
         new SystemGroupDependency<>(Order.BEFORE, EntityTrackerSystems.FIND_VISIBLE_ENTITIES_GROUP)
      );
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> entityViewerComponentType;

      class="kw">public ClearEntityViewers(@Nonnull ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> var1) {
         this.entityViewerComponentType = var1;
      }

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return DEPENDENCIES;
      }

      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.entityViewerComponentType;
      }

      @Override
      class="kw">public boolean isParallel(int var1, int var2) {
         class="kw">return EntityTickingSystem.maybeUseParallel(var1, var2);
      }

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         EntityTrackerSystems.EntityViewer var6 = var3.getComponent(var2, this.entityViewerComponentType);
         assert var6 != null;
         var6.visible.clear();
         var6.lodExcludedCount = 0;
         var6.hiddenCount = 0;
      }
   }

   class="kw">public class="kw">static class ClearPreviouslyVisible class="kw">extends EntityTickingSystem<EntityStore> {
      @Nonnull
      class="kw">public class="kw">static class="kw">final Set<Dependency<EntityStore>> DEPENDENCIES = Set.of(
         new SystemDependency<>(Order.AFTER, EntityTrackerSystems.ClearEntityViewers.class),
         new SystemGroupDependency<EntityStore>(Order.AFTER, EntityTrackerSystems.FIND_VISIBLE_ENTITIES_GROUP)
      );
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, EntityTrackerSystems.Visible> visibleComponentType;

      class="kw">public ClearPreviouslyVisible(@Nonnull ComponentType<EntityStore, EntityTrackerSystems.Visible> var1) {
         this.visibleComponentType = var1;
      }

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return DEPENDENCIES;
      }

      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.visibleComponentType;
      }

      @Override
      class="kw">public boolean isParallel(int var1, int var2) {
         class="kw">return EntityTickingSystem.maybeUseParallel(var1, var2);
      }

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         EntityTrackerSystems.Visible var6 = var3.getComponent(var2, this.visibleComponentType);
         assert var6 != null;
         Map var7 = var6.previousVisibleTo;
         var6.previousVisibleTo = var6.visibleTo;
         var6.visibleTo = var7;
         var6.visibleTo.clear();
         var6.newlyVisibleTo.clear();
      }
   }

   class="kw">public class="kw">static class CollectVisible class="kw">extends EntityTickingSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> entityViewerComponentType;
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query;
      @Nonnull
      class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies;

      class="kw">public CollectVisible(@Nonnull ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> var1) {
         this.entityViewerComponentType = var1;
         this.query = Archetype.of(var1, TransformComponent.getComponentType());
         this.dependencies = Collections.singleton(new SystemDependency<>(Order.AFTER, NetworkSendableSpatialSystem.class));
      }

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return EntityTrackerSystems.FIND_VISIBLE_ENTITIES_GROUP;
      }

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return this.dependencies;
      }

      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      @Override
      class="kw">public boolean isParallel(int var1, int var2) {
         class="kw">return EntityTickingSystem.maybeUseParallel(var1, var2);
      }

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         TransformComponent var6 = var3.getComponent(var2, TransformComponent.getComponentType());
         assert var6 != null;
         Vector3d var7 = var6.getPosition();
         EntityTrackerSystems.EntityViewer var8 = var3.getComponent(var2, this.entityViewerComponentType);
         assert var8 != null;
         SpatialStructure var9 = var4.getResource(EntityModule.get().getNetworkSendableSpatialResourceType()).getSpatialStructure();
         List var10 = SpatialResource.getThreadLocalReferenceList();
         var9.collect(var7, var8.viewRadiusBlocks, var10);
         var8.visible.addAll(var10);
      }
   }

   class="kw">public class="kw">static class EffectControllerSystem class="kw">extends EntityTickingSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, EntityTrackerSystems.Visible> visibleComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, EffectControllerComponent> effectControllerComponentType;
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query;

      class="kw">public EffectControllerSystem(
         @Nonnull ComponentType<EntityStore, EntityTrackerSystems.Visible> var1, @Nonnull ComponentType<EntityStore, EffectControllerComponent> var2
      ) {
         this.visibleComponentType = var1;
         this.effectControllerComponentType = var2;
         this.query = Query.and(var1, var2);
      }

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return EntityTrackerSystems.QUEUE_UPDATE_GROUP;
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      @Override
      class="kw">public boolean isParallel(int var1, int var2) {
         class="kw">return EntityTickingSystem.maybeUseParallel(var1, var2);
      }

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         EntityTrackerSystems.Visible var6 = var3.getComponent(var2, this.visibleComponentType);
         assert var6 != null;
         EffectControllerComponent var7 = var3.getComponent(var2, this.effectControllerComponentType);
         assert var7 != null;
         Ref var8 = var3.getReferenceTo(var2);
         if (!var6.newlyVisibleTo.isEmpty()) {
            queueFullUpdate(var8, var7, var6.newlyVisibleTo);
         }

         if (var7.consumeNetworkOutdated()) {
            queueUpdatesFor(var8, var7, var6.visibleTo, var6.newlyVisibleTo);
         }
      }

      class="kw">private class="kw">static void queueFullUpdate(
         @Nonnull Ref<EntityStore> var0, @Nonnull EffectControllerComponent var1, @Nonnull Map<Ref<EntityStore>, EntityTrackerSystems.EntityViewer> var2
      ) {
         EntityEffectsUpdate var3 = new EntityEffectsUpdate();
         var3.entityEffectUpdates = var1.createInitUpdates();

         for (EntityTrackerSystems.EntityViewer var5 : var2.values()) {
            var5.queueUpdate(var0, var3);
         }
      }

      class="kw">private class="kw">static void queueUpdatesFor(
         @Nonnull Ref<EntityStore> var0,
         @Nonnull EffectControllerComponent var1,
         @Nonnull Map<Ref<EntityStore>, EntityTrackerSystems.EntityViewer> var2,
         @Nonnull Map<Ref<EntityStore>, EntityTrackerSystems.EntityViewer> var3
      ) {
         EntityEffectsUpdate var4 = new EntityEffectsUpdate();
         var4.entityEffectUpdates = var1.consumeChanges();
         if (!var3.isEmpty()) {
            for (Entry var8 : var2.entrySet()) {
               if (!var3.containsKey(var8.getKey())) {
                  var8.getValue().queueUpdate(var0, var4);
               }
            }
         } else {
            for (EntityTrackerSystems.EntityViewer var6 : var2.values()) {
               var6.queueUpdate(var0, var4);
            }
         }
      }
   }

   class="kw">public class="kw">static class EnsureVisibleComponent class="kw">extends EntityTickingSystem<EntityStore> {
      @Nonnull
      class="kw">public class="kw">static class="kw">final Set<Dependency<EntityStore>> DEPENDENCIES = Collections.singleton(
         new SystemDependency<>(Order.AFTER, EntityTrackerSystems.ClearPreviouslyVisible.class)
      );
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> entityViewerComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, EntityTrackerSystems.Visible> visibleComponentType;

      class="kw">public EnsureVisibleComponent(
         @Nonnull ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> var1, @Nonnull ComponentType<EntityStore, EntityTrackerSystems.Visible> var2
      ) {
         this.entityViewerComponentType = var1;
         this.visibleComponentType = var2;
      }

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return DEPENDENCIES;
      }

      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.entityViewerComponentType;
      }

      @Override
      class="kw">public boolean isParallel(int var1, int var2) {
         class="kw">return EntityTickingSystem.maybeUseParallel(var1, var2);
      }

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         EntityTrackerSystems.EntityViewer var6 = var3.getComponent(var2, this.entityViewerComponentType);
         assert var6 != null;

         for (Ref var8 : var6.visible) {
            if (var8 != null && var8.isValid() && !var5.getArchetype(var8).contains(this.visibleComponentType)) {
               var5.ensureComponent(var8, this.visibleComponentType);
            }
         }
      }
   }

   class="kw">public class="kw">static class EntityModel class="kw">extends EntityTickingSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, EntityTrackerSystems.Visible> visibleComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, ModelComponent> modelComponentType;
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query;

      class="kw">public EntityModel(@Nonnull ComponentType<EntityStore, EntityTrackerSystems.Visible> var1) {
         this.visibleComponentType = var1;
         this.modelComponentType = ModelComponent.getComponentType();
         this.query = Query.and(var1, this.modelComponentType);
      }

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return EntityTrackerSystems.QUEUE_UPDATE_GROUP;
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      @Override
      class="kw">public boolean isParallel(int var1, int var2) {
         class="kw">return EntityTickingSystem.maybeUseParallel(var1, var2);
      }

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         EntityTrackerSystems.Visible var6 = var3.getComponent(var2, this.visibleComponentType);
         assert var6 != null;
         ModelComponent var7 = var3.getComponent(var2, this.modelComponentType);
         assert var7 != null;
         float var8 = 0.0F;
         boolean var9 = false;
         EntityScaleComponent var10 = var3.getComponent(var2, EntityScaleComponent.getComponentType());
         if (var10 != null) {
            var8 = var10.getScale();
            var9 = var10.consumeNetworkOutdated();
         }

         Ref var11 = var3.getReferenceTo(var2);
         boolean var12 = var3.getComponent(var2, PropComponent.getComponentType()) != null;
         boolean var13 = var7.consumeNetworkOutdated();
         if (var13 || var9) {
            queueUpdatesFor(var11, var7, var8, var12, var6.visibleTo);
         } else if (!var6.newlyVisibleTo.isEmpty()) {
            queueUpdatesFor(var11, var7, var8, var12, var6.newlyVisibleTo);
         }
      }

      class="kw">private class="kw">static void queueUpdatesFor(
         @Nonnull Ref<EntityStore> var0,
         @Nullable ModelComponent var1,
         float var2,
         boolean var3,
         @Nonnull Map<Ref<EntityStore>, EntityTrackerSystems.EntityViewer> var4
      ) {
         ModelUpdate var5 = new ModelUpdate(var1 != null ? var1.getModel().toPacket() : null, var2);

         for (EntityTrackerSystems.EntityViewer var7 : var4.values()) {
            var7.queueUpdate(var0, var5);
         }

         if (var3) {
            PropUpdate var9 = new PropUpdate();

            for (EntityTrackerSystems.EntityViewer var8 : var4.values()) {
               var8.queueUpdate(var0, var9);
            }
         }
      }
   }

   class="kw">public class="kw">static class EntitySkin class="kw">extends EntityTickingSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, PlayerSkinComponent> playerSkinComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, EntityTrackerSystems.Visible> visibleComponentType;
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query;

      class="kw">public EntitySkin(@Nonnull ComponentType<EntityStore, EntityTrackerSystems.Visible> var1, @Nonnull ComponentType<EntityStore, PlayerSkinComponent> var2) {
         this.visibleComponentType = var1;
         this.playerSkinComponentType = var2;
         this.query = Query.and(var1, var2);
      }

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return EntityTrackerSystems.QUEUE_UPDATE_GROUP;
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      @Override
      class="kw">public boolean isParallel(int var1, int var2) {
         class="kw">return EntityTickingSystem.maybeUseParallel(var1, var2);
      }

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         EntityTrackerSystems.Visible var6 = var3.getComponent(var2, this.visibleComponentType);
         assert var6 != null;
         PlayerSkinComponent var7 = var3.getComponent(var2, this.playerSkinComponentType);
         assert var7 != null;
         if (var7.consumeNetworkOutdated()) {
            queueUpdatesFor(var3.getReferenceTo(var2), var7, var6.visibleTo);
         } else if (!var6.newlyVisibleTo.isEmpty()) {
            queueUpdatesFor(var3.getReferenceTo(var2), var7, var6.newlyVisibleTo);
         }
      }

      class="kw">private class="kw">static void queueUpdatesFor(
         @Nonnull Ref<EntityStore> var0, @Nonnull PlayerSkinComponent var1, @Nonnull Map<Ref<EntityStore>, EntityTrackerSystems.EntityViewer> var2
      ) {
         PlayerSkinUpdate var3 = new PlayerSkinUpdate();
         var3.skin = var1.getPlayerSkin();

         for (EntityTrackerSystems.EntityViewer var5 : var2.values()) {
            var5.queueUpdate(var0, var3);
         }
      }
   }

   class="kw">public class="kw">static class EntityUpdate {
      @Nonnull
      class="kw">private class="kw">final StampedLock removeLock = new StampedLock();
      @Nonnull
      class="kw">private class="kw">final EnumSet<ComponentUpdateType> removed;
      @Nonnull
      class="kw">private class="kw">final StampedLock updatesLock = new StampedLock();
      @Nonnull
      class="kw">private class="kw">final List<ComponentUpdate> updates;

      class="kw">public EntityUpdate() {
         this.removed = EnumSet.noneOf(ComponentUpdateType.class);
         this.updates = new ObjectArrayList();
      }

      class="kw">public EntityUpdate(@Nonnull EntityTrackerSystems.EntityUpdate var1) {
         this.removed = EnumSet.copyOf(var1.removed);
         this.updates = new ObjectArrayList(var1.updates);
      }

      @Nonnull
      class="kw">public EntityTrackerSystems.EntityUpdate clone() {
         class="kw">return new EntityTrackerSystems.EntityUpdate(this);
      }

      class="kw">public void queueRemove(@Nonnull ComponentUpdateType var1) {
         long var2 = this.removeLock.writeLock();

         try {
            this.removed.add(var1);
         } class="kw">finally {
            this.removeLock.unlockWrite(var2);
         }
      }

      class="kw">public void queueUpdate(@Nonnull ComponentUpdate var1) {
         long var2 = this.updatesLock.writeLock();

         try {
            this.updates.add(var1);
         } class="kw">finally {
            this.updatesLock.unlockWrite(var2);
         }
      }

      @Nullable
      class="kw">public ComponentUpdateType[] toRemovedArray() {
         class="kw">return this.removed.isEmpty() ? null : this.removed.toArray(ComponentUpdateType[]::new);
      }

      @Nullable
      class="kw">public ComponentUpdate[] toUpdatesArray() {
         class="kw">return this.updates.isEmpty() ? null : this.updates.toArray(ComponentUpdate[]::new);
      }
   }

   class="kw">public class="kw">static class EntityViewer class="kw">implements Component<EntityStore> {
      class="kw">public int viewRadiusBlocks;
      @Nonnull
      class="kw">public IPacketReceiver packetReceiver;
      @Nonnull
      class="kw">public Set<Ref<EntityStore>> visible;
      @Nonnull
      class="kw">public Map<Ref<EntityStore>, EntityTrackerSystems.EntityUpdate> updates;
      @Nonnull
      class="kw">public Reference2IntMap<Ref<EntityStore>> sent;
      class="kw">public int lodExcludedCount;
      class="kw">public int hiddenCount;

      class="kw">public class="kw">static ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> getComponentType() {
         class="kw">return EntityModule.get().getEntityViewerComponentType();
      }

      class="kw">public EntityViewer(int var1, @Nonnull IPacketReceiver var2) {
         this.viewRadiusBlocks = var1;
         this.packetReceiver = var2;
         this.visible = new ReferenceOpenHashSet();
         this.updates = new ConcurrentHashMap<>();
         this.sent = new Reference2IntOpenHashMap();
         this.sent.defaultReturnValue(-1);
      }

      class="kw">public EntityViewer(@Nonnull EntityTrackerSystems.EntityViewer var1) {
         this.viewRadiusBlocks = var1.viewRadiusBlocks;
         this.packetReceiver = var1.packetReceiver;
         this.visible = new ReferenceOpenHashSet(var1.visible);
         this.updates = new ConcurrentHashMap<>(var1.updates.size());

         for (Entry var3 : var1.updates.entrySet()) {
            this.updates.put(var3.getKey(), var3.getValue().clone());
         }

         this.sent = new Reference2IntOpenHashMap(var1.sent);
         this.sent.defaultReturnValue(-1);
      }

      @Nonnull
      @Override
      class="kw">public Component<EntityStore> clone() {
         class="kw">return new EntityTrackerSystems.EntityViewer(this);
      }

      class="kw">public void queueRemove(@Nonnull Ref<EntityStore> var1, @Nonnull ComponentUpdateType var2) {
         if (!this.visible.contains(var1)) {
            throw new IllegalArgumentException("Entity is not visible!");
         }

         this.updates.computeIfAbsent(var1, var0 -> new EntityTrackerSystems.EntityUpdate()).queueRemove(var2);
      }

      class="kw">public void queueUpdate(@Nonnull Ref<EntityStore> var1, @Nonnull ComponentUpdate var2) {
         if (!this.visible.contains(var1)) {
            throw new IllegalArgumentException("Entity is not visible!");
         }

         this.updates.computeIfAbsent(var1, var0 -> new EntityTrackerSystems.EntityUpdate()).queueUpdate(var2);
      }
   }

   class="kw">public class="kw">static class HideFromPlayer class="kw">extends EntityTickingSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> entityViewerComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, PlayerRef> playerRefComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, PlayerSettings> playerSettingsComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, UUIDComponent> uuidComponentType;
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query;
      @Nonnull
      class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies;

      class="kw">public HideFromPlayer(@Nonnull ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> var1) {
         this.entityViewerComponentType = var1;
         this.playerRefComponentType = PlayerRef.getComponentType();
         this.playerSettingsComponentType = EntityModule.get().getPlayerSettingsComponentType();
         this.uuidComponentType = EntityModule.get().getUuidComponentType();
         this.query = Query.and(var1, this.playerRefComponentType, this.playerSettingsComponentType);
         this.dependencies = Collections.singleton(new SystemDependency<>(Order.AFTER, EntityTrackerSystems.CollectVisible.class));
      }

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return EntityTrackerSystems.FIND_VISIBLE_ENTITIES_GROUP;
      }

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return this.dependencies;
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      @Override
      class="kw">public boolean isParallel(int var1, int var2) {
         class="kw">return EntityTickingSystem.maybeUseParallel(var1, var2);
      }

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         PlayerSettings var6 = var3.getComponent(var2, this.playerSettingsComponentType);
         assert var6 != null;
         if (!var6.showEntityMarkers()) {
            EntityTrackerSystems.EntityViewer var7 = var3.getComponent(var2, this.entityViewerComponentType);
            assert var7 != null;
            PlayerRef var8 = var3.getComponent(var2, this.playerRefComponentType);
            assert var8 != null;
            HiddenPlayersManager var9 = var8.getHiddenPlayersManager();
            Iterator var10 = var7.visible.iterator();

            while (var10.hasNext()) {
               Ref var11 = var10.next();
               if (!var11.isValid()) {
                  var10.remove();
               } else if (var5.getArchetype(var11).contains(this.playerRefComponentType)) {
                  UUIDComponent var12 = var5.getComponent(var11, this.uuidComponentType);
                  if (var12 != null && var9.isPlayerHidden(var12.getUuid())) {
                     var7.hiddenCount++;
                     var10.remove();
                  }
               }
            }
         }
      }
   }

   class="kw">public class="kw">static class LODCull class="kw">extends EntityTickingSystem<EntityStore> {
      class="kw">public class="kw">static class="kw">final double ENTITY_LOD_RATIO_DEFAULT = 3.5E-5;
      class="kw">public class="kw">static double ENTITY_LOD_RATIO = 3.5E-5;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> entityViewerComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, BoundingBox> boundingBoxComponentType;
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query;
      @Nonnull
      class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies;

      class="kw">public LODCull(@Nonnull ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> var1) {
         this.entityViewerComponentType = var1;
         this.boundingBoxComponentType = BoundingBox.getComponentType();
         this.query = Query.and(var1, TransformComponent.getComponentType());
         this.dependencies = Collections.singleton(new SystemDependency<>(Order.AFTER, EntityTrackerSystems.CollectVisible.class));
      }

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return EntityTrackerSystems.FIND_VISIBLE_ENTITIES_GROUP;
      }

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return this.dependencies;
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      @Override
      class="kw">public boolean isParallel(int var1, int var2) {
         class="kw">return EntityTickingSystem.maybeUseParallel(var1, var2);
      }

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         EntityTrackerSystems.EntityViewer var6 = var3.getComponent(var2, this.entityViewerComponentType);
         assert var6 != null;
         TransformComponent var7 = var3.getComponent(var2, TransformComponent.getComponentType());
         assert var7 != null;
         Vector3d var8 = var7.getPosition();
         Iterator var9 = var6.visible.iterator();

         while (var9.hasNext()) {
            Ref var10 = var9.next();
            if (!var10.isValid()) {
               var9.remove();
            } else {
               BoundingBox var11 = var5.getComponent(var10, this.boundingBoxComponentType);
               if (var11 != null) {
                  TransformComponent var12 = var5.getComponent(var10, TransformComponent.getComponentType());
                  if (var12 != null) {
                     double var13 = var12.getPosition().distanceSquared(var8);
                     double var15 = var11.getBoundingBox().getMaximumThickness();
                     if (var15 < ENTITY_LOD_RATIO * var13) {
                        var6.lodExcludedCount++;
                        var9.remove();
                     }
                  }
               }
            }
         }
      }
   }

   class="kw">public class="kw">static class RemoveEmptyVisibleComponent class="kw">extends EntityTickingSystem<EntityStore> {
      @Nonnull
      class="kw">public class="kw">static class="kw">final Set<Dependency<EntityStore>> DEPENDENCIES = Set.of(
         new SystemDependency<>(Order.AFTER, EntityTrackerSystems.AddToVisible.class),
         new SystemGroupDependency<EntityStore>(Order.BEFORE, EntityTrackerSystems.QUEUE_UPDATE_GROUP)
      );
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, EntityTrackerSystems.Visible> visibleComponentType;

      class="kw">public RemoveEmptyVisibleComponent(@Nonnull ComponentType<EntityStore, EntityTrackerSystems.Visible> var1) {
         this.visibleComponentType = var1;
      }

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return DEPENDENCIES;
      }

      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.visibleComponentType;
      }

      @Override
      class="kw">public boolean isParallel(int var1, int var2) {
         class="kw">return EntityTickingSystem.maybeUseParallel(var1, var2);
      }

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         EntityTrackerSystems.Visible var6 = var3.getComponent(var2, this.visibleComponentType);
         assert var6 != null;
         if (var6.visibleTo.isEmpty()) {
            var5.removeComponent(var3.getReferenceTo(var2), this.visibleComponentType);
         }
      }
   }

   class="kw">public class="kw">static class RemoveVisibleComponent class="kw">extends HolderSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, EntityTrackerSystems.Visible> visibleComponentType;

      class="kw">public RemoveVisibleComponent(@Nonnull ComponentType<EntityStore, EntityTrackerSystems.Visible> var1) {
         this.visibleComponentType = var1;
      }

      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.visibleComponentType;
      }

      @Override
      class="kw">public void onEntityAdd(@Nonnull Holder<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3) {
      }

      @Override
      class="kw">public void onEntityRemoved(@Nonnull Holder<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3) {
         var1.removeComponent(this.visibleComponentType);
      }
   }

   class="kw">public class="kw">static class SendPackets class="kw">extends EntityTickingSystem<EntityStore> {
      @Nonnull
      class="kw">public class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
      @Nonnull
      class="kw">public class="kw">static class="kw">final ThreadLocal<IntList> INT_LIST_THREAD_LOCAL = ThreadLocal.withInitial(IntArrayList::new);
      @Nonnull
      class="kw">public class="kw">static class="kw">final Set<Dependency<EntityStore>> DEPENDENCIES = Set.of(new SystemGroupDependency<>(Order.AFTER, EntityTrackerSystems.QUEUE_UPDATE_GROUP));
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> entityViewerComponentType;

      class="kw">public SendPackets(@Nonnull ComponentType<EntityStore, EntityTrackerSystems.EntityViewer> var1) {
         this.entityViewerComponentType = var1;
      }

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return EntityStore.SEND_PACKET_GROUP;
      }

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return DEPENDENCIES;
      }

      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.entityViewerComponentType;
      }

      @Override
      class="kw">public boolean isParallel(int var1, int var2) {
         class="kw">return EntityTickingSystem.maybeUseParallel(var1, var2);
      }

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         EntityTrackerSystems.EntityViewer var6 = var3.getComponent(var2, this.entityViewerComponentType);
         assert var6 != null;
         IntList var7 = INT_LIST_THREAD_LOCAL.get();
         var7.clear();
         int var8 = var6.updates.size();
         var6.updates.entrySet().removeIf(var0 -> !var0.getKey().isValid());
         if (var8 != var6.updates.size()) {
            ((HytaleLogger.Api)LOGGER.atWarning()).log("Removed %d invalid updates for removed entities.", var8 - var6.updates.size());
         }

         ObjectIterator var9 = var6.sent.reference2IntEntrySet().iterator();

         while (var9.hasNext()) {
            it.unimi.dsi.fastutil.objects.Reference2IntMap.Entry var10 = (it.unimi.dsi.fastutil.objects.Reference2IntMap.Entry<Ref<EntityStore>>)var9.next();
            Ref var11 = (Ref<EntityStore>)var10.getKey();
            if (var11 == null || !var11.isValid() || !var6.visible.contains(var11)) {
               var7.add(var10.getIntValue());
               var9.remove();
               if (var6.updates.remove(var11) != null) {
                  ((HytaleLogger.Api)LOGGER.atSevere()).log("Entity can't be removed and also receive an update! %s", var11);
               }
            }
         }

         if (!var7.isEmpty() || !var6.updates.isEmpty()) {
            Iterator iteratorx = var6.updates.keySet().iterator();

            while (iteratorx.hasNext()) {
               Ref var17 = iteratorx.next();
               if (var17 == null || !var17.isValid() || var17.getStore() != var4) {
                  iteratorx.remove();
               } else if (!var6.sent.containsKey(var17)) {
                  NetworkId var19 = var5.getComponent(var17, NetworkId.getComponentType());
                  assert var19 != null;
                  int var12 = var19.getId();
                  if (var12 == -1) {
                     throw new IllegalArgumentException("Invalid entity network id: " + var17);
                  }

                  var6.sent.put(var17, var12);
               }
            }

            EntityUpdates var16 = new EntityUpdates();
            var16.removed = !var7.isEmpty() ? var7.toIntArray() : null;
            var16.updates = new com.hypixel.hytale.protocol.EntityUpdate[var6.updates.size()];
            int var18 = 0;

            for (Entry var21 : var6.updates.entrySet()) {
               com.hypixel.hytale.protocol.EntityUpdate var13 = var16.updates[var18++] = new com.hypixel.hytale.protocol.EntityUpdate();
               var13.networkId = var6.sent.getInt(var21.getKey());
               EntityTrackerSystems.EntityUpdate var14 = var21.getValue();
               var13.removed = var14.toRemovedArray();
               var13.updates = var14.toUpdatesArray();
            }

            var6.updates.clear();
            var6.packetReceiver.writeNoCache(var16);
         }
      }
   }

   class="kw">public class="kw">static class Visible class="kw">implements Component<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final StampedLock lock = new StampedLock();
      @Nonnull
      class="kw">public Map<Ref<EntityStore>, EntityTrackerSystems.EntityViewer> previousVisibleTo = new Reference2ObjectOpenHashMap();
      @Nonnull
      class="kw">public Map<Ref<EntityStore>, EntityTrackerSystems.EntityViewer> visibleTo = new Reference2ObjectOpenHashMap();
      @Nonnull
      class="kw">public Map<Ref<EntityStore>, EntityTrackerSystems.EntityViewer> newlyVisibleTo = new Reference2ObjectOpenHashMap();

      class="kw">public Visible() {
      }

      @Nonnull
      class="kw">public class="kw">static ComponentType<EntityStore, EntityTrackerSystems.Visible> getComponentType() {
         class="kw">return EntityModule.get().getVisibleComponentType();
      }

      @Nonnull
      @Override
      class="kw">public Component<EntityStore> clone() {
         class="kw">return new EntityTrackerSystems.Visible();
      }

      class="kw">public void addViewerParallel(@Nonnull Ref<EntityStore> var1, @Nonnull EntityTrackerSystems.EntityViewer var2) {
         long var3 = this.lock.writeLock();

         try {
            this.visibleTo.put(var1, var2);
            if (!this.previousVisibleTo.containsKey(var1)) {
               this.newlyVisibleTo.put(var1, var2);
            }
         } class="kw">finally {
            this.lock.unlockWrite(var3);
         }
      }
   }
}