ConnectedBlockPatternRule class

Пакет: com.hypixel.hytale.server.core.universe.world.connectedblocks

Файл: com/hypixel/hytale/server/core/universe/world/connectedblocks/ConnectedBlockPatternRule.java

Поля (4)

МодификаторыТипИмя
final BuilderCodec<ConnectedBlockPatternRule> CODEC
INCLUDE, EXCLUDE
public final Vector3ic relativePosition
String[] var1

Методы (13)

МодификаторыВозвратСигнатура
AdjacentSide AdjacentSide(Vector3ic nullxx)
IncludeOrExclude IncludeOrExclude()
abstract West West(Vector3iUtil.WEST)
for for(int var2 = 0; var2 < var1.length; var2++)
for for(int var2 = 0; var2 < var0.blockTypeListAssets.length; var2++)
public ConnectedBlockFaceTags getFaceTagsConnectedBlockFaceTags getFaceTags()
public ConnectedBlockPatternRule.AdjacentSide[] getPlacementNormalsConnectedBlockPatternRule.AdjacentSide[] getPlacementNormals()
public Vector3ic getRelativePositionVector3ic getRelativePosition()
if if(var1 != null)
if if(var1 != null)
if if(var0.blockTypeListAssets[var2] == null)
if if(var0.blockTypeListAssets == null)
public boolean isIncludeboolean isInclude()

Исходный код

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

class="kw">import com.hypixel.hytale.codec.Codec;
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.codec.codecs.array.ArrayCodec;
class="kw">import com.hypixel.hytale.codec.codecs.set.SetCodec;
class="kw">import com.hypixel.hytale.math.vector.Vector3iUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.buildertool.config.BlockTypeListAsset;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.mask.BlockPattern;
class="kw">import com.hypixel.hytale.server.core.universe.world.connectedblocks.config.ConnectedBlockFaceTags;
class="kw">import java.util.Collections;
class="kw">import java.util.HashSet;
class="kw">import java.util.Set;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3i;
class="kw">import org.joml.Vector3ic;

class="kw">public class ConnectedBlockPatternRule {
   class="kw">public class="kw">static class="kw">final BuilderCodec<ConnectedBlockPatternRule> CODEC = BuilderCodec.builder(ConnectedBlockPatternRule.class, ConnectedBlockPatternRule::new)
      .append(
         new KeyedCodec<>("Position", Vector3iUtil.CODEC, false), (var0, var1) -> var0.relativePosition = var1, var0 -> new Vector3i(var0.relativePosition)
      )
      .add()
      .append(
         new KeyedCodec<>("IncludeOrExclude", new EnumCodec<>(ConnectedBlockPatternRule.IncludeOrExclude.class), true),
         (var0, var1) -> var0.includeOrExclude = var1,
         var0 -> var0.includeOrExclude
      )
      .add()
      .append(
         new KeyedCodec<>(
            "PlacementNormals",
            new ArrayCodec<>(new EnumCodec<>(ConnectedBlockPatternRule.AdjacentSide.class), ConnectedBlockPatternRule.AdjacentSide[]::new),
            false
         ),
         (var0, var1) -> var0.placementNormals = var1,
         var0 -> var0.placementNormals
      )
      .add()
      .documentation("Queries the face the block was placed against")
      .append(new KeyedCodec<>("FaceTags", ConnectedBlockFaceTags.CODEC, false), (var0, var1) -> var0.faceTags = var1, var0 -> var0.faceTags)
      .add()
      .append(
         new KeyedCodec<>("Shapes", new SetCodec<>(BlockPattern.BlockEntry.CODEC, HashSet::new, true)),
         (var0, var1) -> var0.shapeBlockTypeKeys = var1,
         var0 -> var0.shapeBlockTypeKeys
      )
      .add()
      .append(new KeyedCodec<>("BlockTypes", new ArrayCodec<>(Codec.STRING, String[]::new)), (var0, var1) -> {
         if (var1 != null) {
            Collections.addAll(var0.blockTypes, var1);
         }
      }, var0 -> var0.blockTypes != null ? var0.blockTypes.toArray(String[]::new) : null)
      .add()
      .append(new KeyedCodec<>("BlockTypeLists", Codec.STRING_ARRAY), (var0, var1) -> {
         if (var1 != null) {
            var0.blockTypeListAssets = new BlockTypeListAsset[var1.length];

            for (int var2 = 0; var2 < var1.length; var2++) {
               var0.blockTypeListAssets[var2] = BlockTypeListAsset.getAssetMap().getAsset(var1[var2]);
               if (var0.blockTypeListAssets[var2] == null) {
                  System.out.println("BlockTypeListAsset with name: " + var1[var2] + " does not exist");
               }
            }
         }
      }, var0 -> {
         if (var0.blockTypeListAssets == null) {
            class="kw">return null;
         }

         String[] var1 = new String[var0.blockTypeListAssets.length];

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

         class="kw">return var1;
      })
      .add()
      .build();
   class="kw">private ConnectedBlockPatternRule.IncludeOrExclude includeOrExclude;
   class="kw">private Vector3ic relativePosition = Vector3iUtil.ZERO;
   class="kw">private class="kw">final HashSet<String> blockTypes = new HashSet<>();
   @Nullable
   class="kw">private BlockTypeListAsset[] blockTypeListAssets;
   class="kw">private Set<BlockPattern.BlockEntry> shapeBlockTypeKeys = Collections.emptySet();
   class="kw">private ConnectedBlockFaceTags faceTags = ConnectedBlockFaceTags.EMPTY;
   class="kw">private ConnectedBlockPatternRule.AdjacentSide[] placementNormals;

   class="kw">public ConnectedBlockPatternRule() {
   }

   class="kw">public Vector3ic getRelativePosition() {
      class="kw">return this.relativePosition;
   }

   @Nonnull
   class="kw">public HashSet<String> getBlockTypes() {
      class="kw">return this.blockTypes;
   }

   @Nonnull
   class="kw">public Set<BlockPattern.BlockEntry> getShapeBlockTypeKeys() {
      class="kw">return this.shapeBlockTypeKeys;
   }

   class="kw">public ConnectedBlockFaceTags getFaceTags() {
      class="kw">return this.faceTags;
   }

   @Nullable
   class="kw">public BlockTypeListAsset[] getBlockTypeListAssets() {
      class="kw">return this.blockTypeListAssets;
   }

   class="kw">public ConnectedBlockPatternRule.AdjacentSide[] getPlacementNormals() {
      class="kw">return this.placementNormals;
   }

   class="kw">public boolean isInclude() {
      class="kw">return this.includeOrExclude == ConnectedBlockPatternRule.IncludeOrExclude.INCLUDE;
   }

   class="kw">public enum AdjacentSide {
      Up(Vector3iUtil.UP),
      Down(Vector3iUtil.DOWN),
      North(Vector3iUtil.NORTH),
      East(Vector3iUtil.EAST),
      South(Vector3iUtil.SOUTH),
      West(Vector3iUtil.WEST);

      class="kw">public class="kw">final Vector3ic relativePosition;

      AdjacentSide(Vector3ic nullxx) {
         this.relativePosition = nullxx;
      }
   }

   class="kw">public enum IncludeOrExclude {
      INCLUDE,
      EXCLUDE;

      IncludeOrExclude() {
      }
   }
}