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;
}
}