Ticking class
Пакет: com.hypixel.hytale.builtin.blockphysics
Файл: com/hypixel/hytale/builtin/blockphysics/BlockPhysicsSystems.java
extends: EntityTickingSystem<ChunkStore>
implements: DisableProcessingAssert
Поля (25)
| Модификаторы | Тип | Имя |
|---|---|---|
|
private static final Set<Dependency<ChunkStore>> |
DEPENDENCIES |
|
private static final Query<ChunkStore> |
QUERY |
|
|
return |
|
|
return |
|
|
return |
|
|
return |
|
|
return |
|
|
return |
|
Ref |
var10 |
|
Store |
var10 |
|
WorldChunk |
var11 |
|
int |
var11 |
|
BlockPhysicsSystems.CachedAccessor |
var12 |
|
int |
var12 |
|
int |
var13 |
|
int |
var14 |
|
int |
var15 |
|
ChunkSection |
var6 |
|
BlockPhysics |
var6 |
|
BlockSection |
var7 |
|
boolean |
var7 |
|
BlockPhysics |
var8 |
|
BlockType |
var8 |
|
FluidSection |
var9 |
|
World |
var9 |
Методы (9)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public Set<Dependency<ChunkStore>> |
getDependenciespublic Set<Dependency<ChunkStore>> getDependencies() |
|
public Query<ChunkStore> |
getQuerypublic Query<ChunkStore> getQuery() |
|
|
if if(var7 == null) |
|
|
if if(var8 == null) |
|
|
if if(var9 == null) |
|
|
if if(var11 == null) |
|
|
if if(var8 == null || var5x == 0) |
|
|
if if(var7) |
|
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.blockphysics;
class="kw">import com.hypixel.hytale.builtin.blocktick.system.ChunkBlockTickSystem;
class="kw">import com.hypixel.hytale.component.ArchetypeChunk;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.DisableProcessingAssert;
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.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktick.BlockTickStrategy;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.blocktype.component.BlockPhysics;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.AbstractCachedAccessor;
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.chunk.section.FluidSection;
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.util.Set;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class BlockPhysicsSystems {
@Nonnull
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
class="kw">public class="kw">static class="kw">final int MAX_SUPPORT_RADIUS = 14;
class="kw">public BlockPhysicsSystems() {
}
class="kw">public class="kw">static class CachedAccessor class="kw">extends AbstractCachedAccessor {
@Nonnull
class="kw">private class="kw">static class="kw">final ThreadLocal<BlockPhysicsSystems.CachedAccessor> THREAD_LOCAL = ThreadLocal.withInitial(BlockPhysicsSystems.CachedAccessor::new);
class="kw">private class="kw">static class="kw">final AbstractCachedAccessor.Registry REGISTRY = new AbstractCachedAccessor.Registry();
class="kw">private class="kw">static class="kw">final AbstractCachedAccessor.Key<BlockPhysics> PHYSICS_COMPONENT = REGISTRY.forSection(BlockPhysics::getComponentType);
class="kw">private class="kw">static class="kw">final AbstractCachedAccessor.Key<FluidSection> FLUID_COMPONENT = REGISTRY.forSection(FluidSection::getComponentType);
class="kw">private class="kw">static class="kw">final AbstractCachedAccessor.Key<BlockSection> BLOCK_COMPONENT = REGISTRY.forSection(BlockSection::getComponentType);
class="kw">protected BlockSection selfBlockSection;
class="kw">protected BlockPhysics selfPhysics;
class="kw">protected FluidSection selfFluidSection;
class="kw">protected Ref<ChunkStore> selfSectionReference;
class="kw">protected CachedAccessor() {
super(REGISTRY);
}
@Nonnull
class="kw">public class="kw">static BlockPhysicsSystems.CachedAccessor of(
ComponentAccessor<ChunkStore> var0,
Ref<ChunkStore> var1,
BlockSection var2,
BlockPhysics var3,
FluidSection var4,
int var5,
int var6,
int var7,
int var8
) {
BlockPhysicsSystems.CachedAccessor var9 = THREAD_LOCAL.get();
var9.init(var0, var5, var6, var7, var8);
var9.insertSectionComponent(PHYSICS_COMPONENT, var3, var5, var6, var7);
var9.insertSectionComponent(FLUID_COMPONENT, var4, var5, var6, var7);
var9.insertSectionComponent(BLOCK_COMPONENT, var2, var5, var6, var7);
var9.selfSectionReference = var1;
var9.insertSection(var1, var5, var6, var7);
var9.selfBlockSection = var2;
var9.selfPhysics = var3;
var9.selfFluidSection = var4;
class="kw">return var9;
}
@Nullable
class="kw">public BlockPhysics getBlockPhysics(int var1, int var2, int var3) {
class="kw">return this.getComponentSection(var1, var2, var3, PHYSICS_COMPONENT);
}
@Nullable
class="kw">public BlockPhysics getBlockPhysicsAtBlock(int var1, int var2, int var3) {
class="kw">return this.getComponentSectionAtBlock(var1, var2, var3, PHYSICS_COMPONENT);
}
@Nullable
class="kw">public FluidSection getFluidSection(int var1, int var2, int var3) {
class="kw">return this.getComponentSection(var1, var2, var3, FLUID_COMPONENT);
}
@Nullable
class="kw">public FluidSection getFluidSectionAtBlock(int var1, int var2, int var3) {
class="kw">return this.getComponentSectionAtBlock(var1, var2, var3, FLUID_COMPONENT);
}
@Nullable
class="kw">public BlockSection getBlockSection(int var1, int var2, int var3) {
class="kw">return this.getComponentSection(var1, var2, var3, BLOCK_COMPONENT);
}
@Nullable
class="kw">public BlockSection getBlockSectionAtBlock(int var1, int var2, int var3) {
class="kw">return this.getComponentSectionAtBlock(var1, var2, var3, BLOCK_COMPONENT);
}
class="kw">public void performBlockUpdate(int var1, int var2, int var3, int var4) {
for (int var5 = -1; var5 < 2; var5++) {
int var6 = var1 + var5;
for (int var7 = -1; var7 < 2; var7++) {
int var8 = var3 + var7;
for (int var9 = -1; var9 < 2; var9++) {
int var10 = var2 + var9;
BlockPhysics var11 = this.getBlockPhysics(ChunkUtil.chunkCoordinate(var6), ChunkUtil.chunkCoordinate(var10), ChunkUtil.chunkCoordinate(var8));
int var12 = var11 != null ? var11.get(var6, var10, var8) : 0;
if (var12 <= var4) {
BlockSection var13 = this.getBlockSection(
ChunkUtil.chunkCoordinate(var6), ChunkUtil.chunkCoordinate(var10), ChunkUtil.chunkCoordinate(var8)
);
if (var13 != null) {
var13.setTicking(var6, var10, var8, true);
}
}
}
}
}
}
class="kw">public void performBlockUpdate(int var1, int var2, int var3) {
for (int var4 = -1; var4 < 2; var4++) {
int var5 = var1 + var4;
for (int var6 = -1; var6 < 2; var6++) {
int var7 = var3 + var6;
for (int var8 = -1; var8 < 2; var8++) {
int var9 = var2 + var8;
BlockSection var10 = this.getBlockSection(ChunkUtil.chunkCoordinate(var5), ChunkUtil.chunkCoordinate(var9), ChunkUtil.chunkCoordinate(var7));
if (var10 != null) {
var10.setTicking(var5, var9, var7, true);
}
}
}
}
}
}
class="kw">public class="kw">static class Ticking class="kw">extends EntityTickingSystem<ChunkStore> class="kw">implements DisableProcessingAssert {
@Nonnull
class="kw">private class="kw">static class="kw">final Query<ChunkStore> QUERY = Query.and(
ChunkSection.getComponentType(), BlockSection.getComponentType(), BlockPhysics.getComponentType(), FluidSection.getComponentType()
);
@Nonnull
class="kw">private class="kw">static class="kw">final Set<Dependency<ChunkStore>> DEPENDENCIES = Set.of(
new SystemDependency<>(Order.AFTER, ChunkBlockTickSystem.PreTick.class), new SystemDependency<>(Order.BEFORE, ChunkBlockTickSystem.Ticking.class)
);
class="kw">public Ticking() {
}
@Nonnull
@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) {
ChunkSection var6 = var3.getComponent(var2, ChunkSection.getComponentType());
assert var6 != null;
try {
BlockSection var7 = var3.getComponent(var2, BlockSection.getComponentType());
if (var7 == null) {
class="kw">return;
}
if (var7.getTickingBlocksCountCopy() <= 0) {
class="kw">return;
}
BlockPhysics var8 = var3.getComponent(var2, BlockPhysics.getComponentType());
if (var8 == null) {
class="kw">return;
}
FluidSection var9 = var3.getComponent(var2, FluidSection.getComponentType());
if (var9 == null) {
class="kw">return;
}
Ref var10 = var6.getChunkColumnReference();
if (var10 == null || !var10.isValid()) {
class="kw">return;
}
WorldChunk var11 = var5.getComponent(var10, WorldChunk.getComponentType());
if (var11 == null) {
class="kw">return;
}
BlockPhysicsSystems.CachedAccessor var12 = BlockPhysicsSystems.CachedAccessor.of(
var5, var3.getReferenceTo(var2), var7, var8, var9, var6.getX(), var6.getY(), var6.getZ(), 14
);
var7.forEachTicking(
var11,
var12,
var6.getY(),
(var0, var1x, var2x, var3x, var4x, var5x) -> {
BlockPhysics var6 = var1x.selfPhysics;
boolean var7 = var6.isDeco(var2x, var3x, var4x);
BlockType var8 = BlockType.getAssetMap().getAsset(var5x);
if (var8 == null || var5x == 0) {
class="kw">return BlockTickStrategy.IGNORED;
}
if (var7) {
class="kw">return BlockTickStrategy.IGNORED;
}
World var9 = var0.getWorld();
Store var10 = var9.getEntityStore().getStore();
int var11 = var0.getX() << 5 | var2x;
int var12 = var3x;
int var13 = var0.getZ() << 5 | var4x;
int var14 = var1x.selfBlockSection.getFiller(var2x, var3x, var4x);
int var15 = var1x.selfBlockSection.getRotationIndex(var2x, var3x, var4x);
class="kw">return class="kw">switch (BlockPhysicsUtil.applyBlockPhysics(
var10,
var1x,
var1x.selfSectionReference,
var1x.selfBlockSection,
var1x.selfPhysics,
var1x.selfFluidSection,
var11,
var12,
var13,
var8,
var15,
var14
)) {
case WAITING_CHUNK -> BlockTickStrategy.WAIT_FOR_ADJACENT_CHUNK_LOAD;
case VALID -> BlockTickStrategy.IGNORED;
case INVALID -> BlockTickStrategy.SLEEP;
};
}
);
} catch (Exception var13) {
((HytaleLogger.Api)BlockPhysicsSystems.LOGGER.at(Level.SEVERE).withCause(var13)).log("Failed to tick chunk: %s", var6);
}
}
}
}