UpdateLocationSystems class

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

Файл: com/hypixel/hytale/server/core/modules/entity/system/UpdateLocationSystems.java

Поля (42)

МодификаторыТипИмя
return
return
int var10
PlayerRef var10
Ref var11
boolean var12
var12
int var13
var13
int var14
var14
int var15
var15
ChunkSection var16
boolean var17
Ref var18
Ref var19
Store var3
TransformComponent var4
Vector3d var5
Dirty var5
Ref var5
TransformComponent var5
ChunkStore var6
Ref var6
Vector3d var6
EntitySection var6
Dirty var6
World var6
Store var7
Vector3d var7
Holder var7
Ref var7
Ref var7
int var8
boolean var8
Rotation3f var8
EntitySection var8
TransformComponent var8
int var9
Teleport var9
Dirty var9

Методы (29)

МодификаторыВозвратСигнатура
public SpawnSystempublic SpawnSystem()
public TickingSystempublic TickingSystem()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
static void handleInvalidChunkvoid handleInvalidChunk(@Nonnull Ref<EntityStore> var0, @Nonnull TransformComponent var1, boolean var2, @Nullable Ref<ChunkStore> var3, @Nonnull ComponentAccessor<EntityStore> var4)
abstract handleInvalidChunk handleInvalidChunk(var0, var1, var8, var5, var7)
if if(var3 != null)
if if(var16 != null)
if if(!var12 || var13 != var8 || var15 != var10 || var14 != var9)
if if(var17)
if if(var18 != null)
if if(var4 == null)
if if(!var8)
if if(!var2)
if if(var5 != null)
if if(var10 != null)
if if(var1 != null)
public void onEntityAddedpublic void onEntityAdded(@Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)
public void onEntityRemovepublic void onEntityRemove(@Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)
static void updateEntityInChunkvoid updateEntityInChunk(@Nonnull Ref<EntityStore> var0, @Nullable Dirty var1, @Nullable Ref<ChunkStore> var2, @Nonnull Ref<ChunkStore> var3, @Nonnull ComponentAccessor<ChunkStore> var4, @Nonnull ComponentAccessor<EntityStore> var5)
abstract updateEntityInChunk updateEntityInChunk(var0, var2, var3, var4, var6, var7)
static void updateLocationvoid updateLocation(@Nonnull Ref<EntityStore> var0, @Nonnull TransformComponent var1, @Nullable Dirty var2, @Nullable World var3, @Nonnull CommandBuffer<EntityStore> var4)
static void updateSectionvoid updateSection(@Nonnull Ref<EntityStore> var0, @Nonnull TransformComponent var1, @Nullable Dirty var2, @Nullable Ref<ChunkStore> var3, @Nullable Ref<ChunkStore> var4, @Nullable Ref<ChunkStore> var5, @Nonnull ComponentAccessor<ChunkStore> var6, @Nonnull ComponentAccessor<EntityStore> var7)
abstract updateSection updateSection(var0, var1, var2, var11, var19, null, var7, var4)
abstract updateSection updateSection(var0, var1, var2, var11, var19, var18, var7, var4)
abstract updateSection updateSection(var0, var4, var5, var6, var1, null, var2, var3)
static void updateSectionAsyncvoid updateSectionAsync(@Nonnull Ref<EntityStore> var0, @Nullable Ref<ChunkStore> var1, @Nonnull Store<ChunkStore> var2)
abstract updateSectionAsync updateSectionAsync(var0, null, var7)

Исходный код

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

class="kw">import com.hypixel.hytale.common.util.CompletableFutureUtil;
class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.ArchetypeChunk;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
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.query.Query;
class="kw">import com.hypixel.hytale.component.system.RefSystem;
class="kw">import com.hypixel.hytale.component.system.tick.EntityTickingSystem;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.entity.Dirty;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.teleport.Teleport;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.ChunkSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.EntitySection;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.IChunkSaver;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class UpdateLocationSystems {
   @Nonnull
   class="kw">private class="kw">static class="kw">final Message MESSAGE_GENERAL_PLAYER_IN_INVALID_CHUNK = Message.translation("server.general.playerInInvalidChunk");
   @Nonnull
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();

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

   class="kw">private class="kw">static void updateLocation(
      @Nonnull Ref<EntityStore> var0, @Nonnull TransformComponent var1, @Nullable Dirty var2, @Nullable World var3, @Nonnull CommandBuffer<EntityStore> var4
   ) {
      if (var3 != null) {
         Vector3d var5 = var1.getPosition();
         if (var5.y() < -32.0 && !var4.getArchetype(var0).contains(Player.getComponentType())) {
            LOGGER.at(Level.WARNING).log("Unable to move entity below the world! %d < %s", -32, var5);
            var4.removeEntity(var0, RemoveReason.REMOVE);
         } else {
            if (var2 != null && var1.pollMovedEnoughToSave()) {
               var2.markDirty();
            }

            ChunkStore var6 = var3.getChunkStore();
            Store var7 = var6.getStore();
            int var8 = ChunkUtil.chunkCoordinate(var5.x());
            int var9 = ChunkUtil.chunkCoordinate(var5.y());
            int var10 = ChunkUtil.chunkCoordinate(var5.z());
            Ref var11 = var1.getSectionRef();
            boolean var12 = false;
            int var13 = 0;
            int var14 = 0;
            int var15 = 0;
            if (var11 != null && var11.isValid()) {
               ChunkSection var16 = var7.getComponent(var11, ChunkSection.getComponentType());
               if (var16 != null) {
                  var12 = true;
                  var13 = var16.getX();
                  var14 = var16.getY();
                  var15 = var16.getZ();
               }
            }

            if (!var12 || var13 != var8 || var15 != var10 || var14 != var9) {
               Ref var19 = var6.getChunkSectionReference(var8, var9, var10);
               if (var19 != null && var19.isValid()) {
                  updateSection(var0, var1, var2, var11, var19, null, var7, var4);
               } else {
                  boolean var17 = var4.getArchetype(var0).contains(Player.getComponentType());
                  if (var17) {
                     Ref var18 = var6.getChunkReference(ChunkUtil.indexChunkFromBlock(var1.getPosition().x, var1.getPosition().z));
                     if (var18 != null) {
                        updateSection(var0, var1, var2, var11, var19, var18, var7, var4);
                        class="kw">return;
                     }
                  }

                  LOGGER.at(Level.WARNING).log("Entity has moved into a chunk that isn't currently loaded! %d, %d, %d, %s", var8, var9, var10, var1);
                  CompletableFutureUtil._catch(var6.getChunkSectionReferenceAsync(var8, var9, var10).thenAcceptAsync(var2x -> {
                     if (var2x != null && var2x.isValid()) {
                        updateSectionAsync(var0, (Ref<ChunkStore>)var2x, var7);
                     } else {
                        updateSectionAsync(var0, null, var7);
                     }
                  }, var3));
               }
            }
         }
      }
   }

   class="kw">private class="kw">static void updateSectionAsync(@Nonnull Ref<EntityStore> var0, @Nullable Ref<ChunkStore> var1, @Nonnull Store<ChunkStore> var2) {
      if (var0.isValid()) {
         Store var3 = var0.getStore();
         TransformComponent var4 = var3.getComponent(var0, TransformComponent.getComponentType());
         assert var4 != null;
         Dirty var5 = var3.getComponent(var0, Dirty.getComponentType());
         Ref var6 = var4.getSectionRef();
         updateSection(var0, var4, var5, var6, var1, null, var2, var3);
      }
   }

   class="kw">private class="kw">static void updateSection(
      @Nonnull Ref<EntityStore> var0,
      @Nonnull TransformComponent var1,
      @Nullable Dirty var2,
      @Nullable Ref<ChunkStore> var3,
      @Nullable Ref<ChunkStore> var4,
      @Nullable Ref<ChunkStore> var5,
      @Nonnull ComponentAccessor<ChunkStore> var6,
      @Nonnull ComponentAccessor<EntityStore> var7
   ) {
      boolean var8 = var7.getArchetype(var0).contains(Player.getComponentType());
      if (var4 == null) {
         handleInvalidChunk(var0, var1, var8, var5, var7);
      } else {
         if (!var8) {
            updateEntityInChunk(var0, var2, var3, var4, var6, var7);
         }

         var1.setSectionLocation(var4);
      }
   }

   class="kw">private class="kw">static void handleInvalidChunk(
      @Nonnull Ref<EntityStore> var0,
      @Nonnull TransformComponent var1,
      boolean var2,
      @Nullable Ref<ChunkStore> var3,
      @Nonnull ComponentAccessor<EntityStore> var4
   ) {
      if (!var2) {
         LOGGER.at(Level.SEVERE).log("Entity is in a chunk that can't be loaded! Removing! %s", var1);
         var4.removeEntity(var0, EntityStore.REGISTRY.newHolder(), RemoveReason.REMOVE);
      } else {
         var1.setSectionLocation(null);
         Ref var5 = var3 != null
            ? var3
            : var4.getExternalData().getWorld().getChunkStore().getChunkReference(ChunkUtil.indexChunkFromBlock(var1.getPosition().x, var1.getPosition().z));
         if (var5 != null) {
            class="kw">return;
         }

         LOGGER.at(Level.SEVERE).log("Player is in a chunk that can't be loaded! Moving (-%d,0,0)! %s", 32, var1);
         Vector3d var6 = var1.getPosition();
         Vector3d var7 = new Vector3d(var6).sub(32.0, 0.0, 0.0);
         Rotation3f var8 = var1.getRotation();
         Teleport var9 = Teleport.createForPlayer(var7, var8);
         var4.addComponent(var0, Teleport.getComponentType(), var9);
         PlayerRef var10 = var4.getComponent(var0, PlayerRef.getComponentType());
         if (var10 != null) {
            var10.sendMessage(MESSAGE_GENERAL_PLAYER_IN_INVALID_CHUNK);
         }
      }
   }

   class="kw">private class="kw">static void updateEntityInChunk(
      @Nonnull Ref<EntityStore> var0,
      @Nullable Dirty var1,
      @Nullable Ref<ChunkStore> var2,
      @Nonnull Ref<ChunkStore> var3,
      @Nonnull ComponentAccessor<ChunkStore> var4,
      @Nonnull ComponentAccessor<EntityStore> var5
   ) {
      if (var2 != null && var2.isValid()) {
         EntitySection var6 = var4.getComponent(var2, EntitySection.getComponentType());
         assert var6 != null;
         var6.removeEntityReference(var0);
      }

      EntitySection var8 = var4.getComponent(var3, EntitySection.getComponentType());
      assert var8 != null;
      if (var1 != null) {
         if (!(var4.getExternalData().getSaver() class="kw">instanceof IChunkSaver.Cubic)) {
            var1.setSection(var8);
         } else {
            var1.setSection(null);
         }

         var1.forceMarkDirty();
      }

      if (var4.getArchetype(var3).contains(ChunkStore.REGISTRY.getNonTickingComponentType())) {
         Holder var7 = EntityStore.REGISTRY.newHolder();
         var5.removeEntity(var0, var7, RemoveReason.UNLOAD);
         var8.addEntityHolder(var7);
      } else {
         var8.addEntityReference(var0);
      }
   }

   class="kw">public class="kw">static class SpawnSystem class="kw">extends RefSystem<EntityStore> {
      class="kw">public SpawnSystem() {
      }

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

      @Override
      class="kw">public void onEntityAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         TransformComponent var5 = var4.getComponent(var1, TransformComponent.getComponentType());
         assert var5 != null;
         Dirty var6 = var4.getComponent(var1, Dirty.getComponentType());
         Ref var7 = var5.getSectionRef();
         if (var7 == null || !var7.isValid()) {
            UpdateLocationSystems.updateLocation(var1, var5, var6, var3.getExternalData().getWorld(), var4);
         }
      }

      @Override
      class="kw">public void onEntityRemove(
         @Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
      }
   }

   class="kw">public class="kw">static class TickingSystem class="kw">extends EntityTickingSystem<EntityStore> {
      class="kw">public TickingSystem() {
      }

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

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         World var6 = var5.getExternalData().getWorld();
         Ref var7 = var3.getReferenceTo(var2);
         TransformComponent var8 = var3.getComponent(var2, TransformComponent.getComponentType());
         assert var8 != null;
         Dirty var9 = var3.getComponent(var2, Dirty.getComponentType());
         UpdateLocationSystems.updateLocation(var7, var8, var9, var6, var5);
      }
   }
}