BlockTickPlugin class

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

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

extends: JavaPlugin

implements: IBlockTickProvider

Поля (17)

МодификаторыТипИмя
public static final ThreadLocal<BlockTickPlugin.Preprocessor> LOCAL
public final IntConsumer indexCollector
static BlockTickPlugin instance
instance
public final IntList tickingIds
public final IntList tickingIndices
public final IntConsumer typeCollector
BlockSection var10
ChunkSection var11
int var12
BlockType var2
BlockChunk var3
ChunkColumn var4
Holder[] var5
BlockTickPlugin.Preprocessor var6
int var7
Holder var9

Методы (12)

МодификаторыВозвратСигнатура
public Preprocessorpublic Preprocessor()
public void clearpublic void clear()
private void collectIndexprivate void collectIndex(int var1)
private void collectTypeprivate void collectType(int var1)
private void discoverTickingBlocksvoid discoverTickingBlocks(@Nonnull ChunkPreLoadProcessEvent var1)
public int discoverTickingBlocksint discoverTickingBlocks(@Nonnull Holder<ChunkStore> var1, @Nonnull WorldChunk var2)
for for(int var8 = 0; var8 < var5.length; var8++)
static BlockTickPlugin getBlockTickPlugin get()
if if(var4 == null)
if if(var5 == null)
if if(var12 > 0)
abstract super super(var1)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.blocktick.procedure.BasicChanceBlockGrowthProcedure;
class="kw">import com.hypixel.hytale.builtin.blocktick.procedure.SplitChanceBlockGrowthProcedure;
class="kw">import com.hypixel.hytale.builtin.blocktick.system.ChunkBlockTickSystem;
class="kw">import com.hypixel.hytale.builtin.blocktick.system.MergeWaitingBlocksSystem;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.event.EventPriority;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktick.BlockTickManager;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktick.IBlockTickProvider;
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.plugin.JavaPlugin;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPluginInit;
class="kw">import com.hypixel.hytale.server.core.universe.world.TickSuppressionRegistry;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.BlockChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.ChunkColumn;
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.chunk.section.ChunkSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.events.ChunkPreLoadProcessEvent;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import it.unimi.dsi.fastutil.ints.IntArrayList;
class="kw">import it.unimi.dsi.fastutil.ints.IntList;
class="kw">import java.util.function.IntConsumer;
class="kw">import javax.annotation.Nonnull;

class="kw">public class BlockTickPlugin class="kw">extends JavaPlugin class="kw">implements IBlockTickProvider {
   class="kw">private class="kw">static BlockTickPlugin instance;

   class="kw">public class="kw">static BlockTickPlugin get() {
      class="kw">return instance;
   }

   class="kw">public BlockTickPlugin(@Nonnull JavaPluginInit var1) {
      super(var1);
      instance = this;
   }

   @Override
   class="kw">protected void setup() {
      TickProcedure.CODEC.register("BasicChance", BasicChanceBlockGrowthProcedure.class, BasicChanceBlockGrowthProcedure.CODEC);
      TickProcedure.CODEC.register("SplitChance", SplitChanceBlockGrowthProcedure.class, SplitChanceBlockGrowthProcedure.CODEC);
      this.getEventRegistry().registerGlobal(EventPriority.EARLY, ChunkPreLoadProcessEvent.class, this::discoverTickingBlocks);
      ChunkStore.REGISTRY.registerSystem(new ChunkBlockTickSystem.PreTick());
      ChunkStore.REGISTRY.registerSystem(new ChunkBlockTickSystem.Ticking());
      ChunkStore.REGISTRY.registerSystem(new MergeWaitingBlocksSystem());
      TickSuppressionRegistry.ensureRegistered();
      BlockTickManager.setBlockTickProvider(this);
   }

   @Override
   class="kw">public TickProcedure getTickProcedure(int var1) {
      class="kw">return BlockType.getAssetMap().getAsset(var1).getTickProcedure();
   }

   class="kw">private void discoverTickingBlocks(@Nonnull ChunkPreLoadProcessEvent var1) {
      if (var1.isNewlyGenerated()) {
         this.discoverTickingBlocks(var1.getHolder(), var1.getChunk());
      }
   }

   class="kw">public int discoverTickingBlocks(@Nonnull Holder<ChunkStore> var1, @Nonnull WorldChunk var2) {
      if (!this.isEnabled()) {
         class="kw">return 0;
      }

      BlockChunk var3 = var1.getComponent(BlockChunk.getComponentType());
      if (var3 != null && var3.consumeNeedsPhysics()) {
         ChunkColumn var4 = var1.getComponent(ChunkColumn.getComponentType());
         if (var4 == null) {
            class="kw">return 0;
         }

         Holder[] var5 = var4.getSectionHolders();
         if (var5 == null) {
            class="kw">return 0;
         }

         BlockTickPlugin.Preprocessor var6 = BlockTickPlugin.Preprocessor.LOCAL.get();
         int var7 = 0;

         for (int var8 = 0; var8 < var5.length; var8++) {
            Holder var9 = var5[var8];
            BlockSection var10 = var9.ensureAndGetComponent(BlockSection.getComponentType());
            ChunkSection var11 = var9.getComponent(ChunkSection.getComponentType());
            assert var11 != null;
            if (!var10.isSolidAir()) {
               var6.clear();
               var10.forEachValue(var6.typeCollector);
               if (!var6.tickingIds.isEmpty()) {
                  var10.find(var6.tickingIds, var6.indexCollector);
                  int var12 = var10.setTicking(var6.tickingIndices, true);
                  if (var12 > 0) {
                     var11.markNeedsSaving();
                     var7 += var12;
                  }
               }
            }
         }

         class="kw">return var7;
      } else {
         class="kw">return 0;
      }
   }

   class="kw">public class="kw">static class="kw">final class Preprocessor {
      class="kw">public class="kw">static class="kw">final ThreadLocal<BlockTickPlugin.Preprocessor> LOCAL = ThreadLocal.withInitial(BlockTickPlugin.Preprocessor::new);
      class="kw">public class="kw">final IntList tickingIds = new IntArrayList();
      class="kw">public class="kw">final IntList tickingIndices = new IntArrayList();
      class="kw">public class="kw">final IntConsumer typeCollector = this::collectType;
      class="kw">public class="kw">final IntConsumer indexCollector = this::collectIndex;

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

      class="kw">public void clear() {
         this.tickingIds.clear();
         this.tickingIndices.clear();
      }

      class="kw">private void collectType(int var1) {
         BlockType var2 = BlockType.getAssetMap().getAsset(var1);
         if (var2 != null && var2.getTickProcedure() != null) {
            this.tickingIds.add(var1);
         }
      }

      class="kw">private void collectIndex(int var1) {
         this.tickingIndices.add(var1);
      }
   }
}