ErodeOperation class

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

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

extends: SequenceBrushOperation

Поля (19)

МодификаторыТипИмя
final BuilderCodec<ErodeOperation> CODEC
public final int erosionFaces
public final int erosionIterations
public final int fillFaces
public final int fillIterations
int var11
int var12
int var13
var13
int var14
var14
IntIterator var15
int var16
int var17
int var5
int var5
int var6
int var6
Int2IntMap var7

Методы (15)

МодификаторыВозвратСигнатура
ErodePreset ErodePreset(int nullxx, int nullxxx, int nullxxxx, int nullxxxxx)
abstract FloatClean FloatClean(6, 1, 6, 1)
for for(Vector3i var11 : FACES_TO_CHECK)
for for(Vector3i var10 : FACES_TO_CHECK)
if if(this.iterationIndex < this.erodePresetArg.erosionIterations)
if if(var5 == 0)
if if(var12 != 0)
if if(var6 >= this.erodePresetArg.fillFaces)
if if(var17 > var14)
if if(var5 != 0)
if if(var11 == 0)
if if(var6 >= this.erodePresetArg.erosionFaces)
private void iterateErosionvoid iterateErosion(@Nonnull BrushConfigEditStore var1, int var2, int var3, int var4)
private void iterateFillvoid iterateFill(@Nonnull BrushConfigEditStore var1, int var2, int var3, int var4)
abstract super super("erode", "Erodes blocks following a preset", 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.EnumCodec;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.ints.Int2IntMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.ints.IntIterator;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3i;

class="kw">public class ErodeOperation class="kw">extends SequenceBrushOperation {
   class="kw">public class="kw">static class="kw">final BuilderCodec<ErodeOperation> CODEC = BuilderCodec.builder(ErodeOperation.class, ErodeOperation::new)
      .append(
         new KeyedCodec<>("ErodePreset", new EnumCodec<>(ErodeOperation.ErodePreset.class)),
         (var0, var1) -> var0.erodePresetArg = var1,
         var0 -> var0.erodePresetArg
      )
      .documentation("An erosion preset to use with the operation")
      .add()
      .documentation("Erodes blocks following a preset")
      .build();
   class="kw">private ErodeOperation.ErodePreset erodePresetArg = ErodeOperation.ErodePreset.Default;
   class="kw">private class="kw">static class="kw">final Vector3i[] FACES_TO_CHECK = new Vector3i[]{
      new Vector3i(0, -1, 0), new Vector3i(0, 1, 0), new Vector3i(0, 0, 1), new Vector3i(0, 0, -1), new Vector3i(1, 0, 0), new Vector3i(-1, 0, 0)
   };
   int iterationIndex;

   class="kw">public ErodeOperation() {
      super("erode", "Erodes blocks following a preset", true);
   }

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

   @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
   ) {
      if (this.iterationIndex < this.erodePresetArg.erosionIterations) {
         this.iterateErosion(var4, var5, var6, var7);
      } else {
         this.iterateFill(var4, var5, var6, var7);
      }

      class="kw">return true;
   }

   @Override
   class="kw">public void beginIterationIndex(int var1) {
      this.iterationIndex = var1;
   }

   @Override
   class="kw">public int getNumModifyBlockIterations() {
      class="kw">return this.erodePresetArg.erosionIterations + this.erodePresetArg.fillIterations;
   }

   class="kw">private void iterateFill(@Nonnull BrushConfigEditStore var1, int var2, int var3, int var4) {
      int var5 = var1.getBlock(var2, var3, var4);
      if (var5 == 0) {
         int var6 = 0;
         Int2IntMap var7 = new Int2IntOpenHashMap();

         for (Vector3i var11 : FACES_TO_CHECK) {
            int var12 = var1.getBlock(var2 + var11.x, var3 + var11.y, var4 + var11.z);
            if (var12 != 0) {
               var6++;
               var7.put(var12, var7.getOrDefault(var12, 0) + 1);
            }
         }

         if (var6 >= this.erodePresetArg.fillFaces) {
            int var13 = var5;
            int var14 = 0;
            IntIterator var15 = var7.keySet().iterator();

            while (var15.hasNext()) {
               int var16 = (Integer)var15.next();
               int var17 = var7.get(var16);
               if (var17 > var14) {
                  var13 = var16;
                  var14 = var17;
               }
            }

            var1.setMaterialWithFiller(var2, var3, var4, Material.block(var13));
         }
      }
   }

   class="kw">private void iterateErosion(@Nonnull BrushConfigEditStore var1, int var2, int var3, int var4) {
      int var5 = var1.getBlock(var2, var3, var4);
      if (var5 != 0) {
         int var6 = 0;

         for (Vector3i var10 : FACES_TO_CHECK) {
            int var11 = var1.getBlock(var2 + var10.x, var3 + var10.y, var4 + var10.z);
            if (var11 == 0) {
               var6++;
            }
         }

         if (var6 >= this.erodePresetArg.erosionFaces) {
            var1.setMaterialWithFiller(var2, var3, var4, Material.EMPTY);
         }
      }
   }

   class="kw">public enum ErodePreset {
      Default(0, 1, 0, 1),
      Melt(2, 1, 5, 1),
      Fill(5, 1, 2, 1),
      Smooth(3, 1, 3, 1),
      Lift(6, 0, 1, 1),
      FloatClean(6, 1, 6, 1);

      class="kw">public class="kw">final int erosionFaces;
      class="kw">public class="kw">final int erosionIterations;
      class="kw">public class="kw">final int fillFaces;
      class="kw">public class="kw">final int fillIterations;

      ErodePreset(int nullxx, int nullxxx, int nullxxxx, int nullxxxxx) {
         this.erosionFaces = nullxx;
         this.erosionIterations = nullxxx;
         this.fillFaces = nullxxxx;
         this.fillIterations = nullxxxxx;
      }
   }
}