RandomTickSystem class
Пакет: com.hypixel.hytale.builtin.randomtick
Файл: com/hypixel/hytale/builtin/randomtick/RandomTickSystem.java
extends: EntityTickingSystem<ChunkStore>
Поля (34)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
ComponentType<ChunkStore, BlockSection> |
blockSelectionComponentType |
|
TickSuppressionRegistry |
var10 |
|
TickSuppressionRegistry |
var11 |
|
int |
var12 |
|
long |
var13 |
|
long |
var15 |
|
long |
var17 |
|
long |
var19 |
|
BlockTypeAssetMap |
var21 |
|
int |
var23 |
|
int |
var24 |
|
int |
var25 |
|
int |
var26 |
|
int |
var27 |
|
BlockType |
var28 |
|
RandomTickProcedure |
var29 |
|
int |
var30 |
|
int |
var31 |
|
int |
var32 |
|
int |
var33 |
|
Random |
var34 |
|
int |
var36 |
|
int |
var37 |
|
int |
var38 |
|
int |
var39 |
|
int |
var40 |
|
BlockType |
var41 |
|
RandomTickProcedure |
var42 |
|
int |
var43 |
|
int |
var44 |
|
BlockSection |
var6 |
|
ChunkSection |
var7 |
|
RandomTick |
var8 |
|
World |
var9 |
Методы (8)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
|
for for(int var22 = 0; var22 < var8.getBlocksPerSectionPerTickStable() |
abstract |
|
for for(int var35 = 0; var35 < var8.getBlocksPerSectionPerTickUnstable() |
|
|
if if(var27 != 0) |
|
|
if if(var28 != null) |
|
|
if if(var29 != null) |
|
|
if if(var40 != 0) |
|
|
if if(var41 != null) |
|
|
if if(var42 != null) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.randomtick;
class="kw">import com.hypixel.hytale.assetstore.map.BlockTypeAssetMap;
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.Store;
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.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.util.HashUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktick.config.RandomTickProcedure;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
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.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.storage.ChunkStore;
class="kw">import java.util.Random;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class RandomTickSystem class="kw">extends EntityTickingSystem<ChunkStore> {
class="kw">private class="kw">final ComponentType<ChunkStore, BlockSection> blockSelectionComponentType = BlockSection.getComponentType();
class="kw">private class="kw">final ComponentType<ChunkStore, ChunkSection> chunkSectionComponentType = ChunkSection.getComponentType();
class="kw">private class="kw">final Query<ChunkStore> query = Query.and(this.blockSelectionComponentType, this.chunkSectionComponentType);
class="kw">public RandomTickSystem() {
}
@Override
class="kw">public void tick(float var1, int var2, @Nonnull ArchetypeChunk<ChunkStore> var3, @Nonnull Store<ChunkStore> var4, @Nonnull CommandBuffer<ChunkStore> var5) {
BlockSection var6 = var3.getComponent(var2, this.blockSelectionComponentType);
assert var6 != null;
if (!var6.isSolidAir()) {
ChunkSection var7 = var3.getComponent(var2, this.chunkSectionComponentType);
assert var7 != null;
RandomTick var8 = var5.getResource(RandomTick.getResourceType());
World var9 = var4.getExternalData().getWorld();
TickSuppressionRegistry var10 = var9.getEntityStore().getStore().getResource(TickSuppressionRegistry.RESOURCE);
TickSuppressionRegistry var11 = var10 != null && var10.hasKind(2) ? var10 : null;
int var12 = 32768 / var8.getBlocksPerSectionPerTickStable();
long var13 = HashUtil.hash(var9.getTick() / var12, var7.getX(), var7.getY(), var7.getZ());
long var15 = (var13 << 1 | 1L) & 32767L;
long var17 = var13 >> 16 & 32767L;
long var19 = var9.getTick() % var12 * var8.getBlocksPerSectionPerTickStable();
BlockTypeAssetMap var21 = BlockType.getAssetMap();
for (int var22 = 0; var22 < var8.getBlocksPerSectionPerTickStable(); var22++) {
int var23 = (int)((var19 + var22) * var15 + var17 & 32767L);
int var24 = ChunkUtil.xFromIndex(var23);
int var25 = ChunkUtil.yFromIndex(var23);
int var26 = ChunkUtil.zFromIndex(var23);
int var27 = var6.get(var23);
if (var27 != 0) {
BlockType var28 = var21.getAsset(var27);
if (var28 != null) {
RandomTickProcedure var29 = var28.getRandomTickProcedure();
if (var29 != null) {
int var30 = ChunkUtil.worldCoordFromLocalCoord(var7.getX(), var24);
int var31 = ChunkUtil.worldCoordFromLocalCoord(var7.getY(), var25);
int var32 = ChunkUtil.worldCoordFromLocalCoord(var7.getZ(), var26);
if (var11 == null || !var11.isBlockSuppressed(var30, var31, var32, 2)) {
var29.onRandomTick(var4, var5, var6, var30, var31, var32, var27, var28);
}
}
}
}
}
Random var34 = var8.getRandom();
for (int var35 = 0; var35 < var8.getBlocksPerSectionPerTickUnstable(); var35++) {
int var36 = var34.nextInt(32768);
int var37 = ChunkUtil.xFromIndex(var36);
int var38 = ChunkUtil.yFromIndex(var36);
int var39 = ChunkUtil.zFromIndex(var36);
int var40 = var6.get(var36);
if (var40 != 0) {
BlockType var41 = var21.getAsset(var40);
if (var41 != null) {
RandomTickProcedure var42 = var41.getRandomTickProcedure();
if (var42 != null) {
int var43 = ChunkUtil.worldCoordFromLocalCoord(var7.getX(), var37);
int var44 = ChunkUtil.worldCoordFromLocalCoord(var7.getY(), var38);
int var33 = ChunkUtil.worldCoordFromLocalCoord(var7.getZ(), var39);
if (var11 == null || !var11.isBlockSuppressed(var43, var44, var33, 2)) {
var42.onRandomTick(var4, var5, var6, var43, var44, var33, var40, var41);
}
}
}
}
}
}
}
@Nullable
@Override
class="kw">public Query<ChunkStore> getQuery() {
class="kw">return this.query;
}
}