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