RandomTickSystem class

Пакет: com.hypixel.hytale.builtin.randomtick

Файл: com/hypixel/hytale/builtin/randomtick/RandomTickSystem.java

extends: EntityTickingSystem<ChunkStore>

Поля (34)

МодификаторыТипИмя
final ComponentType<ChunkStore, BlockSection> blockSelectionComponentType
TickSuppressionRegistry var10
TickSuppressionRegistry var11
int var12
long var13
long var15
long var17
long var19
BlockTypeAssetMap var21
int var23
int var24
int var25
int var26
int var27
BlockType var28
RandomTickProcedure var29
int var30
int var31
int var32
int var33
Random var34
int var36
int var37
int var38
int var39
int var40
BlockType var41
RandomTickProcedure var42
int var43
int var44
BlockSection var6
ChunkSection var7
RandomTick var8
World var9

Методы (8)

МодификаторыВозвратСигнатура
abstract for for(int var22 = 0; var22 < var8.getBlocksPerSectionPerTickStable()
abstract for for(int var35 = 0; var35 < var8.getBlocksPerSectionPerTickUnstable()
if if(var27 != 0)
if if(var28 != null)
if if(var29 != null)
if if(var40 != 0)
if if(var41 != null)
if if(var42 != null)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.randomtick;

class="kw">import com.hypixel.hytale.assetstore.map.BlockTypeAssetMap;
class="kw">import com.hypixel.hytale.component.ArchetypeChunk;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentType;
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.tick.EntityTickingSystem;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.util.HashUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktick.config.RandomTickProcedure;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.universe.world.TickSuppressionRegistry;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.ChunkSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import java.util.Random;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class RandomTickSystem class="kw">extends EntityTickingSystem<ChunkStore> {
   class="kw">private class="kw">final ComponentType<ChunkStore, BlockSection> blockSelectionComponentType = BlockSection.getComponentType();
   class="kw">private class="kw">final ComponentType<ChunkStore, ChunkSection> chunkSectionComponentType = ChunkSection.getComponentType();
   class="kw">private class="kw">final Query<ChunkStore> query = Query.and(this.blockSelectionComponentType, this.chunkSectionComponentType);

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

   @Override
   class="kw">public void tick(float var1, int var2, @Nonnull ArchetypeChunk<ChunkStore> var3, @Nonnull Store<ChunkStore> var4, @Nonnull CommandBuffer<ChunkStore> var5) {
      BlockSection var6 = var3.getComponent(var2, this.blockSelectionComponentType);
      assert var6 != null;
      if (!var6.isSolidAir()) {
         ChunkSection var7 = var3.getComponent(var2, this.chunkSectionComponentType);
         assert var7 != null;
         RandomTick var8 = var5.getResource(RandomTick.getResourceType());
         World var9 = var4.getExternalData().getWorld();
         TickSuppressionRegistry var10 = var9.getEntityStore().getStore().getResource(TickSuppressionRegistry.RESOURCE);
         TickSuppressionRegistry var11 = var10 != null && var10.hasKind(2) ? var10 : null;
         int var12 = 32768 / var8.getBlocksPerSectionPerTickStable();
         long var13 = HashUtil.hash(var9.getTick() / var12, var7.getX(), var7.getY(), var7.getZ());
         long var15 = (var13 << 1 | 1L) & 32767L;
         long var17 = var13 >> 16 & 32767L;
         long var19 = var9.getTick() % var12 * var8.getBlocksPerSectionPerTickStable();
         BlockTypeAssetMap var21 = BlockType.getAssetMap();

         for (int var22 = 0; var22 < var8.getBlocksPerSectionPerTickStable(); var22++) {
            int var23 = (int)((var19 + var22) * var15 + var17 & 32767L);
            int var24 = ChunkUtil.xFromIndex(var23);
            int var25 = ChunkUtil.yFromIndex(var23);
            int var26 = ChunkUtil.zFromIndex(var23);
            int var27 = var6.get(var23);
            if (var27 != 0) {
               BlockType var28 = var21.getAsset(var27);
               if (var28 != null) {
                  RandomTickProcedure var29 = var28.getRandomTickProcedure();
                  if (var29 != null) {
                     int var30 = ChunkUtil.worldCoordFromLocalCoord(var7.getX(), var24);
                     int var31 = ChunkUtil.worldCoordFromLocalCoord(var7.getY(), var25);
                     int var32 = ChunkUtil.worldCoordFromLocalCoord(var7.getZ(), var26);
                     if (var11 == null || !var11.isBlockSuppressed(var30, var31, var32, 2)) {
                        var29.onRandomTick(var4, var5, var6, var30, var31, var32, var27, var28);
                     }
                  }
               }
            }
         }

         Random var34 = var8.getRandom();

         for (int var35 = 0; var35 < var8.getBlocksPerSectionPerTickUnstable(); var35++) {
            int var36 = var34.nextInt(32768);
            int var37 = ChunkUtil.xFromIndex(var36);
            int var38 = ChunkUtil.yFromIndex(var36);
            int var39 = ChunkUtil.zFromIndex(var36);
            int var40 = var6.get(var36);
            if (var40 != 0) {
               BlockType var41 = var21.getAsset(var40);
               if (var41 != null) {
                  RandomTickProcedure var42 = var41.getRandomTickProcedure();
                  if (var42 != null) {
                     int var43 = ChunkUtil.worldCoordFromLocalCoord(var7.getX(), var37);
                     int var44 = ChunkUtil.worldCoordFromLocalCoord(var7.getY(), var38);
                     int var33 = ChunkUtil.worldCoordFromLocalCoord(var7.getZ(), var39);
                     if (var11 == null || !var11.isBlockSuppressed(var43, var44, var33, 2)) {
                        var42.onRandomTick(var4, var5, var6, var43, var44, var33, var40, var41);
                     }
                  }
               }
            }
         }
      }
   }

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