CycleBlockGroupInteraction class

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

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

extends: SimpleBlockInteraction

Поля (25)

МодификаторыТипИмя
final int SET_SETTINGS
Player var10
InteractionSyncData var11
ChunkStore var12
Store var13
Ref var14
BlockSection var15
GameplayConfig var16
WorldConfig var17
boolean var18
int var19
BlockType var20
Item var21
BlockGroup var22
int var23
String var24
BlockType var25
ItemStack var26
InventoryComponent.Hotbar var27
int var28
int var29
BlockSoundSet var30
int var31
Ref var8
Store var9

Методы (9)

МодификаторыВозвратСигнатура
if if(var10 == null)
if if(var15 != null)
if if(var18)
if if(var20 != null)
if if(var22 != null)
if if(var23 != -1)
if if(var25 != null)
if if(var30 != null)
if if(var31 != 0)

Исходный код

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

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.component.Store;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.protocol.BlockSoundEvent;
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.server.core.asset.type.blocksound.config.BlockSoundSet;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.gameplay.GameplayConfig;
class="kw">import com.hypixel.hytale.server.core.asset.type.gameplay.WorldConfig;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.BlockGroup;
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.ItemUtils;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
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.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.concurrent.TimeUnit;
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 CycleBlockGroupInteraction class="kw">extends SimpleBlockInteraction {
   class="kw">private class="kw">static class="kw">final int SET_SETTINGS = 256;
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<CycleBlockGroupInteraction> CODEC = BuilderCodec.builder(
         CycleBlockGroupInteraction.class, CycleBlockGroupInteraction::new, SimpleBlockInteraction.CODEC
      )
      .documentation("Attempts to cycle the target block through its block set.")
      .build();

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

   @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
   ) {
      Ref var8 = var4.getEntity();
      Store var9 = var8.getStore();
      Player var10 = var2.getComponent(var8, Player.getComponentType());
      InteractionSyncData var11 = var4.getState();
      var11.state = InteractionState.Failed;
      if (var10 == null) {
         ((HytaleLogger.Api)HytaleLogger.getLogger().at(Level.INFO).atMostEvery(5, TimeUnit.MINUTES))
            .log("CycleBlockGroupInteraction requires a Player but was used for: %s", var8);
      } else {
         ChunkStore var12 = var1.getChunkStore();
         Store var13 = var12.getStore();
         Ref var14 = var12.getChunkSectionReferenceAtBlock(var6.x, var6.y, var6.z);
         if (var14 != null && var14.isValid()) {
            BlockSection var15 = var13.getComponent(var14, BlockSection.getComponentType());
            if (var15 != null) {
               GameplayConfig var16 = var1.getGameplayConfig();
               WorldConfig var17 = var16.getWorldConfig();
               boolean var18 = var17.isBlockBreakingAllowed();
               if (var18) {
                  int var19 = var15.get(var6.x, var6.y, var6.z);
                  BlockType var20 = BlockType.getAssetMap().getAsset(var19);
                  if (var20 != null) {
                     Item var21 = var20.getItem();
                     BlockGroup var22 = BlockGroup.findItemGroup(var21);
                     if (var22 != null) {
                        int var23 = var22.getIndex(var21);
                        if (var23 != -1) {
                           String var24 = var22.get((var23 + 1) % var22.size());
                           BlockType var25 = BlockType.getAssetMap().getAsset(var24);
                           if (var25 != null) {
                              ItemStack var26 = var4.getHeldItem();
                              InventoryComponent.Hotbar var27 = var2.getComponent(var8, InventoryComponent.Hotbar.getComponentType());
                              if (var26 != null && var27 != null && ItemUtils.canDecreaseItemStackDurability(var8, var2) && !var26.isUnbreakable()) {
                                 ItemUtils.updateItemStackDurability(
                                    var8, var26, var27.getInventory(), var4.getHeldItemSlot(), -var26.getItem().getDurabilityLossOnHit(), var2
                                 );
                              }

                              int var28 = BlockType.getAssetMap().getIndex(var25.getId());
                              int var29 = var15.getRotationIndex(var6.x, var6.y, var6.z);
                              BlockOperations.setBlock(var12, var14, var6.x(), var6.y(), var6.z(), var28, var25, var29, 0, 256);
                              var11.state = InteractionState.NotFinished;
                              BlockSoundSet var30 = BlockSoundSet.getAssetMap().getAsset(var25.getBlockSoundSetIndex());
                              if (var30 != null) {
                                 int var31 = var30.getSoundEventIndices().getOrDefault(BlockSoundEvent.Hit, 0);
                                 if (var31 != 0) {
                                    SoundUtil.playSoundEvent3d(var8, var31, var6.x + 0.5, var6.y + 0.5, var6.z + 0.5, var2);
                                 }
                              }
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }

   @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">public String toString() {
      class="kw">return "CycleBlockGroupInteraction{}";
   }
}