PlaceFluidInteraction class

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

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

extends: SimpleBlockInteraction

Поля (21)

МодификаторыТипИмя
return
return
return
int var10
Fluid var11
Ref var12
var12
FluidSection var13
var13
BlockSection var14
var14
Vector3i var15
var15
BlockType var16
FluidTicker var17
BlockFace var18
Player var19
PlayerRef var20
Ref var22
WorldConfig var8
Store var9

Методы (6)

МодификаторыВозвратСигнатура
if if(var12 != null)
if if(var13 != null)
if if(var14 != null)
if if(var12 == null)
if if(var13 == null)
if if(var14 == null)

Исходный код

Показать/скрыть
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.component.Store;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.protocol.GameMode;
class="kw">import com.hypixel.hytale.protocol.InteractionState;
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.BlockFace;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.fluid.Fluid;
class="kw">import com.hypixel.hytale.server.core.asset.type.fluid.FluidTicker;
class="kw">import com.hypixel.hytale.server.core.asset.type.gameplay.WorldConfig;
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.modules.interaction.interaction.CooldownHandler;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
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.chunk.section.FluidSection;
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 javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3i;

class="kw">public class PlaceFluidInteraction class="kw">extends SimpleBlockInteraction {
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<PlaceFluidInteraction> CODEC = BuilderCodec.builder(
         PlaceFluidInteraction.class, PlaceFluidInteraction::new, SimpleBlockInteraction.CODEC
      )
      .documentation("Places the current or given block.")
      .<String>append(new KeyedCodec<>("FluidToPlace", Codec.STRING), (var0, var1) -> var0.fluidKey = var1, var0 -> var0.fluidKey)
      .addValidatorLate(() -> Fluid.VALIDATOR_CACHE.getValidator().late())
      .add()
      .append(new KeyedCodec<>("RemoveItemInHand", Codec.BOOLEAN), (var0, var1) -> var0.removeItemInHand = var1, var0 -> var0.removeItemInHand)
      .add()
      .build();
   @Nullable
   class="kw">protected String fluidKey;
   class="kw">protected boolean removeItemInHand = true;

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

   @Nullable
   class="kw">public String getFluidKey() {
      class="kw">return this.fluidKey;
   }

   @Nonnull
   @Override
   class="kw">public WaitForDataFrom getWaitForDataFrom() {
      class="kw">return WaitForDataFrom.Client;
   }

   @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
   ) {
      WorldConfig var8 = var1.getGameplayConfig().getWorldConfig();
      if (!var8.isBlockPlacementAllowed()) {
         var4.getState().state = InteractionState.Failed;
      } else {
         Store var9 = var1.getChunkStore().getStore();
         int var10 = Fluid.getFluidIdOrUnknown(this.fluidKey, "Unknown fluid: %s", this.fluidKey);
         Fluid var11 = Fluid.getAssetMap().getAsset(var10);
         Ref var12 = var1.getChunkStore().getChunkSectionReferenceAtBlock(var6.x, var6.y, var6.z);
         if (var12 != null) {
            FluidSection var13 = var9.getComponent(var12, FluidSection.getComponentType());
            if (var13 != null) {
               BlockSection var14 = var9.getComponent(var12, BlockSection.getComponentType());
               if (var14 != null) {
                  Vector3i var15 = var6;
                  BlockType var16 = BlockType.getAssetMap().getAsset(var14.get(var15.x, var15.y, var15.z));
                  FluidTicker var17 = var11.getTicker();
                  if (!var17.canOccupySolidBlocks() && FluidTicker.isSolid(var16)) {
                     var15 = new Vector3i(var6);
                     BlockFace var18 = BlockFace.fromProtocolFace(var4.getClientState().blockFace);
                     var15.add(var18.getDirection());
                     if (!ChunkUtil.isSameChunkSection(var6.x, var6.y, var6.z, var15.x, var15.y, var15.z)) {
                        var12 = var1.getChunkStore().getChunkSectionReferenceAtBlock(var15.x, var15.y, var15.z);
                        if (var12 == null) {
                           class="kw">return;
                        }

                        var13 = var9.getComponent(var12, FluidSection.getComponentType());
                        if (var13 == null) {
                           class="kw">return;
                        }

                        var14 = var9.getComponent(var12, BlockSection.getComponentType());
                        if (var14 == null) {
                           class="kw">return;
                        }
                     }
                  }

                  var13.setFluid(var15.x, var15.y, var15.z, var11, (byte)var11.getMaxFluidLevel());
                  var14.setTicking(var15.x, var15.y, var15.z, true);
                  Ref var22 = var4.getEntity();
                  Player var19 = var2.getComponent(var22, Player.getComponentType());
                  PlayerRef var20 = var2.getComponent(var22, PlayerRef.getComponentType());
                  if ((var20 == null || var19 != null && var19.getGameMode() == GameMode.Adventure)
                     && var5 != null
                     && var5.getQuantity() == 1
                     && this.removeItemInHand) {
                     var4.setHeldItem(null);
                  }
               }
            }
         }
      }
   }

   @Override
   class="kw">protected void simulateInteractWithBlock(
      @Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nullable ItemStack var3, @Nonnull World var4, @Nonnull Vector3i var5
   ) {
   }

   @Override
   class="kw">public boolean needsRemoteSync() {
      class="kw">return true;
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      class="kw">return "PlaceFluidInteraction{fluidKey=" + this.fluidKey + ", removeItemInHand=" + this.removeItemInHand + "} " + super.toString();
   }
}