BlockRowCommand class

Пакет: com.hypixel.hytale.server.core.universe.world.commands.block

Файл: com/hypixel/hytale/server/core/universe/world/commands/block/BlockRowCommand.java

extends: AbstractPlayerCommand

Поля (24)

МодификаторыТипИмя
final RequiredArg<String> queryArg
double var1
String var10
List var11
BlockType var11
List var12
Box var12
double var13
Vector3i var15
long var16
List var2
int var3
double var3
BlockTypeAssetMap var3
IndexedLookupTableAssetMap var5
double var5
TransformComponent var6
Axis var6
HeadRotation var7
int var7
BlockType var7
Vector3d var8
Vector3i var9
int var9

Методы (6)

МодификаторыВозвратСигнатура
abstract for for(int var8 = 0; var8 < var4.size()
abstract for for(int var10 = 0; var10 < var7 && var8 + var10 < var4.size()
if if(var1 > var3 && var1 > var5)
if if(var0.x != 0)
private void spawnBlocksRowvoid spawnBlocksRow(@Nonnull World var1, @Nonnull Vector3d var2, @Nonnull Vector3i var3, @Nonnull List<BlockType> var4)
abstract super super("row", "server.commands.block.row.desc")

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.universe.world.commands.block;

class="kw">import com.hypixel.hytale.assetstore.map.BlockTypeAssetMap;
class="kw">import com.hypixel.hytale.assetstore.map.IndexedLookupTableAssetMap;
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.Axis;
class="kw">import com.hypixel.hytale.math.shape.Box;
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.blockhitbox.BlockBoundingBoxes;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.Rotation;
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.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.HeadRotation;
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.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.core.util.WildcardMatch;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.util.Comparator;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3i;

class="kw">public class BlockRowCommand class="kw">extends AbstractPlayerCommand {
   class="kw">private class="kw">final RequiredArg<String> queryArg = this.withRequiredArg("wildcard block query", "server.commands.block.row.arg.desc", ArgTypes.STRING);
   class="kw">private class="kw">static class="kw">final int MAX_MATCHES = 64;

   class="kw">public BlockRowCommand() {
      super("row", "server.commands.block.row.desc");
   }

   @Override
   class="kw">protected void execute(
      @Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5
   ) {
      TransformComponent var6 = var2.getComponent(var3, TransformComponent.getComponentType());
      assert var6 != null;
      HeadRotation var7 = var2.getComponent(var3, HeadRotation.getComponentType());
      assert var7 != null;
      Vector3d var8 = var6.getPosition();
      Vector3i var9 = getDominantCardinal(var7.getDirection());
      String var10 = var1.get(this.queryArg);
      List var11 = this.findBlockTypes(var10);
      if (var11.isEmpty()) {
         var4.sendMessage(Message.translation("server.commands.block.row.nonefound").param("query", var10));
         List var12 = StringUtil.sortByFuzzyDistance(var10, BlockType.getAssetMap().getAssetMap().keySet(), CommandUtil.RECOMMEND_COUNT);
         if (!var12.isEmpty()) {
            var4.sendMessage(Message.translation("server.commands.block.row.fuzzymatches").param("choices", var12.toString()));
         }
      } else if (var11.size() >= 64) {
         var4.sendMessage(Message.translation("server.commands.block.row.toomanymatches").param("max", 64));
      } else {
         this.spawnBlocksRow(var5, var8, var9, var11);
      }
   }

   class="kw">private void spawnBlocksRow(@Nonnull World var1, @Nonnull Vector3d var2, @Nonnull Vector3i var3, @Nonnull List<BlockType> var4) {
      IndexedLookupTableAssetMap var5 = BlockBoundingBoxes.getAssetMap();
      Axis var6 = getAxis(var3);
      int var7 = 25;

      for (int var8 = 0; var8 < var4.size(); var8 += var7) {
         int var9 = 1;

         for (int var10 = 0; var10 < var7 && var8 + var10 < var4.size(); var10++) {
            BlockType var11 = var4.get(var10 + var8);
            Box var12 = var5.getAsset(var11.getHitboxTypeIndex()).get(0).getBoundingBox();
            double var13 = Math.ceil(var12.dimension(var6));
            var9 += (int)(Math.floor(var13) + 1.0);
            Vector3i var15 = new Vector3i(MathUtil.floor(var2.x), MathUtil.floor(var2.y), MathUtil.floor(var2.z))
               .add(new Vector3i(var3).mul(var9))
               .add(Rotation.Ninety.rotateY(var3, new Vector3i()).mul(var8 / var7 * 2));
            long var16 = ChunkUtil.indexChunkFromBlock(var15.x, var15.z);
            var1.getChunkAsync(var16).thenAccept(var2x -> {
               int var3 = 196;
               var2x.setBlock(var15.x, var15.y, var15.z, var11, 196);
            });
         }
      }
   }

   @Nonnull
   class="kw">private class="kw">static Vector3i getDominantCardinal(@Nonnull Vector3d var0) {
      double var1 = Math.abs(var0.x);
      double var3 = Math.abs(var0.y);
      double var5 = Math.abs(var0.z);
      if (var1 > var3 && var1 > var5) {
         class="kw">return new Vector3i((int)Math.signum(var0.x), 0, 0);
      } else {
         class="kw">return var3 > var5 ? new Vector3i(0, (int)Math.signum(var0.y), 0) : new Vector3i(0, 0, (int)Math.signum(var0.z));
      }
   }

   @Nonnull
   class="kw">private class="kw">static Axis getAxis(@Nonnull Vector3i var0) {
      if (var0.x != 0) {
         class="kw">return Axis.X;
      } else {
         class="kw">return var0.z != 0 ? Axis.Z : Axis.Y;
      }
   }

   @Nonnull
   class="kw">private List<BlockType> findBlockTypes(String var1) {
      List var2 = new ObjectArrayList();
      BlockTypeAssetMap var3 = BlockType.getAssetMap();

      for (String var6 : var3.getAssetMap().keySet()) {
         if (WildcardMatch.test(var6, var1)) {
            BlockType var7 = var3.getAsset(var6);
            var2.add(var7);
         }
      }

      class="kw">return var2.stream().sorted(Comparator.comparing(BlockType::getId)).toList();
   }
}