Extrude class

Пакет: com.hypixel.hytale.server.core.modules.interaction.interaction.config.client

Файл: com/hypixel/hytale/server/core/modules/interaction/interaction/config/client/PlacementGestureTracker.java

extends: PlacementGestureTracker

Поля (4)

МодификаторыТипИмя
private boolean downgraded
private int lineAxis
private final Set<Vector3i> placed
int var3

Методы (7)

МодификаторыВозвратСигнатура
protected boolean acceptprotected boolean accept(@Nonnull Vector3ic var1, boolean var2, boolean var3)
private boolean acceptStrictprivate boolean acceptStrict(@Nonnull Vector3ic var1, boolean var2)
if if(var2)
if if(var2)
if if(var3 == 0)
if if(this.lineAxis == 0)
protected void onAcceptedprotected void onAccepted(@Nonnull Vector3ic var1, boolean var2)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.interaction.interaction.config.client;

class="kw">import java.util.HashSet;
class="kw">import java.util.Set;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3i;
class="kw">import org.joml.Vector3ic;

class="kw">public class PlacementGestureTracker {
   class="kw">private class="kw">static class="kw">final int ALL_AXES = 7;
   class="kw">private class="kw">final Set<Vector3i> accepted = new HashSet<>();
   class="kw">private class="kw">final Vector3i anchor = new Vector3i();
   class="kw">private boolean hasAnchor;
   class="kw">private int planeAxes = 7;
   class="kw">private int violations;

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

   class="kw">public class="kw">final boolean validatePlacement(@Nonnull Vector3ic var1, boolean var2, boolean var3) {
      if (this.accept(var1, var2, var3)) {
         this.recordAccepted(var1, var2);
         class="kw">return true;
      } else {
         this.violations++;
         class="kw">return false;
      }
   }

   class="kw">public class="kw">final int getViolations() {
      class="kw">return this.violations;
   }

   class="kw">protected boolean accept(@Nonnull Vector3ic var1, boolean var2, boolean var3) {
      if (var3) {
         class="kw">return true;
      } else {
         class="kw">return !this.hasAnchor ? true : this.isCoplanarWithAccepted(var1) || this.isAdjacentToAccepted(var1);
      }
   }

   class="kw">protected class="kw">final boolean isCoplanarWithAccepted(@Nonnull Vector3ic var1) {
      class="kw">return (this.planeAxes & this.matchingAnchorAxes(var1)) != 0;
   }

   class="kw">protected class="kw">final boolean isAdjacentToAccepted(@Nonnull Vector3ic var1) {
      Vector3i var2 = new Vector3i();

      for (int var3 = 0; var3 < 3; var3++) {
         for (int var4 = -1; var4 <= 1; var4 += 2) {
            var2.set(var1).setComponent(var3, var1.get(var3) + var4);
            if (this.accepted.contains(var2)) {
               class="kw">return true;
            }
         }
      }

      class="kw">return false;
   }

   class="kw">protected class="kw">final boolean isAccepted(@Nonnull Vector3ic var1) {
      class="kw">return this.accepted.contains(new Vector3i(var1));
   }

   class="kw">protected class="kw">final boolean hasAnchor() {
      class="kw">return this.hasAnchor;
   }

   class="kw">protected class="kw">final int matchingAnchorAxes(@Nonnull Vector3ic var1) {
      int var2 = 0;

      for (int var3 = 0; var3 < 3; var3++) {
         if (var1.get(var3) == this.anchor.get(var3)) {
            var2 |= 1 << var3;
         }
      }

      class="kw">return var2;
   }

   class="kw">protected void onAccepted(@Nonnull Vector3ic var1, boolean var2) {
   }

   class="kw">private void recordAccepted(@Nonnull Vector3ic var1, boolean var2) {
      if (!this.hasAnchor) {
         this.anchor.set(var1);
         this.hasAnchor = true;
      }

      this.planeAxes = this.planeAxes & this.matchingAnchorAxes(var1);
      this.accepted.add(new Vector3i(var1));
      this.onAccepted(var1, var2);
   }

   class="kw">public class="kw">static class Extrude class="kw">extends PlacementGestureTracker {
      class="kw">private class="kw">final Set<Vector3i> placed = new HashSet<>();
      class="kw">private int lineAxis;
      class="kw">private boolean downgraded;

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

      @Override
      class="kw">protected boolean accept(@Nonnull Vector3ic var1, boolean var2, boolean var3) {
         if (!this.downgraded && this.acceptStrict(var1, var2)) {
            class="kw">return true;
         }

         this.downgraded = true;
         class="kw">return super.accept(var1, var2, var3);
      }

      @Override
      class="kw">protected void onAccepted(@Nonnull Vector3ic var1, boolean var2) {
         if (var2) {
            this.placed.remove(new Vector3i(var1));
         } else {
            this.placed.add(new Vector3i(var1));
         }
      }

      class="kw">private boolean acceptStrict(@Nonnull Vector3ic var1, boolean var2) {
         if (var2) {
            class="kw">return this.placed.contains(new Vector3i(var1));
         }

         if (!this.hasAnchor()) {
            class="kw">return true;
         }

         int var3 = 7 & ~this.matchingAnchorAxes(var1);
         if (var3 == 0) {
            class="kw">return true;
         }

         if (Integer.bitCount(var3) > 1) {
            class="kw">return false;
         }

         if (this.lineAxis == 0) {
            this.lineAxis = var3;
         }

         class="kw">return var3 == this.lineAxis;
      }
   }

   class="kw">public class="kw">static class SurfaceDraw class="kw">extends PlacementGestureTracker {
      class="kw">private boolean downgraded;

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

      @Override
      class="kw">protected boolean accept(@Nonnull Vector3ic var1, boolean var2, boolean var3) {
         if (!this.downgraded && this.acceptStrict(var1, var2)) {
            class="kw">return true;
         }

         this.downgraded = true;
         class="kw">return super.accept(var1, var2, var3);
      }

      class="kw">private boolean acceptStrict(@Nonnull Vector3ic var1, boolean var2) {
         if (var2) {
            class="kw">return false;
         } else {
            class="kw">return !this.hasAnchor() ? true : !this.isAccepted(var1) && this.isCoplanarWithAccepted(var1);
         }
      }
   }
}