NPCMultiSelectCommandBase class

Пакет: com.hypixel.hytale.server.npc.commands

Файл: com/hypixel/hytale/server/npc/commands/NPCMultiSelectCommandBase.java

extends: NPCWorldCommandBase

Поля (48)

МодификаторыТипИмя
return
return
return
String[] var10
float var15
TransformComponent var17
double var18
Ref var20
NPCEntity var21
List var22
var22
var22
var22
ComponentType var23
Vector3d var24
Ref var25
TransformComponent var26
Ref var27
var27
Transform var28
double var29
var29
NPCEntity var3
Vector3d var30
UUIDComponent var4
Ref var4
var4
NPCEntity var4
UUID var5
float var5
var5
var5
var5
var5
var5
NPCEntity var5
float var6
TransformComponent var6
boolean var7
var7
var7
var7
var7
var7
Vector3d var7
Set var8
double var8
String var9

Методы (13)

МодификаторыВозвратСигнатура
for for(String var14 : var10)
for for(Ref var16 : var22)
if if(var3 == null)
if if(var20 != null)
if if(var21 != null)
if if(var5 < 0.0F || var5 > 180.0F)
if if(var5 == 0.0F)
if if(var15 <= -1.0F)
if if(var18 < var29)
protected void processEntityListvoid processEntityList(@Nonnull CommandContext var1, @Nonnull World var2, @Nonnull Store<EntityStore> var3, @Nonnull List<Ref<EntityStore>> var4)
abstract super super(var1, var2)
abstract super super(var1, var2, var3)
abstract super super(var1)

Исходный код

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

class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.vector.Transform;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.command.system.CommandContext;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.system.FlagArg;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.system.OptionalArg;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.types.ArgTypes;
class="kw">import com.hypixel.hytale.server.core.entity.UUIDComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.core.util.TargetUtil;
class="kw">import com.hypixel.hytale.server.npc.NPCPlugin;
class="kw">import com.hypixel.hytale.server.npc.entities.NPCEntity;
class="kw">import it.unimi.dsi.fastutil.objects.ReferenceArrayList;
class="kw">import java.util.HashSet;
class="kw">import java.util.List;
class="kw">import java.util.Set;
class="kw">import java.util.UUID;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class="kw">abstract class NPCMultiSelectCommandBase class="kw">extends NPCWorldCommandBase {
   @Nonnull
   class="kw">protected class="kw">static class="kw">final Message MESSAGE_COMMANDS_ERRORS_PLAYER_OR_ARG = Message.translation("server.commands.errors.playerOrArg").param("option", "entity");
   @Nonnull
   class="kw">protected class="kw">static class="kw">final Message MESSAGE_COMMANDS_ERRORS_NO_ENTITY_IN_VIEW = Message.translation("server.commands.errors.no_entity_in_view")
      .param("option", "entity");
   class="kw">protected class="kw">static class="kw">final float DEFAULT_CONE_ANGLE = 30.0F;
   class="kw">protected class="kw">static class="kw">final float DEFAULT_RANGE = 8.0F;
   class="kw">protected class="kw">static class="kw">final float RANGE_MIN = 0.0F;
   class="kw">protected class="kw">static class="kw">final float RANGE_MAX = 2048.0F;
   class="kw">protected class="kw">static class="kw">final float CONE_ANGLE_MIN = 0.0F;
   class="kw">protected class="kw">static class="kw">final float CONE_ANGLE_MAX = 180.0F;
   @Nonnull
   class="kw">protected class="kw">final OptionalArg<Float> coneAngleArg = this.withOptionalArg("angle", "server.commands.npc.command.angle.desc", ArgTypes.FLOAT);
   @Nonnull
   class="kw">protected class="kw">final OptionalArg<Float> rangeArg = this.withOptionalArg("range", "server.commands.npc.command.range.desc", ArgTypes.FLOAT);
   @Nonnull
   class="kw">private class="kw">final OptionalArg<String> rolesArg = this.withOptionalArg("roles", "server.commands.npc.command.roles.desc", ArgTypes.STRING);
   @Nonnull
   class="kw">private class="kw">final FlagArg nearestArg = this.withFlagArg("nearest", "server.commands.npc.command.nearest.desc");
   @Nonnull
   class="kw">private class="kw">final FlagArg presetCone30 = this.withFlagArg("cone", "server.commands.npc.command.preset.cone.desc");
   @Nonnull
   class="kw">private class="kw">final FlagArg presetCone30all = this.withFlagArg("coneAll", "server.commands.npc.command.preset.cone_all.desc");
   @Nonnull
   class="kw">private class="kw">final FlagArg presetSphere = this.withFlagArg("sphere", "server.commands.npc.command.preset.sphere.desc");
   @Nonnull
   class="kw">private class="kw">final FlagArg presetRay = this.withFlagArg("ray", "server.commands.npc.command.preset.ray.desc");

   class="kw">public NPCMultiSelectCommandBase(@Nonnull String var1, @Nonnull String var2) {
      super(var1, var2);
   }

   class="kw">public NPCMultiSelectCommandBase(@Nonnull String var1, @Nonnull String var2, boolean var3) {
      super(var1, var2, var3);
   }

   class="kw">public NPCMultiSelectCommandBase(@Nonnull String var1) {
      super(var1);
   }

   @Nullable
   class="kw">protected class="kw">static NPCEntity ensureIsNPC(@Nonnull CommandContext var0, @Nonnull Store<EntityStore> var1, @Nonnull Ref<EntityStore> var2) {
      NPCEntity var3 = var1.getComponent(var2, NPCEntity.getComponentType());
      if (var3 == null) {
         UUIDComponent var4 = var1.getComponent(var2, UUIDComponent.getComponentType());
         assert var4 != null;
         UUID var5 = var4.getUuid();
         var0.sendMessage(Message.translation("server.commands.errors.not_npc").param("uuid", var5.toString()));
         class="kw">return null;
      } else {
         class="kw">return var3;
      }
   }

   @Override
   class="kw">protected void execute(@Nonnull CommandContext var1, @Nonnull World var2, @Nonnull Store<EntityStore> var3) {
      if (this.entityArg.provided(var1)) {
         Ref var20 = this.entityArg.get(var3, var1);
         if (var20 != null) {
            NPCEntity var21 = ensureIsNPC(var1, var3, var20);
            if (var21 != null) {
               this.execute(var1, var21, var2, var3, var20);
            }
         }
      } else {
         Ref var4 = null;
         if (var1.isPlayer()) {
            var4 = var1.senderAsPlayerRef();
         }

         if (var4 != null && var4.isValid()) {
            Set var8 = new HashSet<>();
            if (this.rolesArg.provided(var1)) {
               String var9 = this.rolesArg.get(var1);
               if (var9 == null || var9.isEmpty()) {
                  var1.sendMessage(Message.translation("server.commands.errors.npc.no_role_list_provided"));
                  class="kw">return;
               }

               String[] var10 = var9.split(",", 0);

               for (String var14 : var10) {
                  if (!var14.isBlank()) {
                     if (!NPCPlugin.get().hasRoleName(var14)) {
                        var1.sendMessage(Message.translation("server.commands.errors.npc.unknown_role").param("role", var14));
                        class="kw">return;
                     }

                     var8.add(var14);
                  }
               }
            }

            float var6 = this.rangeArg.provided(var1) ? this.rangeArg.get(var1) : 8.0F;
            if (!(var6 < 0.0F) && !(var6 > 2048.0F)) {
               float var5;
               boolean var7;
               if (this.presetCone30.provided(var1)) {
                  var5 = 30.0F;
                  var7 = true;
               } else if (this.presetCone30all.provided(var1)) {
                  var5 = 30.0F;
                  var7 = false;
               } else if (this.presetSphere.provided(var1)) {
                  var5 = 180.0F;
                  var7 = false;
               } else if (this.presetRay.provided(var1)) {
                  var5 = 0.0F;
                  var7 = true;
               } else {
                  var5 = this.coneAngleArg.provided(var1) ? this.coneAngleArg.get(var1).intValue() : 30.0F;
                  if (var5 < 0.0F || var5 > 180.0F) {
                     var1.sendMessage(
                        Message.translation("server.commands.errors.validation.range.between_inclusive")
                           .param("param", "angle")
                           .param("min", 0.0F)
                           .param("max", 180.0F)
                           .param("value", var5)
                     );
                     class="kw">return;
                  }

                  var7 = this.nearestArg.provided(var1);
               }

               List var22 = null;
               ComponentType var23 = NPCEntity.getComponentType();
               assert var23 != null;
               Vector3d var24 = new Vector3d();
               if (var5 == 0.0F) {
                  Ref var25 = TargetUtil.getTargetEntity(var4, var6, var3);
                  if (var25 != null && var3.getComponent(var25, var23) != null) {
                     var22 = new ReferenceArrayList();
                     var22.add(var25);
                  }

                  var24.zero();
               } else {
                  TransformComponent var26 = var3.getComponent(var4, TransformComponent.getComponentType());
                  assert var26 != null;
                  Transform var28 = TargetUtil.getLook(var4, var3);
                  var24.set(var28.getPosition());
                  Vector3d var30 = var28.getDirection();
                  assert var24.length() == 1.0;
                  var22 = TargetUtil.getAllEntitiesInSphere(var24, var6, var3);
                  float var15 = (float)Math.cos((float)Math.toRadians(var5));
                  assert var5 != 180.0F || var15 == -1.0F;
                  var22.removeIf(var5x -> {
                     if (var3.getComponent((Ref<EntityStore>)var5x, var23) == null) {
                        class="kw">return true;
                     }

                     if (var15 <= -1.0F) {
                        class="kw">return false;
                     }

                     TransformComponent var6 = var3.getComponent((Ref<EntityStore>)var5x, TransformComponent.getComponentType());
                     assert var6 != null;
                     Vector3d var7 = Vector3dUtil.directionTo(var24, var6.getPosition());
                     double var8 = var7.length();
                     class="kw">return var8 < 1.0E-4 ? true : var30.dot(var7) < var15 * var8;
                  });
               }

               if (var22 != null && !var22.isEmpty() && !var8.isEmpty()) {
                  var22.removeIf(var3x -> {
                     NPCEntity var4 = var3.getComponent((Ref<EntityStore>)var3x, var23);
                     class="kw">return !var8.contains(var4.getRoleName());
                  });
               }

               if (var22 != null && !var22.isEmpty()) {
                  if (var7 && var22.size() > 1) {
                     Ref var27 = var22.getFirst();
                     double var29 = Double.MAX_VALUE;

                     for (Ref var16 : var22) {
                        TransformComponent var17 = var3.getComponent(var16, TransformComponent.getComponentType());
                        assert var17 != null;
                        double var18 = var24.distanceSquared(var17.getPosition());
                        if (var18 < var29) {
                           var29 = var18;
                           var27 = var16;
                        }
                     }

                     var22 = List.of(var27);
                  }

                  this.processEntityList(var1, var2, var3, var22);
               } else {
                  var1.sendMessage(MESSAGE_COMMANDS_ERRORS_NO_ENTITY_IN_VIEW);
               }
            } else {
               var1.sendMessage(
                  Message.translation("server.commands.errors.validation.range.between_inclusive")
                     .param("param", "range")
                     .param("min", 0.0F)
                     .param("max", 2048.0F)
                     .param("value", var6)
               );
            }
         } else {
            var1.sendMessage(MESSAGE_COMMANDS_ERRORS_PLAYER_OR_ARG);
         }
      }
   }

   class="kw">protected void processEntityList(@Nonnull CommandContext var1, @Nonnull World var2, @Nonnull Store<EntityStore> var3, @Nonnull List<Ref<EntityStore>> var4) {
      var4.forEach(var4x -> {
         NPCEntity var5 = var3.getComponent((Ref<EntityStore>)var4x, NPCEntity.getComponentType());
         assert var5 != null;
         this.execute(var1, var5, var2, var3, (Ref<EntityStore>)var4x);
      });
   }
}