BlockTypeModule class
Пакет: com.hypixel.hytale.server.core.blocktype
Файл: com/hypixel/hytale/server/core/blocktype/BlockTypeModule.java
extends: JavaPlugin
Поля (70)
| Модификаторы | Тип | Имя |
|---|---|---|
|
|
instance |
|
WorldChunk |
var1 |
|
int |
var10 |
|
int |
var10 |
|
Ref |
var10 |
|
int |
var10 |
|
int |
var10 |
|
int |
var11 |
|
BlockChunk |
var11 |
|
BlockBoundingBoxes |
var11 |
|
BlockType |
var11 |
|
int |
var12 |
|
int |
var12 |
|
int |
var12 |
|
int |
var12 |
|
String |
var12 |
|
BlockType |
var13 |
|
int |
var13 |
|
int |
var13 |
|
int |
var13 |
|
int |
var13 |
|
int |
var14 |
|
int |
var14 |
|
int |
var14 |
|
int |
var15 |
|
int |
var15 |
|
int |
var15 |
|
int |
var16 |
|
BlockType |
var16 |
|
int |
var16 |
|
int |
var17 |
|
int |
var17 |
|
long |
var17 |
|
int |
var18 |
|
int |
var18 |
|
BlockType |
var19 |
|
Ref |
var19 |
|
Holder |
var2 |
|
String |
var20 |
|
WorldChunk |
var20 |
|
int |
var21 |
|
BlockChunk |
var21 |
|
BlockBoundingBoxes |
var22 |
|
BlockSection |
var22 |
|
int |
var23 |
|
int |
var24 |
|
int |
var25 |
|
BlockType |
var26 |
|
int |
var27 |
|
int |
var28 |
|
BlockType |
var29 |
|
ChunkColumn |
var3 |
|
BlockSection |
var30 |
|
int |
var31 |
|
int |
var32 |
|
Holder[] |
var4 |
|
int |
var4 |
|
BlockType[] |
var5 |
|
BlockTypeAssetMap |
var5 |
|
IndexedLookupTableAssetMap |
var6 |
|
int |
var6 |
|
BlockSection |
var7 |
|
int |
var7 |
|
int |
var7 |
|
int |
var8 |
|
BlockType |
var8 |
|
long |
var8 |
|
int |
var8 |
|
int |
var9 |
|
int |
var9 |
Методы (40)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
static |
void |
breakOrSetFillerBlocksvoid breakOrSetFillerBlocks(@Nonnull BlockTypeAssetMap<String, BlockType> var0,
@Nonnull IndexedLookupTableAssetMap<String, BlockBoundingBoxes> var1,
@Nonnull ComponentAccessor<ChunkStore> var2,
@Nonnull WorldChunk var3,
@Nonnull BlockChunk var4,
int var5,
int var6,
int var7,
@Nonnull BlockType var8,
int var9) |
|
|
for for(int var6 = 0; var6 < 10; var6++) |
|
|
for for(int var7 = 0; var7 < 32; var7++) |
|
|
for for(int var9 = 0; var9 < 32; var9++) |
|
|
for for(int var11 = 0; var11 < 32; var11++) |
static |
BlockTypeModule |
getBlockTypeModule get() |
public |
ComponentType<ChunkStore, BlockPhysics> |
getBlockPhysicsComponentTypeComponentType<ChunkStore, BlockPhysics> getBlockPhysicsComponentType() |
|
|
if if(var3 != null) |
|
|
if if(var4 != null) |
|
|
if if(var13 != null) |
|
|
if if(var15 != 0) |
|
|
if if(var16 >= 0 && var16 < 32) |
|
|
if if(var17 >= 0 && var17 < 320) |
|
|
if if(var18 >= 0 && var18 < 32) |
|
|
if if(var19 != null) |
|
|
if if(var22 != null) |
|
|
if if(var10x != 0 || var11x != 0 || var12x != 0) |
|
|
if if(var13 >= 0 && var13 < 32) |
|
|
if if(var14 >= 0 && var14 < 320) |
|
|
if if(var15 >= 0 && var15 < 32) |
|
|
if if(var8 == null) |
|
|
if if(var9 == 0) |
|
|
if if(var10 != 0) |
|
|
if if(var3 >= 0 && var3 < 32 && var4 >= 0 && var4 < 320 && var5 >= 0 && var5 < 32) |
|
|
if if(var11 != null) |
|
|
if if(var11 != null) |
|
|
if if(var9x != 0 || var10x != 0 || var11x != 0) |
|
|
if if(var12 >= 0 && var12 < 32 && var13 >= 0 && var13 < 320 && var14 >= 0 && var14 < 32) |
|
|
if if(var29 != null) |
|
|
if if(var20 != null) |
|
|
if if(var26 != null) |
|
|
if if(var11 == null) |
static |
boolean |
isFillerValidboolean isFillerValid(@Nonnull BlockTypeAssetMap<String, BlockType> var0,
@Nonnull ComponentAccessor<ChunkStore> var1,
@Nonnull WorldChunk var2,
@Nonnull BlockType var3,
int var4,
int var5,
int var6,
int var7) |
static |
void |
onChunkPreLoadProcessvoid onChunkPreLoadProcess(@Nonnull ChunkPreLoadProcessEvent var0) |
static |
void |
onChunkSectionPreLoadProcessvoid onChunkSectionPreLoadProcess(@Nonnull WorldChunk var0, @Nonnull BlockSection var1, int var2, @Nonnull BlockType[] var3) |
abstract |
|
onChunkSectionPreLoadProcess onChunkSectionPreLoadProcess(var1, var7, var6, var5) |
static |
void |
setFillerBlocksvoid setFillerBlocks(@Nonnull BlockTypeAssetMap<String, BlockType> var0,
@Nonnull IndexedLookupTableAssetMap<String, BlockBoundingBoxes> var1,
@Nonnull ComponentAccessor<ChunkStore> var2,
@Nonnull WorldChunk var3,
@Nonnull BlockChunk var4,
int var5,
int var6,
int var7,
@Nonnull BlockType var8,
int var9) |
abstract |
|
setFillerBlocks setFillerBlocks(var0, var1, var2, var3, var4, var11, var12, var13, var8, var9) |
abstract |
|
setFillerBlocks setFillerBlocks(var0, var1, var2, var3, var4, var5, var6, var7, var8, var9) |
abstract |
|
super super(var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.blocktype;
class="kw">import com.hypixel.hytale.assetstore.map.BlockTypeAssetMap;
class="kw">import com.hypixel.hytale.assetstore.map.IndexedLookupTableAssetMap;
class="kw">import com.hypixel.hytale.common.plugin.PluginManifest;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.protocol.BenchType;
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.blocktype.config.bench.Bench;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.bench.CraftingBench;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.bench.DiagramCraftingBench;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.bench.ProcessingBench;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.bench.StructuralCraftingBench;
class="kw">import com.hypixel.hytale.server.core.blocktype.component.BlockPhysics;
class="kw">import com.hypixel.hytale.server.core.modules.LegacyModule;
class="kw">import com.hypixel.hytale.server.core.modules.item.ItemModule;
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.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.events.ChunkPreLoadProcessEvent;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import com.hypixel.hytale.server.core.util.FillerBlockUtil;
class="kw">import java.util.Arrays;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class BlockTypeModule class="kw">extends JavaPlugin {
@Nonnull
class="kw">public class="kw">static class="kw">final PluginManifest MANIFEST = PluginManifest.corePlugin(BlockTypeModule.class).depends(ItemModule.class).depends(LegacyModule.class).build();
class="kw">public class="kw">static class="kw">final int SET_BLOCK_SETTINGS = 157;
class="kw">public class="kw">static class="kw">final String DEBUG_CUBE_TEXTURE_UP = "BlockTextures/_Debug/Up.png";
class="kw">public class="kw">static class="kw">final String DEBUG_CUBE_TEXTURE_DOWN = "BlockTextures/_Debug/Down.png";
class="kw">public class="kw">static class="kw">final String DEBUG_CUBE_TEXTURE_NORTH = "BlockTextures/_Debug/North.png";
class="kw">public class="kw">static class="kw">final String DEBUG_CUBE_TEXTURE_SOUTH = "BlockTextures/_Debug/South.png";
class="kw">public class="kw">static class="kw">final String DEBUG_CUBE_TEXTURE_EAST = "BlockTextures/_Debug/East.png";
class="kw">public class="kw">static class="kw">final String DEBUG_CUBE_TEXTURE_WEST = "BlockTextures/_Debug/West.png";
class="kw">public class="kw">static class="kw">final String DEBUG_MODEL_MODEL = "Blocks/_Debug/Model.blockymodel";
class="kw">public class="kw">static class="kw">final String DEBUG_MODEL_BLOCK_TEXTURE = "Blocks/_Debug/Texture.png";
class="kw">public class="kw">static class="kw">final String DEBUG_MODEL_ENTITY_TEXTURE = "Characters/_Debug/Texture.png";
class="kw">private class="kw">static class="kw">final ThreadLocal<BlockType[]> TEMP_BLOCKS = ThreadLocal.withInitial(() -> new BlockType[32768]);
class="kw">private class="kw">static BlockTypeModule instance;
class="kw">private ComponentType<ChunkStore, BlockPhysics> blockPhysicsComponentType;
class="kw">public class="kw">static BlockTypeModule get() {
class="kw">return instance;
}
class="kw">public BlockTypeModule(@Nonnull JavaPluginInit var1) {
super(var1);
instance = this;
}
@Override
class="kw">protected void setup() {
Bench.CODEC.register(BenchType.Crafting, CraftingBench.class, CraftingBench.CODEC);
Bench.CODEC.register(BenchType.Processing, ProcessingBench.class, ProcessingBench.CODEC);
Bench.CODEC.register(BenchType.DiagramCrafting, DiagramCraftingBench.class, DiagramCraftingBench.CODEC);
Bench.CODEC.register(BenchType.StructuralCrafting, StructuralCraftingBench.class, StructuralCraftingBench.CODEC);
this.blockPhysicsComponentType = this.getChunkStoreRegistry().registerComponent(BlockPhysics.class, "BlockPhysics", BlockPhysics.CODEC);
}
class="kw">public ComponentType<ChunkStore, BlockPhysics> getBlockPhysicsComponentType() {
class="kw">return this.blockPhysicsComponentType;
}
class="kw">private class="kw">static void onChunkPreLoadProcess(@Nonnull ChunkPreLoadProcessEvent var0) {
if (var0.isNewlyGenerated()) {
WorldChunk var1 = var0.getChunk();
Holder var2 = var0.getHolder();
ChunkColumn var3 = var2.getComponent(ChunkColumn.getComponentType());
if (var3 != null) {
Holder[] var4 = var3.getSectionHolders();
if (var4 != null) {
BlockType[] var5 = TEMP_BLOCKS.get();
for (int var6 = 0; var6 < 10; var6++) {
BlockSection var7 = var4[var6].ensureAndGetComponent(BlockSection.getComponentType());
if (!var7.isSolidAir() && !(var7.getMaximumHitboxExtent() <= 0.0)) {
onChunkSectionPreLoadProcess(var1, var7, var6, var5);
}
}
}
}
}
}
class="kw">private class="kw">static void onChunkSectionPreLoadProcess(@Nonnull WorldChunk var0, @Nonnull BlockSection var1, int var2, @Nonnull BlockType[] var3) {
Arrays.fill(var3, null);
int var4 = var2 << 5;
BlockTypeAssetMap var5 = BlockType.getAssetMap();
IndexedLookupTableAssetMap var6 = BlockBoundingBoxes.getAssetMap();
for (int var7 = 0; var7 < 32; var7++) {
int var8 = var4 | var7;
for (int var9 = 0; var9 < 32; var9++) {
int var10 = var9;
for (int var11 = 0; var11 < 32; var11++) {
int var12 = var11;
BlockType var13 = getBlockType(var5, var3, var1, var10, var8, var12, true);
if (var13 != null) {
int var14 = var1.getRotationIndex(var9, var7, var11);
int var15 = var1.getFiller(var9, var7, var11);
if (var15 != 0) {
int var16 = var10 - FillerBlockUtil.unpackX(var15);
if (var16 >= 0 && var16 < 32) {
int var17 = var8 - FillerBlockUtil.unpackY(var15);
if (var17 >= 0 && var17 < 320) {
int var18 = var12 - FillerBlockUtil.unpackZ(var15);
if (var18 >= 0 && var18 < 32) {
BlockType var19 = getBlockType(var5, var3, var1, var16, var17, var18, false);
if (var19 != null) {
String var20 = var13.getId();
if (var13.isUnknown() || !var20.equals(var19.getId())) {
var0.breakBlock(var10, var8, var12, 157);
}
}
}
}
}
} else {
int var21 = var5.getIndex(var13.getId());
BlockBoundingBoxes var22 = var6.getAsset(var13.getHitboxTypeIndex());
if (var22 != null) {
FillerBlockUtil.forEachFillerBlock(var22.get(var14), (var10x, var11x, var12x) -> {
if (var10x != 0 || var11x != 0 || var12x != 0) {
int var13 = var10 + var10x;
if (var13 >= 0 && var13 < 32) {
int var14 = var8 + var11x;
if (var14 >= 0 && var14 < 320) {
int var15 = var12 + var12x;
if (var15 >= 0 && var15 < 32) {
BlockType var16 = getBlockType(var5, var3, var1, var13, var14, var15, false);
if (var16 != null && var16.getMaterial() != BlockMaterial.Solid) {
int var17 = FillerBlockUtil.pack(var10x, var11x, var12x);
var0.setBlock(var13, var14, var15, var21, var13, var14, var17, 157);
}
}
}
}
}
});
}
}
}
}
}
}
}
@Nullable
class="kw">private class="kw">static BlockType getBlockType(
@Nonnull BlockTypeAssetMap<String, BlockType> var0, @Nonnull BlockType[] var1, @Nonnull BlockSection var2, int var3, int var4, int var5, boolean var6
) {
int var7 = ChunkUtil.indexBlock(var3, var4, var5);
BlockType var8 = var1[var7];
if (var8 == null) {
int var9 = var2.get(var3, var4, var5);
if (var9 == 0) {
var1[var7] = BlockType.EMPTY;
class="kw">return var6 ? null : BlockType.EMPTY;
} else {
class="kw">return var1[var7] = var0.getAsset(var9);
}
} else {
class="kw">return var6 && "Empty".equals(var8.getId()) ? null : var8;
}
}
class="kw">public class="kw">static void breakOrSetFillerBlocks(
@Nonnull BlockTypeAssetMap<String, BlockType> var0,
@Nonnull IndexedLookupTableAssetMap<String, BlockBoundingBoxes> var1,
@Nonnull ComponentAccessor<ChunkStore> var2,
@Nonnull WorldChunk var3,
@Nonnull BlockChunk var4,
int var5,
int var6,
int var7,
@Nonnull BlockType var8,
int var9
) {
int var10 = var4.getSectionAtBlockY(var6).getFiller(var5, var6, var7);
if (var10 != 0) {
if (!isFillerValid(var0, var2, var3, var8, var10, var5, var6, var7)) {
var3.breakBlock(var5, var6, var7, 157);
} else {
int var11 = var5 - FillerBlockUtil.unpackX(var10);
int var12 = var6 - FillerBlockUtil.unpackY(var10);
int var13 = var7 - FillerBlockUtil.unpackZ(var10);
setFillerBlocks(var0, var1, var2, var3, var4, var11, var12, var13, var8, var9);
}
} else {
setFillerBlocks(var0, var1, var2, var3, var4, var5, var6, var7, var8, var9);
}
}
@Nullable
class="kw">private class="kw">static BlockType getOriginBlockType(
@Nonnull BlockTypeAssetMap<String, BlockType> var0, @Nonnull ComponentAccessor<ChunkStore> var1, @Nonnull WorldChunk var2, int var3, int var4, int var5
) {
if (var3 >= 0 && var3 < 32 && var4 >= 0 && var4 < 320 && var5 >= 0 && var5 < 32) {
int var13 = var2.getBlock(var3, var4, var5);
class="kw">return var0.getAsset(var13);
}
int var6 = (var2.getX() << 5) + var3;
int var7 = (var2.getZ() << 5) + var5;
long var8 = ChunkUtil.indexChunkFromBlock(var6, var7);
Ref var10 = var1.getExternalData().getChunkReference(var8);
if (var10 != null && var10.isValid()) {
BlockChunk var11 = var1.getComponent(var10, BlockChunk.getComponentType());
if (var11 != null) {
int var12 = var11.getBlock(var3, var4, var5);
class="kw">return var0.getAsset(var12);
}
}
get().getLogger().at(Level.WARNING).log("Origin chunk not in memory when resolving filler origin block! Origin: %s, %s, %s", var3, var4, var5);
class="kw">return null;
}
class="kw">private class="kw">static void setFillerBlocks(
@Nonnull BlockTypeAssetMap<String, BlockType> var0,
@Nonnull IndexedLookupTableAssetMap<String, BlockBoundingBoxes> var1,
@Nonnull ComponentAccessor<ChunkStore> var2,
@Nonnull WorldChunk var3,
@Nonnull BlockChunk var4,
int var5,
int var6,
int var7,
@Nonnull BlockType var8,
int var9
) {
int var10 = var0.getIndex(var8.getId());
BlockBoundingBoxes var11 = var1.getAsset(var8.getHitboxTypeIndex());
if (var11 != null) {
FillerBlockUtil.forEachFillerBlock(
var11.get(var9),
(var9x, var10x, var11x) -> {
if (var9x != 0 || var10x != 0 || var11x != 0) {
int var12 = var5 + var9x;
int var13 = var6 + var10x;
int var14 = var7 + var11x;
if (var12 >= 0 && var12 < 32 && var13 >= 0 && var13 < 320 && var14 >= 0 && var14 < 32) {
int var28 = var4.getBlock(var12, var13, var14);
BlockType var29 = var0.getAsset(var28);
if (var29 != null) {
BlockSection var30 = var4.getSectionAtBlockY(var13);
int var18 = var30.getRotationIndex(var12, var13, var14);
int var31 = var30.getFiller(var12, var13, var14);
if ((var31 == 0 || !isFillerValid(var0, var2, var3, var29, var31, var12, var13, var14)) && var29.getMaterial() != BlockMaterial.Solid) {
int var32 = FillerBlockUtil.pack(var9x, var10x, var11x);
var3.setBlock(var12, var13, var14, var10, var8, var18, var32, 157);
}
}
} else {
int var15 = (var3.getX() << 5) + var12;
int var16 = (var3.getZ() << 5) + var14;
long var17 = ChunkUtil.indexChunkFromBlock(var15, var16);
Ref var19 = var2.getExternalData().getChunkReference(var17);
if (var19 != null && var19.isValid()) {
WorldChunk var20 = var2.getComponent(var19, WorldChunk.getComponentType());
if (var20 != null) {
BlockChunk var21 = var2.getComponent(var19, BlockChunk.getComponentType());
assert var21 != null;
BlockSection var22 = var21.getSectionAtBlockY(var13);
int var23 = var20.getBlock(var12, var13, var14);
int var24 = var22.getRotationIndex(var12, var13, var14);
int var25 = var22.getFiller(var12, var13, var14);
BlockType var26 = var0.getAsset(var23);
if (var26 != null) {
if ((var25 == 0 || !isFillerValid(var0, var2, var3, var26, var25, var12, var13, var14))
&& var26.getMaterial() != BlockMaterial.Solid) {
int var27 = FillerBlockUtil.pack(var9x, var10x, var11x);
var20.setBlock(var12, var13, var14, var10, var8, var24, var27, 157);
}
}
}
}
}
}
}
);
}
}
class="kw">private class="kw">static boolean isFillerValid(
@Nonnull BlockTypeAssetMap<String, BlockType> var0,
@Nonnull ComponentAccessor<ChunkStore> var1,
@Nonnull WorldChunk var2,
@Nonnull BlockType var3,
int var4,
int var5,
int var6,
int var7
) {
int var8 = var5 - FillerBlockUtil.unpackX(var4);
int var9 = var6 - FillerBlockUtil.unpackY(var4);
int var10 = var7 - FillerBlockUtil.unpackZ(var4);
BlockType var11 = getOriginBlockType(var0, var1, var2, var8, var9, var10);
if (var11 == null) {
class="kw">return false;
}
if (var3.isUnknown()) {
class="kw">return false;
}
String var12 = var3.getId();
class="kw">return var12.equals(var11.getId());
}
}