FluidCommand class

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

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

extends: AbstractCommandCollection

Поля (71)

МодификаторыТипИмя
private static final Message MESSAGE_COMMANDS_ERRORS_PLAYER_NOT_LOOKING_AT_BLOCK
private static final Message MESSAGE_COMMANDS_ERRORS_PLAYER_NOT_LOOKING_AT_BLOCK
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_NO_SECTION_COMPONENT
private static final Message MESSAGE_COMMANDS_SET_UNKNOWN_FLUID
private static final Message MESSAGE_COMMANDS_SET_UNKNOWN_FLUID
private final RequiredArg<Fluid> fluid
private final RequiredArg<Fluid> fluid
private final RequiredArg<Integer> level
private final RequiredArg<Integer> level
private final RequiredArg<Integer> radius
private final OptionalArg<RelativeIntPosition> targetOffset
private final OptionalArg<RelativeIntPosition> targetOffset
private final OptionalArg<RelativeIntPosition> targetOffset
Fluid var10
Fluid var10
Store var10
Integer var11
var11
Integer var11
var11
FluidSection var11
Integer var12
Integer var12
ChunkSection var12
int var13
WorldChunk var13
int var14
int var14
int var15
int var15
int var16
int var17
int var18
int var19
int var19
int var20
int var21
int var22
int var23
int var24
byte var25
int var28
int var29
Store var3
int var30
int var31
int var32
int var33
FluidSection var4
int var5
Store var5
RelativeIntPosition var6
Fluid var6
RelativeIntPosition var6
FluidSection var6
RelativeIntPosition var6
Vector3i var7
byte var7
Vector3i var7
int var7
Vector3i var7
ChunkStore var8
ChunkStore var8
ChunkSection var8
ChunkStore var8
Vector3i var9
Vector3i var9
WorldChunk var9
Vector3i var9

Методы (26)

МодификаторыВозвратСигнатура
public GetCommandpublic GetCommand()
public SetCommandpublic SetCommand()
public SetRadiusCommandpublic SetRadiusCommand()
protected void executeprotected void execute(@Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5)
protected void executeprotected void execute(@Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5)
protected void executeprotected void execute(@Nonnull CommandContext var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3, @Nonnull PlayerRef var4, @Nonnull World var5)
for for(int var26 = var19; var26 <= var20; var26++)
for for(int var27 = var23; var27 <= var24; var27++)
for for(int var34 = var21; var34 <= var22; var34++)
for for(int var16 = var14; var16 < var15; var16++)
for for(int var17 = var32; var17 < var33; var17++)
for for(int var18 = var30; var18 < var31; var18++)
if if(var7 == null)
if if(var4 == null)
if if(var7 == null)
if if(var10 == null)
if if(var6 == null)
if if(var7 == null)
if if(var10 == null)
if if(var11 != null)
if if(var12 != null)
if if(var13 != null)
abstract super super("fluid", "server.commands.fluid.desc")
abstract super super("get", "server.commands.fluid.get.desc")
abstract super super("set", "server.commands.fluid.set.desc")
abstract super super("setradius", "server.commands.fluid.setradius.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);
                     }
                  }
               }
            }
         }
      }
   }
}