NPCFlockCommand class

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

Файл: com/hypixel/hytale/server/flock/commands/NPCFlockCommand.java

extends: AbstractCommandCollection

Поля (38)

МодификаторыТипИмя
final double ENTITY_IN_VIEW_DISTANCE
private static final Message MESSAGE_COMMANDS_NPC_FLOCK_FAILED_LEAVE_FLOCK
private static final Message MESSAGE_COMMANDS_NPC_FLOCK_LEFT_FLOCK
double var11
double var11
double var13
double var13
SpatialResource var15
SpatialResource var15
List var16
List var16
ComponentType var17
int var18
TransformComponent var19
Vector3d var20
NPCEntity var21
TransformComponent var22
Vector3d var23
ComponentType var3
ComponentType var3
String var3
TransformComponent var4
TransformComponent var4
Vector3d var5
Vector3d var5
Ref var5
var5
HeadRotation var6
HeadRotation var6
int var6
boolean var6
int var6
Rotation3f var7
Rotation3f var7
float var8
float var8
double var9
double var9

Методы (21)

МодификаторыВозвратСигнатура
public GrabCommandpublic GrabCommand()
public JoinCommandpublic JoinCommand()
public LeaveCommandpublic LeaveCommand()
public PlayerLeaveCommandpublic PlayerLeaveCommand()
static boolean anyEntityInViewConeboolean anyEntityInViewCone(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1, @Nonnull Predicate<Ref<EntityStore>> var2)
protected void executeprotected void execute(@Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5)
protected void executeprotected void execute(@Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5)
protected void executeprotected void execute(@Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5)
protected void executeprotected void execute(@Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5)
for for(Ref var20 : var16)
for for(Ref var18 : var16)
static int forNpcEntitiesInViewConeint forNpcEntitiesInViewCone(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1, @Nonnull BiPredicate<Ref<EntityStore>, NPCEntity> var2)
if if(var4 == null)
if if(var5 == null)
if if(var3 != null)
if if(!var6)
abstract super super("flock", "server.commands.npc.flock.desc")
abstract super super("grab", "server.commands.npc.flock.grab.desc")
abstract super super("join", "server.commands.npc.flock.join.desc")
abstract super super("leave", "server.commands.npc.flock.leave.desc")
abstract super super("playerleave", "server.commands.npc.flock.playerleave.desc")

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.flock.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.component.spatial.SpatialResource;
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.basecommands.AbstractCommandCollection;
class="kw">import com.hypixel.hytale.server.core.command.system.basecommands.AbstractPlayerCommand;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation;
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.FlockMembership;
class="kw">import com.hypixel.hytale.server.flock.FlockMembershipSystems;
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 com.hypixel.hytale.server.npc.util.NPCPhysicsMath;
class="kw">import java.util.List;
class="kw">import java.util.function.BiPredicate;
class="kw">import java.util.function.Predicate;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;

class="kw">public class NPCFlockCommand class="kw">extends AbstractCommandCollection {
   class="kw">private class="kw">static class="kw">final double ENTITY_IN_VIEW_DISTANCE = 8.0;
   class="kw">private class="kw">static class="kw">final float ENTITY_IN_VIEW_ANGLE = 30.0F;
   class="kw">private class="kw">static class="kw">final int ENTITY_IN_VIEW_HEIGHT = 2;

   class="kw">public NPCFlockCommand() {
      super("flock", "server.commands.npc.flock.desc");
      this.addSubCommand(new NPCFlockCommand.LeaveCommand());
      this.addSubCommand(new NPCFlockCommand.GrabCommand());
      this.addSubCommand(new NPCFlockCommand.JoinCommand());
      this.addSubCommand(new NPCFlockCommand.PlayerLeaveCommand());
   }

   class="kw">public class="kw">static int forNpcEntitiesInViewCone(
      @Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1, @Nonnull BiPredicate<Ref<EntityStore>, NPCEntity> var2
   ) {
      ComponentType var3 = TransformComponent.getComponentType();
      TransformComponent var4 = var1.getComponent(var0, var3);
      assert var4 != null;
      Vector3d var5 = var4.getPosition();
      HeadRotation var6 = var1.getComponent(var0, HeadRotation.getComponentType());
      assert var6 != null;
      Rotation3f var7 = var6.getRotation();
      float var8 = var7.yaw();
      double var9 = var5.x();
      double var11 = var5.y();
      double var13 = var5.z();
      SpatialResource var15 = var1.getResource(NPCPlugin.get().getNpcSpatialResource());
      List var16 = SpatialResource.getThreadLocalReferenceList();
      var15.getSpatialStructure().collect(var5, 8.0, var16);
      ComponentType var17 = NPCEntity.getComponentType();
      assert var17 != null;
      int var18 = 0;

      for (Ref var20 : var16) {
         NPCEntity var21 = var1.getComponent(var20, var17);
         assert var21 != null;
         TransformComponent var22 = var1.getComponent(var20, var3);
         assert var22 != null;
         Vector3d var23 = var22.getPosition();
         if (Math.abs(var23.y() - var11) < 2.0
            && NPCPhysicsMath.inViewSector(var9, var13, var8, (float) (Math.PI / 6), var23.x(), var23.z())
            && var2.test(var20, var21)) {
            var18++;
         }
      }

      class="kw">return var18;
   }

   class="kw">public class="kw">static boolean anyEntityInViewCone(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1, @Nonnull Predicate<Ref<EntityStore>> var2) {
      ComponentType var3 = TransformComponent.getComponentType();
      TransformComponent var4 = var1.getComponent(var0, var3);
      assert var4 != null;
      Vector3d var5 = var4.getPosition();
      HeadRotation var6 = var1.getComponent(var0, HeadRotation.getComponentType());
      assert var6 != null;
      Rotation3f var7 = var6.getRotation();
      float var8 = var7.yaw();
      double var9 = var5.x();
      double var11 = var5.y();
      double var13 = var5.z();
      SpatialResource var15 = var1.getResource(NPCPlugin.get().getNpcSpatialResource());
      List var16 = SpatialResource.getThreadLocalReferenceList();
      var15.getSpatialStructure().ordered(var5, 8.0, var16);

      for (Ref var18 : var16) {
         TransformComponent var19 = var1.getComponent(var18, var3);
         assert var19 != null;
         Vector3d var20 = var19.getPosition();
         if (Math.abs(var20.y() - var11) < 2.0
            && NPCPhysicsMath.inViewSector(var9, var13, var8, (float) (Math.PI / 6), var20.x(), var20.z())
            && var2.test(var18)) {
            class="kw">return true;
         }
      }

      class="kw">return false;
   }

   class="kw">public class="kw">static class GrabCommand class="kw">extends AbstractPlayerCommand {
      class="kw">public GrabCommand() {
         super("grab", "server.commands.npc.flock.grab.desc");
      }

      @Override
      class="kw">protected void execute(
         @Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5
      ) {
         int var6 = NPCFlockCommand.forNpcEntitiesInViewCone(var3, var2, (var2x, var3x) -> {
            FlockMembership var4 = var2.getComponent(var2x, FlockMembership.getComponentType());
            if (var4 == null) {
               Ref var5 = FlockPlugin.getFlockReference(var3, var2);
               if (var5 == null) {
                  var5 = FlockPlugin.createFlock(var2, var3x.getRole());
                  FlockMembershipSystems.join(var3, var5, var2);
               }

               FlockMembershipSystems.join(var2x, var5, var2);
               class="kw">return true;
            } else {
               class="kw">return false;
            }
         });
         var1.sendMessage(Message.translation("server.commands.npc.flock.addedToFlock").param("count", var6));
      }
   }

   class="kw">public class="kw">static class JoinCommand class="kw">extends AbstractPlayerCommand {
      class="kw">public JoinCommand() {
         super("join", "server.commands.npc.flock.join.desc");
      }

      @Override
      class="kw">protected void execute(
         @Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5
      ) {
         boolean var6 = NPCFlockCommand.anyEntityInViewCone(var3, var2, var2x -> {
            Ref var3 = FlockPlugin.getFlockReference(var2x, var2);
            if (var3 != null) {
               FlockMembershipSystems.join(var3, var3, var2);
               class="kw">return true;
            } else {
               class="kw">return false;
            }
         });
         if (!var6) {
            var1.sendMessage(Message.translation("server.commands.npc.flock.resultJoinFlock").param("status", "Failed"));
         } else {
            var5.execute(() -> {
               String var3 = FlockPlugin.isFlockMember(var3, var2) ? "Succeeded" : "Failed";
               var1.sendMessage(Message.translation("server.commands.npc.flock.resultJoinFlock").param("status", var3));
            });
         }
      }
   }

   class="kw">public class="kw">static class LeaveCommand class="kw">extends AbstractPlayerCommand {
      class="kw">public LeaveCommand() {
         super("leave", "server.commands.npc.flock.leave.desc");
      }

      @Override
      class="kw">protected void execute(
         @Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5
      ) {
         int var6 = NPCFlockCommand.forNpcEntitiesInViewCone(var3, var2, (var1x, var2x) -> {
            var2.tryRemoveComponent(var1x, FlockMembership.getComponentType());
            class="kw">return true;
         });
         var1.sendMessage(Message.translation("server.commands.npc.flock.removedFromFlock").param("count", var6));
      }
   }

   class="kw">public class="kw">static class PlayerLeaveCommand class="kw">extends AbstractPlayerCommand {
      @Nonnull
      class="kw">private class="kw">static class="kw">final Message MESSAGE_COMMANDS_NPC_FLOCK_LEFT_FLOCK = Message.translation("server.commands.npc.flock.leftFlock");
      @Nonnull
      class="kw">private class="kw">static class="kw">final Message MESSAGE_COMMANDS_NPC_FLOCK_FAILED_LEAVE_FLOCK = Message.translation("server.commands.npc.flock.failedLeaveFlock");

      class="kw">public PlayerLeaveCommand() {
         super("playerleave", "server.commands.npc.flock.playerleave.desc");
      }

      @Override
      class="kw">protected void execute(
         @Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5
      ) {
         if (var2.removeComponentIfExists(var3, FlockMembership.getComponentType())) {
            var1.sendMessage(MESSAGE_COMMANDS_NPC_FLOCK_LEFT_FLOCK);
         } else {
            var1.sendMessage(MESSAGE_COMMANDS_NPC_FLOCK_FAILED_LEAVE_FLOCK);
         }
      }
   }
}