LocatePrefabCommand class

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

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

extends: AbstractLocateSubcommand

Поля (19)

МодификаторыТипИмя
final int MAX_NEAREST_COUNT
return
int var10
int var10
int var11
UniquePrefabContainer.UniquePrefabEntry var12
List var13
Vector3i var15
int var16
Vector3i var17
Entry var18
int var19
LinkedHashSet var2
Vector3i var20
UniquePrefabContainer.UniquePrefabEntry[] var3
UUID var6
World var7
String var8
int var9

Методы (12)

МодификаторыВозвратСигнатура
abstract for for(int var14 = 0; var14 < var13.size()
if if(var1 instanceof PlayerRef var5)
if if(var6 != null)
if if(var7 != null)
if if(var9 >= 0)
if if(var10 == 0 && var11 == 0)
if if(var12 != null)
if if(var10 <= 0)
if if(var3 != null)
public String parsepublic String parse(String var1, ParseResult var2)
public void suggestpublic void suggest(@Nonnull CommandSender var1, @Nonnull String var2, int var3, @Nonnull SuggestionResult var4)
abstract super super("prefab", "server.commands.locate.prefab.desc")

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.locate.PrefabPatternSearchUtil;
class="kw">import com.hypixel.hytale.component.Ref;
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.CommandSender;
class="kw">import com.hypixel.hytale.server.core.command.system.ParseResult;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.system.OptionalArg;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.system.RequiredArg;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.types.ArgTypes;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.types.SingleArgumentType;
class="kw">import com.hypixel.hytale.server.core.command.system.suggestion.SuggestionResult;
class="kw">import com.hypixel.hytale.server.core.command.system.suggestion.SuggestionUtil;
class="kw">import com.hypixel.hytale.server.core.permissions.HytalePermissions;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.Universe;
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.worldgen.chunk.ChunkGenerator;
class="kw">import com.hypixel.hytale.server.worldgen.container.UniquePrefabContainer;
class="kw">import java.util.Arrays;
class="kw">import java.util.LinkedHashSet;
class="kw">import java.util.List;
class="kw">import java.util.UUID;
class="kw">import java.util.Map.Entry;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3i;

class="kw">public class LocatePrefabCommand class="kw">extends AbstractLocateSubcommand {
   class="kw">private class="kw">static class="kw">final int MAX_NEAREST_COUNT = 20;
   class="kw">private class="kw">static class="kw">final SingleArgumentType<String> PREFAB_NAME = new SingleArgumentType<String>(
      "server.commands.parsing.argtype.string.name", "server.commands.parsing.argtype.string.usage"
   ) {
      class="kw">public String parse(String var1, ParseResult var2) {
         class="kw">return var1;
      }

      @Override
      class="kw">public void suggest(@Nonnull CommandSender var1, @Nonnull String var2, int var3, @Nonnull SuggestionResult var4) {
         if (var1 class="kw">instanceof PlayerRef var5) {
            UUID var6 = var5.getWorldUuid();
            if (var6 != null) {
               World var7 = Universe.get().getWorld(var6);
               if (var7 != null) {
                  if (var7.getChunkStore().getGenerator() class="kw">instanceof ChunkGenerator var9) {
                     int var10 = (int)var7.getWorldConfig().getSeed();
                     SuggestionUtil.suggestFiltered(LocatePrefabCommand.collectAllPrefabNames(var9, var10), var2, var4);
                  }
               }
            }
         }
      }
   };
   @Nonnull
   class="kw">private class="kw">final RequiredArg<String> prefabNameArg = this.withRequiredArg("name", "server.commands.locate.prefab.name.desc", PREFAB_NAME);
   @Nonnull
   class="kw">private class="kw">final OptionalArg<Integer> radiusArg = this.withOptionalArg("radius", "server.commands.locate.radius.desc", ArgTypes.INTEGER);
   @Nonnull
   class="kw">private class="kw">final OptionalArg<Integer> skipArg = this.withOptionalArg("skip", "server.commands.locate.prefab.skip.desc", ArgTypes.INTEGER);
   @Nonnull
   class="kw">private class="kw">final OptionalArg<Integer> nearestArg = this.withOptionalArg("nearest", "server.commands.locate.prefab.nearest.desc", ArgTypes.INTEGER);

   class="kw">public LocatePrefabCommand() {
      super("prefab", "server.commands.locate.prefab.desc");
      this.requirePermission(HytalePermissions.fromCommand("locate.prefab"));
   }

   @Override
   class="kw">protected void execute(
      @Nonnull CommandContext var1, @Nonnull ChunkGenerator var2, int var3, int var4, int var5, @Nonnull World var6, @Nonnull Ref<EntityStore> var7
   ) {
      String var8 = var1.get(this.prefabNameArg);
      int var9 = resolveRadius(var1, this.radiusArg);
      if (var9 >= 0) {
         int var10 = this.nearestArg.provided(var1) ? Math.min(this.nearestArg.get(var1), 20) : 0;
         int var11 = this.skipArg.provided(var1) ? this.skipArg.get(var1) : 0;
         if (var10 == 0 && var11 == 0) {
            UniquePrefabContainer.UniquePrefabEntry var12 = PrefabSearchUtil.findClosestPrefab(var2, var3, var4, var5, var8, false);
            if (var12 != null) {
               Vector3i var17 = var12.getPosition();
               int var19 = horizontalDistance(var4, var5, var17.x, var17.z);
               var1.sendMessage(
                  Message.translation("server.commands.locate.found3d")
                     .param("type", "prefab")
                     .param("name", var8)
                     .param("x", var17.x)
                     .param("y", var17.y)
                     .param("z", var17.z)
                     .param("distance", var19)
               );
               this.teleportIfRequested(var1, var6, var7, var17.x, var17.y, var17.z);
               class="kw">return;
            }
         }

         int var16 = var10 > 0 ? var10 : var11 + 1;
         List var13 = PrefabPatternSearchUtil.search(var2, var3, var4, var5, var9, var8, var16);
         if (var10 <= 0) {
            if (var11 >= var13.size()) {
               if (var13.isEmpty()) {
                  var1.sendMessage(
                     Message.translation("server.commands.locate.notFoundInRadius").param("type", "prefab").param("name", var8).param("radius", var9)
                  );
                  sendDidYouMean(var1, var8, collectAllPrefabNames(var2, var3));
               } else {
                  var1.sendMessage(Message.translation("server.commands.locate.prefab.skipTooHigh").param("skip", var11).param("count", var13.size()));
               }
            } else {
               Entry var18 = var13.get(var11);
               Vector3i var20 = var18.getValue();
               var1.sendMessage(
                  Message.translation("server.commands.locate.found3d")
                     .param("type", "prefab")
                     .param("name", var18.getKey())
                     .param("x", var20.x)
                     .param("y", var20.y)
                     .param("z", var20.z)
                     .param("distance", horizontalDistance(var4, var5, var20.x, var20.z))
               );
               this.teleportIfRequested(var1, var6, var7, var20.x, var20.y, var20.z);
            }
         } else {
            if (var13.isEmpty()) {
               var1.sendMessage(
                  Message.translation("server.commands.locate.notFoundInRadius").param("type", "prefab").param("name", var8).param("radius", var9)
               );
            } else {
               var1.sendMessage(Message.translation("server.commands.locate.prefab.nearestHeader").param("count", var13.size()).param("name", var8));

               for (int var14 = 0; var14 < var13.size(); var14++) {
                  Vector3i var15 = var13.get(var14).getValue();
                  var1.sendMessage(
                     Message.translation("server.commands.locate.prefab.nearestEntry")
                        .param("index", var14 + 1)
                        .param("x", var15.x)
                        .param("y", var15.y)
                        .param("z", var15.z)
                        .param("distance", horizontalDistance(var4, var5, var15.x, var15.z))
                  );
               }
            }
         }
      }
   }

   @Nonnull
   class="kw">private class="kw">static LinkedHashSet<String> collectAllPrefabNames(@Nonnull ChunkGenerator var0, int var1) {
      LinkedHashSet var2 = new LinkedHashSet<>();
      UniquePrefabContainer.UniquePrefabEntry[] var3 = var0.getUniquePrefabs(var1);
      if (var3 != null) {
         Arrays.stream(var3).map(var0x -> var0x.getName()).forEach(var2::add);
      }

      var2.addAll(PrefabPatternSearchUtil.collectAllPrefabKeys(var0));
      class="kw">return var2;
   }
}