BlockMask class

Пакет: com.hypixel.hytale.server.core.prefab.selection.mask

Файл: com/hypixel/hytale/server/core/prefab/selection/mask/BlockMask.java

Поля (28)

МодификаторыТипИмя
final BlockMask EMPTY
break
break
var0
String var1
StringBuilder var1
BlockFilter[] var1
int var1
Int2ObjectLinkedOpenHashMap var1
BlockFilter[] var12
BlockFilter[] var12
int var13
int var13
ObjectBidirectionalIterator var14
Entry var15
int var16
BlockFilter.FilterType var17
boolean var18
String[] var19
StringBuilder var2
BlockFilter[] var3
var3
int var6
List var7
BlockFilter var9
var9
boolean var9
var9

Методы (39)

МодификаторыВозвратСигнатура
static BlockMask combineBlockMask combine(@Nullable BlockMask... var0)
for for(BlockFilter var7 : var3)
for for(int var8 = 0; var8 < var3.length; var8++)
for for(BlockFilter var4 : this.filters)
for for(BlockFilter var13 : this.filters)
for for(int var2 = 0; var2 < this.filters.length; var2++)
for for(Object var6 : var1)
for for(int var2 = 0; var2 < var0.length; var2++)
for for(BlockMask var5 : var0)
for for(BlockMask var7 : var0)
for for(BlockFilter var5 : var0)
public BlockFilter[] getFiltersBlockFilter[] getFilters()
static BlockMask groupFiltersBlockMask groupFilters(@Nonnull BlockFilter[] var0)
abstract return groupFiltersreturn groupFilters(var1)
abstract return groupFiltersreturn groupFilters(var12)
public boolean hasInvalidBlocksboolean hasInvalidBlocks()
if if(this == EMPTY)
if if(var3 == this.filters)
if if(this.filters.length == 0)
if if(this.filters.length == 0)
if if(this.inverted)
if if(this.filters.length > 1)
if if(var2 != this.filters.length - 1)
if if(this.filters.length > 1)
if if(this.inverted)
if if(var0.length == 0)
if if(var0.length == 1)
if if(var0 != null && var0.length != 0)
if if(var5 != null && var5 != EMPTY)
if if(var1 == 0)
if if(var7 != null && var7 != EMPTY)
if if(var0.length == 0)
if if(var0.length == 1)
public boolean isExcludedboolean isExcluded(@Nonnull ChunkAccessor var1, int var2, int var3, int var4, @Nullable Vector3i var5, @Nullable Vector3i var6, int var7)
public boolean isExcludedboolean isExcluded(@Nonnull ChunkAccessor var1, int var2, int var3, int var4, @Nullable Vector3i var5, @Nullable Vector3i var6, int var7, int var8)
public boolean isInvertedboolean isInverted()
static BlockMask parseBlockMask parse(@Nonnull String var0)
static BlockMask parseBlockMask parse(@Nonnull String[] var0)
public void setInvertedvoid setInverted(boolean var1)

Исходный код

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

class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.function.FunctionCodec;
class="kw">import com.hypixel.hytale.server.core.universe.world.accessor.ChunkAccessor;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectLinkedOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectMap.Entry;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectBidirectionalIterator;
class="kw">import java.util.ArrayList;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3i;

class="kw">public class BlockMask {
   class="kw">public class="kw">static class="kw">final BlockMask EMPTY = new BlockMask(BlockFilter.EMPTY_ARRAY);
   class="kw">public class="kw">static class="kw">final Codec<BlockMask> CODEC = new FunctionCodec<>(Codec.STRING, BlockMask::parse, BlockMask::toString);
   class="kw">public class="kw">static class="kw">final String MASK_SEPARATOR = ",";
   class="kw">public class="kw">static class="kw">final String ALT_MASK_SEPARATOR = ";";
   class="kw">public class="kw">static class="kw">final String EMPTY_MASK_CHARACTER = "-";
   class="kw">public class="kw">static class="kw">final String OR_MASK_SEPARATOR = "|";
   class="kw">private class="kw">final BlockFilter[] filters;
   class="kw">private boolean inverted;

   class="kw">public BlockMask(BlockFilter[] var1) {
      this.filters = var1;
   }

   @Nonnull
   class="kw">public BlockMask withOptions(@Nonnull BlockFilter.FilterType var1, boolean var2) {
      if (this == EMPTY) {
         class="kw">return this;
      }

      BlockFilter[] var3 = this.filters;

      for (BlockFilter var7 : var3) {
         if (var7.getBlockFilterType() != var1 || var7.isInverted() != var2) {
            var3 = new BlockFilter[var3.length];
            break;
         }
      }

      if (var3 == this.filters) {
         class="kw">return this;
      }

      for (int var8 = 0; var8 < var3.length; var8++) {
         BlockFilter var9 = this.filters[var8];
         if (var9.getBlockFilterType() != var1 || var9.isInverted() != var2) {
            var9 = new BlockFilter(var1, var9.getBlocks(), var2);
         }

         var3[var8] = var9;
      }

      class="kw">return new BlockMask(var3);
   }

   class="kw">public BlockFilter[] getFilters() {
      class="kw">return this.filters;
   }

   class="kw">public void setInverted(boolean var1) {
      this.inverted = var1;
   }

   class="kw">public boolean isInverted() {
      class="kw">return this.inverted;
   }

   class="kw">public boolean hasInvalidBlocks() {
      for (BlockFilter var4 : this.filters) {
         if (var4.hasInvalidBlocks()) {
            class="kw">return true;
         }
      }

      class="kw">return false;
   }

   class="kw">public boolean isExcluded(@Nonnull ChunkAccessor var1, int var2, int var3, int var4, @Nullable Vector3i var5, @Nullable Vector3i var6, int var7) {
      class="kw">return this.isExcluded(var1, var2, var3, var4, var5, var6, var7, -1);
   }

   class="kw">public boolean isExcluded(@Nonnull ChunkAccessor var1, int var2, int var3, int var4, @Nullable Vector3i var5, @Nullable Vector3i var6, int var7, int var8) {
      boolean var9 = false;

      for (BlockFilter var13 : this.filters) {
         if (var13.isExcluded(var1, var2, var3, var4, var5, var6, var7, var8)) {
            var9 = true;
            break;
         }
      }

      class="kw">return this.inverted != var9;
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      if (this.filters.length == 0) {
         class="kw">return "-";
      }

      String var1 = joinElements(",", this.filters);
      class="kw">return this.inverted ? "!" + var1 : var1;
   }

   @Nonnull
   class="kw">public String informativeToString() {
      if (this.filters.length == 0) {
         class="kw">return "-";
      }

      StringBuilder var1 = new StringBuilder();
      if (this.inverted) {
         var1.append("NOT(");
      }

      if (this.filters.length > 1) {
         var1.append("(");
      }

      for (int var2 = 0; var2 < this.filters.length; var2++) {
         var1.append(this.filters[var2].informativeToString());
         if (var2 != this.filters.length - 1) {
            var1.append(" AND ");
         }
      }

      if (this.filters.length > 1) {
         var1.append(")");
      }

      if (this.inverted) {
         var1.append(")");
      }

      class="kw">return var1.toString();
   }

   @Nonnull
   class="kw">protected class="kw">static String joinElements(String var0, @Nonnull Object[] var1) {
      StringBuilder var2 = new StringBuilder();

      for (Object var6 : var1) {
         if (!var2.isEmpty()) {
            var2.append(var0);
         }

         var2.append(var6);
      }

      class="kw">return var2.toString();
   }

   class="kw">public class="kw">static BlockMask parse(@Nonnull String var0) {
      if (!var0.isEmpty() && !var0.equals("-")) {
         var0 = var0.replace(";", ",");
         class="kw">return parse(var0.split(",", 0));
      } else {
         class="kw">return EMPTY;
      }
   }

   class="kw">public class="kw">static BlockMask parse(@Nonnull String[] var0) {
      if (var0.length == 0) {
         class="kw">return EMPTY;
      }

      if (var0.length == 1) {
         class="kw">return new BlockMask(new BlockFilter[]{BlockFilter.parse(var0[0])});
      }

      BlockFilter[] var1 = new BlockFilter[var0.length];

      for (int var2 = 0; var2 < var0.length; var2++) {
         var1[var2] = BlockFilter.parse(var0[var2]);
      }

      class="kw">return groupFilters(var1);
   }

   class="kw">public class="kw">static BlockMask combine(@Nullable BlockMask... var0) {
      if (var0 != null && var0.length != 0) {
         int var1 = 0;

         for (BlockMask var5 : var0) {
            if (var5 != null && var5 != EMPTY) {
               var1 += var5.getFilters().length;
            }
         }

         if (var1 == 0) {
            class="kw">return EMPTY;
         }

         BlockFilter[] var12 = new BlockFilter[var1];
         int var13 = 0;

         for (BlockMask var7 : var0) {
            if (var7 != null && var7 != EMPTY) {
               for (BlockFilter var11 : var7.getFilters()) {
                  var12[var13++] = var11;
               }
            }
         }

         class="kw">return groupFilters(var12);
      } else {
         class="kw">return EMPTY;
      }
   }

   class="kw">private class="kw">static BlockMask groupFilters(@Nonnull BlockFilter[] var0) {
      if (var0.length == 0) {
         class="kw">return EMPTY;
      }

      if (var0.length == 1) {
         class="kw">return new BlockMask(var0);
      }

      Int2ObjectLinkedOpenHashMap var1 = new Int2ObjectLinkedOpenHashMap();

      for (BlockFilter var5 : var0) {
         int var6 = var5.getBlockFilterType().ordinal() << 1 | (var5.isInverted() ? 1 : 0);
         List var7 = (List<String>)var1.computeIfAbsent(var6, var0x -> new ArrayList());

         for (String var11 : var5.getBlocks()) {
            var7.add(var11);
         }
      }

      if (var1.size() == var0.length) {
         class="kw">return new BlockMask(var0);
      }

      BlockFilter[] var12 = new BlockFilter[var1.size()];
      int var13 = 0;
      ObjectBidirectionalIterator var14 = var1.int2ObjectEntrySet().iterator();

      while (var14.hasNext()) {
         Entry var15 = (Entry<List<String>>)var14.next();
         int var16 = var15.getIntKey();
         BlockFilter.FilterType var17 = BlockFilter.FilterType.values()[var16 >> 1];
         boolean var18 = (var16 & 1) != 0;
         String[] var19 = ((List)var15.getValue()).toArray(new String[0]);
         var12[var13++] = new BlockFilter(var17, var19, var18);
      }

      class="kw">return new BlockMask(var12);
   }
}