BlockBulkFindHereCommand class
Пакет: com.hypixel.hytale.server.core.universe.world.commands.block.bulk
Файл: com/hypixel/hytale/server/core/universe/world/commands/block/bulk/BlockBulkFindHereCommand.java
extends: AbstractPlayerCommand
Поля (18)
| Модификаторы | Тип | Имя |
|---|---|---|
|
boolean |
var10 |
|
ChunkStore |
var10 |
|
TransformComponent |
var11 |
|
AtomicInteger |
var11 |
|
Vector3d |
var12 |
|
SpiralIterator |
var12 |
|
int |
var13 |
|
long |
var13 |
|
int |
var14 |
|
BlockChunk |
var15 |
|
BlockSection |
var17 |
|
long |
var18 |
|
BlockType |
var19 |
|
String |
var6 |
|
int |
var7 |
|
IntList |
var8 |
|
long |
var8 |
|
int |
var9 |
Методы (3)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
for for(int var16 = 0; var16 < 10; var16++) |
|
|
if if(var10) |
abstract |
|
super super("find-here", "server.commands.block.find-here.desc") |
Исходный код
Показать/скрыть
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.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.arguments.system.DefaultArg;
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.RequiredArg;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.types.ArgTypes;
class="kw">import com.hypixel.hytale.server.core.command.system.basecommands.AbstractPlayerCommand;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
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.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 java.util.concurrent.CompletableFuture;
class="kw">import java.util.concurrent.TimeUnit;
class="kw">import java.util.concurrent.atomic.AtomicInteger;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">public class BlockBulkFindHereCommand class="kw">extends AbstractPlayerCommand {
@Nonnull
class="kw">private class="kw">final FlagArg printNameArg = this.withFlagArg("print", "server.commands.block.find-here.print.desc");
@Nonnull
class="kw">private class="kw">final RequiredArg<String> blockTypeArg = this.withRequiredArg("block", "server.commands.block.find-here.block.desc", ArgTypes.BLOCK_TYPE_KEY);
@Nonnull
class="kw">private class="kw">final DefaultArg<Integer> radiusArg = this.withDefaultArg(
"radius", "server.commands.block.find-here.radius.desc", ArgTypes.INTEGER, 3, "server.commands.block.bulk.find-here.radius.class="kw">default"
);
class="kw">public BlockBulkFindHereCommand() {
super("find-here", "server.commands.block.find-here.desc");
}
@Override
class="kw">protected void execute(
@Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5
) {
String var6 = this.blockTypeArg.get(var1);
int var7 = BlockType.getAssetMap().getIndex(var6);
IntList var8 = BlockBulkReplaceCommand.getBlockIdList(var7);
int var9 = this.radiusArg.get(var1);
boolean var10 = this.printNameArg.get(var1);
TransformComponent var11 = var2.getComponent(var3, TransformComponent.getComponentType());
assert var11 != null;
Vector3d var12 = var11.getPosition();
int var13 = MathUtil.floor(var12.x()) >> 5;
int var14 = MathUtil.floor(var12.z()) >> 5;
CompletableFuture.runAsync(
() -> {
long var8 = System.nanoTime();
ChunkStore var10 = var5.getChunkStore();
AtomicInteger var11 = new AtomicInteger();
SpiralIterator var12 = new SpiralIterator(var13, var14, var9);
while (var12.hasNext()) {
long var13 = var12.next();
BlockChunk var15 = var10.getChunkReferenceAsync(var13)
.thenApplyAsync(var1x -> var10.getStore().getComponent((Ref<ChunkStore>)var1x, BlockChunk.getComponentType()), var5)
.join();
for (int var16 = 0; var16 < 10; var16++) {
BlockSection var17 = var15.getSectionAtIndex(var16);
if (var17.containsAny(var8)) {
var17.find(var8, var1x -> var11.getAndIncrement());
}
}
}
long var18 = System.nanoTime() - var8;
if (var10) {
BlockType var19 = BlockType.getAssetMap().getAsset(var7);
var4.sendMessage(
Message.translation("server.commands.block.find-here.resultWithName")
.param("count", var11.get())
.param("blockName", var19.getId())
.param("time", TimeUnit.NANOSECONDS.toSeconds(var18))
);
} else {
var4.sendMessage(
Message.translation("server.commands.block.find-here.result")
.param("count", var11.get())
.param("time", TimeUnit.NANOSECONDS.toSeconds(var18))
);
}
}
);
}
}