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);
}
}
}