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;
}
}
}
}