ConnectedBlockFaceTagRule class

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

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

extends: ConnectedBlockRule

Поля (15)

МодификаторыТипИмя
final BuilderCodec<ConnectedBlockFaceTagRule> CODEC
FaceTagConnectedBlockRule var1
boolean var10
var10
boolean var2
var2
Vector3i var4
BlockType var5
Vector3ic var5
ConnectedBlockShapeConfig var6
HashSet var6
ConnectedBlockFaceTags var7
boolean var7
RotationTuple var8
Vector3i var9

Методы (7)

МодификаторыВозвратСигнатура
for for(String var12 : var3)
if if(var6 == null)
if if(var7 == null)
if if(var8 == null)
if if(var7 && this.matchType == MatchType.Any)
if if(!var7)
private boolean testboolean test(ConnectedBlockRule.Context var1, Vector3ic var2, Set<String> var3)

Исходный код

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

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.validation.Validators;
class="kw">import com.hypixel.hytale.math.vector.Vector3iUtil;
class="kw">import com.hypixel.hytale.protocol.ConnectedBlockMatchType;
class="kw">import com.hypixel.hytale.protocol.FaceTagConnectedBlockRule;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.RotationTuple;
class="kw">import com.hypixel.hytale.server.core.universe.world.connectedblocks.config.ConnectedBlockFaceTags;
class="kw">import com.hypixel.hytale.server.core.universe.world.connectedblocks.config.MatchType;
class="kw">import com.hypixel.hytale.server.core.universe.world.connectedblocks.config.shape.ConnectedBlockShapeConfig;
class="kw">import java.util.HashSet;
class="kw">import java.util.Set;
class="kw">import java.util.Map.Entry;
class="kw">import org.joml.Vector3i;
class="kw">import org.joml.Vector3ic;

class="kw">public class ConnectedBlockFaceTagRule class="kw">extends ConnectedBlockRule {
   class="kw">public class="kw">static class="kw">final BuilderCodec<ConnectedBlockFaceTagRule> CODEC = BuilderCodec.builder(ConnectedBlockFaceTagRule.class, ConnectedBlockFaceTagRule::new)
      .append(new KeyedCodec<>("PositionOffset", Vector3iUtil.CODEC, false), (var0, var1) -> var0.positionOffset.set(var1), var0 -> var0.positionOffset)
      .add()
      .<ConnectedBlockFaceTags>append(new KeyedCodec<>("FaceTags", ConnectedBlockFaceTags.CODEC, true), (var0, var1) -> var0.tags = var1, var0 -> var0.tags)
      .addValidator(Validators.nonNull())
      .add()
      .<MatchType>append(new KeyedCodec<>("MatchType", new EnumCodec<>(MatchType.class)), (var0, var1) -> var0.matchType = var1, var0 -> var0.matchType)
      .addValidator(Validators.nonNull())
      .add()
      .documentation("A connected block rule that checks if there are face tags present from adjacent blocks")
      .build();
   class="kw">private class="kw">final Vector3i positionOffset = new Vector3i();
   class="kw">private ConnectedBlockFaceTags tags;
   class="kw">private MatchType matchType;

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

   class="kw">private boolean test(ConnectedBlockRule.Context var1, Vector3ic var2, Set<String> var3) {
      Vector3i var4 = new Vector3i(this.positionOffset).add(var2);
      BlockType var5 = var1.getLocalBlockType(var4);
      ConnectedBlockShapeConfig var6 = var1.getShapeForBlockType(var5);
      if (var6 == null) {
         class="kw">return false;
      }

      ConnectedBlockFaceTags var7 = var6.getFaceTags();
      if (var7 == null) {
         class="kw">return false;
      }

      RotationTuple var8 = var1.getLocalRotation(var4);
      if (var8 == null) {
         class="kw">return false;
      }

      Vector3i var9 = new Vector3i(var2).negate();
      var8.undoRotationTo(var9);
      var6.getRelativeRotation().undoRotationTo(var9);
      boolean var10 = !var3.isEmpty();

      for (String var12 : var3) {
         if (!var7.contains(var9, var12)) {
            var10 = false;
         }
      }

      class="kw">return var10;
   }

   @Override
   class="kw">public boolean check(ConnectedBlockRule.Context var1) {
      boolean var2 = true;

      for (Entry var4 : this.tags.getBlockFaceTags().entrySet()) {
         Vector3ic var5 = var4.getKey();
         HashSet var6 = var4.getValue();
         boolean var7 = this.test(var1, var5, var6);
         if (var7 && this.matchType == MatchType.Any) {
            class="kw">return true;
         }

         if (!var7) {
            var2 = false;
         }
      }

      class="kw">return this.matchType == MatchType.All ? var2 : false;
   }

   @Override
   class="kw">public com.hypixel.hytale.protocol.ConnectedBlockRule toPacket() {
      FaceTagConnectedBlockRule var1 = new FaceTagConnectedBlockRule();
      var1.positionOffset = new com.hypixel.hytale.protocol.Vector3i(this.positionOffset.x, this.positionOffset.y, this.positionOffset.z);
      var1.faceTags = this.tags == null ? null : this.tags.toPacket();
      var1.matchType = this.matchType == MatchType.All ? ConnectedBlockMatchType.All : ConnectedBlockMatchType.Any;
      class="kw">return var1;
   }
}