TestBlockFunction interface
Пакет: com.hypixel.hytale.server.core.universe.world.chunk
Файл: com/hypixel/hytale/server/core/universe/world/chunk/BlockOperations.java
Методы (1)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
boolean |
testboolean test(int var1, int var2, int var3, BlockType var4, int var5, int var6) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.universe.world.chunk;
class="kw">import com.hypixel.hytale.assetstore.map.IndexedLookupTableAssetMap;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.protocol.BlockMaterial;
class="kw">import com.hypixel.hytale.protocol.BlockParticleEvent;
class="kw">import com.hypixel.hytale.protocol.Opacity;
class="kw">import com.hypixel.hytale.server.core.asset.type.blockhitbox.BlockBoundingBoxes;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktick.BlockTickManager;
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.blocktype.component.BlockPhysics;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockEntity;
class="kw">import com.hypixel.hytale.server.core.modules.blockanimation.BlockAnimationModule;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.WorldNotificationHandler;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockComponentSection;
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 com.hypixel.hytale.server.core.util.FillerBlockUtil;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class BlockOperations {
class="kw">public BlockOperations() {
}
class="kw">public class="kw">static boolean setBlock(
ChunkStore var0,
Ref<ChunkStore> var1,
ChunkSection var2,
BlockSection var3,
BlockComponentSection var4,
BlockChunk var5,
int var6,
int var7,
int var8,
int var9,
@Nonnull BlockType var10,
int var11,
int var12,
int var13
) {
Ref var14 = var2.getChunkColumnReference();
short var15 = var5.getHeight(var6, var8);
int var16 = var3.getRotationIndex(var6, var7, var8);
int var17 = var3.getFiller(var6, var7, var8);
int var18 = var3.get(var6, var7, var8);
boolean var19 = (var18 != var9 || var11 != var16) && var3.set(var6, var7, var8, var9, var11, var12);
World var20 = var0.getWorld();
if (var19 || (var13 & 64) != 0) {
var2.markNeedsSaving();
int var21 = (var2.getX() << 5) + (var6 & 31);
int var22 = (var2.getY() << 5) + (var7 & 31);
int var23 = (var2.getZ() << 5) + (var8 & 31);
if ((var13 & 64) != 0) {
var3.invalidateBlock(var6, var7, var8);
}
short var24 = var15;
if ((var13 & 512) == 0) {
var24 = updateBlockHeight(var5, var9, var10, var6, var7, var8, var15);
}
if ((var13 & 4) == 0) {
spawnBlockParticles(var0, var18, var9, var21, var22, var23, (var13 & 32) != 0);
}
BlockAnimationModule.onBlockReplaced(var0.getStore(), var1, ChunkUtil.indexBlock(var6, var7, var8), var18, var9);
if ((var13 & 2) == 0 && var4 != null) {
Holder var25 = var10.getBlockEntity();
Holder var26;
if (var25 != null && var12 == 0) {
var26 = var25.clone();
} else {
var26 = null;
}
BlockEntity.setBlockEntity(var20.getChunkStore().getStore(), var1, var4, var21, var22, var23, var10, var11, var26);
}
var20.getChunkLighting().invalidateLightAtBlock(var20.getChunkStore(), var6, var7, var8, var10, var15, var24);
TickProcedure var28 = BlockTickManager.getBlockTickProvider().getTickProcedure(var9);
var3.setTicking(var6, var7, var8, var28 != null);
FillerBlockUtil.ChangeReason var29 = FillerBlockUtil.ChangeReason.NONE;
if ((var13 & 4) == 0) {
var29 = (var13 & 32) != 0 ? FillerBlockUtil.ChangeReason.BY_PHYSICS : FillerBlockUtil.ChangeReason.NORMAL;
}
if ((var13 & 16) == 0 && var4 != null) {
FillerBlockUtil.removeFillerBlocksAt(var20.getChunkStore().getStore(), var3, var4, var21, var22, var23, var18, var17, var16, var29);
}
if ((var13 & 8) == 0 && var12 == 0 && var4 != null) {
Store var27 = var0.getStore();
FillerBlockUtil.setFillerBlocksAt(var27, var1, var3, var4, var21, var22, var23, var9, var12, var11, var29);
}
if ((var13 & 256) != 0) {
updateBlockArea(var20.getChunkStore(), var3, var10, var11, var6, var7, var8);
}
if (var14 != null && var14.isValid()) {
if (!var10.hasSupport()) {
BlockPhysics.clear(var0.getStore(), var1, var6, var7, var8);
} else {
BlockPhysics.reset(var0.getStore(), var1, var6, var7, var8);
}
}
}
class="kw">return var19;
}
class="kw">public class="kw">static boolean setBlock(
@Nonnull ChunkStore var0, @Nonnull Ref<ChunkStore> var1, int var2, int var3, int var4, int var5, @Nonnull BlockType var6, int var7, int var8, int var9
) {
Store var10 = var0.getStore();
ChunkSection var11 = var10.getComponent(var1, ChunkSection.getComponentType());
if (var11 == null) {
class="kw">return false;
}
BlockSection var12 = var10.getComponent(var1, BlockSection.getComponentType());
Ref var13 = var11.getChunkColumnReference();
BlockChunk var14 = var10.getComponent(var13, BlockChunk.getComponentType());
BlockComponentSection var15 = var10.getComponent(var1, BlockComponentSection.getComponentType());
class="kw">return setBlock(var0, var1, var11, var12, var15, var14, var2, var3, var4, var5, var6, var7, var8, var9);
}
class="kw">public class="kw">static boolean setBlockPreLoad(
@Nonnull ChunkSection var0,
@Nonnull BlockSection var1,
@Nullable BlockChunk var2,
int var3,
int var4,
int var5,
int var6,
@Nonnull BlockType var7,
int var8,
int var9
) {
int var10 = var1.getRotationIndex(var3, var4, var5);
int var11 = var1.get(var3, var4, var5);
boolean var12 = (var11 != var6 || var8 != var10) && var1.set(var3, var4, var5, var6, var8, var9);
if (var12) {
var0.markNeedsSaving();
if (var2 != null) {
updateBlockHeight(var2, var6, var7, var3, var4, var5, var2.getHeight(var3, var5));
}
TickProcedure var13 = BlockTickManager.getBlockTickProvider().getTickProcedure(var6);
var1.setTicking(var3, var4, var5, var13 != null);
}
class="kw">return var12;
}
class="kw">public class="kw">static boolean testPlaceBlock(ComponentAccessor<ChunkStore> var0, BlockSection var1, int var2, int var3, int var4, @Nonnull BlockType var5, int var6) {
class="kw">return testPlaceBlock(var0, var1, var2, var3, var4, var5, var6, (var0x, var1x, var2x, var3x, var4x, var5x) -> false);
}
class="kw">public class="kw">static boolean testPlaceBlock(
ComponentAccessor<ChunkStore> var0,
BlockSection var1,
int var2,
int var3,
int var4,
@Nonnull BlockType var5,
int var6,
BlockOperations.TestBlockFunction var7
) {
BlockBoundingBoxes var8 = BlockBoundingBoxes.getAssetMap().getAsset(var5.getHitboxType());
class="kw">return var8 == null ? false : FillerBlockUtil.testFillerBlocks(var8.get(var6), (var6x, var7x, var8x) -> {
int var12 = var2 + var6x;
int var13 = var3 + var7x;
int var14 = var4 + var8x;
int var9;
int var10;
int var11;
if (ChunkUtil.isSameChunkSection(var2, var3, var4, var12, var13, var14)) {
var9 = var1.get(var12, var13, var14);
var10 = var1.getRotationIndex(var12, var13, var14);
var11 = var1.getFiller(var12, var13, var14);
} else {
Ref var15 = var0.getExternalData().getChunkSectionReferenceAtBlock(var12, var13, var14);
if (var15 == null || !var15.isValid()) {
class="kw">return false;
}
BlockSection var16 = var0.getComponent(var15, BlockSection.getComponentType());
if (var16 == null) {
class="kw">return false;
}
var9 = var16.get(var12, var13, var14);
var10 = var16.getRotationIndex(var12, var13, var14);
var11 = var16.getFiller(var12, var13, var14);
}
BlockType var17 = BlockType.getAssetMap().getAsset(var9);
if (var17 == null) {
class="kw">return false;
} else if (var17 == BlockType.EMPTY) {
class="kw">return true;
} else if (var17.getMaterial() == BlockMaterial.Empty) {
class="kw">return true;
} else {
class="kw">return var11 != 0 && var17.isUnknown() ? true : var7.test(var12, var13, var14, var17, var10, var11);
}
});
}
class="kw">public class="kw">static void updateBlockArea(ChunkStore var0, BlockSection var1, BlockType var2, int var3, int var4, int var5, int var6) {
IndexedLookupTableAssetMap var7 = BlockBoundingBoxes.getAssetMap();
BlockBoundingBoxes var8 = var7.getAsset(var2.getHitboxTypeIndex());
if (var8 != null) {
FillerBlockUtil.forEachFillerBlock(0.0F, 1, var8.get(var3), (var5x, var6x, var7x) -> {
int var8 = var4 + var5x;
int var9 = var5 + var6x;
int var10 = var6 + var7x;
if (ChunkUtil.isSameChunkSection(var8, var9, var10, var4, var5, var6)) {
var1.setTicking(var8, var9, var10, true);
} else {
var0.getChunkSectionReferenceAtBlockAsync(var8, var9, var10, 3).thenAccept(var3x -> {
if (var3x != null && var3x.isValid()) {
BlockSection var4 = var3x.getStore().getComponent((Ref<ChunkStore>)var3x, BlockSection.getComponentType());
if (var4 != null) {
var4.setTicking(var8, var9, var10, true);
}
}
});
}
});
}
}
class="kw">public class="kw">static short updateBlockHeight(BlockChunk var0, int var1, BlockType var2, int var3, int var4, int var5, short var6) {
if (var4 >= 0 && var4 < 320) {
short var7 = var6;
if (var6 <= var4) {
if (var6 == var4 && var1 == 0) {
var7 = var0.updateHeight(var3, var5, (short)var4);
} else if (var6 < var4 && var1 != 0 && var2.getOpacity() != Opacity.Transparent) {
var7 = (short)var4;
var0.setHeight(var3, var5, var7);
}
}
class="kw">return var7;
} else {
class="kw">return var6;
}
}
class="kw">public class="kw">static void spawnBlockParticles(ChunkStore var0, int var1, int var2, int var3, int var4, int var5, boolean var6) {
WorldNotificationHandler var7 = var0.getWorld().getNotificationHandler();
if (var1 == 0 && var2 != 0) {
var7.sendBlockParticle(var3 + 0.5, var4 + 0.5, var5 + 0.5, var2, BlockParticleEvent.Build);
} else if (var1 != 0 && var2 == 0) {
BlockParticleEvent var8 = var6 ? BlockParticleEvent.Physics : BlockParticleEvent.Break;
var7.sendBlockParticle(var3 + 0.5, var4 + 0.5, var5 + 0.5, var1, var8);
} else {
var7.sendBlockParticle(var3 + 0.5, var4 + 0.5, var5 + 0.5, var1, BlockParticleEvent.Break);
var7.sendBlockParticle(var3 + 0.5, var4 + 0.5, var5 + 0.5, var2, BlockParticleEvent.Build);
}
}
class="kw">public class="kw">static void setBlockInteractionState(
@Nonnull ChunkStore var0, @Nonnull Ref<ChunkStore> var1, int var2, int var3, int var4, @Nonnull BlockType var5, @Nonnull String var6, boolean var7
) {
BlockSection var8 = var0.getStore().getComponent(var1, BlockSection.getComponentType());
if (var8 != null) {
if (var5.getData() != null) {
String var9 = var5.getState() != null ? var5.getStateForBlock(var5) : null;
if (var7 || var9 == null || !var9.equals(var6)) {
BlockType var10 = var5.getBlockForState(var6);
if (var10 != null) {
int var11 = 198;
int var12 = var8.getRotationIndex(var2, var3, var4);
setBlock(var0, var1, var2, var3, var4, BlockType.getAssetMap().getIndex(var10.getId()), var10, var12, 0, 198);
}
}
}
}
}
@FunctionalInterface
class="kw">public class="kw">interface TestBlockFunction {
boolean test(int var1, int var2, int var3, BlockType var4, int var5, int var6);
}
}