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();
   }
}