PlayerRef class
Пакет: com.hypixel.hytale.server.core.universe
Файл: com/hypixel/hytale/server/core/universe/PlayerRef.java
implements: Component<EntityStore>, MetricProvider, CommandSender, PermissionHolder
Поля (14)
| Модификаторы | Тип | Имя |
|---|---|---|
|
PacketHandler |
var1 |
|
Ref |
var1 |
|
Ref |
var1 |
|
Ref |
var1 |
|
Ref |
var1 |
|
PongType[] |
var2 |
|
MovementStatesComponent |
var2 |
|
MovementManager |
var2 |
|
CameraManager |
var2 |
|
Store |
var2 |
|
Holder |
var2 |
|
PacketHandler.PingInfo[] |
var3 |
|
Ref |
var3 |
|
int |
var4 |
Методы (22)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Port must be between 1 and 65535") |
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Already in world") |
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Not in world") |
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Player is still in the world") |
public |
void |
addedToStorevoid addedToStore(Ref<EntityStore> var1) |
|
|
for for(int var4 = 0; var4 < var2.length; var4++) |
|
|
if if(var1 == null) |
|
|
if if(var1 == null) |
|
|
if if(var1 == null) |
|
|
if if(this.holder == null) |
|
|
if if(this.entity == null) |
|
|
if if(this.holder != null) |
|
|
if if(var2 != null) |
|
|
if if(var1 == null) |
|
|
if if(var2 > 0 && var2 <= 65535) |
|
|
if if(var3 != null && var3.length > 4096) |
public |
boolean |
isValidboolean isValid() |
public |
void |
referToServervoid referToServer(@Nonnull String var1, int var2) |
public |
void |
referToServervoid referToServer(@Nonnull String var1, int var2, @Nullable byte[] var3) |
public |
void |
setLanguagevoid setLanguage(@Nonnull String var1) |
public |
void |
setWorldUuidvoid setWorldUuid(@Nonnull UUID var1) |
public |
void |
updatePositionvoid updatePosition(@Nonnull World var1, @Nonnull Transform var2, @Nonnull Rotation3f var3) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.universe;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.codecs.array.ArrayCodec;
class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.Component;
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.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.logger.sentry.SkipSentryException;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.math.vector.Transform;
class="kw">import com.hypixel.hytale.metrics.MetricProvider;
class="kw">import com.hypixel.hytale.metrics.MetricResults;
class="kw">import com.hypixel.hytale.metrics.MetricsRegistry;
class="kw">import com.hypixel.hytale.protocol.HostAddress;
class="kw">import com.hypixel.hytale.protocol.packets.auth.ClientReferral;
class="kw">import com.hypixel.hytale.protocol.packets.connection.PongType;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.ChatType;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.ServerMessage;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.command.system.CommandSender;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.CameraManager;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.HiddenPlayersManager;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.movement.MovementManager;
class="kw">import com.hypixel.hytale.server.core.entity.movement.MovementStatesComponent;
class="kw">import com.hypixel.hytale.server.core.io.PacketHandler;
class="kw">import com.hypixel.hytale.server.core.io.PacketStatsRecorderImpl;
class="kw">import com.hypixel.hytale.server.core.modules.entity.player.ChunkTracker;
class="kw">import com.hypixel.hytale.server.core.modules.entity.teleport.TeleportAckTracker;
class="kw">import com.hypixel.hytale.server.core.permissions.PermissionHolder;
class="kw">import com.hypixel.hytale.server.core.permissions.PermissionQuery;
class="kw">import com.hypixel.hytale.server.core.permissions.PermissionsModule;
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 java.util.Objects;
class="kw">import java.util.UUID;
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">public class PlayerRef class="kw">implements Component<EntityStore>, MetricProvider, CommandSender, PermissionHolder {
@Nonnull
class="kw">public class="kw">static class="kw">final MetricsRegistry<PlayerRef> METRICS_REGISTRY = new MetricsRegistry<PlayerRef>()
.register("Username", PlayerRef::getUsername, Codec.STRING)
.register("Language", PlayerRef::getLanguage, Codec.STRING)
.register("QueuedPacketsCount", var0 -> var0.getPacketHandler().getQueuedPacketsCount(), Codec.INTEGER)
.register("PingInfo", var0 -> {
PacketHandler var1 = var0.getPacketHandler();
PongType[] var2 = PongType.values();
PacketHandler.PingInfo[] var3 = new PacketHandler.PingInfo[var2.length];
for (int var4 = 0; var4 < var2.length; var4++) {
var3[var4] = var1.getPingInfo(var2[var4]);
}
class="kw">return var3;
}, new ArrayCodec<>(PacketHandler.PingInfo.METRICS_REGISTRY, PacketHandler.PingInfo[]::new))
.register(
"PacketStatsRecorder",
var0 -> var0.getPacketHandler().getPacketStatsRecorder() class="kw">instanceof PacketStatsRecorderImpl var2 ? var2 : null,
PacketStatsRecorderImpl.METRICS_REGISTRY
)
.register("ChunkTracker", PlayerRef::getChunkTracker, ChunkTracker.METRICS_REGISTRY);
@Nonnull
class="kw">public class="kw">static class="kw">final MetricsRegistry<PlayerRef> COMPONENT_METRICS_REGISTRY = new MetricsRegistry<PlayerRef>().register("MovementStates", var0 -> {
Ref var1 = var0.getReference();
if (var1 == null) {
class="kw">return null;
}
MovementStatesComponent var2 = var1.getStore().getComponent(var1, MovementStatesComponent.getComponentType());
class="kw">return var2 != null ? var2.getMovementStates().toString() : null;
}, Codec.STRING).register("MovementManager", var0 -> {
Ref var1 = var0.getReference();
if (var1 == null) {
class="kw">return null;
}
MovementManager var2 = var1.getStore().getComponent(var1, MovementManager.getComponentType());
class="kw">return var2 != null ? var2.toString() : null;
}, Codec.STRING).register("CameraManager", var0 -> {
Ref var1 = var0.getReference();
if (var1 == null) {
class="kw">return null;
}
CameraManager var2 = var1.getStore().getComponent(var1, CameraManager.getComponentType());
class="kw">return var2 != null ? var2.toString() : null;
}, Codec.STRING);
@Nonnull
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
@Nonnull
class="kw">private class="kw">final UUID uuid;
@Nonnull
class="kw">private class="kw">final String username;
@Nonnull
class="kw">private class="kw">final PacketHandler packetHandler;
@Nonnull
class="kw">private class="kw">final ChunkTracker chunkTracker;
@Nonnull
class="kw">private class="kw">final HiddenPlayersManager hiddenPlayersManager = new HiddenPlayersManager(this);
@Nonnull
class="kw">private class="kw">final TeleportAckTracker teleportAckTracker = new TeleportAckTracker();
@Nonnull
class="kw">private String language;
@Nullable
class="kw">private Ref<EntityStore> entity;
@Nullable
class="kw">private Holder<EntityStore> holder;
@Nullable
class="kw">private UUID worldUuid;
class="kw">private class="kw">final Transform transform = new Transform(0.0, 0.0, 0.0, 0.0F, 0.0F, 0.0F);
class="kw">private class="kw">final Rotation3f headRotation = new Rotation3f(0.0F, 0.0F, 0.0F);
@Nonnull
class="kw">public class="kw">static ComponentType<EntityStore, PlayerRef> getComponentType() {
class="kw">return Universe.get().getPlayerRefComponentType();
}
class="kw">public PlayerRef(
@Nonnull Holder<EntityStore> var1,
@Nonnull UUID var2,
@Nonnull String var3,
@Nonnull String var4,
@Nonnull PacketHandler var5,
@Nonnull ChunkTracker var6
) {
this.holder = var1;
this.uuid = var2;
this.username = var3;
this.language = var4;
this.packetHandler = var5;
this.chunkTracker = var6;
}
@Nullable
class="kw">public Ref<EntityStore> addToStore(@Nonnull Store<EntityStore> var1) {
var1.assertThread();
if (this.holder == null) {
throw new IllegalStateException("Already in world");
} else {
class="kw">return var1.addEntity(this.holder, AddReason.LOAD);
}
}
class="kw">public void addedToStore(Ref<EntityStore> var1) {
this.holder = null;
this.entity = var1;
}
@Nonnull
class="kw">public Holder<EntityStore> removeFromStore() {
if (this.entity == null) {
throw new IllegalStateException("Not in world");
}
this.entity.getStore().assertThread();
Ref var1 = this.entity;
this.entity = null;
class="kw">return this.holder = var1.getStore().removeEntity(var1, RemoveReason.UNLOAD);
}
class="kw">public boolean isValid() {
class="kw">return this.entity != null || this.holder != null;
}
@Nullable
class="kw">public Ref<EntityStore> getReference() {
class="kw">return this.entity != null && this.entity.isValid() ? this.entity : null;
}
@Nullable
class="kw">public Holder<EntityStore> getHolder() {
class="kw">return this.holder;
}
@Nullable
@Deprecated
class="kw">public <T class="kw">extends Component<EntityStore>> T getComponent(@Nonnull ComponentType<EntityStore, T> var1) {
if (this.holder != null) {
class="kw">return this.holder.getComponent(var1);
}
Store var2 = this.entity.getStore();
if (var2.isInThread()) {
class="kw">return var2.getComponent(this.entity, var1);
}
((HytaleLogger.Api)LOGGER.at(Level.SEVERE).withCause(new SkipSentryException()))
.log("PlayerRef.getComponent(%s) called async with player in world", var1.getTypeClass().getSimpleName());
class="kw">return CompletableFuture.<T>supplyAsync(() -> this.getComponent(var1), var2.getExternalData().getWorld()).join();
}
@Nullable
class="kw">public <T class="kw">extends Component<EntityStore>> T getComponentConcurrent(@Nonnull ComponentType<EntityStore, T> var1) {
Holder var2 = this.holder;
if (var2 != null) {
class="kw">return var2.getComponent(var1);
}
Ref var3 = this.entity;
class="kw">return var3 != null ? var3.getStore().getComponentConcurrent(var3, var1) : null;
}
@Nonnull
@Override
class="kw">public UUID getUuid() {
class="kw">return this.uuid;
}
@Nonnull
@Override
class="kw">public String getUsername() {
class="kw">return this.username;
}
@Override
class="kw">public boolean hasPermission(@Nonnull String var1) {
class="kw">return PermissionsModule.get().hasPermission(this.uuid, var1);
}
@Override
class="kw">public boolean hasPermission(@Nonnull String var1, boolean var2) {
class="kw">return PermissionsModule.get().hasPermission(this.uuid, var1, var2);
}
@Override
class="kw">public boolean hasPermission(@Nonnull PermissionQuery var1) {
class="kw">return PermissionsModule.get().hasPermission(this.uuid, var1, false);
}
@Override
class="kw">public boolean hasPermission(@Nonnull PermissionQuery var1, boolean var2) {
class="kw">return PermissionsModule.get().hasPermission(this.uuid, var1, var2);
}
@Nonnull
class="kw">public PacketHandler getPacketHandler() {
class="kw">return this.packetHandler;
}
@Nonnull
class="kw">public ChunkTracker getChunkTracker() {
class="kw">return this.chunkTracker;
}
@Nonnull
class="kw">public HiddenPlayersManager getHiddenPlayersManager() {
class="kw">return this.hiddenPlayersManager;
}
@Nonnull
class="kw">public TeleportAckTracker getTeleportAckTracker() {
class="kw">return this.teleportAckTracker;
}
@Nonnull
class="kw">public String getLanguage() {
class="kw">return this.language;
}
class="kw">public void setLanguage(@Nonnull String var1) {
this.language = var1;
}
@Nonnull
class="kw">public Transform getTransform() {
class="kw">return this.transform;
}
@Nullable
class="kw">public UUID getWorldUuid() {
class="kw">return this.worldUuid;
}
class="kw">public void setWorldUuid(@Nonnull UUID var1) {
this.worldUuid = var1;
}
@Nonnull
class="kw">public Rotation3f getHeadRotation() {
class="kw">return this.headRotation;
}
class="kw">public void updatePosition(@Nonnull World var1, @Nonnull Transform var2, @Nonnull Rotation3f var3) {
this.worldUuid = var1.getWorldConfig().getUuid();
this.transform.set(var2);
this.headRotation.set(var3);
}
@Deprecated
class="kw">public void replaceHolder(@Nonnull Holder<EntityStore> var1) {
if (var1 == null) {
throw new IllegalStateException("Player is still in the world");
}
this.holder = var1;
}
@Nonnull
@Override
class="kw">public Component<EntityStore> clone() {
class="kw">return this;
}
@Nonnull
@Override
class="kw">public MetricResults toMetricResults() {
class="kw">return METRICS_REGISTRY.toMetricResults(this);
}
class="kw">public void referToServer(@Nonnull String var1, int var2) {
this.referToServer(var1, var2, null);
}
class="kw">public void referToServer(@Nonnull String var1, int var2, @Nullable byte[] var3) {
int var4 = 4096;
Objects.requireNonNull(var1, "Host cannot be null");
if (var2 > 0 && var2 <= 65535) {
if (var3 != null && var3.length > 4096) {
throw new IllegalArgumentException("Referral data exceeds maximum size of 4096 bytes (got " + var3.length + ")");
}
HytaleLogger.getLogger()
.at(Level.INFO)
.log("Referring player %s (%s) to %s:%d with %d bytes of data", this.username, this.uuid, var1, var2, var3 != null ? var3.length : 0);
this.packetHandler.writeNoCache(new ClientReferral(new HostAddress(var1, (short)var2), var3));
} else {
throw new IllegalArgumentException("Port must be between 1 and 65535");
}
}
@Override
class="kw">public void sendMessage(@Nonnull Message var1) {
this.packetHandler.writeNoCache(new ServerMessage(ChatType.Chat, var1.getFormattedMessage()));
}
}