AbstractLocateSubcommand class

Пакет: com.hypixel.hytale.builtin.locate.command

Файл: com/hypixel/hytale/builtin/locate/command/AbstractLocateSubcommand.java

extends: AbstractAsyncPlayerCommand

Поля (18)

МодификаторыТипИмя
final int DEFAULT_MAX_RADIUS
return
int var10
Teleport var10
int var11
int var12
int var2
List var3
long var4
int var4
long var6
BlockChunk var7
TransformComponent var8
int var8
var8
var8
Vector3d var9
Vector3d var9

Методы (13)

МодификаторыВозвратСигнатура
abstract abstract void executevoid execute(@Nonnull CommandContext var1, @Nonnull ChunkGenerator var2, int var3, int var4, int var5, @Nonnull World var6, @Nonnull Ref<EntityStore> var7)
static int findSafeYint findSafeY(@Nonnull BlockChunk var0, int var1, int var2, int var3)
for for(int var5 = var2; var5 < var4; var5++)
static int horizontalDistanceint horizontalDistance(int var0, int var1, int var2, int var3)
if if(var2 >= 32 && var2 <= 100000)
if if(var8 == null)
if if(var5 >= 0 && var7 != null)
if if(var7 == null)
static int resolveRadiusint resolveRadius(@Nonnull CommandContext var0, @Nonnull OptionalArg<Integer> var1)
static void sendDidYouMeanvoid sendDidYouMean(@Nonnull CommandContext var0, @Nonnull String var1, @Nonnull Collection<String> var2)
abstract super super(var1, var2)
protected void teleportIfRequestedvoid teleportIfRequested(@Nonnull CommandContext var1, @Nonnull World var2, @Nonnull Ref<EntityStore> var3, int var4, int var5)
protected void teleportIfRequestedvoid teleportIfRequested(@Nonnull CommandContext var1, @Nonnull World var2, @Nonnull Ref<EntityStore> var3, int var4, int var5, int var6)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.locate.command;

class="kw">import com.hypixel.hytale.common.util.StringUtil;
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.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.CommandUtil;
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.basecommands.AbstractAsyncPlayerCommand;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.teleport.Teleport;
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.BlockChunk;
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 com.hypixel.hytale.server.worldgen.chunk.ChunkGenerator;
class="kw">import java.util.Collection;
class="kw">import java.util.List;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import java.util.concurrent.ForkJoinPool;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;

class="kw">abstract class AbstractLocateSubcommand class="kw">extends AbstractAsyncPlayerCommand {
   class="kw">protected class="kw">static class="kw">final int DEFAULT_MAX_RADIUS = 6400;
   class="kw">protected class="kw">static class="kw">final int MAX_ALLOWED_RADIUS = 100000;
   class="kw">protected class="kw">static class="kw">final int MIN_ALLOWED_RADIUS = 32;
   @Nonnull
   class="kw">private class="kw">static class="kw">final Message MESSAGE_COMMANDS_LOCATE_NO_GENERATOR = Message.translation("server.commands.locate.noGenerator");
   @Nonnull
   class="kw">private class="kw">static class="kw">final Message MESSAGE_COMMANDS_LOCATE_NO_POSITION = Message.translation("server.commands.locate.noPosition");
   @Nonnull
   class="kw">private class="kw">static class="kw">final Message MESSAGE_COMMANDS_LOCATE_SEARCHING = Message.translation("server.commands.locate.searching");
   @Nonnull
   class="kw">private class="kw">static class="kw">final Message MESSAGE_COMMANDS_LOCATE_INVALID_RADIUS = Message.translation("server.commands.locate.invalidRadius");
   @Nonnull
   class="kw">private class="kw">final FlagArg tpFlag = this.withFlagArg("tp", "server.commands.locate.tp.desc");

   AbstractLocateSubcommand(@Nonnull String var1, @Nonnull String var2) {
      super(var1, var2);
   }

   class="kw">protected class="kw">static int horizontalDistance(int var0, int var1, int var2, int var3) {
      long var4 = (long)var2 - var0;
      long var6 = (long)var3 - var1;
      class="kw">return (int)Math.hypot(var4, var6);
   }

   class="kw">protected class="kw">static void sendDidYouMean(@Nonnull CommandContext var0, @Nonnull String var1, @Nonnull Collection<String> var2) {
      if (!var2.isEmpty()) {
         List var3 = StringUtil.sortByFuzzyDistance(var1, var2, CommandUtil.RECOMMEND_COUNT);
         if (!var3.isEmpty()) {
            var0.sendMessage(Message.translation("server.general.failed.didYouMean").param("choices", var3.toString()));
         }
      }
   }

   class="kw">protected class="kw">static int resolveRadius(@Nonnull CommandContext var0, @Nonnull OptionalArg<Integer> var1) {
      if (!var1.provided(var0)) {
         class="kw">return 6400;
      }

      int var2 = var1.get(var0);
      if (var2 >= 32 && var2 <= 100000) {
         class="kw">return var2;
      }

      var0.sendMessage(MESSAGE_COMMANDS_LOCATE_INVALID_RADIUS.param("min", 32).param("max", 100000));
      class="kw">return -1;
   }

   class="kw">private class="kw">static int findSafeY(@Nonnull BlockChunk var0, int var1, int var2, int var3) {
      int var4 = Math.min(var2 + 32, 319);

      for (int var5 = var2; var5 < var4; var5++) {
         if (var0.getBlock(var1, var5, var3) == 0 && var0.getBlock(var1, var5 + 1, var3) == 0) {
            class="kw">return var5;
         }
      }

      class="kw">return var2 + 2;
   }

   @Nonnull
   @Override
   class="kw">protected class="kw">final CompletableFuture<Void> executeAsync(
      @Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5
   ) {
      if (var5.getChunkStore().getGenerator() class="kw">instanceof ChunkGenerator var7) {
         TransformComponent var8 = var2.getComponent(var3, TransformComponent.getComponentType());
         if (var8 == null) {
            var1.sendMessage(MESSAGE_COMMANDS_LOCATE_NO_POSITION);
            class="kw">return CompletableFuture.completedFuture(null);
         } else {
            Vector3d var9 = var8.getPosition();
            int var10 = (int)var9.x;
            int var11 = (int)var9.z;
            int var12 = (int)var5.getWorldConfig().getSeed();
            var1.sendMessage(MESSAGE_COMMANDS_LOCATE_SEARCHING);
            class="kw">return this.runAsync(var1, () -> this.execute(var1, var7, var12, var10, var11, var5, var3), ForkJoinPool.commonPool());
         }
      } else {
         var1.sendMessage(MESSAGE_COMMANDS_LOCATE_NO_GENERATOR);
         class="kw">return CompletableFuture.completedFuture(null);
      }
   }

   class="kw">protected class="kw">abstract void execute(
      @Nonnull CommandContext var1, @Nonnull ChunkGenerator var2, int var3, int var4, int var5, @Nonnull World var6, @Nonnull Ref<EntityStore> var7
   );

   class="kw">protected void teleportIfRequested(@Nonnull CommandContext var1, @Nonnull World var2, @Nonnull Ref<EntityStore> var3, int var4, int var5) {
      this.teleportIfRequested(var1, var2, var3, var4, -1, var5);
   }

   class="kw">protected void teleportIfRequested(@Nonnull CommandContext var1, @Nonnull World var2, @Nonnull Ref<EntityStore> var3, int var4, int var5, int var6) {
      if (this.tpFlag.provided(var1)) {
         var2.getChunkStore().getChunkReferenceAsync(ChunkUtil.indexChunkFromBlock(var4, var6)).thenAcceptAsync(var6x -> {
            BlockChunk var7 = var2.getChunkStore().getStore().getComponent((Ref<ChunkStore>)var6x, BlockChunk.getComponentType());
            int var8;
            if (var5 >= 0 && var7 != null) {
               var8 = findSafeY(var7, var4, var5, var6);
            } else {
               if (var7 == null) {
                  var1.sendMessage(Message.translation("server.commands.locate.tp.chunkUnavailable"));
                  class="kw">return;
               }

               var8 = var7.getHeight(var4, var6) + 2;
            }

            Vector3d var9 = new Vector3d(var4, var8, var6);
            Teleport var10 = Teleport.createForPlayer(var9, new Rotation3f(0.0F, 0.0F, 0.0F));
            var2.getEntityStore().getStore().addComponent(var3, Teleport.getComponentType(), var10);
         }, var2);
      }
   }
}