Status enum

Пакет: com.hypixel.hytale.server.core.modules.entity.teleport

Файл: com/hypixel/hytale/server/core/modules/entity/teleport/TeleportAckTracker.java

Поля (1)

МодификаторыТипИмя
OK, INVALID_ID, INVALID_POSITION

Исходный код

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

class="kw">import com.hypixel.hytale.protocol.Position;
class="kw">import java.util.ArrayDeque;
class="kw">import java.util.Deque;
class="kw">import java.util.Iterator;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3dc;

class="kw">public class TeleportAckTracker {
   class="kw">public class="kw">static class="kw">final double MAX_OFFSET_SQUARED = 0.001;
   @Nonnull
   class="kw">private class="kw">final Deque<TeleportAckTracker.Entry> pendingTeleports = new ArrayDeque<>();
   class="kw">private int nextTeleportId;

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

   class="kw">public class="kw">synchronized int queueTeleport(@Nonnull Vector3dc var1) {
      int var2 = this.nextTeleportId++;
      this.pendingTeleports.addLast(new TeleportAckTracker.Entry(var2, new Vector3d(var1)));
      class="kw">return var2;
   }

   class="kw">public class="kw">synchronized void rollback(int var1) {
      Iterator var2 = this.pendingTeleports.descendingIterator();

      while (var2.hasNext()) {
         if (var2.next().teleportId == var1) {
            var2.remove();
            class="kw">return;
         }
      }
   }

   @Nonnull
   class="kw">public class="kw">synchronized TeleportAckTracker.Result validate(int var1, @Nonnull Position var2) {
      TeleportAckTracker.Entry var3 = this.pendingTeleports.peekFirst();
      if (var3 != null && (var1 & 0xFF) == (var3.teleportId & 0xFF)) {
         this.pendingTeleports.removeFirst();
         Vector3d var4 = new Vector3d(var2.x, var2.y, var2.z);
         Vector3d var5 = var3.expectedPosition;
         double var6 = Math.sqrt(squared(halfFloatUlp(var5.x)) + squared(halfFloatUlp(var5.y)) + squared(halfFloatUlp(var5.z)));
         double var8 = Math.sqrt(0.001) + var6;
         class="kw">return var5.distanceSquared(var4) > var8 * var8
            ? new TeleportAckTracker.Result(
               TeleportAckTracker.Status.INVALID_POSITION, var3.teleportId, var3.expectedPosition, var4, this.pendingTeleports.size()
            )
            : new TeleportAckTracker.Result(TeleportAckTracker.Status.OK, var3.teleportId, var3.expectedPosition, var4, this.pendingTeleports.size());
      } else {
         class="kw">return new TeleportAckTracker.Result(
            TeleportAckTracker.Status.INVALID_ID,
            var3 != null ? var3.teleportId : -1,
            var3 != null ? new Vector3d(var3.expectedPosition) : null,
            null,
            this.pendingTeleports.size()
         );
      }
   }

   class="kw">public class="kw">synchronized boolean isEmpty() {
      class="kw">return this.pendingTeleports.isEmpty();
   }

   class="kw">private class="kw">static double halfFloatUlp(double var0) {
      class="kw">return Math.scalb(1.0, Math.getExponent(var0) - 24);
   }

   class="kw">private class="kw">static double squared(double var0) {
      class="kw">return var0 * var0;
   }

   @Override
   class="kw">public class="kw">synchronized String toString() {
      class="kw">return "TeleportAckTracker{nextTeleportId=" + this.nextTeleportId + ", pending=" + this.pendingTeleports + "}";
   }

   class="kw">private record Entry(int teleportId, @Nonnull Vector3d expectedPosition) {
      class="kw">private Entry {
      }

      @Override
      class="kw">public String toString() {
         class="kw">return String.format(
            "Entry{teleportId=%d, expectedPosition=(%.1f, %.1f, %.1f)}",
            this.teleportId,
            this.expectedPosition.x,
            this.expectedPosition.y,
            this.expectedPosition.z
         );
      }
   }

   class="kw">public record Result(
      @Nonnull TeleportAckTracker.Status status,
      int expectedTeleportId,
      @Nullable Vector3d expectedPosition,
      @Nullable Vector3d ackedPosition,
      int remainingQueueDepth
   ) {
      class="kw">public Result {
      }

      @Nonnull
      class="kw">public String expectedWireId() {
         class="kw">return this.expectedTeleportId >= 0 ? String.valueOf(this.expectedTeleportId & 0xFF) : "none";
      }
   }

   class="kw">public enum Status {
      OK,
      INVALID_ID,
      INVALID_POSITION;

      Status() {
      }
   }
}