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