TeleportSystems class

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

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

Поля (54)

МодификаторыТипИмя
private final ComponentType<EntityStore, HeadRotation> headRotationComponentType
private final ComponentType<EntityStore, HeadRotation> headRotationComponentType
private final ComponentType<EntityStore, PendingTeleport> pendingTeleportComponentType
private final ComponentType<EntityStore, Player> playerComponentType
private final ComponentType<EntityStore, PlayerRef> playerRefComponentType
private final Query<EntityStore> query
private final Query<EntityStore> query
private final ComponentType<EntityStore, Teleport> teleportComponentType
private final ComponentType<EntityStore, Teleport> teleportComponentType
private final ComponentType<EntityStore, TransformComponent> transformComponentType
private final ComponentType<EntityStore, TransformComponent> transformComponentType
Rotation3f var10
World var11
Location var12
Location var13
Rotation3f var14
CompletableFuture var15
TeleportRecord var16
short var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
TransformComponent var4
Holder var4
TransformComponent var4
TeleportAckTracker var5
CollisionResultComponent var5
TransformComponent var5
World var5
PlayerRef var5
PlayerRef var5
int var6
Vector3d var6
HeadRotation var6
TransformComponent var6
Player var6
ClientTeleport var7
CompletableFuture var7
String var7
TeleportRecord var7
Vector3d var7
World var8
Location var8
CompletableFuture var8
Rotation3f var8
Location var9
CompletableFuture var9
HeadRotation var9

Методы (25)

МодификаторыВозвратСигнатура
public MoveSystempublic MoveSystem()
public PlayerMoveSystempublic PlayerMoveSystem()
static void completeTeleportvoid completeTeleport(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1, @Nonnull Player var2, @Nullable Vector3d var3)
public ComponentType<EntityStore, Teleport> componentTypepublic ComponentType<EntityStore, Teleport> componentType()
public ComponentType<EntityStore, Teleport> componentTypepublic ComponentType<EntityStore, Teleport> componentType()
static short getIgnoredTransformFieldsFlagsshort getIgnoredTransformFieldsFlags(@Nullable Vector3d var0, @Nullable Rotation3f var1, @Nullable Rotation3f var2)
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
if if(var5 != null)
if if(var6 != null)
if if(var7 != null)
if if(var9 != null)
if if(var8 != null)
if if(var2x != null)
if if(var9 != null)
if if(var15 != null)
public void onComponentAddedpublic void onComponentAdded(@Nonnull Ref<EntityStore> var1, @Nonnull Teleport var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)
public void onComponentAddedpublic void onComponentAdded(@Nonnull Ref<EntityStore> var1, @Nonnull Teleport var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)
public void onComponentRemovedpublic void onComponentRemoved(@Nonnull Ref<EntityStore> var1, @Nonnull Teleport var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)
public void onComponentRemovedpublic void onComponentRemoved(@Nonnull Ref<EntityStore> var1, @Nonnull Teleport var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)
public void onComponentSetpublic void onComponentSet(@Nonnull Ref<EntityStore> var1, Teleport var2, @Nonnull Teleport var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)
public void onComponentSetpublic void onComponentSet(@Nonnull Ref<EntityStore> var1, Teleport var2, @Nonnull Teleport var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)
static void queueAndSendClientTeleportvoid queueAndSendClientTeleport(@Nonnull PlayerRef var0, @Nonnull Vector3d var1, @Nonnull Rotation3f var2, @Nonnull Rotation3f var3, boolean var4)
private void teleportToPositionprivate void teleportToPosition(@Nonnull Ref<EntityStore> var1, @Nonnull Teleport var2, @Nonnull CommandBuffer<EntityStore> var3)
private void teleportToWorldprivate void teleportToWorld(@Nonnull Ref<EntityStore> var1, @Nonnull Teleport var2, @Nonnull CommandBuffer<EntityStore> var3, @Nonnull World var4)

Исходный код

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

class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.RemoveReason;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.system.RefChangeSystem;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.vector.Location;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.math.vector.Transform;
class="kw">import com.hypixel.hytale.protocol.ModelTransform;
class="kw">import com.hypixel.hytale.protocol.packets.player.ClientTeleport;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.CollisionResultComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.core.util.PositionUtil;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class TeleportSystems {
   @Nonnull
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();

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

   class="kw">public class="kw">static void queueAndSendClientTeleport(
      @Nonnull PlayerRef var0, @Nonnull Vector3d var1, @Nonnull Rotation3f var2, @Nonnull Rotation3f var3, boolean var4
   ) {
      TeleportAckTracker var5 = var0.getTeleportAckTracker();
      int var6 = var5.queueTeleport(var1);
      ClientTeleport var7 = new ClientTeleport(
         (byte)var6,
         getIgnoredTransformFieldsFlags(var1, var2, var3),
         (short)0,
         new ModelTransform(PositionUtil.toPositionPacket(var1), PositionUtil.toDirectionPacket(var2), PositionUtil.toDirectionPacket(var3)),
         var4
      );
      if (!var0.getPacketHandler().writePacket(var7, true)) {
         var5.rollback(var6);
         LOGGER.at(Level.WARNING)
            .log("ClientTeleport id %d to %s was swallowed by a packet filter, rolled back its pending ack", var6 & 0xFF, var0.getUsername());
      }
   }

   class="kw">public class="kw">static void completeTeleport(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1, @Nonnull Player var2, @Nullable Vector3d var3) {
      if (var1.getComponent(var0, PendingTeleport.getComponentType()) != null) {
         var1.removeComponent(var0, PendingTeleport.getComponentType());
         TransformComponent var4 = var1.getComponent(var0, TransformComponent.getComponentType());
         assert var4 != null;
         CollisionResultComponent var5 = var1.getComponent(var0, CollisionResultComponent.getComponentType());
         if (var5 != null) {
            var5.getCollisionStartPosition().set(var4.getPosition());
         }

         Vector3d var6 = var3 != null ? var3 : var4.getPosition();
         var2.moveTo(var0, var6.x(), var6.y(), var6.z(), var1);
      }
   }

   class="kw">static short getIgnoredTransformFieldsFlags(@Nullable Vector3d var0, @Nullable Rotation3f var1, @Nullable Rotation3f var2) {
      short var3 = 0;
      if (var0 == null || !Double.isFinite(var0.x)) {
         var3 = (short)(var3 | 1);
      }

      if (var0 == null || !Double.isFinite(var0.y)) {
         var3 = (short)(var3 | 2);
      }

      if (var0 == null || !Double.isFinite(var0.z)) {
         var3 = (short)(var3 | 4);
      }

      if (var1 == null || !Float.isFinite(var1.yaw())) {
         var3 = (short)(var3 | 8);
      }

      if (var1 == null || !Float.isFinite(var1.pitch())) {
         var3 = (short)(var3 | 16);
      }

      if (var1 == null || !Float.isFinite(var1.roll())) {
         var3 = (short)(var3 | 32);
      }

      if (var2 == null || !Float.isFinite(var2.yaw())) {
         var3 = (short)(var3 | 64);
      }

      if (var2 == null || !Float.isFinite(var2.pitch())) {
         var3 = (short)(var3 | 128);
      }

      if (var2 == null || !Float.isFinite(var2.roll())) {
         var3 = (short)(var3 | 256);
      }

      class="kw">return var3;
   }

   class="kw">public class="kw">static class MoveSystem class="kw">extends RefChangeSystem<EntityStore, Teleport> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, Teleport> teleportComponentType = Teleport.getComponentType();
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, TransformComponent> transformComponentType = TransformComponent.getComponentType();
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, HeadRotation> headRotationComponentType = HeadRotation.getComponentType();
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query = Query.and(this.teleportComponentType, this.transformComponentType, Query.not(PlayerRef.getComponentType()));

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

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      @Nonnull
      @Override
      class="kw">public ComponentType<EntityStore, Teleport> componentType() {
         class="kw">return this.teleportComponentType;
      }

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull Teleport var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         TransformComponent var5 = var4.getComponent(var1, this.transformComponentType);
         assert var5 != null;
         var5.teleportPosition(var2.getPosition());
         var5.teleportRotation(var2.getRotation());
         HeadRotation var6 = var4.getComponent(var1, this.headRotationComponentType);
         if (var6 != null) {
            var6.teleportRotation(var2.getRotation());
         }

         CompletableFuture var7 = var2.getOnComplete();
         var4.removeComponent(var1, this.teleportComponentType);
         World var8 = var2.getWorld();
         if (var8 != null && !var8.equals(var3.getExternalData().getWorld())) {
            var4.run(var3x -> {
               Holder var4 = var3x.removeEntity(var1, RemoveReason.UNLOAD);
               var8.execute(() -> {
                  var8.getEntityStore().getStore().addEntity(var4, AddReason.LOAD);
                  if (var7 != null) {
                     var7.complete(null);
                  }
               });
            });
         } else if (var7 != null) {
            var7.complete(null);
         }
      }

      class="kw">public void onComponentRemoved(
         @Nonnull Ref<EntityStore> var1, @Nonnull Teleport var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
      }

      class="kw">public void onComponentSet(
         @Nonnull Ref<EntityStore> var1, Teleport var2, @Nonnull Teleport var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
      }
   }

   class="kw">public class="kw">static class PlayerMoveSystem class="kw">extends RefChangeSystem<EntityStore, Teleport> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, Teleport> teleportComponentType = Teleport.getComponentType();
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, TransformComponent> transformComponentType = TransformComponent.getComponentType();
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, HeadRotation> headRotationComponentType = HeadRotation.getComponentType();
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, PlayerRef> playerRefComponentType = PlayerRef.getComponentType();
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, Player> playerComponentType = Player.getComponentType();
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, PendingTeleport> pendingTeleportComponentType = PendingTeleport.getComponentType();
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query = Query.and(
         this.teleportComponentType, this.playerRefComponentType, this.transformComponentType, this.playerComponentType
      );

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

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      @Nonnull
      @Override
      class="kw">public ComponentType<EntityStore, Teleport> componentType() {
         class="kw">return this.teleportComponentType;
      }

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull Teleport var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         World var5 = var2.getWorld();
         if (var5 != null && !var5.equals(var3.getExternalData().getWorld())) {
            this.teleportToWorld(var1, var2, var4, var5);
         } else {
            this.teleportToPosition(var1, var2, var4);
         }
      }

      class="kw">public void onComponentRemoved(
         @Nonnull Ref<EntityStore> var1, @Nonnull Teleport var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
      }

      class="kw">public void onComponentSet(
         @Nonnull Ref<EntityStore> var1, Teleport var2, @Nonnull Teleport var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
      }

      class="kw">private void teleportToWorld(@Nonnull Ref<EntityStore> var1, @Nonnull Teleport var2, @Nonnull CommandBuffer<EntityStore> var3, @Nonnull World var4) {
         PlayerRef var5 = var3.getComponent(var1, this.playerRefComponentType);
         assert var5 != null;
         var3.removeComponent(var1, this.teleportComponentType);
         TransformComponent var6 = var3.getComponent(var1, this.transformComponentType);
         String var7 = var3.getExternalData().getWorld().getName();
         Location var8 = new Location(var7, new Transform(var6.getTransform()));
         Location var9 = new Location(var4.getName(), new Vector3d(var2.getPosition()), new Rotation3f(var2.getRotation()));
         var3.run(var6x -> {
            TeleportRecord var7 = var6x.ensureAndGetComponent(var1, TeleportRecord.getComponentType());
            var7.setLastTeleport(new TeleportRecord.Entry(var8, var9, System.nanoTime()));
            var5.removeFromStore();
            CompletableFuture var8 = var4.addPlayer(var5, new Transform(var2.getPosition(), var2.getRotation()));
            CompletableFuture var9 = var2.getOnComplete();
            if (var9 != null) {
               if (var8 != null) {
                  var8.whenComplete((var1x, var2x) -> {
                     if (var2x != null) {
                        var9.completeExceptionally(var2x);
                     } else {
                        var9.complete(null);
                     }
                  });
               } else {
                  var9.completeExceptionally(new RuntimeException("Failed to teleport player to world " + var4.getName()));
               }
            }
         });
      }

      class="kw">private void teleportToPosition(@Nonnull Ref<EntityStore> var1, @Nonnull Teleport var2, @Nonnull CommandBuffer<EntityStore> var3) {
         TransformComponent var4 = var3.getComponent(var1, this.transformComponentType);
         assert var4 != null;
         PlayerRef var5 = var3.getComponent(var1, this.playerRefComponentType);
         assert var5 != null;
         Player var6 = var3.getComponent(var1, this.playerComponentType);
         assert var6 != null;
         var3.ensureAndGetComponent(var1, this.pendingTeleportComponentType);
         Vector3d var7 = var2.getPosition();
         Rotation3f var8 = var2.getRotation();
         var4.teleportPosition(var7);
         var4.teleportRotation(var8);
         HeadRotation var9 = var3.getComponent(var1, this.headRotationComponentType);
         if (var9 != null) {
            Rotation3f var10 = var2.getHeadRotation();
            var9.teleportRotation(var10 != null ? var10 : var8);
         }

         TeleportRecord var16 = var3.ensureAndGetComponent(var1, TeleportRecord.getComponentType());
         World var11 = var3.getExternalData().getWorld();
         Location var12 = new Location(var11.getName(), new Vector3d(var7), new Rotation3f(var8));
         Location var13 = new Location(var11.getName(), new Vector3d(var7), new Rotation3f(var8));
         var16.setLastTeleport(new TeleportRecord.Entry(var12, var13, System.nanoTime()));
         var6.getWindowManager().validateWindows(var1, var3);
         Rotation3f var14 = var9 != null ? var9.getRotation() : var4.getRotation();
         if (!var6.isWaitingForClientReady()) {
            TeleportSystems.queueAndSendClientTeleport(var5, var4.getPosition(), var4.getRotation(), var14, var2.isResetVelocity());
         }

         CompletableFuture var15 = var2.getOnComplete();
         if (var15 != null) {
            var15.complete(null);
         }

         var3.removeComponent(var1, this.teleportComponentType);
      }
   }
}