HeightmapLayerOperation class

Пакет: com.hypixel.hytale.builtin.buildertools.scriptedbrushes.operations.sequential

Файл: com/hypixel/hytale/builtin/buildertools/scriptedbrushes/operations/sequential/HeightmapLayerOperation.java

extends: SequenceBrushOperation

Поля (9)

МодификаторыТипИмя
final BuilderCodec<HeightmapLayerOperation> CODEC
int var10
Map var11
int var12
int var15
BuilderTool var3
ItemStack var4
BuilderTool.ArgData var5
WorldChunk var9

Методы (7)

МодификаторыВозвратСигнатура
for for(LayerEntryCodec var14 : this.layerArgs)
if if(var10 < var12)
if if(var15 >= 0)
if if(var3 == null)
if if(var4 == null)
private int resolveBlockIdint resolveBlockId(LayerEntryCodec var1, @Nullable Map<String, Object> var2, BrushConfig var3)
abstract super super("Heightmap Layer", "Replace blocks according to the specified layers in terms of their depth from the tallest block in its column", true)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.buildertools.scriptedbrushes.BrushConfig;
class="kw">import com.hypixel.hytale.builtin.buildertools.scriptedbrushes.BrushConfigCommandExecutor;
class="kw">import com.hypixel.hytale.builtin.buildertools.scriptedbrushes.BrushConfigEditStore;
class="kw">import com.hypixel.hytale.builtin.buildertools.scriptedbrushes.operations.system.SequenceBrushOperation;
class="kw">import com.hypixel.hytale.builtin.buildertools.utils.Material;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.codecs.array.ArrayCodec;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.buildertool.config.BuilderTool;
class="kw">import com.hypixel.hytale.server.core.codec.LayerEntryCodec;
class="kw">import com.hypixel.hytale.server.core.inventory.InventoryComponent;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.mask.BlockPattern;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.util.ArrayList;
class="kw">import java.util.Arrays;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class HeightmapLayerOperation class="kw">extends SequenceBrushOperation {
   class="kw">public class="kw">static class="kw">final BuilderCodec<HeightmapLayerOperation> CODEC = BuilderCodec.builder(HeightmapLayerOperation.class, HeightmapLayerOperation::new)
      .append(
         new KeyedCodec<>("Layers", new ArrayCodec<>(LayerEntryCodec.CODEC, LayerEntryCodec[]::new)),
         (var0, var1) -> var0.layerArgs = var1 != null ? new ArrayList<>(Arrays.asList(var1)) : List.of(),
         var0 -> var0.layerArgs != null ? var0.layerArgs.toArray(new LayerEntryCodec[0]) : new LayerEntryCodec[0]
      )
      .documentation("The layers to set")
      .add()
      .documentation("Replace blocks according to the specified layers in terms of their depth from the tallest block in its column")
      .build();
   class="kw">private List<LayerEntryCodec> layerArgs = new ArrayList<>();

   class="kw">public HeightmapLayerOperation() {
      super("Heightmap Layer", "Replace blocks according to the specified layers in terms of their depth from the tallest block in its column", true);
   }

   @Override
   class="kw">public boolean modifyBlocks(
      Ref<EntityStore> var1,
      BrushConfig var2,
      BrushConfigCommandExecutor var3,
      @Nonnull BrushConfigEditStore var4,
      int var5,
      int var6,
      int var7,
      ComponentAccessor<EntityStore> var8
   ) {
      WorldChunk var9 = var4.getAccessor().getChunk(ChunkUtil.indexChunkFromBlock(var5, var7));
      int var10 = var9.getHeight(var5, var7) - var6;
      if (var10 >= 0 && var4.getBlock(var5, var6, var7) > 0) {
         Map var11 = this.getToolArgs(var1, var8);
         int var12 = 0;

         for (LayerEntryCodec var14 : this.layerArgs) {
            var12 += var14.getDepth();
            if (var10 < var12) {
               if (var14.isSkip()) {
                  class="kw">return true;
               }

               int var15 = this.resolveBlockId(var14, var11, var2);
               if (var15 >= 0) {
                  var4.setMaterialWithFiller(var5, var6, var7, Material.block(var15));
               }

               class="kw">return true;
            }
         }

         class="kw">return true;
      } else {
         class="kw">return true;
      }
   }

   class="kw">private int resolveBlockId(LayerEntryCodec var1, @Nullable Map<String, Object> var2, BrushConfig var3) {
      if (var1.isUseToolArg()) {
         if (var2 != null && var2.containsKey(var1.getMaterial())) {
            if (var2.get(var1.getMaterial()) class="kw">instanceof BlockPattern var5) {
               class="kw">return var5.nextBlock(var3.getRandom());
            } else {
               var3.setErrorFlag("HeightmapLayer: Tool arg '" + var1.getMaterial() + "' is not a Block type");
               class="kw">return -1;
            }
         } else {
            var3.setErrorFlag("HeightmapLayer: Tool arg '" + var1.getMaterial() + "' not found");
            class="kw">return -1;
         }
      } else {
         class="kw">return BlockType.getAssetMap().getIndex(var1.getMaterial());
      }
   }

   @Nullable
   class="kw">private Map<String, Object> getToolArgs(@Nonnull Ref<EntityStore> var1, @Nonnull ComponentAccessor<EntityStore> var2) {
      BuilderTool var3 = BuilderTool.getActiveBuilderTool(var1, var2);
      if (var3 == null) {
         class="kw">return null;
      }

      ItemStack var4 = InventoryComponent.getItemInHand(var2, var1);
      if (var4 == null) {
         class="kw">return null;
      }

      BuilderTool.ArgData var5 = var3.getItemArgData(var4);
      class="kw">return var5.tool();
   }

   @Override
   class="kw">public void modifyBrushConfig(
      @Nonnull Ref<EntityStore> var1, @Nonnull BrushConfig var2, @Nonnull BrushConfigCommandExecutor var3, @Nonnull ComponentAccessor<EntityStore> var4
   ) {
   }
}