SimpleBlockInteraction class
Пакет: com.hypixel.hytale.server.core.modules.interaction.interaction.config.client
Файл: com/hypixel/hytale/server/core/modules/interaction/interaction/config/client/SimpleBlockInteraction.java
extends: SimpleInteraction
Поля (43)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
HytaleLogger |
LOGGER |
|
|
return |
|
|
return |
|
BlockPosition |
var1 |
|
BlockPosition |
var10 |
|
Vector3i |
var10 |
|
|
var10 |
|
|
var10 |
|
TransformComponent |
var11 |
|
BlockPosition |
var11 |
|
BlockPosition |
var12 |
|
ChunkStore |
var12 |
|
ChunkStore |
var13 |
|
Ref |
var13 |
|
Ref |
var14 |
|
BlockSection |
var14 |
|
BlockSection |
var15 |
|
int |
var15 |
|
int |
var16 |
|
BlockPosition |
var17 |
|
BlockPosition |
var18 |
|
ItemStack |
var19 |
|
ItemStack |
var2 |
|
ChunkStore |
var2 |
|
CommandBuffer |
var2 |
|
com.hypixel.hytale.protocol.SimpleBlockInteraction |
var2 |
|
Vector3i |
var20 |
|
Ref |
var3 |
|
World |
var3 |
|
BlockSection |
var4 |
|
ChunkStore |
var4 |
|
int |
var5 |
|
Ref |
var5 |
|
Ref |
var6 |
|
Ref |
var6 |
|
BlockSection |
var6 |
|
CommandBuffer |
var7 |
|
CommandBuffer |
var7 |
|
RotationTuple |
var7 |
|
World |
var8 |
|
World |
var8 |
|
InteractionSyncData |
var9 |
|
ItemStack |
var9 |
Методы (17)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
static |
void |
computeCurrentBlockSyncDatavoid computeCurrentBlockSyncData(@Nonnull InteractionContext var0) |
static |
boolean |
hasRemovedBlockContextboolean hasRemovedBlockContext(@Nonnull InteractionContext var0) |
|
|
if if(var1) |
|
|
if if(this.useLatestTarget) |
|
|
if if(var9 == null || var9.blockPosition == null) |
|
|
if if(var17 == null) |
|
|
if if(var15 == null) |
|
|
if if(var1) |
|
|
if if(var11 == null) |
|
|
if if(var10 == null) |
|
|
if if(var14 == null) |
|
|
if if(var4 == null) |
|
|
if if(var1 != null) |
|
|
if if(var6 != null) |
abstract abstract |
void |
interactWithBlockvoid interactWithBlock(@Nonnull World var1,
@Nonnull CommandBuffer<EntityStore> var2,
@Nonnull InteractionType var3,
@Nonnull InteractionContext var4,
@Nullable ItemStack var5,
@Nonnull Vector3i var6,
@Nonnull CooldownHandler var7) |
abstract abstract |
void |
simulateInteractWithBlockvoid simulateInteractWithBlock(@Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nullable ItemStack var3, @Nonnull World var4, @Nonnull Vector3i var5) |
abstract |
|
super super(var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.interaction.interaction.config.client;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.protocol.BlockFace;
class="kw">import com.hypixel.hytale.protocol.BlockPosition;
class="kw">import com.hypixel.hytale.protocol.BlockRotation;
class="kw">import com.hypixel.hytale.protocol.InteractionState;
class="kw">import com.hypixel.hytale.protocol.InteractionSyncData;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.protocol.WaitForDataFrom;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.RotationTuple;
class="kw">import com.hypixel.hytale.server.core.entity.EntityUtils;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionContext;
class="kw">import com.hypixel.hytale.server.core.inventory.InventoryComponent;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.CooldownHandler;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.Interaction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.SimpleInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.util.InteractionValidation;
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.storage.ChunkStore;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.core.util.FillerBlockUtil;
class="kw">import com.hypixel.hytale.server.core.util.TargetUtil;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3i;
class="kw">public class="kw">abstract class SimpleBlockInteraction class="kw">extends SimpleInteraction {
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
@Nonnull
class="kw">public class="kw">static class="kw">final BuilderCodec<SimpleBlockInteraction> CODEC = BuilderCodec.abstractBuilder(SimpleBlockInteraction.class, SimpleInteraction.CODEC)
.appendInherited(
new KeyedCodec<>("UseLatestTarget", Codec.BOOLEAN),
(var0, var1) -> var0.useLatestTarget = var1,
var0 -> var0.useLatestTarget,
(var0, var1) -> var0.useLatestTarget = var1.useLatestTarget
)
.documentation("Determines whether to use the clients latest target block position for this interaction.")
.add()
.build();
class="kw">private boolean useLatestTarget;
class="kw">public SimpleBlockInteraction(@Nonnull String var1) {
super(var1);
}
class="kw">protected SimpleBlockInteraction() {
}
@Nonnull
@Override
class="kw">public WaitForDataFrom getWaitForDataFrom() {
class="kw">return WaitForDataFrom.Client;
}
@Override
class="kw">protected void tick0(boolean var1, float var2, @Nonnull InteractionType var3, @Nonnull InteractionContext var4, @Nonnull CooldownHandler var5) {
if (var1) {
Ref var6 = var4.getEntity();
CommandBuffer var7 = var4.getCommandBuffer();
assert var7 != null;
World var8 = var7.getExternalData().getWorld();
if (this.useLatestTarget) {
InteractionSyncData var9 = var4.getClientState();
if (var9 == null || var9.blockPosition == null) {
var4.getState().state = InteractionState.Failed;
super.tick0(var1, var2, var3, var4, var5);
class="kw">return;
}
BlockPosition var10 = var9.blockPosition;
TransformComponent var11 = var7.getComponent(var6, TransformComponent.getComponentType());
assert var11 != null;
BlockPosition var12 = resolveBaseBlockPosition(var8, var10);
var4.getMetaStore().putMetaObject(Interaction.TARGET_BLOCK, var12);
var4.getMetaStore().putMetaObject(Interaction.TARGET_BLOCK_RAW, var10);
}
BlockPosition var17 = var4.getTargetBlock();
if (var17 == null) {
var4.getState().state = InteractionState.Failed;
super.tick0(var1, var2, var3, var4, var5);
} else {
BlockPosition var18 = var4.getTargetBlockRaw() != null ? var4.getTargetBlockRaw() : var17;
if (!InteractionValidation.canEntityInteractWithBlock(var6, var7, var4.getHeldItem(), var17, var18)) {
LOGGER.at(Level.WARNING)
.log("%s failed block interaction distance check at [%d, %d, %d]", EntityUtils.getEntityName(var6, var7), var17.x, var17.y, var17.z);
var4.getState().state = InteractionState.Failed;
super.tick0(var1, var2, var3, var4, var5);
} else {
ItemStack var19 = resolveItemInHand(var4, var7);
Vector3i var20 = new Vector3i(var17.x, var17.y, var17.z);
ChunkStore var13 = var8.getChunkStore();
Ref var14 = var13.getChunkSectionReferenceAtBlock(var20.x, var20.y, var20.z);
if (var14 != null && var14.isValid()) {
BlockSection var15 = var13.getStore().getComponent(var14, BlockSection.getComponentType());
if (var15 == null) {
var4.getState().state = InteractionState.Failed;
super.tick0(var1, var2, var3, var4, var5);
} else {
int var16 = var15.get(var20.x, var20.y, var20.z);
if (hasRemovedBlockContext(var4) || var16 != 1 && var16 != 0) {
this.interactWithBlock(var8, var7, var3, var4, var19, var20, var5);
super.tick0(var1, var2, var3, var4, var5);
} else {
var4.getState().state = InteractionState.Failed;
super.tick0(var1, var2, var3, var4, var5);
}
}
} else {
var4.getState().state = InteractionState.Failed;
super.tick0(var1, var2, var3, var4, var5);
}
}
}
}
}
class="kw">protected class="kw">abstract void interactWithBlock(
@Nonnull World var1,
@Nonnull CommandBuffer<EntityStore> var2,
@Nonnull InteractionType var3,
@Nonnull InteractionContext var4,
@Nullable ItemStack var5,
@Nonnull Vector3i var6,
@Nonnull CooldownHandler var7
);
@Override
class="kw">protected void simulateTick0(boolean var1, float var2, @Nonnull InteractionType var3, @Nonnull InteractionContext var4, @Nonnull CooldownHandler var5) {
if (var1) {
Ref var6 = var4.getEntity();
CommandBuffer var7 = var4.getCommandBuffer();
assert var7 != null;
World var8 = var7.getExternalData().getWorld();
ItemStack var9 = resolveItemInHand(var4, var7);
var4.getState().blockFace = BlockFace.Up;
BlockPosition var11 = var4.getTargetBlock();
Vector3i var10;
if (var11 == null) {
var10 = TargetUtil.getTargetBlock(var6, 8.0, var7);
if (var10 == null) {
var4.getState().state = InteractionState.Failed;
super.tick0(var1, var2, var3, var4, var5);
class="kw">return;
}
var4.getState().blockPosition = new BlockPosition(var10.x, var10.y, var10.z);
} else {
var4.getState().blockPosition = var11;
var10 = new Vector3i(var11.x, var11.y, var11.z);
}
ChunkStore var12 = var8.getChunkStore();
Ref var13 = var12.getChunkSectionReferenceAtBlock(var10.x, var10.y, var10.z);
if (var13 != null && var13.isValid()) {
BlockSection var14 = var12.getStore().getComponent(var13, BlockSection.getComponentType());
if (var14 == null) {
var4.getState().state = InteractionState.Failed;
super.tick0(var1, var2, var3, var4, var5);
} else {
int var15 = var14.get(var10.x, var10.y, var10.z);
if (hasRemovedBlockContext(var4) || var15 != 1 && var15 != 0) {
this.simulateInteractWithBlock(var3, var4, var9, var8, var10);
super.tick0(var1, var2, var3, var4, var5);
} else {
var4.getState().state = InteractionState.Failed;
super.tick0(var1, var2, var3, var4, var5);
}
}
} else {
var4.getState().state = InteractionState.Failed;
super.tick0(var1, var2, var3, var4, var5);
}
}
}
class="kw">protected class="kw">abstract void simulateInteractWithBlock(
@Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nullable ItemStack var3, @Nonnull World var4, @Nonnull Vector3i var5
);
@Nullable
class="kw">private class="kw">static ItemStack resolveItemInHand(@Nonnull InteractionContext var0, @Nonnull CommandBuffer<EntityStore> var1) {
ItemStack var2 = InventoryComponent.getItemInHand(var1, var0.getEntity());
class="kw">return var2 != null ? var2 : var0.getHeldItem();
}
@Nonnull
class="kw">public class="kw">static BlockPosition resolveBaseBlockPosition(@Nonnull World var0, @Nonnull BlockPosition var1) {
ChunkStore var2 = var0.getChunkStore();
Ref var3 = var2.getChunkSectionReferenceAtBlock(var1.x, var1.y, var1.z);
if (var3 != null && var3.isValid()) {
BlockSection var4 = var2.getStore().getComponent(var3, BlockSection.getComponentType());
if (var4 == null) {
class="kw">return var1;
}
int var5 = var4.getFiller(var1.x, var1.y, var1.z);
class="kw">return var5 == 0
? var1
: new BlockPosition(var1.x - FillerBlockUtil.unpackX(var5), var1.y - FillerBlockUtil.unpackY(var5), var1.z - FillerBlockUtil.unpackZ(var5));
} else {
class="kw">return var1;
}
}
class="kw">protected class="kw">static boolean hasRemovedBlockContext(@Nonnull InteractionContext var0) {
class="kw">return var0.getMetaStore().getIfPresentMetaObject(Interaction.TARGET_BLOCK_TYPE) != null;
}
class="kw">protected class="kw">static void computeCurrentBlockSyncData(@Nonnull InteractionContext var0) {
BlockPosition var1 = var0.getTargetBlock();
if (var1 != null) {
CommandBuffer var2 = var0.getCommandBuffer();
assert var2 != null;
World var3 = var2.getStore().getExternalData().getWorld();
ChunkStore var4 = var3.getChunkStore();
Ref var5 = var4.getChunkSectionReferenceAtBlock(var1.x, var1.y, var1.z);
if (var5 != null && var5.isValid()) {
BlockSection var6 = var4.getStore().getComponent(var5, BlockSection.getComponentType());
if (var6 != null) {
var0.getState().blockPosition = new BlockPosition(var1.x, var1.y, var1.z);
var0.getState().placedBlockId = var6.get(var1.x, var1.y, var1.z);
RotationTuple var7 = var6.getRotation(var1.x, var1.y, var1.z);
var0.getState().blockRotation = new BlockRotation(var7.yaw().toPacket(), var7.pitch().toPacket(), var7.roll().toPacket());
}
}
}
}
@Nonnull
@Override
class="kw">protected com.hypixel.hytale.protocol.Interaction generatePacket() {
class="kw">return new com.hypixel.hytale.protocol.SimpleBlockInteraction();
}
@Override
class="kw">protected void configurePacket(com.hypixel.hytale.protocol.Interaction var1) {
super.configurePacket(var1);
com.hypixel.hytale.protocol.SimpleBlockInteraction var2 = (com.hypixel.hytale.protocol.SimpleBlockInteraction)var1;
var2.useLatestTarget = this.useLatestTarget;
}
@Override
class="kw">public boolean needsRemoteSync() {
class="kw">return true;
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "SimpleBlockInteraction{} " + super.toString();
}
}