PlayerAddedSystem class

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

Файл: com/hypixel/hytale/server/core/modules/entity/player/PlayerSystems.java

extends: RefSystem<EntityStore>

Поля (36)

МодификаторыТипИмя
private static final Message MESSAGE_SERVER_GENERAL_KILLED_BY_UNKNOWN
private final Set<Dependency<EntityStore>> dependencies
private final Query<EntityStore> query
PlayerWorldData var10
GameplayConfig var11
SpawnConfig var12
MaterialQuantity[] var13
CombinedItemContainer var14
InventoryComponent.Armor var15
InventoryComponent.Hotbar var16
InventoryComponent.Utility var17
InventoryComponent.Tool var18
InventoryComponent.Backpack var19
HytaleServerConfig.Defaults var2
DeathComponent var20
Message var21
var21
RespawnPage var22
Vector3d var23
SpatialResource var24
List var25
WorldParticle[] var26
var26
PacketHandler var27
InventoryComponent.Storage var28
PersistentGameModeType var29
HardcoreMode var3
TransformComponent var30
WorldParticle[] var31
HardcoreState var4
World var5
Player var5
Player var6
PlayerRef var7
MovementManager var8
Message var9

Методы (13)

МодификаторыВозвратСигнатура
private static int deathScreenLivesRemainingprivate static int deathScreenLivesRemaining(@Nonnull Ref<EntityStore> var0, @Nonnull CommandBuffer<EntityStore> var1)
public Set<Dependency<EntityStore>> getDependenciespublic Set<Dependency<EntityStore>> getDependencies()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
if if(var20 != null)
if if(var21 == null)
if if(var29 != null)
if if(var30 != null)
if if(var26 == null)
if if(var26 != null)
if if(var31 != null)
if if(var3 == HardcoreMode.Global)
public void onEntityAddedpublic void onEntityAdded(@Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)
public void onEntityRemovepublic void onEntityRemove(@Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)

Исходный код

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

class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.Archetype;
class="kw">import com.hypixel.hytale.component.ArchetypeChunk;
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.dependency.Dependency;
class="kw">import com.hypixel.hytale.component.dependency.Order;
class="kw">import com.hypixel.hytale.component.dependency.SystemDependency;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.spatial.SpatialResource;
class="kw">import com.hypixel.hytale.component.system.EntityEventSystem;
class="kw">import com.hypixel.hytale.component.system.HolderSystem;
class="kw">import com.hypixel.hytale.component.system.QuerySystem;
class="kw">import com.hypixel.hytale.component.system.RefChangeSystem;
class="kw">import com.hypixel.hytale.component.system.RefSystem;
class="kw">import com.hypixel.hytale.component.system.tick.EntityTickingSystem;
class="kw">import com.hypixel.hytale.component.system.tick.RunWhenPausedSystem;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
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.ComponentUpdate;
class="kw">import com.hypixel.hytale.protocol.EntityEffectsUpdate;
class="kw">import com.hypixel.hytale.protocol.EntityStatsUpdate;
class="kw">import com.hypixel.hytale.protocol.EntityUpdate;
class="kw">import com.hypixel.hytale.protocol.EquipmentUpdate;
class="kw">import com.hypixel.hytale.protocol.IntangibleUpdate;
class="kw">import com.hypixel.hytale.protocol.InteractableUpdate;
class="kw">import com.hypixel.hytale.protocol.InvulnerableUpdate;
class="kw">import com.hypixel.hytale.protocol.ModelTransform;
class="kw">import com.hypixel.hytale.protocol.ModelUpdate;
class="kw">import com.hypixel.hytale.protocol.NameplateUpdate;
class="kw">import com.hypixel.hytale.protocol.PlayerSkinUpdate;
class="kw">import com.hypixel.hytale.protocol.PredictionUpdate;
class="kw">import com.hypixel.hytale.protocol.PreventEmotesUpdate;
class="kw">import com.hypixel.hytale.protocol.PreventInventoryAccessUpdate;
class="kw">import com.hypixel.hytale.protocol.RespondToHitUpdate;
class="kw">import com.hypixel.hytale.protocol.TransformUpdate;
class="kw">import com.hypixel.hytale.protocol.packets.buildertools.BuilderToolsSetSoundSet;
class="kw">import com.hypixel.hytale.protocol.packets.entities.EntityUpdates;
class="kw">import com.hypixel.hytale.protocol.packets.inventory.SetActiveSlot;
class="kw">import com.hypixel.hytale.protocol.packets.inventory.UpdatePlayerInventory;
class="kw">import com.hypixel.hytale.protocol.packets.player.SetBlockPlacementOverride;
class="kw">import com.hypixel.hytale.server.core.HytaleServer;
class="kw">import com.hypixel.hytale.server.core.HytaleServerConfig;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.asset.type.gamemode.GameModeType;
class="kw">import com.hypixel.hytale.server.core.asset.type.gameplay.GameplayConfig;
class="kw">import com.hypixel.hytale.server.core.asset.type.gameplay.SpawnConfig;
class="kw">import com.hypixel.hytale.server.core.asset.type.particle.config.WorldParticle;
class="kw">import com.hypixel.hytale.server.core.entity.Entity;
class="kw">import com.hypixel.hytale.server.core.entity.effect.EffectControllerComponent;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.data.PlayerWorldData;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.data.UniqueItemUsagesComponent;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.movement.MovementManager;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.pages.RespawnPage;
class="kw">import com.hypixel.hytale.server.core.entity.nameplate.Nameplate;
class="kw">import com.hypixel.hytale.server.core.event.events.player.RemovedPlayerFromWorldEvent;
class="kw">import com.hypixel.hytale.server.core.inventory.InventoryComponent;
class="kw">import com.hypixel.hytale.server.core.inventory.InventoryUtils;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.inventory.MaterialQuantity;
class="kw">import com.hypixel.hytale.server.core.inventory.container.CombinedItemContainer;
class="kw">import com.hypixel.hytale.server.core.inventory.container.SimpleItemContainer;
class="kw">import com.hypixel.hytale.server.core.inventory.transaction.ItemStackTransaction;
class="kw">import com.hypixel.hytale.server.core.io.PacketHandler;
class="kw">import com.hypixel.hytale.server.core.modules.entity.EntityModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.BreathingComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.DisplayNameComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.EntityScaleComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.Intangible;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.Interactable;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.Invulnerable;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.ModelComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.PersistentDisplayName;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.PersistentGameModeType;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.PlayerLives;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.PreventEmotes;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.PreventInventoryAccess;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.RespondToHit;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DeathComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.event.KillFeedEvent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.gamemode.GameModeTypeState;
class="kw">import com.hypixel.hytale.server.core.modules.entity.item.DropItemsComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.teleport.Teleport;
class="kw">import com.hypixel.hytale.server.core.modules.entity.tracker.EntityTrackerSystems;
class="kw">import com.hypixel.hytale.server.core.modules.entity.tracker.NetworkId;
class="kw">import com.hypixel.hytale.server.core.modules.entitystats.EntityStatMap;
class="kw">import com.hypixel.hytale.server.core.modules.projectile.component.PredictedProjectile;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.Universe;
class="kw">import com.hypixel.hytale.server.core.universe.hardcore.HardcoreMode;
class="kw">import com.hypixel.hytale.server.core.universe.hardcore.HardcoreState;
class="kw">import com.hypixel.hytale.server.core.universe.world.ParticleUtil;
class="kw">import com.hypixel.hytale.server.core.universe.world.PlayerUtil;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.WorldConfig;
class="kw">import com.hypixel.hytale.server.core.universe.world.meta.state.BlockMapMarker;
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 it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.util.List;
class="kw">import java.util.Objects;
class="kw">import java.util.Set;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;

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

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

   class="kw">public class="kw">static class BlockPausedMovementSystem class="kw">implements RunWhenPausedSystem<EntityStore>, QuerySystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query = Query.and(
         Player.getComponentType(), PlayerInput.getComponentType(), TransformComponent.getComponentType(), HeadRotation.getComponentType()
      );

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

      @Override
      class="kw">public void tick(float var1, int var2, @Nonnull Store<EntityStore> var3) {
         var3.forEachChunk(var2, PlayerSystems.BlockPausedMovementSystem::onTick);
      }

      class="kw">private class="kw">static void onTick(@Nonnull ArchetypeChunk<EntityStore> var0, @Nonnull CommandBuffer<EntityStore> var1) {
         for (int var2 = 0; var2 < var0.size(); var2++) {
            PlayerInput var3 = var0.getComponent(var2, PlayerInput.getComponentType());
            assert var3 != null;
            boolean var4 = false;
            TransformComponent var5 = var0.getComponent(var2, TransformComponent.getComponentType());
            assert var5 != null;
            HeadRotation var6 = var0.getComponent(var2, HeadRotation.getComponentType());
            assert var6 != null;
            List var7 = var3.getMovementUpdateQueue();

            for (PlayerInput.InputUpdate var9 : var7) {
               class="kw">switch (var9) {
                  case PlayerInput.AbsoluteMovement var12:
                     var4 = var5.getPosition().distanceSquared(var12.getX(), var12.getY(), var12.getZ()) > 0.01F;
                     break;
                  case PlayerInput.RelativeMovement var13:
                     Vector3d var17 = var5.getPosition();
                     var4 = var5.getPosition().distanceSquared(var17.x + var13.getX(), var17.y + var13.getY(), var17.z + var13.getZ()) > 0.01F;
                     break;
                  case PlayerInput.SetHead var14:
                     var4 = var6.getRotation().distanceSquaredTo(var14.direction().pitch, var14.direction().yaw, var14.direction().roll) > 0.01F;
                     break;
                  class="kw">default:
               }
            }

            var7.clear();
            if (var4) {
               Teleport var15 = Teleport.createExact(var5.getPosition(), var5.getRotation(), var6.getRotation()).withoutVelocityReset();
               Ref var16 = var0.getReferenceTo(var2);
               var1.addComponent(var16, Teleport.getComponentType(), var15);
            }
         }
      }

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

   class="kw">public class="kw">static class KillFeedDecedentEventSystem class="kw">extends EntityEventSystem<EntityStore, KillFeedEvent.DecedentMessage> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, PlayerRef> playerRefComponentType = PlayerRef.getComponentType();

      class="kw">public KillFeedDecedentEventSystem() {
         super(KillFeedEvent.DecedentMessage.class);
      }

      class="kw">public void handle(
         int var1,
         @Nonnull ArchetypeChunk<EntityStore> var2,
         @Nonnull Store<EntityStore> var3,
         @Nonnull CommandBuffer<EntityStore> var4,
         @Nonnull KillFeedEvent.DecedentMessage var5
      ) {
         DisplayNameComponent var7 = var2.getComponent(var1, DisplayNameComponent.getComponentType());
         Message var6;
         if (var7 != null) {
            var6 = var7.getDisplayName();
         } else {
            PlayerRef var8 = var2.getComponent(var1, this.playerRefComponentType);
            assert var8 != null;
            var6 = Message.raw(var8.getUsername());
         }

         var5.setMessage(var6);
      }

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

   class="kw">public class="kw">static class KillFeedKillerEventSystem class="kw">extends EntityEventSystem<EntityStore, KillFeedEvent.KillerMessage> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, PlayerRef> playerRefComponentType = PlayerRef.getComponentType();

      class="kw">public KillFeedKillerEventSystem() {
         super(KillFeedEvent.KillerMessage.class);
      }

      class="kw">public void handle(
         int var1,
         @Nonnull ArchetypeChunk<EntityStore> var2,
         @Nonnull Store<EntityStore> var3,
         @Nonnull CommandBuffer<EntityStore> var4,
         @Nonnull KillFeedEvent.KillerMessage var5
      ) {
         DisplayNameComponent var7 = var2.getComponent(var1, DisplayNameComponent.getComponentType());
         Message var6;
         if (var7 != null) {
            var6 = var7.getDisplayName();
         } else {
            PlayerRef var8 = var2.getComponent(var1, this.playerRefComponentType);
            assert var8 != null;
            var6 = Message.raw(var8.getUsername());
         }

         var5.setMessage(var6);
      }

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

   class="kw">public class="kw">static class NameplateRefChangeSystem class="kw">extends RefChangeSystem<EntityStore, DisplayNameComponent> {
      class="kw">public NameplateRefChangeSystem() {
      }

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

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

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull DisplayNameComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         Nameplate var5 = var4.ensureAndGetComponent(var1, Nameplate.getComponentType());
         var5.setText(var2.getDisplayName() != null ? var2.getDisplayName().getAnsiMessage() : "");
      }

      class="kw">public void onComponentSet(
         @Nonnull Ref<EntityStore> var1,
         DisplayNameComponent var2,
         @Nonnull DisplayNameComponent var3,
         @Nonnull Store<EntityStore> var4,
         @Nonnull CommandBuffer<EntityStore> var5
      ) {
         Nameplate var6 = var5.ensureAndGetComponent(var1, Nameplate.getComponentType());
         var6.setText(var3.getDisplayName() != null ? var3.getDisplayName().getAnsiMessage() : "");
      }

      class="kw">public void onComponentRemoved(
         @Nonnull Ref<EntityStore> var1, @Nonnull DisplayNameComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         Nameplate var5 = var4.ensureAndGetComponent(var1, Nameplate.getComponentType());
         var5.setText("");
      }
   }

   class="kw">public class="kw">static class NameplateRefSystem class="kw">extends RefSystem<EntityStore> {
      class="kw">public NameplateRefSystem() {
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return Archetype.of(Player.getComponentType(), DisplayNameComponent.getComponentType());
      }

      @Override
      class="kw">public void onEntityAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         DisplayNameComponent var5 = var4.getComponent(var1, DisplayNameComponent.getComponentType());
         assert var5 != null;
         if (var4.getComponent(var1, Nameplate.getComponentType()) == null) {
            String var6 = var5.getDisplayName() != null ? var5.getDisplayName().getAnsiMessage() : "";
            Nameplate var7 = new Nameplate(var6);
            var4.putComponent(var1, Nameplate.getComponentType(), var7);
         }
      }

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

   class="kw">public class="kw">static class PlayerAddedSystem class="kw">extends RefSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">static class="kw">final Message MESSAGE_SERVER_GENERAL_KILLED_BY_UNKNOWN = Message.translation("server.general.killedByUnknown");
      @Nonnull
      class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies = Set.of(new SystemDependency<>(Order.AFTER, PlayerSystems.PlayerSpawnedSystem.class));
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query;

      class="kw">public PlayerAddedSystem(@Nonnull ComponentType<EntityStore, MovementManager> var1) {
         this.query = Query.and(Player.getComponentType(), PlayerRef.getComponentType(), var1);
      }

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

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return this.dependencies;
      }

      @Override
      class="kw">public void onEntityAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         World var5 = var4.getExternalData().getWorld();
         Player var6 = var4.getComponent(var1, Player.getComponentType());
         assert var6 != null;
         PlayerRef var7 = var4.getComponent(var1, PlayerRef.getComponentType());
         assert var7 != null;
         MovementManager var8 = var4.getComponent(var1, MovementManager.getComponentType());
         assert var8 != null;
         if (var4.getComponent(var1, PersistentDisplayName.getComponentType()) == null) {
            Message var9 = Message.raw(var7.getUsername());
            var4.putComponent(var1, DisplayNameComponent.getComponentType(), new DisplayNameComponent(var9));
         }

         var6.setLastSpawnTimeNanos(System.nanoTime());
         PacketHandler var27 = var7.getPacketHandler();
         Objects.requireNonNull(var5, "world");
         Objects.requireNonNull(var6.getPlayerConfigData(), "data");
         PlayerWorldData var10 = var6.getPlayerConfigData().getPerWorldData(var5.getName());
         Player.initGameMode(var1, var4);
         GameplayConfig var11 = var5.getGameplayConfig();
         SpawnConfig var12 = var11.getSpawnConfig();
         var27.writeNoCache(new BuilderToolsSetSoundSet(var11.getCreativePlaySoundSetIndex()));
         MaterialQuantity[] var13 = var12.getFirstSpawnItems();
         if (var6.isFirstSpawn() && var13 != null) {
            CombinedItemContainer var14 = InventoryComponent.getCombined(var4, var1, InventoryComponent.HOTBAR_FIRST);
            SimpleItemContainer.addOrDropItemStacks(var4, var1, var14, MaterialQuantity.toItemStacks(var13));
         }

         InventoryComponent.Storage var28 = var4.getComponent(var1, InventoryComponent.Storage.getComponentType());
         InventoryComponent.Armor var15 = var4.getComponent(var1, InventoryComponent.Armor.getComponentType());
         InventoryComponent.Hotbar var16 = var4.getComponent(var1, InventoryComponent.Hotbar.getComponentType());
         InventoryComponent.Utility var17 = var4.getComponent(var1, InventoryComponent.Utility.getComponentType());
         InventoryComponent.Tool var18 = var4.getComponent(var1, InventoryComponent.Tool.getComponentType());
         InventoryComponent.Backpack var19 = var4.getComponent(var1, InventoryComponent.Backpack.getComponentType());
         var27.writeNoCache(
            new UpdatePlayerInventory(
               var28 != null ? var28.getInventory().toPacket() : null,
               var15 != null ? var15.getInventory().toPacket() : null,
               var16 != null ? var16.getInventory().toPacket() : null,
               var17 != null ? var17.getInventory().toPacket() : null,
               var18 != null ? var18.getInventory().toPacket() : null,
               var19 != null ? var19.getInventory().toPacket() : null
            )
         );
         var27.writeNoCache(new SetActiveSlot(-1, var16 != null ? var16.getActiveSlot() : -1));
         var27.writeNoCache(new SetActiveSlot(-5, var17 != null ? var17.getActiveSlot() : -1));
         var27.writeNoCache(new SetActiveSlot(-8, var18 != null ? var18.getActiveSlot() : -1));
         if (InventoryUtils.containsBrokenItem(var1, var4)) {
            var7.sendMessage(Message.translation("server.general.repair.itemBrokenOnRespawn").color("#ff5555"));
         }

         var27.writeNoCache(new SetBlockPlacementOverride(var6.isOverrideBlockPlacementRestrictions()));
         DeathComponent var20 = var4.getComponent(var1, DeathComponent.getComponentType());
         if (var20 != null) {
            Message var21 = var20.getDeathMessage();
            if (var21 == null) {
               ((HytaleLogger.Api)Entity.LOGGER.at(Level.SEVERE).withCause(new Throwable()))
                  .log("Player wasn't alive but didn't have a pending death message?");
               var21 = MESSAGE_SERVER_GENERAL_KILLED_BY_UNKNOWN;
            }

            RespawnPage var22 = RespawnPage.forRespawn(
               var7, var21, var20.displayDataOnDeathScreen(), var20.getDeathItemLoss(), deathScreenLivesRemaining(var1, var4)
            );
            var6.getPageManager().openCustomPage(var1, var3, var22);
         }

         PersistentGameModeType var29 = var4.getComponent(var1, PersistentGameModeType.getComponentType());
         if (var29 != null) {
            GameModeTypeState.apply(var1, GameModeType.getAssetMap().getAsset(var29.getGameModeTypeId()), var4);
         }

         TransformComponent var30 = var4.getComponent(var1, TransformComponent.getComponentType());
         if (var30 != null) {
            Vector3d var23 = var30.getPosition();
            SpatialResource var24 = var4.getResource(EntityModule.get().getPlayerSpatialResourceType());
            List var25 = SpatialResource.getThreadLocalReferenceList();
            var24.getSpatialStructure().collect(var23, 75.0, var25);
            var25.add(var1);
            if (var6.isFirstSpawn()) {
               WorldParticle[] var26 = var12.getFirstSpawnParticles();
               if (var26 == null) {
                  var26 = var12.getSpawnParticles();
               }

               if (var26 != null) {
                  ParticleUtil.spawnParticleEffects(var26, var23, null, var25, var4);
               }
            } else {
               WorldParticle[] var31 = var12.getSpawnParticles();
               if (var31 != null) {
                  ParticleUtil.spawnParticleEffects(var31, var23, null, var25, var4);
               }
            }
         }

         var27.tryFlush();
         BlockMapMarker.retainRevealedMarkers(var5, var10);
         var10.setFirstSpawn(false);
      }

      @Override
      class="kw">public void onEntityRemove(
         @Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         Player var5 = var4.getComponent(var1, Player.getComponentType());
         assert var5 != null;
         var5.getWindowManager().closeAllWindows(var1, var4);
      }

      class="kw">private class="kw">static int deathScreenLivesRemaining(@Nonnull Ref<EntityStore> var0, @Nonnull CommandBuffer<EntityStore> var1) {
         HytaleServerConfig.Defaults var2 = HytaleServer.get().getConfig().getDefaults();
         HardcoreMode var3 = var2.getHardcoreMode();
         if (var3 == HardcoreMode.Global) {
            HardcoreState var4 = Universe.get().getResource(HardcoreState.getResourceType());
            class="kw">return var4.isGameOver() ? 0 : Math.max(var4.getPoolRemaining(var2.getHardcoreLives()), 0);
         } else {
            class="kw">return !var3.showsPersonalLives(var2.getHardcoreLives()) ? 0 : Math.max(PlayerLives.getRemainingOrDefault(var0, var1, var2.getHardcoreLives()), 0);
         }
      }
   }

   class="kw">public class="kw">static class PlayerInitSystem class="kw">extends HolderSystem<EntityStore> {
      class="kw">public PlayerInitSystem() {
      }

      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return PlayerRef.getComponentType();
      }

      @Override
      class="kw">public void onEntityAdd(@Nonnull Holder<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3) {
         var1.ensureComponent(PlayerInput.getComponentType());
         var1.ensureComponent(EffectControllerComponent.getComponentType());
         var1.ensureComponent(UniqueItemUsagesComponent.getComponentType());
         var1.ensureComponent(BreathingComponent.getComponentType());
         Player var4 = var1.getComponent(Player.getComponentType());
         assert var4 != null;
         var4.getInventory().migrateToComponents(var1);
         List var5 = new ObjectArrayList();
         InventoryComponent.Storage var6 = ensureInventory(var1, InventoryComponent.Storage.getComponentType(), (short)36, var5);
         ensureInventory(var1, InventoryComponent.Armor.getComponentType(), InventoryComponent.DEFAULT_ARMOR_CAPACITY, var5);
         InventoryComponent.Hotbar var7 = ensureInventory(var1, InventoryComponent.Hotbar.getComponentType(), (short)9, var5);
         ensureInventory(var1, InventoryComponent.Utility.getComponentType(), (short)4, var5);
         ensureInventory(var1, InventoryComponent.Tool.getComponentType(), (short)23, var5);
         var1.ensureComponent(InventoryComponent.Backpack.getComponentType());
         if (!var5.isEmpty()) {
            List var8 = addReturningLeftovers(var7, var5);
            if (!var8.isEmpty()) {
               var8 = addReturningLeftovers(var6, var8);
            }

            if (!var8.isEmpty()) {
               DropItemsComponent.queue(var1, var8);
            }
         }

         var4.getInventory().backwardsCompatHook(var1);
      }

      class="kw">private class="kw">static <T class="kw">extends InventoryComponent> T ensureInventory(
         @Nonnull Holder<EntityStore> var0, @Nonnull ComponentType<EntityStore, T> var1, short var2, @Nonnull List<ItemStack> var3
      ) {
         var0.ensureComponent(var1);
         InventoryComponent var4 = (T)var0.getComponent(var1);
         assert var4 != null;
         var4.ensureCapacity(var2, var3);
         class="kw">return var4;
      }

      @Nonnull
      class="kw">private class="kw">static List<ItemStack> addReturningLeftovers(@Nonnull InventoryComponent var0, @Nonnull List<ItemStack> var1) {
         List var2 = new ObjectArrayList();

         for (ItemStackTransaction var4 : var0.getInventory().addItemStacks(var1).getList()) {
            ItemStack var5 = var4.getRemainder();
            if (!ItemStack.isEmpty(var5)) {
               var2.add(var5);
            }
         }

         class="kw">return var2;
      }

      @Override
      class="kw">public void onEntityRemoved(@Nonnull Holder<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3) {
         var1.removeComponent(PlayerInput.getComponentType());
      }
   }

   class="kw">public class="kw">static class PlayerRemovedSystem class="kw">extends HolderSystem<EntityStore> {
      class="kw">public PlayerRemovedSystem() {
      }

      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return Query.and(
            PlayerRef.getComponentType(),
            Player.getComponentType(),
            TransformComponent.getComponentType(),
            HeadRotation.getComponentType(),
            DisplayNameComponent.getComponentType()
         );
      }

      @Override
      class="kw">public void onEntityAdd(@Nonnull Holder<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3) {
      }

      @Override
      class="kw">public void onEntityRemoved(@Nonnull Holder<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3) {
         World var4 = var3.getExternalData().getWorld();
         PlayerRef var5 = var1.getComponent(PlayerRef.getComponentType());
         assert var5 != null;
         Player var6 = var1.getComponent(Player.getComponentType());
         assert var6 != null;
         TransformComponent var7 = var1.getComponent(TransformComponent.getComponentType());
         assert var7 != null;
         HeadRotation var8 = var1.getComponent(HeadRotation.getComponentType());
         assert var8 != null;
         DisplayNameComponent var9 = var1.getComponent(DisplayNameComponent.getComponentType());
         assert var9 != null;
         Message var10 = var9.getDisplayName();
         PlayerSystems.LOGGER
            .at(Level.INFO)
            .log(
               "Removing player '%s%s' from world '%s' (%s)",
               var5.getUsername(),
               var10 != null ? " (" + var10.getAnsiMessage() + ")" : "",
               var4.getName(),
               var5.getUuid()
            );
         var6.getPlayerConfigData()
            .getPerWorldData(var4.getName())
            .setLastPosition(new Transform(new Vector3d(var7.getPosition()), new Rotation3f(var8.getRotation())));
         var5.getPacketHandler().setQueuePackets(false);
         var5.getPacketHandler().tryFlush();
         WorldConfig var11 = var4.getWorldConfig();
         Message var12 = Message.translation("server.general.playerLeftWorld")
            .param("username", var5.getUsername())
            .param("world", var11.getDisplayName() != null ? var11.getDisplayName() : WorldConfig.formatDisplayName(var4.getName()));
         RemovedPlayerFromWorldEvent var13 = HytaleServer.get()
            .getEventBus()
            .dispatchFor(RemovedPlayerFromWorldEvent.class, var4.getName())
            .dispatch(new RemovedPlayerFromWorldEvent(var1, var4, var12));
         if (var13.shouldBroadcastLeaveMessage()) {
            PlayerUtil.broadcastMessageToPlayers(var5.getUuid(), var13.getLeaveMessage(), var3);
         }
      }
   }

   class="kw">public class="kw">static class PlayerSpawnedSystem class="kw">extends RefSystem<EntityStore> {
      class="kw">public PlayerSpawnedSystem() {
      }

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

      @Override
      class="kw">public void onEntityAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         sendPlayerSelf(var1, var3);
      }

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

      @Deprecated
      class="kw">public class="kw">static void sendPlayerSelf(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1) {
         EntityTrackerSystems.EntityViewer var2 = var1.getComponent(var0, EntityTrackerSystems.EntityViewer.getComponentType());
         if (var2 == null) {
            throw new IllegalArgumentException("Viewer is missing EntityViewer component");
         }

         NetworkId var3 = var1.getComponent(var0, NetworkId.getComponentType());
         if (var3 == null) {
            throw new IllegalArgumentException("Viewer is missing NetworkId component");
         }

         EntityUpdate var4 = new EntityUpdate();
         var4.networkId = var3.getId();
         ObjectArrayList var5 = new ObjectArrayList();
         Archetype var6 = var1.getArchetype(var0);
         if (var6.contains(Interactable.getComponentType())) {
            var5.add(new InteractableUpdate());
         }

         if (var6.contains(Intangible.getComponentType())) {
            var5.add(new IntangibleUpdate());
         }

         if (var6.contains(Invulnerable.getComponentType())) {
            var5.add(new InvulnerableUpdate());
         }

         if (var6.contains(RespondToHit.getComponentType())) {
            var5.add(new RespondToHitUpdate());
         }

         if (var6.contains(PreventInventoryAccess.getComponentType())) {
            var5.add(new PreventInventoryAccessUpdate());
         }

         if (var6.contains(PreventEmotes.getComponentType())) {
            var5.add(new PreventEmotesUpdate());
         }

         Nameplate var7 = var1.getComponent(var0, Nameplate.getComponentType());
         if (var7 != null) {
            var5.add(new NameplateUpdate(var7.getText()));
         }

         PredictedProjectile var8 = var1.getComponent(var0, PredictedProjectile.getComponentType());
         if (var8 != null) {
            var5.add(new PredictionUpdate(var8.getUuid()));
         }

         ModelComponent var9 = var1.getComponent(var0, ModelComponent.getComponentType());
         ModelUpdate var10 = new ModelUpdate();
         var10.model = var9 != null ? var9.getModel().toPacket() : null;
         EntityScaleComponent var11 = var1.getComponent(var0, EntityScaleComponent.getComponentType());
         if (var11 != null) {
            var10.entityScale = var11.getScale();
         }

         var5.add(var10);
         PlayerSkinComponent var14 = var1.getComponent(var0, PlayerSkinComponent.getComponentType());
         var5.add(new PlayerSkinUpdate(var14 != null ? var14.getPlayerSkin() : null));
         PlayerSettings var15 = var1.getComponent(var0, PlayerSettings.getComponentType());
         InventoryComponent.Armor var17 = var1.getComponent(var0, InventoryComponent.Armor.getComponentType());
         InventoryComponent.Utility var12 = var1.getComponent(var0, InventoryComponent.Utility.getComponentType());
         EquipmentUpdate updatex = InventoryUtils.createEquipmentUpdate(var0, var1, var15, var17, var12);
         var5.add(updatex);
         TransformComponent var16 = var1.getComponent(var0, TransformComponent.getComponentType());
         HeadRotation var18 = var1.getComponent(var0, HeadRotation.getComponentType());
         if (var16 != null && var18 != null) {
            TransformUpdate updatexx = new TransformUpdate();
            updatexx.transform = new ModelTransform();
            updatexx.transform.position = PositionUtil.toPositionPacket(var16.getPosition());
            updatexx.transform.bodyOrientation = PositionUtil.toDirectionPacket(var16.getRotation());
            updatexx.transform.lookOrientation = PositionUtil.toDirectionPacket(var18.getRotation());
            var5.add(updatexx);
         }

         EffectControllerComponent var20 = var1.getComponent(var0, EffectControllerComponent.getComponentType());
         if (var20 != null) {
            var5.add(new EntityEffectsUpdate(var20.createInitUpdates()));
         }

         EntityStatMap var21 = var1.getComponent(var0, EntityStatMap.getComponentType());
         if (var21 != null) {
            var5.add(new EntityStatsUpdate(var21.createInitUpdate(true)));
         }

         var4.updates = (ComponentUpdate[])var5.toArray(ComponentUpdate[]::new);
         var2.packetReceiver.writeNoCache(new EntityUpdates(null, new EntityUpdate[]{var4}));
      }
   }

   class="kw">public class="kw">static class ProcessPlayerInput class="kw">extends EntityTickingSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query = Query.and(Player.getComponentType(), PlayerInput.getComponentType(), TransformComponent.getComponentType());

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

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

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         PlayerInput var6 = var3.getComponent(var2, PlayerInput.getComponentType());
         assert var6 != null;
         List var7 = var6.getMovementUpdateQueue();

         for (PlayerInput.InputUpdate var9 : var7) {
            var9.apply(var5, var3, var2);
         }

         var7.clear();
      }
   }

   class="kw">public class="kw">static class UpdatePlayerRef class="kw">extends EntityTickingSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query = Query.and(PlayerRef.getComponentType(), TransformComponent.getComponentType(), HeadRotation.getComponentType());

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

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

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         World var6 = var5.getExternalData().getWorld();
         TransformComponent var7 = var3.getComponent(var2, TransformComponent.getComponentType());
         assert var7 != null;
         Transform var8 = var7.getTransform();
         HeadRotation var9 = var3.getComponent(var2, HeadRotation.getComponentType());
         assert var9 != null;
         Rotation3f var10 = var9.getRotation();
         PlayerRef var11 = var3.getComponent(var2, PlayerRef.getComponentType());
         assert var11 != null;
         var11.updatePosition(var6, var8, var10);
      }
   }
}