BlockSelectCommand class

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

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

extends: AbstractPlayerCommand

Поля (35)

МодификаторыТипИмя
BlockFlipType var10
BlockTypeAssetMap var12
int var13
int var17
Box var17
double var18
int var18
int var19
String var20
var20
var20
var20
int var20
String var21
VariantRotation var22
Entry var22
String var23
BlockBoundingBoxes.RotatedVariantBoxes var23
List var24
Box var25
int var27
int var29
int var30
int var31
int var32
Player var6
SelectionProvider var7
int var7
Pattern var8
Stream var9
var9
var9
var9
var9
var9

Методы (8)

МодификаторыВозвратСигнатура
for for(Entry var28 : var24)
for for(int var14 = -var27; var14 < var29 * var30; var14++)
for for(int var15 = -var27; var15 < var29 * var31; var15++)
for for(int var16 = 1; var16 < var18; var16++)
abstract for for(int var21 = 0; var21 < var24.size()
if if(var7 == null)
if if(var4x != 0 || var5x != 0 || var6x != 0)
abstract super super("blockselect", "server.commands.block.select.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.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.shape.Box;
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.BlockFlipType;
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.VariantRotation;
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.OptionalArg;
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.EnumArgumentType;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.types.SingleArgumentType;
class="kw">import com.hypixel.hytale.server.core.command.system.basecommands.AbstractPlayerCommand;
class="kw">import com.hypixel.hytale.server.core.command.system.exceptions.GeneralCommandException;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.SelectionManager;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.SelectionProvider;
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.FillerBlockUtil;
class="kw">import java.util.Collections;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.regex.Pattern;
class="kw">import java.util.stream.Stream;
class="kw">import javax.annotation.Nonnull;

class="kw">public class BlockSelectCommand class="kw">extends AbstractPlayerCommand {
   @Nonnull
   class="kw">private class="kw">static class="kw">final SingleArgumentType<BlockFlipType> BLOCK_FLIP_TYPE = new EnumArgumentType<>(
      "server.commands.parsing.argtype.blockfliptype.name", BlockFlipType.class
   );
   @Nonnull
   class="kw">private class="kw">static class="kw">final SingleArgumentType<VariantRotation> VARIANT_ROTATION = new EnumArgumentType<>(
      "server.commands.parsing.argtype.variantrotation.name", VariantRotation.class
   );
   @Nonnull
   class="kw">private class="kw">static class="kw">final Message MESSAGE_COMMANDS_BLOCK_SELECT_DONE = Message.translation("server.commands.block.select.done");
   @Nonnull
   class="kw">private class="kw">static class="kw">final Message MESSAGE_COMMANDS_BLOCK_SELECT_NO_SELECTION_PROVIDER = Message.translation("server.commands.block.select.noSelectionProvider");
   @Nonnull
   class="kw">private class="kw">final OptionalArg<String> regexArg = this.withOptionalArg("regex", "server.commands.block.select.regex.desc", ArgTypes.STRING);
   @Nonnull
   class="kw">private class="kw">final FlagArg allFlag = this.withFlagArg("all", "server.commands.block.select.all.desc");
   @Nonnull
   class="kw">private class="kw">final OptionalArg<String> sortArg = this.withOptionalArg("sort", "server.commands.block.select.sort.desc", ArgTypes.STRING);
   @Nonnull
   class="kw">private class="kw">final OptionalArg<BlockFlipType> flipTypeArg = this.withOptionalArg("fliptype", "server.commands.block.select.fliptype.desc", BLOCK_FLIP_TYPE);
   @Nonnull
   class="kw">private class="kw">final OptionalArg<VariantRotation> variantRotationArg = this.withOptionalArg(
      "variantrotation", "server.commands.block.select.variantrotation.desc", VARIANT_ROTATION
   );
   @Nonnull
   class="kw">private class="kw">final DefaultArg<Integer> paddingArg = this.withDefaultArg("padding", "server.commands.block.select.padding.desc", ArgTypes.INTEGER, 1, "1");
   @Nonnull
   class="kw">private class="kw">final OptionalArg<String> groundArg = this.withOptionalArg("ground", "server.commands.block.select.ground.desc", ArgTypes.STRING);

   class="kw">public BlockSelectCommand() {
      super("blockselect", "server.commands.block.select.desc");
      this.setPermissionGroups("hytale:WorldEditor");
   }

   @Override
   class="kw">protected void execute(
      @Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5
   ) {
      Player var6 = var2.getComponent(var3, Player.getComponentType());
      assert var6 != null;
      SelectionProvider var7 = SelectionManager.getSelectionProvider();
      if (var7 == null) {
         var1.sendMessage(MESSAGE_COMMANDS_BLOCK_SELECT_NO_SELECTION_PROVIDER);
      } else {
         Pattern var8 = this.regexArg.provided(var1) ? Pattern.compile(this.regexArg.get(var1)) : null;
         Stream var9 = BlockType.getAssetMap()
            .getAssetMap()
            .entrySet()
            .parallelStream()
            .filter(var0 -> !var0.getValue().isUnknown())
            .filter(var1x -> var8 == null || var8.matcher(var1x.getKey()).matches());
         if (!this.allFlag.get(var1)) {
            var9 = var9.filter(var0 -> !var0.getValue().isState());
         }

         if (this.flipTypeArg.provided(var1)) {
            BlockFlipType var10 = this.flipTypeArg.get(var1);
            var9 = var9.filter(var1x -> var1x.getValue().getFlipType() == var10);
         }

         if (this.variantRotationArg.provided(var1)) {
            VariantRotation var22 = this.variantRotationArg.get(var1);
            var9 = var9.filter(var1x -> var1x.getValue().getVariantRotation() == var22);
         }

         if (this.sortArg.provided(var1)) {
            String var23 = this.sortArg.get(var1);
            if (var23.isEmpty()) {
               var9 = var9.sorted(Entry.comparingByKey());
            } else {
               for (String var14 : var23.split(",", 0)) {
                  var9 = class="kw">switch (var14) {
                     case "key" -> var9.sorted(Entry.comparingByKey());
                     case "name" -> var9.sorted(Entry.comparingByKey());
                     case "reverse" -> var9.sorted(Collections.reverseOrder());
                     class="kw">default -> throw new GeneralCommandException(Message.translation("server.commands.block.select.invalidSortType").param("sortType", var14));
                  };
               }
            }
         }

         List var24 = var9.map(var0 -> Map.entry(var0.getKey(), BlockBoundingBoxes.getAssetMap().getAsset(var0.getValue().getHitboxTypeIndex()))).toList();
         var1.sendMessage(Message.translation("server.commands.block.select.select").param("count", var24.size()));
         Box var25 = new Box();

         for (Entry var28 : var24) {
            var25.union(var28.getValue().get(0).getBoundingBox());
         }

         int var27 = this.paddingArg.get(var1);
         int var29 = MathUtil.ceil(Math.sqrt(var24.size())) + 1;
         int var30 = MathUtil.ceil(var25.width()) + var27;
         int var31 = MathUtil.ceil(var25.depth()) + var27;
         int var32 = var30 / 2;
         int var17 = var31 / 2;
         double var18 = var25.height();
         String var20;
         if (this.groundArg.provided(var1)) {
            var20 = this.groundArg.get(var1);
         } else {
            String var21 = "Rock_Stone";
            if (BlockType.getAssetMap().getAsset("Rock_Stone") != null) {
               var20 = "Rock_Stone";
            } else {
               var20 = "Unknown";
            }
         }

         var7.computeSelectionCopy(var3, var6, var11 -> {
            BlockTypeAssetMap var12 = BlockType.getAssetMap();
            int var13 = var12.getIndex(var20);

            for (int var14 = -var27; var14 < var29 * var30; var14++) {
               for (int var15 = -var27; var15 < var29 * var31; var15++) {
                  var11.addBlockAtWorldPos(var14, 0, var15, var13, 0, 0, 0);

                  for (int var16 = 1; var16 < var18; var16++) {
                     var11.addBlockAtWorldPos(var14, var16, var15, 0, 0, 0, 0);
                  }
               }
            }

            for (int var21 = 0; var21 < var24.size(); var21++) {
               Entry var22 = var24.get(var21);
               BlockBoundingBoxes.RotatedVariantBoxes var23 = var22.getValue().get(0);
               Box var17 = var23.getBoundingBox();
               int var18 = var21 % var29 * var30 + var32 + MathUtil.floor(var17.middleX());
               int var19 = var21 / var29 * var31 + var17 + MathUtil.floor(var17.middleZ());
               int var20 = var12.getIndex(var22.getKey());
               var11.addBlockAtWorldPos(var18, 1, var19, var20, 0, 0, 0);
               if (var22.getValue().protrudesUnitBox()) {
                  FillerBlockUtil.forEachFillerBlock(var23, (var4x, var5x, var6x) -> {
                     if (var4x != 0 || var5x != 0 || var6x != 0) {
                        int var7 = FillerBlockUtil.pack(var4x, var5x, var6x);
                        var11.addBlockAtWorldPos(var18 + var4x, 1 + var5x, var19 + var6x, var20, 0, var7, 0);
                     }
                  });
               }
            }

            var1.sendMessage(MESSAGE_COMMANDS_BLOCK_SELECT_DONE);
         }, var2);
      }
   }
}