PreTick class

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

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

extends: EntityTickingSystem<ChunkStore>

Поля (5)

МодификаторыТипИмя
private static final ComponentType<ChunkStore, BlockSection> COMPONENT_TYPE
World var6
Store var7
Instant var8
BlockSection var9

Методы (3)

МодификаторыВозвратСигнатура
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
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)

Исходный код

Показать/скрыть
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;
         }
      }
   }
}