HitboxGetCommand class

Пакет: com.hypixel.hytale.server.core.modules.collision.commands

Файл: com/hypixel/hytale/server/core/modules/collision/commands/HitboxCommand.java

extends: CommandBase

Поля (7)

МодификаторыТипИмя
private final RequiredArg<String> hitboxArg
String var2
BlockBoundingBoxes var3
BlockBoundingBoxes.RotatedVariantBoxes var4
Box[] var5
Message var6
Set var7

Методы (4)

МодификаторыВозвратСигнатура
protected void executeSyncprotected void executeSync(@Nonnull CommandContext var1)
if if(var3 != null)
if if(var5.length > 0)
abstract super super("server.commands.hitbox.desc")

Исходный код

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

class="kw">import com.hypixel.hytale.assetstore.map.BlockTypeAssetMap;
class="kw">import com.hypixel.hytale.assetstore.map.IndexedLookupTableAssetMap;
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.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.arguments.system.OptionalArg;
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.AbstractCommandCollection;
class="kw">import com.hypixel.hytale.server.core.command.system.basecommands.CommandBase;
class="kw">import com.hypixel.hytale.server.core.util.message.MessageFormat;
class="kw">import java.util.Arrays;
class="kw">import java.util.Set;
class="kw">import java.util.stream.Collectors;
class="kw">import javax.annotation.Nonnull;

class="kw">public class HitboxCommand class="kw">extends AbstractCommandCollection {
   class="kw">public HitboxCommand() {
      super("hitbox", "server.commands.hitbox.desc");
      this.setPermissionGroups("hytale:WorldEditor");
      this.addSubCommand(new HitboxCommand.HitboxExtentsCommand());
      this.addUsageVariant(new HitboxCommand.HitboxGetCommand());
   }

   @Nonnull
   class="kw">private class="kw">static Message formatBox(@Nonnull Box var0) {
      class="kw">return Message.translation("server.commands.hitbox.box")
         .param("minX", var0.min.x)
         .param("minY", var0.min.y)
         .param("minZ", var0.min.z)
         .param("maxX", var0.max.x)
         .param("maxY", var0.max.y)
         .param("maxZ", var0.max.z);
   }

   class="kw">private class="kw">static class HitboxExtentsCommand class="kw">extends CommandBase {
      @Nonnull
      class="kw">private class="kw">final OptionalArg<Double> thresholdArg = this.withOptionalArg("threshold", "server.commands.hitbox.extents.threshold.desc", ArgTypes.DOUBLE);

      class="kw">public HitboxExtentsCommand() {
         super("extents", "server.commands.hitbox.extents.desc");
      }

      @Override
      class="kw">protected void executeSync(@Nonnull CommandContext var1) {
         BlockTypeAssetMap var2 = BlockType.getAssetMap();
         IndexedLookupTableAssetMap var3 = BlockBoundingBoxes.getAssetMap();
         int var4 = 0;
         double var5 = this.thresholdArg.provided(var1) ? this.thresholdArg.get(var1) : 0.5;

         for (BlockType var8 : var2.getAssetMap().values()) {
            Box var9 = var3.getAsset(var8.getHitboxTypeIndex()).get(0).getBoundingBox();
            double var10 = var9.width();
            double var12 = var9.height();
            double var14 = var9.depth();
            int var16 = Math.max(MathUtil.floor(var10), 1);
            int var17 = Math.max(MathUtil.floor(var12), 1);
            int var18 = Math.max(MathUtil.floor(var14), 1);
            if (var10 - var16 > var5) {
               var16++;
            }

            if (var12 - var17 > var5) {
               var17++;
            }

            if (var14 - var18 > var5) {
               var18++;
            }

            int var19 = var16 * var17 * var18;
            int var20 = var19 - 1;
            var4 += var20;
         }

         var1.sendMessage(Message.translation("server.commands.hitbox.extentsThresholdNeeded").param("threshold", var5).param("nb", var4));
      }
   }

   class="kw">private class="kw">static class HitboxGetCommand class="kw">extends CommandBase {
      @Nonnull
      class="kw">private class="kw">final RequiredArg<String> hitboxArg = this.withRequiredArg("hitbox", "server.commands.hitbox.hitbox.desc", ArgTypes.STRING);

      class="kw">public HitboxGetCommand() {
         super("server.commands.hitbox.desc");
      }

      @Override
      class="kw">protected void executeSync(@Nonnull CommandContext var1) {
         String var2 = this.hitboxArg.get(var1);
         BlockBoundingBoxes var3 = BlockBoundingBoxes.getAssetMap().getAsset(var2);
         if (var3 != null) {
            BlockBoundingBoxes.RotatedVariantBoxes var4 = var3.get(Rotation.None, Rotation.None, Rotation.None);
            var1.sendMessage(Message.translation("server.commands.hitbox.boundingBox").param("box", HitboxCommand.formatBox(var4.getBoundingBox())));
            Box[] var5 = var4.getDetailBoxes();
            if (var5.length > 0) {
               Message var6 = Message.translation("server.commands.hitbox.details.header");
               Set var7 = Arrays.stream(var5).map(HitboxCommand::formatBox).collect(Collectors.toSet());
               var1.sendMessage(MessageFormat.list(var6, var7));
            }
         } else {
            var1.sendMessage(Message.translation("server.commands.hitbox.notFound").param("name", var2));
         }
      }
   }
}