NPCTestData class

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

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

implements: Component<EntityStore>

Поля (6)

МодификаторыТипИмя
private final IntSet failedRoles
private final IntList flockSizes
private int index
private final IntList npcRoles
private UUID targetUUID
NPCRunTestsCommand.NPCTestData var1

Методы (2)

МодификаторыВозвратСигнатура
public Component<EntityStore> clonepublic Component<EntityStore> clone()
public static ComponentType<EntityStore, NPCRunTestsCommand.NPCTestData> getComponentTypepublic static ComponentType<EntityStore, NPCRunTestsCommand.NPCTestData> getComponentType()

Исходный код

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

class="kw">import com.hypixel.hytale.component.Component;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.RemoveReason;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
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.command.system.basecommands.AbstractPlayerCommand;
class="kw">import com.hypixel.hytale.server.core.entity.UUIDComponent;
class="kw">import com.hypixel.hytale.server.core.entity.group.EntityGroup;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
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.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.flock.FlockPlugin;
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.Pair;
class="kw">import it.unimi.dsi.fastutil.ints.IntArrayList;
class="kw">import it.unimi.dsi.fastutil.ints.IntList;
class="kw">import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
class="kw">import it.unimi.dsi.fastutil.ints.IntSet;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectListIterator;
class="kw">import it.unimi.dsi.fastutil.objects.ReferenceArrayList;
class="kw">import java.util.UUID;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class NPCRunTestsCommand class="kw">extends AbstractPlayerCommand {
   @Nonnull
   class="kw">private class="kw">static class="kw">final Message MESSAGE_COMMANDS_NPC_RUN_TESTS_SPECIFY_ROLES = Message.translation("server.commands.npc.runtests.specifyroles");
   @Nonnull
   class="kw">private class="kw">final OptionalArg<String> rolesArg = this.withOptionalArg("roles", "server.commands.npc.runtests.roles.desc", ArgTypes.STRING);
   @Nonnull
   class="kw">private class="kw">final FlagArg presetArg = this.withFlagArg("preset", "server.commands.npc.runtests.preset.desc");
   @Nonnull
   class="kw">private class="kw">final FlagArg passArg = this.withFlagArg("pass", "server.commands.npc.runtests.pass.desc");
   @Nonnull
   class="kw">private class="kw">final FlagArg failArg = this.withFlagArg("fail", "server.commands.npc.runtests.fail.desc");
   @Nonnull
   class="kw">private class="kw">final FlagArg abortArg = this.withFlagArg("abort", "server.commands.npc.runtests.abort.desc");

   class="kw">public NPCRunTestsCommand() {
      super("runtests", "server.commands.npc.runtests.desc");
   }

   @Override
   class="kw">protected void execute(
      @Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5
   ) {
      NPCRunTestsCommand.NPCTestData var6 = var2.ensureAndGetComponent(var3, NPCRunTestsCommand.NPCTestData.getComponentType());
      TransformComponent var7 = var2.getComponent(var3, TransformComponent.getComponentType());
      assert var7 != null;
      if (!var6.npcRoles.isEmpty()) {
         if (this.passArg.get(var1)) {
            setNextRole(var6, var3, var2, var5);
            class="kw">return;
         }

         if (this.failArg.get(var1)) {
            var6.failedRoles.add(var6.npcRoles.getInt(var6.index));
            setNextRole(var6, var3, var2, var5);
            class="kw">return;
         }

         if (this.abortArg.get(var1)) {
            reportResults(var3, var6, var2);
            Ref var16 = var5.getEntityRef(var6.targetUUID);
            if (var16 != null) {
               cleanupNPC(var16, var2);
            }

            var2.removeComponent(var3, NPCRunTestsCommand.NPCTestData.getComponentType());
            class="kw">return;
         }
      }

      String[] var8;
      if (this.presetArg.get(var1)) {
         var8 = NPCPlugin.get().getPresetCoverageTestNPCs();
      } else {
         if (!this.rolesArg.provided(var1)) {
            var1.sendMessage(MESSAGE_COMMANDS_NPC_RUN_TESTS_SPECIFY_ROLES);
            var2.removeComponent(var3, NPCRunTestsCommand.NPCTestData.getComponentType());
            class="kw">return;
         }

         String var9 = this.rolesArg.get(var1);
         if (var9 == null || var9.isEmpty()) {
            var1.sendMessage(MESSAGE_COMMANDS_NPC_RUN_TESTS_SPECIFY_ROLES);
            var2.removeComponent(var3, NPCRunTestsCommand.NPCTestData.getComponentType());
            class="kw">return;
         }

         var8 = var9.split(",", 0);
      }

      for (String var12 : var8) {
         int var13;
         try {
            int var14 = var12.indexOf(35);
            var13 = var14 < 0 ? 1 : Integer.parseInt(var12.substring(var14 + 1));
            if (var14 > 0) {
               var12 = var12.substring(0, var14);
            }
         } catch (NumberFormatException var15) {
            var1.sendMessage(Message.translation("server.commands.npc.runtests.invalidflocksize").param("role", var12));
            class="kw">continue;
         }

         int var18 = NPCPlugin.get().getIndex(var12);
         if (var18 == Integer.MIN_VALUE) {
            var1.sendMessage(Message.translation("server.commands.npc.spawn.templateNotFound").param("template", var12));
         } else {
            var6.npcRoles.add(var18);
            var6.flockSizes.add(var13);
         }
      }

      if (var6.targetUUID == null) {
         spawnNPC(var3, var6, 0, var7.getPosition(), var7.getRotation(), var2);
      }
   }

   class="kw">private class="kw">static void setNextRole(
      @Nonnull NPCRunTestsCommand.NPCTestData var0, @Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull World var3
   ) {
      Ref var4 = var3.getEntityRef(var0.targetUUID);
      var0.index++;
      if (var0.index >= var0.npcRoles.size()) {
         reportResults(var1, var0, var2);
         if (var4 != null) {
            cleanupNPC(var4, var2);
         }

         var2.removeComponent(var1, NPCRunTestsCommand.NPCTestData.getComponentType());
      } else {
         Vector3d var5;
         Rotation3f var6;
         if (var4 != null) {
            TransformComponent var7 = var2.getComponent(var4, TransformComponent.getComponentType());
            assert var7 != null;
            var5 = var7.getPosition();
            var6 = var7.getRotation();
            cleanupNPC(var4, var2);
         } else {
            TransformComponent var8 = var2.getComponent(var1, TransformComponent.getComponentType());
            assert var8 != null;
            var5 = var8.getPosition();
            var6 = var8.getRotation();
         }

         spawnNPC(var1, var0, var0.index, var5, var6, var2);
      }
   }

   class="kw">private class="kw">static void cleanupNPC(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1) {
      Ref var2 = FlockPlugin.getFlockReference(var0, var1);
      if (var2 != null) {
         ReferenceArrayList var3 = new ReferenceArrayList();
         EntityGroup var4 = var1.getComponent(var2, EntityGroup.getComponentType());
         assert var4 != null;
         var4.forEachMember((var0x, var1x, var2x) -> var2x.add(var1x), var3);
         ObjectListIterator var5 = var3.iterator();

         while (var5.hasNext()) {
            Ref var6 = (Ref<EntityStore>)var5.next();
            if (!var6.equals(var0)) {
               var1.removeEntity(var6, RemoveReason.REMOVE);
            }
         }
      }

      var1.removeEntity(var0, RemoveReason.REMOVE);
   }

   class="kw">private class="kw">static void spawnNPC(
      @Nonnull Ref<EntityStore> var0,
      @Nonnull NPCRunTestsCommand.NPCTestData var1,
      int var2,
      @Nonnull Vector3d var3,
      @Nullable Rotation3f var4,
      @Nonnull Store<EntityStore> var5
   ) {
      Pair var6 = NPCPlugin.get().spawnEntity(var5, var1.npcRoles.getInt(var2), var3, var4, null, null);
      Ref var7 = (Ref<EntityStore>)var6.first();
      NPCEntity var8 = (NPCEntity)var6.second();
      int var9 = var1.flockSizes.getInt(var2);
      if (var9 > 1) {
         TransformComponent var10 = var5.getComponent(var7, TransformComponent.getComponentType());
         assert var10 != null;
         FlockPlugin.trySpawnFlock(var7, var8, var5, var8.getRoleIndex(), var10.getPosition(), var10.getRotation(), var9, null);
      }

      String var13 = var8.getRoleName();
      PlayerRef var11 = var5.getComponent(var0, PlayerRef.getComponentType());
      assert var11 != null;
      var11.sendMessage(
         Message.translation("server.commands.npc.runtests.testing").param("role", var13).insert("\n").insert(Message.translation("server.npc.tests." + var13))
      );
      UUIDComponent var12 = var5.getComponent(var7, UUIDComponent.getComponentType());
      assert var12 != null;
      var1.targetUUID = var12.getUuid();
   }

   class="kw">private class="kw">static void reportResults(@Nonnull Ref<EntityStore> var0, @Nonnull NPCRunTestsCommand.NPCTestData var1, @Nonnull Store<EntityStore> var2) {
      NPCPlugin var3 = NPCPlugin.get();
      Message var4 = Message.translation("server.commands.npc.runtests.results");

      for (int var5 = 0; var5 < var1.npcRoles.size(); var5++) {
         int var6 = var1.npcRoles.getInt(var5);
         var4.insert("  " + var3.getName(var6) + ": ");
         String var7 = var5 >= var1.index
            ? "server.commands.npc.runtests.notrun"
            : (var1.failedRoles.contains(var6) ? "server.commands.npc.runtests.fail" : "server.commands.npc.runtests.pass");
         var4.insert(Message.translation(var7));
         var4.insert("\n");
      }

      PlayerRef var8 = var2.getComponent(var0, PlayerRef.getComponentType());
      assert var8 != null;
      var8.sendMessage(var4);
      var3.getLogger().at(Level.INFO).log("%s", var4.getRawText());
   }

   class="kw">public class="kw">static class NPCTestData class="kw">implements Component<EntityStore> {
      class="kw">private class="kw">final IntList npcRoles = new IntArrayList();
      class="kw">private class="kw">final IntList flockSizes = new IntArrayList();
      class="kw">private class="kw">final IntSet failedRoles = new IntOpenHashSet();
      class="kw">private int index;
      class="kw">private UUID targetUUID;

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

      class="kw">public class="kw">static ComponentType<EntityStore, NPCRunTestsCommand.NPCTestData> getComponentType() {
         class="kw">return NPCPlugin.get().getNpcTestDataComponentType();
      }

      @Nonnull
      @Override
      class="kw">public Component<EntityStore> clone() {
         NPCRunTestsCommand.NPCTestData var1 = new NPCRunTestsCommand.NPCTestData();
         var1.npcRoles.addAll(this.npcRoles);
         var1.index = this.index;
         var1.failedRoles.addAll(this.failedRoles);
         class="kw">return var1;
      }
   }
}