SetCommand class

Пакет: com.hypixel.hytale.builtin.fluid

Файл: com/hypixel/hytale/builtin/fluid/FluidCommand.java

extends: AbstractPlayerCommand

Поля (19)

МодификаторыТипИмя
private static final Message MESSAGE_COMMANDS_ERRORS_PLAYER_NOT_LOOKING_AT_BLOCK
private static final Message MESSAGE_COMMANDS_NO_SECTION_COMPONENT
private static final Message MESSAGE_COMMANDS_SET_UNKNOWN_FLUID
private final RequiredArg<Fluid> fluid
private final RequiredArg<Integer> level
private final OptionalArg<RelativeIntPosition> targetOffset
Fluid var10
Integer var11
var11
Integer var12
Store var5
RelativeIntPosition var6
FluidSection var6
Vector3i var7
int var7
ChunkStore var8
ChunkSection var8
Vector3i var9
WorldChunk var9

Методы (5)

МодификаторыВозвратСигнатура
protected void executeprotected void execute(@Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5)
if if(var7 == null)
if if(var10 == null)
if if(var6 == null)
abstract super super("set", "server.commands.fluid.set.desc")

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.fluid;

class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.math.vector.Vector3iUtil;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.asset.type.fluid.Fluid;
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.arguments.types.AssetArgumentType;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.types.RelativeIntPosition;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.types.SingleArgumentType;
class="kw">import com.hypixel.hytale.server.core.command.system.basecommands.AbstractCommandCollection;
class="kw">import com.hypixel.hytale.server.core.command.system.basecommands.AbstractPlayerCommand;
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.WorldChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.ChunkSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.FluidSection;
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 com.hypixel.hytale.server.core.util.TargetUtil;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3i;

class="kw">public class FluidCommand class="kw">extends AbstractCommandCollection {
   @Nonnull
   class="kw">private class="kw">static class="kw">final SingleArgumentType<Fluid> FLUID_ARG = new AssetArgumentType("Fluid", Fluid.class, "server.commands.fluid.fluidArgType.desc");

   class="kw">public FluidCommand() {
      super("fluid", "server.commands.fluid.desc");
      this.setPermissionGroups("hytale:WorldEditor");
      this.addSubCommand(new FluidCommand.SetCommand());
      this.addSubCommand(new FluidCommand.GetCommand());
      this.addSubCommand(new FluidCommand.SetRadiusCommand());
   }

   class="kw">public class="kw">static class GetCommand class="kw">extends AbstractPlayerCommand {
      @Nonnull
      class="kw">private class="kw">static class="kw">final Message MESSAGE_COMMANDS_ERRORS_PLAYER_NOT_LOOKING_AT_BLOCK = Message.translation("server.commands.errors.playerNotLookingAtBlock");
      @Nonnull
      class="kw">private class="kw">static class="kw">final Message MESSAGE_COMMANDS_NO_SECTION_COMPONENT = Message.translation("server.commands.noSectionComponent");
      @Nonnull
      class="kw">private class="kw">final OptionalArg<RelativeIntPosition> targetOffset = this.withOptionalArg(
         "offset", "server.commands.fluid.get.offset.desc", ArgTypes.RELATIVE_BLOCK_POSITION
      );

      class="kw">public GetCommand() {
         super("get", "server.commands.fluid.get.desc");
      }

      @Override
      class="kw">protected void execute(
         @Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5
      ) {
         RelativeIntPosition var6 = this.targetOffset.get(var1);
         Vector3i var7 = TargetUtil.getTargetBlock(var3, 8.0, var2);
         if (var7 == null) {
            var4.sendMessage(MESSAGE_COMMANDS_ERRORS_PLAYER_NOT_LOOKING_AT_BLOCK);
         } else {
            ChunkStore var8 = var5.getChunkStore();
            Vector3i var9 = var6 == null ? var7 : var6.getBlockPosition(Vector3iUtil.toVector3d(var7), var8);
            var8.getChunkSectionReferenceAtBlockAsync(var9.x, var9.y, var9.z)
               .thenAcceptAsync(
                  var2x -> {
                     Store var3 = var2x.getStore();
                     FluidSection var4 = var3.getComponent((Ref<ChunkStore>)var2x, FluidSection.getComponentType());
                     if (var4 == null) {
                        var4.sendMessage(MESSAGE_COMMANDS_NO_SECTION_COMPONENT);
                     } else {
                        int var5 = ChunkUtil.indexBlock(var9.x, var9.y, var9.z);
                        Fluid var6 = var4.getFluid(var5);
                        byte var7 = var4.getFluidLevel(var5);
                        var4.sendMessage(
                           Message.translation("server.commands.get.success")
                              .param("x", var9.x)
                              .param("y", var9.y)
                              .param("z", var9.z)
                              .param("id", var6.getId())
                              .param("level", var7)
                        );
                     }
                  },
                  var5
               );
         }
      }
   }

   class="kw">public class="kw">static class SetCommand class="kw">extends AbstractPlayerCommand {
      @Nonnull
      class="kw">private class="kw">static class="kw">final Message MESSAGE_COMMANDS_ERRORS_PLAYER_NOT_LOOKING_AT_BLOCK = Message.translation("server.commands.errors.playerNotLookingAtBlock");
      @Nonnull
      class="kw">private class="kw">static class="kw">final Message MESSAGE_COMMANDS_SET_UNKNOWN_FLUID = Message.translation("server.commands.set.unknownFluid");
      @Nonnull
      class="kw">private class="kw">static class="kw">final Message MESSAGE_COMMANDS_NO_SECTION_COMPONENT = Message.translation("server.commands.noSectionComponent");
      @Nonnull
      class="kw">private class="kw">final RequiredArg<Fluid> fluid = this.withRequiredArg("fluid", "server.commands.fluid.set.fluid.desc", FluidCommand.FLUID_ARG);
      @Nonnull
      class="kw">private class="kw">final RequiredArg<Integer> level = this.withRequiredArg("level", "server.commands.fluid.set.level.desc", ArgTypes.INTEGER);
      @Nonnull
      class="kw">private class="kw">final OptionalArg<RelativeIntPosition> targetOffset = this.withOptionalArg(
         "offset", "server.commands.fluid.set.offset.desc", ArgTypes.RELATIVE_BLOCK_POSITION
      );

      class="kw">public SetCommand() {
         super("set", "server.commands.fluid.set.desc");
      }

      @Override
      class="kw">protected void execute(
         @Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5
      ) {
         RelativeIntPosition var6 = this.targetOffset.get(var1);
         Vector3i var7 = TargetUtil.getTargetBlock(var3, 8.0, var2);
         if (var7 == null) {
            var4.sendMessage(MESSAGE_COMMANDS_ERRORS_PLAYER_NOT_LOOKING_AT_BLOCK);
         } else {
            ChunkStore var8 = var5.getChunkStore();
            Vector3i var9 = var6 == null ? var7 : var6.getBlockPosition(Vector3iUtil.toVector3d(var7), var8);
            Fluid var10 = this.fluid.get(var1);
            if (var10 == null) {
               var4.sendMessage(MESSAGE_COMMANDS_SET_UNKNOWN_FLUID);
            } else {
               Integer var11 = this.level.get(var1);
               if (var11 > var10.getMaxFluidLevel()) {
                  var11 = var10.getMaxFluidLevel();
                  var4.sendMessage(Message.translation("server.commands.set.maxFluidLevelClamped").param("level", var10.getMaxFluidLevel()));
               }

               Integer var12 = var11;
               var8.getChunkSectionReferenceAtBlockAsync(var9.x, var9.y, var9.z)
                  .thenAcceptAsync(
                     var4x -> {
                        Store var5 = var4x.getStore();
                        FluidSection var6 = var5.getComponent((Ref<ChunkStore>)var4x, FluidSection.getComponentType());
                        if (var6 == null) {
                           var4.sendMessage(MESSAGE_COMMANDS_NO_SECTION_COMPONENT);
                        } else {
                           int var7 = ChunkUtil.indexBlock(var9.x, var9.y, var9.z);
                           var6.setFluid(var7, var10, var12.byteValue());
                           var4.sendMessage(
                              Message.translation("server.commands.set.success")
                                 .param("x", var9.x)
                                 .param("y", var9.y)
                                 .param("z", var9.z)
                                 .param("id", var10.getId())
                                 .param("level", var12)
                           );
                           ChunkSection var8 = var5.getComponent((Ref<ChunkStore>)var4x, ChunkSection.getComponentType());
                           var8.markNeedsSaving();
                           WorldChunk var9 = var5.getComponent(var8.getChunkColumnReference(), WorldChunk.getComponentType());
                           var9.setTicking(var9.x, var9.y, var9.z, true);
                        }
                     },
                     var5
                  );
            }
         }
      }
   }

   class="kw">public class="kw">static class SetRadiusCommand class="kw">extends AbstractPlayerCommand {
      @Nonnull
      class="kw">private class="kw">static class="kw">final Message MESSAGE_COMMANDS_SET_UNKNOWN_FLUID = Message.translation("server.commands.set.unknownFluid");
      @Nonnull
      class="kw">private class="kw">static class="kw">final Message MESSAGE_COMMANDS_ERRORS_PLAYER_NOT_LOOKING_AT_BLOCK = Message.translation("server.commands.errors.playerNotLookingAtBlock");
      @Nonnull
      class="kw">private class="kw">final RequiredArg<Integer> radius = this.withRequiredArg("radius", "server.commands.fluid.setradius.radius.desc", ArgTypes.INTEGER);
      @Nonnull
      class="kw">private class="kw">final RequiredArg<Fluid> fluid = this.withRequiredArg("fluid", "server.commands.fluid.setradius.fluid.desc", FluidCommand.FLUID_ARG);
      @Nonnull
      class="kw">private class="kw">final RequiredArg<Integer> level = this.withRequiredArg("level", "server.commands.fluid.setradius.level.desc", ArgTypes.INTEGER);
      @Nonnull
      class="kw">private class="kw">final OptionalArg<RelativeIntPosition> targetOffset = this.withOptionalArg(
         "offset", "server.commands.fluid.setradius.offset.desc", ArgTypes.RELATIVE_BLOCK_POSITION
      );

      class="kw">public SetRadiusCommand() {
         super("setradius", "server.commands.fluid.setradius.desc");
      }

      @Override
      class="kw">protected void execute(
         @Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5
      ) {
         RelativeIntPosition var6 = this.targetOffset.get(var1);
         Vector3i var7 = TargetUtil.getTargetBlock(var3, 8.0, var2);
         if (var7 == null) {
            var4.sendMessage(MESSAGE_COMMANDS_ERRORS_PLAYER_NOT_LOOKING_AT_BLOCK);
         } else {
            ChunkStore var8 = var5.getChunkStore();
            Vector3i var9 = var6 == null ? var7 : var6.getBlockPosition(Vector3iUtil.toVector3d(var7), var8);
            Fluid var10 = this.fluid.get(var1);
            if (var10 == null) {
               var4.sendMessage(MESSAGE_COMMANDS_SET_UNKNOWN_FLUID);
            } else {
               Integer var11 = this.level.get(var1);
               if (var11 > var10.getMaxFluidLevel()) {
                  var11 = var10.getMaxFluidLevel();
                  var4.sendMessage(Message.translation("server.commands.set.maxFluidLevelClamped").param("level", var10.getMaxFluidLevel()));
               }

               Integer var12 = this.radius.get(var1);
               int var13 = var9.x - var12;
               int var14 = var9.x + var12;
               int var15 = var9.y - var12;
               int var16 = var9.y + var12;
               int var17 = var9.z - var12;
               int var18 = var9.z + var12;
               int var19 = ChunkUtil.chunkCoordinate(var13);
               int var20 = ChunkUtil.chunkCoordinate(var14);
               int var21 = ChunkUtil.chunkCoordinate(var15);
               int var22 = ChunkUtil.chunkCoordinate(var16);
               int var23 = ChunkUtil.chunkCoordinate(var17);
               int var24 = ChunkUtil.chunkCoordinate(var18);
               byte var25 = var11.byteValue();

               for (int var26 = var19; var26 <= var20; var26++) {
                  for (int var27 = var23; var27 <= var24; var27++) {
                     int var28 = ChunkUtil.minBlock(var26);
                     int var29 = ChunkUtil.minBlock(var27);
                     int var30 = MathUtil.clamp(var13 - var28, 0, 32);
                     int var31 = MathUtil.clamp(var14 - var28, 0, 32);
                     int var32 = MathUtil.clamp(var17 - var29, 0, 32);
                     int var33 = MathUtil.clamp(var18 - var29, 0, 32);

                     for (int var34 = var21; var34 <= var22; var34++) {
                        var8.getChunkSectionReferenceAsync(var26, var34, var27).thenAcceptAsync(var9x -> {
                           Store var10 = var9x.getStore();
                           FluidSection var11 = var10.getComponent((Ref<ChunkStore>)var9x, FluidSection.getComponentType());
                           if (var11 != null) {
                              ChunkSection var12 = var10.getComponent((Ref<ChunkStore>)var9x, ChunkSection.getComponentType());
                              if (var12 != null) {
                                 var12.markNeedsSaving();
                                 WorldChunk var13 = var10.getComponent(var12.getChunkColumnReference(), WorldChunk.getComponentType());
                                 if (var13 != null) {
                                    int var14 = MathUtil.clamp(var15 - ChunkUtil.minBlock(var11.getY()), 0, 32);
                                    int var15 = MathUtil.clamp(var16 - ChunkUtil.minBlock(var11.getY()), 0, 32);

                                    for (int var16 = var14; var16 < var15; var16++) {
                                       for (int var17 = var32; var17 < var33; var17++) {
                                          for (int var18 = var30; var18 < var31; var18++) {
                                             int var19 = ChunkUtil.indexBlock(var18, var16, var17);
                                             var11.setFluid(var19, var10, var25);
                                             var13.setTicking(var9.x, var9.y, var9.z, true);
                                          }
                                       }
                                    }
                                 }
                              }
                           }
                        }, var5);
                     }
                  }
               }
            }
         }
      }
   }
}