Preprocessor class
Пакет: com.hypixel.hytale.builtin.blocktick
Файл: com/hypixel/hytale/builtin/blocktick/BlockTickPlugin.java
Поля (6)
| Модификаторы | Тип | Имя |
|---|---|---|
|
public static final ThreadLocal<BlockTickPlugin.Preprocessor> |
LOCAL |
|
public final IntConsumer |
indexCollector |
|
public final IntList |
tickingIds |
|
public final IntList |
tickingIndices |
|
public final IntConsumer |
typeCollector |
|
BlockType |
var2 |
Методы (3)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public void |
clearpublic void clear() |
|
private void |
collectIndexprivate void collectIndex(int var1) |
|
private void |
collectTypeprivate void collectType(int 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);
}
}
}