ChunkBlockTickSystem class

Пакет: com.hypixel.hytale.builtin.blocktick.system

Файл: com/hypixel/hytale/builtin/blocktick/system/ChunkBlockTickSystem.java

Поля (19)

МодификаторыТипИмя
private static final ComponentType<ChunkStore, BlockSection> COMPONENT_TYPE
private static final ComponentType<ChunkStore, BlockChunk> COMPONENT_TYPE_BLOCK_CHUNK
private static final ComponentType<ChunkStore, WorldChunk> COMPONENT_TYPE_WORLD_CHUNK
private static final Set<Dependency<ChunkStore>> DEPENDENCIES
private static final Query<ChunkStore> QUERY
TickSuppressionRegistry var3
TickSuppressionRegistry var4
int var5
World var6
Ref var6
TickProcedure var6
Store var7
WorldChunk var7
Instant var8
BlockChunk var8
int var8
BlockType var8
BlockSection var9
int var9

Методы (13)

МодификаторыВозвратСигнатура
public PreTickpublic PreTick()
public Tickingpublic Ticking()
public Set<Dependency<ChunkStore>> getDependenciespublic Set<Dependency<ChunkStore>> getDependencies()
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
if if(var5 > 0)
if if(var6 == null)
public boolean isParallelpublic boolean isParallel(int var1, int var2)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<ChunkStore> var3, @Nonnull Store<ChunkStore> var4, @Nonnull CommandBuffer<ChunkStore> var5)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<ChunkStore> var3, @Nonnull Store<ChunkStore> var4, @Nonnull CommandBuffer<ChunkStore> var5)
protected static void tickprotected static void tick(@Nonnull Ref<ChunkStore> var0, @Nonnull BlockChunk var1, @Nonnull WorldChunk var2)
abstract tick tick(var6, var8, var7)
protected static BlockTickStrategy tickProcedureprotected static BlockTickStrategy tickProcedure(@Nonnull World var0, @Nonnull WorldChunk var1, int var2, int var3, int var4, int var5)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.blocktick.BlockTickPlugin;
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.Ref;
class="kw">import com.hypixel.hytale.component.Store;
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.query.Query;
class="kw">import com.hypixel.hytale.component.system.tick.EntityTickingSystem;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktick.BlockTickManager;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktick.BlockTickStrategy;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktick.config.TickProcedure;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.modules.time.WorldTimeResource;
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.BlockChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
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 java.time.Instant;
class="kw">import java.util.Set;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;

class="kw">public class ChunkBlockTickSystem {
   @Nonnull
   class="kw">protected class="kw">static class="kw">final HytaleLogger LOGGER = BlockTickPlugin.get().getLogger();

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

   class="kw">public class="kw">static class PreTick class="kw">extends EntityTickingSystem<ChunkStore> {
      @Nonnull
      class="kw">private class="kw">static class="kw">final ComponentType<ChunkStore, BlockSection> COMPONENT_TYPE = BlockSection.getComponentType();

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

      @Override
      class="kw">public Query<ChunkStore> getQuery() {
         class="kw">return COMPONENT_TYPE;
      }

      @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<ChunkStore> var3, @Nonnull Store<ChunkStore> var4, @Nonnull CommandBuffer<ChunkStore> var5) {
         World var6 = var5.getExternalData().getWorld();
         Store var7 = var6.getEntityStore().getStore();
         Instant var8 = var7.getResource(WorldTimeResource.getResourceType()).getGameTime();
         BlockSection var9 = var3.getComponent(var2, COMPONENT_TYPE);
         assert var9 != null;

         try {
            var9.preTick(var8);
         } catch (Throwable var11) {
            ((HytaleLogger.Api)ChunkBlockTickSystem.LOGGER.at(Level.SEVERE).withCause(var11)).log("Failed to pre-tick chunk: %s", var9);
         }
      }
   }

   class="kw">public class="kw">static class Ticking class="kw">extends EntityTickingSystem<ChunkStore> {
      @Nonnull
      class="kw">private class="kw">static class="kw">final ComponentType<ChunkStore, WorldChunk> COMPONENT_TYPE_WORLD_CHUNK = WorldChunk.getComponentType();
      @Nonnull
      class="kw">private class="kw">static class="kw">final ComponentType<ChunkStore, BlockChunk> COMPONENT_TYPE_BLOCK_CHUNK = BlockChunk.getComponentType();
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<ChunkStore> QUERY = Query.and(COMPONENT_TYPE_WORLD_CHUNK, COMPONENT_TYPE_BLOCK_CHUNK);
      @Nonnull
      class="kw">private class="kw">static class="kw">final Set<Dependency<ChunkStore>> DEPENDENCIES = Set.of(new SystemDependency<>(Order.AFTER, ChunkBlockTickSystem.PreTick.class));

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

      @Override
      class="kw">public Query<ChunkStore> getQuery() {
         class="kw">return QUERY;
      }

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

      @Override
      class="kw">public void tick(float var1, int var2, @Nonnull ArchetypeChunk<ChunkStore> var3, @Nonnull Store<ChunkStore> var4, @Nonnull CommandBuffer<ChunkStore> var5) {
         Ref var6 = var3.getReferenceTo(var2);
         WorldChunk var7 = var3.getComponent(var2, COMPONENT_TYPE_WORLD_CHUNK);
         assert var7 != null;
         BlockChunk var8 = var3.getComponent(var2, COMPONENT_TYPE_BLOCK_CHUNK);
         assert var8 != null;

         try {
            tick(var6, var8, var7);
         } catch (Throwable var10) {
            ((HytaleLogger.Api)ChunkBlockTickSystem.LOGGER.at(Level.SEVERE).withCause(var10)).log("Failed to tick chunk: %s", var7);
         }
      }

      class="kw">protected class="kw">static void tick(@Nonnull Ref<ChunkStore> var0, @Nonnull BlockChunk var1, @Nonnull WorldChunk var2) {
         TickSuppressionRegistry var3 = var2.getWorld().getEntityStore().getStore().getResource(TickSuppressionRegistry.RESOURCE);
         TickSuppressionRegistry var4 = var3 != null && var3.hasKind(1) ? var3 : null;
         int var5 = var1.forEachTicking(
            var0,
            var2,
            (var1x, var2x, var3x, var4x, var5x, var6) -> {
               World var7 = var2x.getWorld();
               int var8 = var2x.getX() << 5 | var3x;
               int var9 = var2x.getZ() << 5 | var5x;
               class="kw">return var4 != null && var4.isBlockSuppressed(var8, var4x, var9, 1)
                  ? BlockTickStrategy.IGNORED
                  : tickProcedure(var7, var2x, var8, var4x, var9, var6);
            }
         );
         if (var5 > 0) {
            ChunkBlockTickSystem.LOGGER.at(Level.FINER).log("Ticked %d blocks in chunk (%d, %d)", var5, var2.getX(), var2.getZ());
         }
      }

      class="kw">protected class="kw">static BlockTickStrategy tickProcedure(@Nonnull World var0, @Nonnull WorldChunk var1, int var2, int var3, int var4, int var5) {
         if (var0.getWorldConfig().isBlockTicking() && BlockTickManager.hasBlockTickProvider()) {
            TickProcedure var6 = BlockTickPlugin.get().getTickProcedure(var5);
            if (var6 == null) {
               class="kw">return BlockTickStrategy.IGNORED;
            }

            try {
               class="kw">return var6.onTick(var0, var1, var2, var3, var4, var5);
            } catch (Throwable var9) {
               BlockType var8 = BlockType.getAssetMap().getAsset(var5);
               ((HytaleLogger.Api)ChunkBlockTickSystem.LOGGER.at(Level.WARNING).withCause(var9))
                  .log("Failed to tick block at (%d, %d, %d) ID %s in world %s:", var2, var3, var4, var8.getId(), var0.getName());
               class="kw">return BlockTickStrategy.SLEEP;
            }
         } else {
            class="kw">return BlockTickStrategy.IGNORED;
         }
      }
   }
}