BlockBulkFindCommand class
Пакет: com.hypixel.hytale.server.core.universe.world.commands.block.bulk
Файл: com/hypixel/hytale/server/core/universe/world/commands/block/bulk/BlockBulkFindCommand.java
extends: AbstractWorldCommand
Поля (33)
| Модификаторы | Тип | Имя |
|---|---|---|
|
|
return |
|
TransformComponent |
var10 |
|
int |
var10 |
|
Vector3d |
var11 |
|
int[] |
var11 |
|
int |
var12 |
|
ChunkStore |
var12 |
|
IntList |
var13 |
|
SpiralIterator |
var13 |
|
int |
var14 |
|
long |
var14 |
|
int |
var15 |
|
int |
var16 |
|
BlockChunk |
var16 |
|
int |
var17 |
|
String |
var18 |
|
BlockSection |
var18 |
|
int |
var19 |
|
int |
var20 |
|
int |
var21 |
|
long |
var22 |
|
CommandSender |
var4 |
|
IntCoord |
var5 |
|
IntCoord |
var6 |
|
int |
var7 |
|
|
var7 |
|
int |
var7 |
|
int |
var8 |
|
|
var8 |
|
long |
var8 |
|
int |
var8 |
|
Ref |
var9 |
|
int |
var9 |
Методы (6)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
for for(int var17 = 0; var17 < 10; var17++) |
|
|
if if(var9 != null) |
|
|
if if(var11[0] < var14) |
|
|
if if(var11[0] >= var14) |
|
|
if if(++var10 % 100 == 0) |
abstract |
|
super super("find", "server.commands.block.find.desc", true) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.universe.world.commands.block.bulk;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.iterator.SpiralIterator;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
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.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.IntCoord;
class="kw">import com.hypixel.hytale.server.core.command.system.basecommands.AbstractWorldCommand;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
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.chunk.section.BlockSection;
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 it.unimi.dsi.fastutil.ints.IntList;
class="kw">import it.unimi.dsi.fastutil.ints.IntLists;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import java.util.concurrent.TimeUnit;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">public class BlockBulkFindCommand class="kw">extends AbstractWorldCommand {
@Nonnull
class="kw">private class="kw">static class="kw">final Message MESSAGE_COMMANDS_BLOCK_FIND_TIME_OUT = Message.translation("server.commands.block.find.timeout");
@Nonnull
class="kw">private class="kw">static class="kw">final Message MESSAGE_COMMANDS_BLOCK_FIND_DONE = Message.translation("server.commands.block.find.done");
@Nonnull
class="kw">private class="kw">final RequiredArg<IntCoord> chunkXArg = this.withRequiredArg("chunkX", "server.commands.block.find.chunkX.desc", ArgTypes.RELATIVE_INT_COORD);
@Nonnull
class="kw">private class="kw">final RequiredArg<IntCoord> chunkZArg = this.withRequiredArg("chunkZ", "server.commands.block.find.chunkZ.desc", ArgTypes.RELATIVE_INT_COORD);
@Nonnull
class="kw">private class="kw">final RequiredArg<String> blockTypeArg = this.withRequiredArg("block", "server.commands.block.find.block.desc", ArgTypes.BLOCK_TYPE_KEY);
@Nonnull
class="kw">private class="kw">final RequiredArg<Integer> countArg = this.withRequiredArg("count", "server.commands.block.find.count.desc", ArgTypes.INTEGER);
@Nonnull
class="kw">private class="kw">final RequiredArg<Integer> timeoutArg = this.withRequiredArg("timeout", "server.commands.block.find.timeout.desc", ArgTypes.INTEGER);
class="kw">public BlockBulkFindCommand() {
super("find", "server.commands.block.find.desc", true);
}
@Override
class="kw">protected void execute(@Nonnull CommandContext var1, @Nonnull World var2, @Nonnull Store<EntityStore> var3) {
CommandSender var4 = var1.sender();
IntCoord var5 = this.chunkXArg.get(var1);
IntCoord var6 = this.chunkZArg.get(var1);
int var7 = 0;
int var8 = 0;
if (var1.isPlayer()) {
Ref var9 = var1.senderAsPlayerRef();
if (var9 != null) {
TransformComponent var10 = var3.getComponent(var9, TransformComponent.getComponentType());
assert var10 != null;
Vector3d var11 = var10.getPosition();
var7 = MathUtil.floor(var11.x()) >> 5;
var8 = MathUtil.floor(var11.z()) >> 5;
}
}
int var16 = var5.resolveXZ(var7);
int var17 = var6.resolveXZ(var8);
String var18 = this.blockTypeArg.get(var1);
int var12 = BlockType.getAssetMap().getIndex(var18);
IntList var13 = IntLists.singleton(var12);
int var14 = this.countArg.get(var1);
int var15 = this.timeoutArg.get(var1);
CompletableFuture.runAsync(
() -> {
long var8 = System.nanoTime();
int var10 = 0;
int[] var11 = new int[]{0};
ChunkStore var12 = var2.getChunkStore();
SpiralIterator var13 = new SpiralIterator(var16, var17, SpiralIterator.MAX_RADIUS);
label32:
while (var13.hasNext()) {
long var14 = var13.next();
BlockChunk var16 = var12.getChunkReferenceAsync(var14)
.thenApplyAsync(var1x -> var12.getStore().getComponent((Ref<ChunkStore>)var1x, BlockChunk.getComponentType()), var2)
.join();
for (int var17 = 0; var17 < 10; var17++) {
BlockSection var18 = var16.getSectionAtIndex(var17);
if (var18.contains(var12)) {
int var19 = ChunkUtil.xOfChunkIndex(var14);
int var20 = var17;
int var21 = ChunkUtil.zOfChunkIndex(var14);
var18.find(var13, var6x -> {
if (var11[0] < var14) {
var11[0]++;
int var7 = var19 << 5 | ChunkUtil.xFromIndex(var6x);
int var8 = var20 << 5 | ChunkUtil.yFromIndex(var6x);
int var9 = var21 << 5 | ChunkUtil.zFromIndex(var6x);
var4.sendMessage(Message.translation("server.commands.block.find.blockFound").param("x", var7).param("y", var8).param("z", var9));
}
});
if (var11[0] >= var14) {
break label32;
}
}
}
if (++var10 % 100 == 0) {
var4.sendMessage(Message.translation("server.commands.block.find.chunksTested").param("nb", var10));
}
long var22 = System.nanoTime() - var8;
if (var22 > TimeUnit.SECONDS.toNanos(var15)) {
var4.sendMessage(MESSAGE_COMMANDS_BLOCK_FIND_TIME_OUT);
class="kw">return;
}
}
var4.sendMessage(MESSAGE_COMMANDS_BLOCK_FIND_DONE);
}
);
}
}