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