ChangeStateInteraction class
Пакет: com.hypixel.hytale.server.core.modules.interaction.interaction.config.client
Файл: com/hypixel/hytale/server/core/modules/interaction/interaction/config/client/ChangeStateInteraction.java
extends: SimpleBlockInteraction
Поля (22)
| Модификаторы | Тип | Имя |
|---|---|---|
|
|
return |
|
|
return |
|
|
return |
|
|
return |
|
|
return |
|
Ref |
var10 |
|
BlockSection |
var11 |
|
BlockType |
var12 |
|
String |
var13 |
|
|
var13 |
|
String |
var14 |
|
String |
var15 |
|
int |
var16 |
|
BlockType |
var17 |
|
int |
var18 |
|
int |
var19 |
|
com.hypixel.hytale.protocol.ChangeStateInteraction |
var2 |
|
BlockType |
var20 |
|
int |
var21 |
|
Ref |
var22 |
|
ChunkStore |
var8 |
|
Store |
var9 |
Методы (9)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
if if(var11 == null) |
|
|
if if(var13 == null) |
|
|
if if(var14 != null) |
|
|
if if(var15 != null) |
|
|
if if(var16 == Integer.MIN_VALUE) |
|
|
if if(var17 == null) |
|
|
if if(!this.updateBlockState) |
|
|
if if(var20 == null) |
|
|
if if(var21 == 0) |
Исходный код
Показать/скрыть
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.codec.codecs.map.MapCodec;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.protocol.Interaction;
class="kw">import com.hypixel.hytale.protocol.InteractionState;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionContext;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.CooldownHandler;
class="kw">import com.hypixel.hytale.server.core.universe.world.SoundUtil;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.BlockOperations;
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 java.util.HashMap;
class="kw">import java.util.Map;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3i;
class="kw">public class ChangeStateInteraction class="kw">extends SimpleBlockInteraction {
@Nonnull
class="kw">public class="kw">static class="kw">final BuilderCodec<ChangeStateInteraction> CODEC = BuilderCodec.builder(
ChangeStateInteraction.class, ChangeStateInteraction::new, SimpleBlockInteraction.CODEC
)
.documentation("Changes the state of the target block to another state based on the mapping provided.")
.<Map>appendInherited(
new KeyedCodec<>("Changes", new MapCodec<>(Codec.STRING, HashMap::new)),
(var0, var1) -> var0.stateKeys = var1,
var0 -> var0.stateKeys,
(var0, var1) -> var0.stateKeys = var1.stateKeys
)
.documentation("The map of state changes to execute. `\"class="kw">default\"` can be used for the initial state of a block.")
.add()
.appendInherited(
new KeyedCodec<>("UpdateBlockState", Codec.BOOLEAN),
(var0, var1) -> var0.updateBlockState = var1,
var0 -> var0.updateBlockState,
(var0, var1) -> var0.updateBlockState = var1.updateBlockState
)
.add()
.<Boolean>appendInherited(
new KeyedCodec<>("RequireBlockPlacement", Codec.BOOLEAN),
(var0, var1) -> var0.requireBlockPlacement = var1,
var0 -> var0.requireBlockPlacement,
(var0, var1) -> var0.requireBlockPlacement = var1.requireBlockPlacement
)
.documentation("When set, the state change is treated as a block placement and only runs in worlds where block placement is allowed.")
.add()
.build();
class="kw">private class="kw">static class="kw">final int SET_SETTINGS = 260;
class="kw">protected Map<String, String> stateKeys;
class="kw">protected boolean updateBlockState;
class="kw">protected boolean requireBlockPlacement;
class="kw">public ChangeStateInteraction() {
}
@Override
class="kw">protected void interactWithBlock(
@Nonnull World var1,
@Nonnull CommandBuffer<EntityStore> var2,
@Nonnull InteractionType var3,
@Nonnull InteractionContext var4,
@Nullable ItemStack var5,
@Nonnull Vector3i var6,
@Nonnull CooldownHandler var7
) {
if (this.requireBlockPlacement && !var1.getGameplayConfig().getWorldConfig().isBlockPlacementAllowed()) {
var4.getState().state = InteractionState.Failed;
} else {
ChunkStore var8 = var1.getChunkStore();
Store var9 = var8.getStore();
Ref var10 = var8.getChunkSectionReferenceAtBlock(var6.x, var6.y, var6.z);
if (var10 != null && var10.isValid()) {
BlockSection var11 = var9.getComponent(var10, BlockSection.getComponentType());
if (var11 == null) {
var4.getState().state = InteractionState.Failed;
} else {
BlockType var12 = BlockType.getAssetMap().getAsset(var11.get(var6.x, var6.y, var6.z));
String var13 = var12.getStateForBlock(var12);
if (var13 == null) {
var13 = "class="kw">default";
}
String var14 = this.stateKeys.get(var13);
if (var14 != null) {
String var15 = var12.getBlockKeyForState(var14);
if (var15 != null) {
int var16 = BlockType.getAssetMap().getIndex(var15);
if (var16 == Integer.MIN_VALUE) {
var4.getState().state = InteractionState.Failed;
class="kw">return;
}
BlockType var17 = BlockType.getAssetMap().getAsset(var16);
if (var17 == null) {
var4.getState().state = InteractionState.Failed;
class="kw">return;
}
int var18 = var11.getRotationIndex(var6.x, var6.y, var6.z);
int var19 = 260;
if (!this.updateBlockState) {
var19 |= 2;
}
BlockOperations.setBlock(var8, var10, var6.x(), var6.y(), var6.z(), var16, var17, var18, 0, var19);
BlockType var20 = var12.getBlockForState(var14);
if (var20 == null) {
var4.getState().state = InteractionState.Failed;
class="kw">return;
}
int var21 = var20.getInteractionSoundEventIndex();
if (var21 == 0) {
var4.getState().state = InteractionState.Failed;
class="kw">return;
}
Ref var22 = var4.getEntity();
SoundUtil.playSoundEvent3d(var22, var21, var6.x + 0.5, var6.y + 0.5, var6.z + 0.5, var2);
class="kw">return;
}
}
var4.getState().state = InteractionState.Failed;
}
} else {
var4.getState().state = InteractionState.Failed;
}
}
}
@Override
class="kw">protected void simulateInteractWithBlock(
@Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nullable ItemStack var3, @Nonnull World var4, @Nonnull Vector3i var5
) {
}
@Nonnull
@Override
class="kw">protected Interaction generatePacket() {
class="kw">return new com.hypixel.hytale.protocol.ChangeStateInteraction();
}
@Override
class="kw">protected void configurePacket(Interaction var1) {
super.configurePacket(var1);
com.hypixel.hytale.protocol.ChangeStateInteraction var2 = (com.hypixel.hytale.protocol.ChangeStateInteraction)var1;
var2.stateChanges = this.stateKeys;
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "ChangeStateInteraction{stateKeys=" + this.stateKeys + "} " + super.toString();
}
}