BlockConditionInteraction class

Пакет: com.hypixel.hytale.server.core.modules.interaction.interaction.config.client

Файл: com/hypixel/hytale/server/core/modules/interaction/interaction/config/client/BlockConditionInteraction.java

extends: SimpleBlockInteraction

Поля (42)

МодификаторыТипИмя
public static final BuilderCodec<BlockConditionInteraction.BlockIdMatcher> CODEC
public static final BuilderCodec<BlockConditionInteraction.BlockMatcher> CODEC
protected BlockConditionInteraction.BlockIdMatcher block
break
continue
protected BlockFace face
protected String id
protected String state
protected boolean staticFace
protected String tag
protected int tagIndex
com.hypixel.hytale.protocol.BlockIdMatcher var1
com.hypixel.hytale.protocol.BlockMatcher var1
RotationTuple var10
Item var11
boolean var12
var12
var12
BlockConditionInteraction.BlockMatcher[] var13
int var14
int var15
BlockConditionInteraction.BlockMatcher var16
BlockFace var17
var17
Rotation var18
Rotation var19
com.hypixel.hytale.protocol.BlockConditionInteraction var2
com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockFace var20
CommandBuffer var21
Ref var22
Player var23
PlayerSettings var24
String var25
var25
AssetExtraInfo.Data var26
Int2ObjectMap var27
ChunkStore var5
Store var6
Ref var7
BlockFace var8
BlockSection var8
BlockType var9

Методы (28)

МодификаторыВозвратСигнатура
public BlockIdMatcherpublic BlockIdMatcher()
public BlockMatcherpublic BlockMatcher()
private void doInteractionvoid doInteraction(@Nonnull InteractionContext var1, @Nonnull World var2, @Nonnull Vector3i var3, @Nonnull BlockFace var4)
for for(int var3 = 0; var3 < this.matchers.length; var3++)
if if(var8 != null)
if if(var9 != null)
if if(var11 == null)
if if(var16.face != BlockFace.None)
if if(!var16.staticFace)
if if(var16.block == null)
if if(var16.block.state != null)
if if(var25 == null)
if if(var16.block.tag == null)
if if(var26 != null)
if if(var12)
if if(var21 != null && var22 != null)
if if(var12)
if if(this.matchers != null)
if if(var0.tag != null)
if if(this.id != null)
if if(this.state != null)
if if(this.block != null)
if if(this.face != null)
public com.hypixel.hytale.protocol.BlockIdMatcher toPacketpublic com.hypixel.hytale.protocol.BlockIdMatcher toPacket()
public com.hypixel.hytale.protocol.BlockMatcher toPacketpublic com.hypixel.hytale.protocol.BlockMatcher toPacket()
public String toStringpublic String toString()
public String toStringpublic String toString()
while while(var15 < var14)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.interaction.interaction.config.client;

class="kw">import com.hypixel.hytale.assetstore.AssetExtraInfo;
class="kw">import com.hypixel.hytale.assetstore.AssetRegistry;
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.array.ArrayCodec;
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.BlockFace;
class="kw">import com.hypixel.hytale.protocol.GameMode;
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.protocol.PlaceMode;
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.Rotation;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.RotationTuple;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.Item;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionContext;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.io.NetworkSerializable;
class="kw">import com.hypixel.hytale.server.core.modules.entity.player.PlayerSettings;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.CooldownHandler;
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 it.unimi.dsi.fastutil.ints.Int2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.ints.IntSet;
class="kw">import java.util.Arrays;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3i;

class="kw">public class BlockConditionInteraction class="kw">extends SimpleBlockInteraction {
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<BlockConditionInteraction> CODEC = BuilderCodec.builder(
         BlockConditionInteraction.class, BlockConditionInteraction::new, SimpleBlockInteraction.CODEC
      )
      .documentation("Tests the target block and executes `Next` if it matches all the conditions, otherwise `Failed` is run.")
      .<BlockConditionInteraction.BlockMatcher[]>appendInherited(
         new KeyedCodec<>("Matchers", new ArrayCodec<>(BlockConditionInteraction.BlockMatcher.CODEC, BlockConditionInteraction.BlockMatcher[]::new)),
         (var0, var1) -> var0.matchers = var1,
         var0 -> var0.matchers,
         (var0, var1) -> var0.matchers = var1.matchers
      )
      .documentation("The matchers to test the block against.")
      .add()
      .build();
   class="kw">private BlockConditionInteraction.BlockMatcher[] matchers;

   class="kw">public BlockConditionInteraction() {
   }

   @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
   ) {
      BlockFace var8 = var4.getClientState().blockFace;
      this.doInteraction(var4, var1, var6, var8);
   }

   @Override
   class="kw">protected void simulateInteractWithBlock(
      @Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nullable ItemStack var3, @Nonnull World var4, @Nonnull Vector3i var5
   ) {
      var2.getState().blockFace = BlockFace.Up;
      this.doInteraction(var2, var4, var5, var2.getState().blockFace);
   }

   class="kw">private void doInteraction(@Nonnull InteractionContext var1, @Nonnull World var2, @Nonnull Vector3i var3, @Nonnull BlockFace var4) {
      ChunkStore var5 = var2.getChunkStore();
      Store var6 = var5.getStore();
      Ref var7 = var5.getChunkSectionReferenceAtBlock(var3.x, var3.y, var3.z);
      if (var7 != null && var7.isValid()) {
         BlockSection var8 = var6.getComponent(var7, BlockSection.getComponentType());
         if (var8 != null) {
            BlockType var9 = BlockType.getAssetMap().getAsset(var8.get(var3.x, var3.y, var3.z));
            if (var9 != null) {
               RotationTuple var10 = var8.getRotation(var3.x, var3.y, var3.z);
               Item var11 = var9.getItem();
               if (var11 == null) {
                  var1.getState().state = InteractionState.Failed;
               } else {
                  boolean var12 = false;
                  BlockConditionInteraction.BlockMatcher[] var13 = this.matchers;
                  int var14 = var13.length;
                  int var15 = 0;

                  while (var15 < var14) {
                     label90: {
                        label101: {
                           BlockConditionInteraction.BlockMatcher var16 = var13[var15];
                           if (var16.face != BlockFace.None) {
                              BlockFace var17 = var16.face;
                              if (!var16.staticFace) {
                                 Rotation var18 = var10.yaw();
                                 Rotation var19 = var10.pitch();
                                 com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockFace var20 = com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockFace.rotate(
                                    com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockFace.fromProtocolFace(var17), var18, var19
                                 );
                                 var17 = com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockFace.toProtocolFace(var20);
                              }

                              if (!var17.equals(var4)) {
                                 break label101;
                              }
                           }

                           if (var16.block == null) {
                              break label90;
                           }

                           label82:
                           if (var16.block.id == null || var16.block.id.equals(var11.getId())) {
                              if (var16.block.state != null) {
                                 String var25 = var9.getStateForBlock(var9);
                                 if (var25 == null) {
                                    var25 = "class="kw">default";
                                 }

                                 if (!var16.block.state.equals(var25)) {
                                    break label82;
                                 }
                              }

                              if (var16.block.tag == null) {
                                 break label90;
                              }

                              AssetExtraInfo.Data var26 = var9.getData();
                              if (var26 != null) {
                                 Int2ObjectMap var27 = var26.getTags();
                                 if (var27.containsKey(var16.block.tagIndex)) {
                                    break label90;
                                 }
                              }
                           }
                        }

                        var15++;
                        class="kw">continue;
                     }

                     var12 = true;
                     break;
                  }

                  if (var12) {
                     CommandBuffer var21 = var1.getCommandBuffer();
                     Ref var22 = var1.getEntity();
                     if (var21 != null && var22 != null) {
                        Player var23 = var21.getComponent(var22, Player.getComponentType());
                        if (var23 != null && var23.getGameMode() == GameMode.Creative) {
                           PlayerSettings var24 = var21.getComponent(var22, PlayerSettings.getComponentType());
                           if (var24 != null && var24.creativeSettings().placeMode() != PlaceMode.Default) {
                              var12 = false;
                           }
                        }
                     }
                  }

                  if (var12) {
                     var1.getState().state = InteractionState.Finished;
                  } else {
                     var1.getState().state = InteractionState.Failed;
                  }
               }
            }
         }
      }
   }

   @Nonnull
   @Override
   class="kw">protected Interaction generatePacket() {
      class="kw">return new com.hypixel.hytale.protocol.BlockConditionInteraction();
   }

   @Override
   class="kw">protected void configurePacket(Interaction var1) {
      super.configurePacket(var1);
      com.hypixel.hytale.protocol.BlockConditionInteraction var2 = (com.hypixel.hytale.protocol.BlockConditionInteraction)var1;
      if (this.matchers != null) {
         var2.matchers = new com.hypixel.hytale.protocol.BlockMatcher[this.matchers.length];

         for (int var3 = 0; var3 < this.matchers.length; var3++) {
            var2.matchers[var3] = this.matchers[var3].toPacket();
         }
      }
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      class="kw">return "BlockConditionInteraction{matchers=" + Arrays.toString(this.matchers) + "} " + super.toString();
   }

   class="kw">public class="kw">static class BlockIdMatcher class="kw">implements NetworkSerializable<com.hypixel.hytale.protocol.BlockIdMatcher> {
      @Nonnull
      class="kw">public class="kw">static class="kw">final BuilderCodec<BlockConditionInteraction.BlockIdMatcher> CODEC = BuilderCodec.builder(
            BlockConditionInteraction.BlockIdMatcher.class, BlockConditionInteraction.BlockIdMatcher::new
         )
         .appendInherited(new KeyedCodec<>("Id", Codec.STRING), (var0, var1) -> var0.id = var1, var0 -> var0.id, (var0, var1) -> var0.id = var1.id)
         .addValidatorLate(() -> BlockType.VALIDATOR_CACHE.getValidator().late())
         .documentation("Match against a specific block id.")
         .add()
         .<String>appendInherited(
            new KeyedCodec<>("State", Codec.STRING), (var0, var1) -> var0.state = var1, var0 -> var0.state, (var0, var1) -> var0.state = var1.state
         )
         .documentation("Match against specific block state.")
         .add()
         .<String>appendInherited(new KeyedCodec<>("Tag", Codec.STRING), (var0, var1) -> var0.tag = var1, var0 -> var0.tag, (var0, var1) -> var0.tag = var1.tag)
         .documentation("Match against specific block tag.")
         .add()
         .afterDecode(var0 -> {
            if (var0.tag != null) {
               var0.tagIndex = AssetRegistry.getOrCreateTagIndex(var0.tag);
            }
         })
         .build();
      class="kw">protected String id;
      class="kw">protected String state;
      class="kw">protected String tag;
      class="kw">protected int tagIndex = Integer.MIN_VALUE;

      class="kw">public BlockIdMatcher() {
      }

      @Nonnull
      class="kw">public com.hypixel.hytale.protocol.BlockIdMatcher toPacket() {
         com.hypixel.hytale.protocol.BlockIdMatcher var1 = new com.hypixel.hytale.protocol.BlockIdMatcher();
         if (this.id != null) {
            var1.id = this.id;
         }

         if (this.state != null) {
            var1.state = this.state;
         }

         var1.tagIndex = this.tagIndex;
         class="kw">return var1;
      }

      @Nonnull
      @Override
      class="kw">public String toString() {
         class="kw">return "BlockIdMatcher{id='" + this.id + "', state='" + this.state + "', tag='" + this.tag + "'}";
      }
   }

   class="kw">public class="kw">static class BlockMatcher class="kw">implements NetworkSerializable<com.hypixel.hytale.protocol.BlockMatcher> {
      @Nonnull
      class="kw">public class="kw">static class="kw">final BuilderCodec<BlockConditionInteraction.BlockMatcher> CODEC = BuilderCodec.builder(
            BlockConditionInteraction.BlockMatcher.class, BlockConditionInteraction.BlockMatcher::new
         )
         .appendInherited(
            new KeyedCodec<>("Block", BlockConditionInteraction.BlockIdMatcher.CODEC),
            (var0, var1) -> var0.block = var1,
            var0 -> var0.block,
            (var0, var1) -> var0.block = var1.block
         )
         .documentation("Match against block values")
         .add()
         .<com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockFace>appendInherited(
            new KeyedCodec<>("Face", com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockFace.CODEC),
            (var0, var1) -> var0.face = com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockFace.toProtocolFace(var1),
            var0 -> com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockFace.fromProtocolFace(var0.face),
            (var0, var1) -> var0.face = var1.face
         )
         .documentation("Match against a specific block face.")
         .add()
         .<Boolean>appendInherited(
            new KeyedCodec<>("StaticFace", Codec.BOOLEAN),
            (var0, var1) -> var0.staticFace = var1,
            var0 -> var0.staticFace,
            (var0, var1) -> var0.staticFace = var1.staticFace
         )
         .documentation("Whether the face matching is unaffected by the block rotation or not.")
         .add()
         .build();
      class="kw">protected BlockConditionInteraction.BlockIdMatcher block;
      class="kw">protected BlockFace face = BlockFace.None;
      class="kw">protected boolean staticFace;

      class="kw">public BlockMatcher() {
      }

      @Nonnull
      class="kw">public com.hypixel.hytale.protocol.BlockMatcher toPacket() {
         com.hypixel.hytale.protocol.BlockMatcher var1 = new com.hypixel.hytale.protocol.BlockMatcher();
         if (this.block != null) {
            var1.block = this.block.toPacket();
         }

         if (this.face != null) {
            var1.face = this.face;
         }

         var1.staticFace = this.staticFace;
         class="kw">return var1;
      }

      @Nonnull
      @Override
      class="kw">public String toString() {
         class="kw">return "BlockMatcher{block=" + this.block + ", face=" + this.face + ", staticFace=" + this.staticFace + "}";
      }
   }
}