BuilderActionDropItem class

Пакет: com.hypixel.hytale.server.npc.corecomponents.items.builders

Файл: com/hypixel/hytale/server/npc/corecomponents/items/builders/BuilderActionDropItem.java

extends: BuilderActionWithDelay

Поля (6)

МодификаторыТипИмя
final double[] DEFAULT_THROW_DISTANCE
boolean var6
var6
Model var7
float var8
double var9

Методы (8)

МодификаторыВозвратСигнатура
abstract return new ActionDropItemreturn new ActionDropItem(this, var1)
public double[] getDistancedouble[] getDistance()
public String getDropListString getDropList(@Nonnull BuilderSupport var1)
public double[] getDropSectorRadiansdouble[] getDropSectorRadians()
public String getItemString getItem(@Nonnull BuilderSupport var1)
public float getThrowSpeedfloat getThrowSpeed()
if if(var9 > this.throwSpeed)
public boolean isHighPitchboolean isHighPitch()

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.corecomponents.items.builders;

class="kw">import com.google.gson.JsonElement;
class="kw">import com.hypixel.hytale.server.core.asset.type.model.config.Model;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderDescriptorState;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderSupport;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.InstructionType;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.holder.AssetHolder;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.AssetValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.DoubleRangeValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.DoubleSequenceValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.asset.ItemDropListExistsValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.asset.ItemExistsValidator;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.builders.BuilderActionWithDelay;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.items.ActionDropItem;
class="kw">import com.hypixel.hytale.server.npc.instructions.Action;
class="kw">import com.hypixel.hytale.server.npc.util.AimingHelper;
class="kw">import com.hypixel.hytale.server.npc.util.expression.ExecutionContext;
class="kw">import com.hypixel.hytale.server.npc.util.expression.Scope;
class="kw">import com.hypixel.hytale.server.npc.validators.NPCLoadTimeValidationHelper;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;

class="kw">public class BuilderActionDropItem class="kw">extends BuilderActionWithDelay {
   class="kw">public class="kw">static class="kw">final double[] DEFAULT_THROW_DISTANCE = new double[]{1.0, 1.0};
   class="kw">public class="kw">static class="kw">final double[] DEFAULT_DROP_SECTOR = new double[]{0.0, 0.0};
   class="kw">protected class="kw">final AssetHolder item = new AssetHolder();
   class="kw">protected class="kw">final AssetHolder dropList = new AssetHolder();
   class="kw">protected float throwSpeed;
   class="kw">protected double[] distance;
   class="kw">protected double[] dropSector;
   class="kw">protected boolean highPitch;

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

   @Nonnull
   @Override
   class="kw">public String getShortDescription() {
      class="kw">return "Drop an item";
   }

   @Nonnull
   @Override
   class="kw">public String getLongDescription() {
      class="kw">return "Drop an item. Can be a specific item, or from a drop table";
   }

   @Nonnull
   class="kw">public Action build(@Nonnull BuilderSupport var1) {
      class="kw">return new ActionDropItem(this, var1);
   }

   @Nonnull
   class="kw">public BuilderActionDropItem readConfig(@Nonnull JsonElement var1) {
      this.getAsset(
         var1,
         "Item",
         this.item,
         null,
         ItemExistsValidator.withConfig(AssetValidator.CanBeEmpty),
         BuilderDescriptorState.Stable,
         "A specific item to drop",
         null
      );
      this.getAsset(
         var1,
         "DropList",
         this.dropList,
         null,
         ItemDropListExistsValidator.withConfig(AssetValidator.CanBeEmpty),
         BuilderDescriptorState.Stable,
         "A reference to an item drop list",
         null
      );
      this.getFloat(
         var1,
         "ThrowSpeed",
         var1x -> this.throwSpeed = var1x,
         1.0F,
         DoubleRangeValidator.fromExclToIncl(0.0, Float.MAX_VALUE),
         BuilderDescriptorState.Stable,
         "The throw speed to use",
         null
      );
      this.getDoubleRange(
         var1,
         "Distance",
         var1x -> this.distance = var1x,
         DEFAULT_THROW_DISTANCE,
         DoubleSequenceValidator.betweenWeaklyMonotonic(0.0, Double.MAX_VALUE),
         BuilderDescriptorState.Stable,
         "The range from which to pick a distance to throw the item",
         null
      );
      this.getDoubleRange(
         var1,
         "DropSector",
         var1x -> this.dropSector = var1x,
         DEFAULT_DROP_SECTOR,
         DoubleSequenceValidator.betweenWeaklyMonotonic(-360.0, 360.0),
         BuilderDescriptorState.Stable,
         "The sector to spread drops in relative to view direction of NPC",
         "The sector to spread drops in relative to view direction of NPC in degrees."
      );
      this.getBoolean(
         var1, "PitchHigh", var1x -> this.highPitch = var1x, false, BuilderDescriptorState.Stable, "Whether to pitch high or pitch low instead", null
      );
      this.validateOneSetAsset(this.item, this.dropList);
      this.requireInstructionType(InstructionType.NPCOnlyInstructions);
      class="kw">return this;
   }

   @Nonnull
   @Override
   class="kw">public BuilderDescriptorState getBuilderDescriptorState() {
      class="kw">return BuilderDescriptorState.Stable;
   }

   @Override
   class="kw">public boolean validate(String var1, @Nonnull NPCLoadTimeValidationHelper var2, ExecutionContext var3, Scope var4, @Nonnull List<String> var5) {
      boolean var6 = super.validate(var1, var2, var3, var4, var5);
      Model var7 = var2.getSpawnModel();
      float var8 = var7.getEyeHeight();
      double var9 = AimingHelper.ensurePossibleThrowSpeed(this.distance[1], var8, 32.0, this.throwSpeed);
      if (var9 > this.throwSpeed) {
         var5.add(
            String.format(
               "%s: Throw speed %.2f is too low to achieve distance of %.2f in DropItem action. Needs to be at least %.2f",
               var1,
               this.throwSpeed,
               this.distance[1],
               Math.ceil(var9 * 100.0) / 100.0
            )
         );
         var6 = false;
      }

      class="kw">return var6;
   }

   class="kw">public String getItem(@Nonnull BuilderSupport var1) {
      class="kw">return this.item.get(var1.getExecutionContext());
   }

   class="kw">public String getDropList(@Nonnull BuilderSupport var1) {
      class="kw">return this.dropList.get(var1.getExecutionContext());
   }

   class="kw">public float getThrowSpeed() {
      class="kw">return this.throwSpeed;
   }

   class="kw">public double[] getDropSectorRadians() {
      class="kw">return this.dropSector;
   }

   class="kw">public double[] getDistance() {
      class="kw">return this.distance;
   }

   class="kw">public boolean isHighPitch() {
      class="kw">return this.highPitch;
   }
}