BlockDataProvider class
Пакет: com.hypixel.hytale.server.core.modules.collision
Файл: com/hypixel/hytale/server/core/modules/collision/BlockDataProvider.java
extends: BlockData
Поля (10)
| Модификаторы | Тип | Имя |
|---|---|---|
static |
int |
FULL_LEVEL |
|
int |
var4 |
|
FluidSection |
var4 |
|
FluidSection |
var4 |
|
int |
var4 |
|
int |
var5 |
|
int |
var5 |
|
Fluid |
var6 |
|
int |
var6 |
|
byte |
var7 |
Методы (18)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
public |
void |
cleanupvoid cleanup() |
protected |
void |
cleanup0void cleanup0() |
|
|
if if(this.blockId != var4 || this.fluidId != var5) |
|
|
if if(var4 == 0 && var5 == 0) |
|
|
if if(this.chunkSectionRef == null) |
|
|
if if(this.chunkSectionRef == null) |
|
|
if if(var1 == 0) |
public |
void |
initializevoid initialize(World var1) |
static |
int |
materialFromFillLevelint materialFromFillLevel(@Nonnull Fluid var0, byte var1) |
public |
void |
readvoid read(int var1, int var2, int var3) |
protected |
int |
readBlockIdint readBlockId(int var1, int var2, int var3) |
protected |
int |
readFillerint readFiller(int var1, int var2, int var3) |
protected |
int |
readFluidIdint readFluidId(int var1, int var2, int var3) |
protected |
byte |
readFluidLevelbyte readFluidLevel(int var1, int var2, int var3) |
protected |
int |
readRotationint readRotation(int var1, int var2, int var3) |
protected |
void |
refreshSectionvoid refreshSection(int var1, int var2, int var3) |
protected |
void |
setBlockvoid setBlock(int var1, @Nonnull BlockType var2, int var3, int var4, BlockBoundingBoxes var5) |
protected |
void |
setBlockvoid setBlock(int var1, @Nonnull BlockType var2, int var3, int var4) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.collision;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.protocol.BlockMaterial;
class="kw">import com.hypixel.hytale.server.core.asset.type.blockhitbox.BlockBoundingBoxes;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.fluid.Fluid;
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.FluidSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class BlockDataProvider class="kw">extends BlockData {
class="kw">protected class="kw">static int FULL_LEVEL = 8;
@Nullable
class="kw">protected World world;
@Nullable
class="kw">protected BlockSection chunkSection;
class="kw">protected int chunkX;
class="kw">protected int chunkY;
class="kw">protected int chunkZ;
@Nullable
class="kw">protected Ref<ChunkStore> chunkSectionRef;
class="kw">public BlockDataProvider() {
}
class="kw">public void initialize(World var1) {
this.world = var1;
this.blockId = Integer.MIN_VALUE;
this.cleanup0();
}
class="kw">public void cleanup() {
this.world = null;
this.cleanup0();
}
class="kw">public void read(int var1, int var2, int var3) {
int var4 = this.readBlockId(var1, var2, var3);
int var5 = this.readFluidId(var1, var2, var3);
if (this.blockId != var4 || this.fluidId != var5) {
if (var4 == 0 && var5 == 0) {
this.setBlock(0, BlockType.EMPTY, 0, 1);
this.fluidId = 0;
this.fluid = Fluid.EMPTY;
this.fluidKey = "Empty";
this.fillHeight = 0.0;
} else if (var4 == 1) {
this.setBlock(1, BlockType.UNKNOWN, 0, 4);
this.fluidId = 0;
this.fluid = Fluid.EMPTY;
this.fluidKey = "Empty";
this.fillHeight = 0.0;
} else {
this.blockId = var4;
this.blockType = BlockType.getAssetMap().getAsset(var4);
if (this.blockType.isUnknown()) {
this.setBlock(var4, this.blockType, 0, 4);
this.fluidId = 0;
this.fluid = Fluid.EMPTY;
this.fluidKey = "Empty";
this.fillHeight = 0.0;
} else {
Fluid var6 = Fluid.getAssetMap().getAsset(var5);
byte var7 = this.readFluidLevel(var1, var2, var3);
this.blockTypeKey = this.blockType.getId();
this.filler = this.readFiller(var1, var2, var3);
this.rotation = this.readRotation(var1, var2, var3);
if (this.blockType.getMaterial() == BlockMaterial.Solid) {
this.collisionMaterials = 4;
if (this.blockType.getHitboxTypeIndex() != 0) {
this.collisionMaterials = this.collisionMaterials + materialFromFillLevel(var6, var7);
}
} else {
this.collisionMaterials = materialFromFillLevel(var6, var7);
}
this.fluidId = var5;
this.fluid = var6;
this.fluidKey = var6.getId();
this.fillHeight = var5 != 0 ? (double)var7 / var6.getMaxFluidLevel() : 0.0;
this.blockBoundingBoxes = null;
}
}
}
}
class="kw">protected int readBlockId(int var1, int var2, int var3) {
this.refreshSection(var1, var2, var3);
class="kw">return this.chunkSection == null ? 1 : this.chunkSection.get(var1, var2, var3);
}
class="kw">protected int readRotation(int var1, int var2, int var3) {
this.refreshSection(var1, var2, var3);
class="kw">return this.chunkSection == null ? 0 : this.chunkSection.getRotationIndex(var1, var2, var3);
}
class="kw">protected int readFiller(int var1, int var2, int var3) {
this.refreshSection(var1, var2, var3);
class="kw">return this.chunkSection == null ? 0 : this.chunkSection.getFiller(var1, var2, var3);
}
class="kw">protected int readFluidId(int var1, int var2, int var3) {
this.refreshSection(var1, var2, var3);
if (this.chunkSectionRef == null) {
class="kw">return 1;
}
FluidSection var4 = this.world.getChunkStore().getStore().getComponent(this.chunkSectionRef, FluidSection.getComponentType());
class="kw">return var4 == null ? 1 : var4.getFluidId(var1, var2, var3);
}
class="kw">protected byte readFluidLevel(int var1, int var2, int var3) {
this.refreshSection(var1, var2, var3);
if (this.chunkSectionRef == null) {
class="kw">return 0;
}
FluidSection var4 = this.world.getChunkStore().getStore().getComponent(this.chunkSectionRef, FluidSection.getComponentType());
class="kw">return var4 == null ? 0 : var4.getFluidLevel(var1, var2, var3);
}
class="kw">protected void refreshSection(int var1, int var2, int var3) {
int var4 = ChunkUtil.chunkCoordinate(var1);
int var5 = ChunkUtil.chunkCoordinate(var2);
int var6 = ChunkUtil.chunkCoordinate(var3);
if (this.chunkSection == null
|| this.chunkSectionRef == null
|| !this.chunkSectionRef.isValid()
|| this.chunkX != var4
|| this.chunkY != var5
|| this.chunkZ != var6) {
this.chunkSectionRef = this.world.getChunkStore().getChunkSectionReference(var4, var5, var6);
this.chunkSection = this.chunkSectionRef != null && this.chunkSectionRef.isValid()
? this.world.getChunkStore().getStore().getComponent(this.chunkSectionRef, BlockSection.getComponentType())
: null;
this.chunkX = var4;
this.chunkY = var5;
this.chunkZ = var6;
}
}
class="kw">protected void setBlock(int var1, @Nonnull BlockType var2, int var3, int var4, BlockBoundingBoxes var5) {
this.blockId = var1;
this.rotation = var3;
this.blockType = var2;
this.blockTypeKey = var2.getId();
this.collisionMaterials = var4;
this.blockBoundingBoxes = var5;
this.fillHeight = 0.0;
}
class="kw">protected void setBlock(int var1, @Nonnull BlockType var2, int var3, int var4) {
this.setBlock(var1, var2, var3, var4, BlockBoundingBoxes.UNIT_BOX);
}
class="kw">protected void cleanup0() {
this.chunkSectionRef = null;
this.chunkSection = null;
this.blockType = null;
this.blockTypeKey = null;
this.blockBoundingBoxes = null;
this.fluid = null;
this.fluidKey = null;
}
class="kw">protected class="kw">static int materialFromFillLevel(@Nonnull Fluid var0, byte var1) {
if (var1 == 0) {
class="kw">return 1;
} else {
class="kw">return var1 == var0.getMaxFluidLevel() ? 2 : 3;
}
}
}