PlayerDeathScreen class

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

Файл: com/hypixel/hytale/server/core/modules/entity/damage/DeathSystems.java

extends: DeathSystems.OnDeathSystem

Поля (29)

МодификаторыТипИмя
private static final HytaleLogger LOGGER
Universe var1
GameModeType var1
HardcoreState var2
String var3
HytaleServerConfig.Defaults var3
int var3
DeathComponent var3
Message var3
var3
DeathComponent var4
HardcoreMode var4
PlayerLives var4
Damage var4
String var5
Message var5
Player var5
int var5
int var6
GameMode var6
int var6
Player var6
GameMode var7
Player var7
PlayerRef var7
int var8
RespawnPage var8
var8
var8

Методы (27)

МодификаторыВозвратСигнатура
private static int burnLifeAndGetRemainingprivate static int burnLifeAndGetRemaining(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1, @Nonnull CommandBuffer<EntityStore> var2)
private static int burnPersonalLifeprivate static int burnPersonalLife(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1, @Nonnull CommandBuffer<EntityStore> var2, int var3)
private static int burnPoolLifeprivate static int burnPoolLife(int var0)
private static Message computeDeathMessageprivate static Message computeDeathMessage(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1, @Nonnull DeathComponent var2)
private static String deathScreenMessageprivate static String deathScreenMessage(@Nonnull String var0)
private static void exitSpectatingAndOpenRespawnScreenprivate static void exitSpectatingAndOpenRespawnScreen(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1, @Nonnull CommandBuffer<EntityStore> var2, int var3)
abstract exitSpectatingAndOpenRespawnScreen exitSpectatingAndOpenRespawnScreen(var1, var3, var4, 0)
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
if if(var5 != null)
if if(var6 != 0)
if if(var4 == HardcoreMode.None)
if if(var7 != GameMode.Adventure)
if if(var4 != HardcoreMode.Global)
if if(var8 > 0)
if if(var5 != null)
if if(var7 != null)
if if(var3 > 0)
if if(var3 != null)
if if(var6 != null && var7 != null)
if if(var4 != null)
if if(var3 == null)
public void onComponentAddedpublic void onComponentAdded(@Nonnull Ref<EntityStore> var1, @Nonnull DeathComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)
private static void openDeathScreenprivate static void openDeathScreen(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1, @Nonnull DeathComponent var2, @Nullable Message var3, @Nullable String var4, int var5)
abstract openDeathScreen openDeathScreen(var1, var2x, var4, var5, var3, 0)
private static void openRespawnScreenprivate static void openRespawnScreen(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1, int var2)
abstract openRespawnScreen openRespawnScreen(var1, var2x, 0)
abstract openRespawnScreen openRespawnScreen(var0, var1, var3)

Исходный код

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

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.ComponentAccessor;
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.RootDependency;
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.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.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
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.AnimationSlot;
class="kw">import com.hypixel.hytale.protocol.GameMode;
class="kw">import com.hypixel.hytale.protocol.InteractionState;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.KillFeedMessage;
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.DeathConfig;
class="kw">import com.hypixel.hytale.server.core.asset.type.gameplay.GameplayConfig;
class="kw">import com.hypixel.hytale.server.core.asset.type.gameplay.WorldMapConfig;
class="kw">import com.hypixel.hytale.server.core.asset.type.model.config.Model;
class="kw">import com.hypixel.hytale.server.core.entity.AnimationUtils;
class="kw">import com.hypixel.hytale.server.core.entity.Entity;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionChain;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionContext;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionManager;
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.pages.RespawnPage;
class="kw">import com.hypixel.hytale.server.core.entity.movement.MovementStatesComponent;
class="kw">import com.hypixel.hytale.server.core.entity.nameplate.Nameplate;
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.container.CombinedItemContainer;
class="kw">import com.hypixel.hytale.server.core.inventory.transaction.ItemStackSlotTransaction;
class="kw">import com.hypixel.hytale.server.core.modules.entity.AllLegacyLivingEntityTypesQuery;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.ModelComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.PlayerLives;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.Spectating;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.event.KillFeedEvent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.gamemode.GameModeTypes;
class="kw">import com.hypixel.hytale.server.core.modules.entity.item.ItemComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entitystats.EntityStatMap;
class="kw">import com.hypixel.hytale.server.core.modules.entitystats.EntityStatsSystems;
class="kw">import com.hypixel.hytale.server.core.modules.entitystats.asset.DefaultEntityStatTypes;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.InteractionModule;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.Interactions;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.UnarmedInteractions;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.RootInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.time.WorldTimeResource;
class="kw">import com.hypixel.hytale.server.core.modules.voice.VoiceModule;
class="kw">import com.hypixel.hytale.server.core.modules.voice.VoicePlayerState;
class="kw">import com.hypixel.hytale.server.core.modules.voice.VoiceRouter;
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.HardcoreGameOver;
class="kw">import com.hypixel.hytale.server.core.universe.hardcore.HardcoreLivesHud;
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.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.time.Instant;
class="kw">import java.time.temporal.ChronoUnit;
class="kw">import java.util.Collections;
class="kw">import java.util.List;
class="kw">import java.util.Set;
class="kw">import java.util.UUID;
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 DeathSystems {
   class="kw">public DeathSystems() {
   }

   class="kw">private class="kw">static void playDeathAnimation(
      @Nonnull Ref<EntityStore> var0,
      @Nonnull DeathComponent var1,
      @Nullable ModelComponent var2,
      @Nonnull MovementStatesComponent var3,
      @Nonnull ComponentAccessor<EntityStore> var4
   ) {
      if (var2 != null) {
         DamageCause var5 = var1.getDeathCause();
         if (var5 != null) {
            Model var6 = var2.getModel();
            String[] var7 = Entity.DefaultAnimations.getDeathAnimationIds(var3.getMovementStates(), var5);
            String var8 = var6.getFirstBoundAnimationId(var7);
            AnimationUtils.playAnimation(var0, AnimationSlot.Status, var8, true, var4);
         }
      }
   }

   class="kw">public class="kw">static class ClearEntityEffects class="kw">extends DeathSystems.OnDeathSystem {
      class="kw">public ClearEntityEffects() {
      }

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

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull DeathComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         EffectControllerComponent var5 = var4.getComponent(var1, EffectControllerComponent.getComponentType());
         assert var5 != null;
         var5.clearEffects(var1, var4);
      }
   }

   class="kw">public class="kw">static class ClearHealth class="kw">extends DeathSystems.OnDeathSystem {
      @Nonnull
      class="kw">private class="kw">static class="kw">final ComponentType<EntityStore, EntityStatMap> ENTITY_STAT_MAP_COMPONENT_TYPE = EntityStatMap.getComponentType();

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

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

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

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull DeathComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         EntityStatMap var5 = var3.getComponent(var1, ENTITY_STAT_MAP_COMPONENT_TYPE);
         assert var5 != null;
         var5.setStatValue(DefaultEntityStatTypes.getHealth(), 0.0F);
      }
   }

   class="kw">public class="kw">static class ClearInteractions class="kw">extends DeathSystems.OnDeathSystem {
      @Nonnull
      class="kw">private class="kw">static class="kw">final ComponentType<EntityStore, InteractionManager> INTERACTION_MANAGER_COMPONENT_TYPE = InteractionModule.get()
         .getInteractionManagerComponent();

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

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

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

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull DeathComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         InteractionManager var5 = var4.getComponent(var1, INTERACTION_MANAGER_COMPONENT_TYPE);
         assert var5 != null;
         var5.clear();
      }
   }

   class="kw">public class="kw">static class CorpseRemoval class="kw">extends EntityTickingSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = Query.and(
         DeathComponent.getComponentType(), Query.not(Player.getComponentType()), TransformComponent.getComponentType()
      );
      @Nonnull
      class="kw">private class="kw">static class="kw">final Set<Dependency<EntityStore>> DEPENDENCIES = Collections.singleton(
         new SystemDependency<>(Order.AFTER, DeathSystems.TickCorpseRemoval.class)
      );

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

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

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

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         DeathComponent var6 = var3.getComponent(var2, DeathComponent.getComponentType());
         assert var6 != null;
         InteractionChain var7 = var6.getInteractionChain();
         if (var7 == null || var7.getServerState() != InteractionState.NotFinished) {
            DeferredCorpseRemoval var8 = var3.getComponent(var2, DeferredCorpseRemoval.getComponentType());
            if (var8 == null) {
               var5.removeEntity(var3.getReferenceTo(var2), RemoveReason.REMOVE);
            } else if (var8.shouldRemove()) {
               var5.removeEntity(var3.getReferenceTo(var2), RemoveReason.REMOVE);
               String var9 = var8.getDeathParticles();
               if (var9 != null) {
                  TransformComponent var10 = var3.getComponent(var2, TransformComponent.getComponentType());
                  assert var10 != null;
                  ParticleUtil.spawnParticleEffect(var9, var10.getPosition(), var5);
               }
            }
         }
      }
   }

   class="kw">public class="kw">static class DeathAnimation class="kw">extends DeathSystems.OnDeathSystem {
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query = Query.and(MovementStatesComponent.getComponentType(), AllLegacyLivingEntityTypesQuery.INSTANCE);
      @Nonnull
      class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies = Set.of(
         new SystemDependency<>(Order.BEFORE, EntityStatsSystems.EntityTrackerUpdate.class),
         new SystemDependency<>(Order.AFTER, DeathSystems.ClearEntityEffects.class)
      );

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

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

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull DeathComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         ModelComponent var5 = var4.getComponent(var1, ModelComponent.getComponentType());
         MovementStatesComponent var6 = var4.getComponent(var1, MovementStatesComponent.getComponentType());
         assert var6 != null;
         DeathSystems.playDeathAnimation(var1, var2, var5, var6, var4);
      }
   }

   class="kw">public class="kw">static class DropPlayerDeathItems class="kw">extends DeathSystems.OnDeathSystem {
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = Archetype.of(
         Player.getComponentType(), TransformComponent.getComponentType(), HeadRotation.getComponentType()
      );

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

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

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull DeathComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         Player var5 = var3.getComponent(var1, Player.getComponentType());
         assert var5 != null;
         if (var5.getGameMode() != GameMode.Creative) {
            var2.setDisplayDataOnDeathScreen(true);
            CombinedItemContainer var6 = InventoryComponent.getCombined(var4, var1, InventoryComponent.EVERYTHING);
            if (var2.getItemsDurabilityLossPercentage() > 0.0) {
               double var7 = var2.getItemsDurabilityLossPercentage() / 100.0;
               boolean var9 = false;

               for (short var10 = 0; var10 < var6.getCapacity(); var10++) {
                  ItemStack var11 = var6.getItemStack(var10);
                  if (!ItemStack.isEmpty(var11) && !var11.isBroken() && var11.getItem().getDurabilityLossOnDeath()) {
                     double var12 = var11.getMaxDurability() * var7;
                     ItemStack var14 = var11.withIncreasedDurability(-var12);
                     ItemStackSlotTransaction var15 = var6.replaceItemStackInSlot(var10, var11, var14);
                     if (var15.getSlotAfter().isBroken() && var11.getItem().getArmor() != null) {
                        var9 = true;
                     }
                  }
               }

               if (var9) {
                  EntityStatMap var20 = var4.getComponent(var1, EntityStatMap.getComponentType());
                  if (var20 != null) {
                     var20.getStatModifiersManager().scheduleRecalculate();
                  }
               }
            }

            List var17 = null;
            class="kw">switch (var2.getItemsLossMode()) {
               case ALL:
                  var17 = InventoryUtils.dropAllItemStacks(var1, var3);
                  break;
               case CONFIGURED:
                  double var8 = var2.getItemsAmountLossPercentage();
                  if (var8 > 0.0) {
                     double var21 = var8 / 100.0;
                     var17 = new ObjectArrayList();

                     for (short var24 = 0; var24 < var6.getCapacity(); var24++) {
                        ItemStack var13 = var6.getItemStack(var24);
                        if (!ItemStack.isEmpty(var13) && var13.getItem().dropsOnDeath()) {
                           int var26 = Math.max(1, MathUtil.floor(var13.getQuantity() * var21));
                           var17.add(var13.withQuantity(var26));
                           int var27 = var13.getQuantity() - var26;
                           if (var27 > 0) {
                              ItemStack var16 = var13.withQuantity(var27);
                              var6.replaceItemStackInSlot(var24, var13, var16);
                           } else {
                              var6.removeItemStackFromSlot(var24);
                           }
                        }
                     }
                  }
               case NONE:
            }

            if (var17 != null && !var17.isEmpty()) {
               TransformComponent var18 = var3.getComponent(var1, TransformComponent.getComponentType());
               assert var18 != null;
               Vector3d var19 = var18.getPosition();
               HeadRotation var22 = var3.getComponent(var1, HeadRotation.getComponentType());
               assert var22 != null;
               Rotation3f var23 = var22.getRotation();
               Holder[] var25 = ItemComponent.generateItemDrops(var3, var17, new Vector3d(var19).add(0.0, 1.0, 0.0), var23);
               var4.addEntities(var25, AddReason.SPAWN);
               var2.setItemsLostOnDeath(var17);
            }
         }
      }
   }

   class="kw">public class="kw">static class KillFeed class="kw">extends DeathSystems.OnDeathSystem {
      class="kw">public KillFeed() {
      }

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

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull DeathComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         Damage var5 = var2.getDeathInfo();
         if (var5 != null) {
            World var6 = var4.getExternalData().getWorld();
            ObjectArrayList var7 = new ObjectArrayList(var6.getPlayerRefs());
            Message var8 = null;
            if (var5.getSource() class="kw">instanceof Damage.EntitySource var9) {
               Ref var16 = var9.getRef();
               if (var16.isValid()) {
                  KillFeedEvent.KillerMessage var11 = new KillFeedEvent.KillerMessage(var5, var1);
                  var3.invoke(var16, var11);
                  if (var11.isCancelled()) {
                     class="kw">return;
                  }

                  var8 = var11.getMessage();
               }
            }

            KillFeedEvent.DecedentMessage var15 = new KillFeedEvent.DecedentMessage(var5);
            var3.invoke(var1, var15);
            if (!var15.isCancelled()) {
               Message var17 = var15.getMessage();
               if (var8 != null || var17 != null) {
                  KillFeedEvent.Display var18 = new KillFeedEvent.Display(var5, var5.getIfPresentMetaObject(Damage.DEATH_ICON), var7);
                  var3.invoke(var1, var18);
                  if (!var18.isCancelled()) {
                     KillFeedMessage var12 = new KillFeedMessage(
                        var8 != null ? var8.getFormattedMessage() : null, var17 != null ? var17.getFormattedMessage() : null, var18.getIcon()
                     );

                     for (PlayerRef var14 : var18.getBroadcastTargets()) {
                        var14.getPacketHandler().write(var12);
                     }
                  }
               }
            }
         }
      }
   }

   class="kw">public class="kw">abstract class="kw">static class OnDeathSystem class="kw">extends RefChangeSystem<EntityStore, DeathComponent> {
      class="kw">public OnDeathSystem() {
      }

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

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

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

   class="kw">public class="kw">static class PlayerDeathMarker class="kw">extends DeathSystems.OnDeathSystem {
      class="kw">public PlayerDeathMarker() {
      }

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

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull DeathComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         World var5 = var4.getExternalData().getWorld();
         GameplayConfig var6 = var5.getGameplayConfig();
         WorldMapConfig var7 = var6.getWorldMapConfig();
         if (var7.isDisplayDeathMarker()) {
            Player var8 = var4.getComponent(var1, Player.getComponentType());
            assert var8 != null;
            TransformComponent var9 = var4.getComponent(var1, TransformComponent.getComponentType());
            assert var9 != null;
            Vector3d var10 = var9.getPosition();
            Transform var11 = new Transform(var10.x(), var10.y(), var10.z(), 0.0F, 0.0F, 0.0F);
            WorldTimeResource var12 = var4.getResource(WorldTimeResource.getResourceType());
            Instant var13 = var12.getGameTime();
            int var14 = (int)WorldTimeResource.ZERO_YEAR.until(var13, ChronoUnit.DAYS);
            String var15 = "death-marker-" + UUID.randomUUID();
            PlayerWorldData var16 = var8.getPlayerConfigData().getPerWorldData(var5.getName());
            var16.addLastDeath(var15, var11, var14);
         }
      }
   }

   class="kw">public class="kw">static class PlayerDeathScreen class="kw">extends DeathSystems.OnDeathSystem {
      class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();

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

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

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull DeathComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         String var5 = var4.getExternalData().getWorld().getGameModeTypeOnDeath();
         if (!GameModeTypes.isValidType(var5)) {
            if (var5 != null) {
               LOGGER.at(Level.WARNING).log("GameModeTypeOnDeath %s is not a known GameModeType", var5);
            }

            exitSpectatingAndOpenRespawnScreen(var1, var3, var4, 0);
         } else {
            int var6 = burnLifeAndGetRemaining(var1, var3, var4);
            if (var6 != 0) {
               exitSpectatingAndOpenRespawnScreen(var1, var3, var4, Math.max(var6, 0));
            } else {
               var4.run(var2x -> {
                  if (var1.isValid()) {
                     String var3 = HardcoreGameOver.isActive() ? "server.misc.hardcore.global.gameOver.deathScreenMessage" : deathScreenMessage(var5);
                     DeathComponent var4 = var3 != null ? var2x.getComponent(var1, DeathComponent.getComponentType()) : null;
                     Message var5 = var4 != null ? computeDeathMessage(var1, var2x, var4) : null;
                     if (GameModeTypes.isValidType(var5) && GameModeTypes.enterOnDeath(var1, var2x, var5)) {
                        if (var4 != null && var4.isShowDeathMenu()) {
                           openDeathScreen(var1, var2x, var4, var5, var3, 0);
                        }
                     } else {
                        if (Spectating.isSpectating(var1, var2x)) {
                           GameModeTypes.exit(var1, var2x);
                        }

                        openRespawnScreen(var1, var2x, 0);
                     }
                  }
               });
            }
         }
      }

      class="kw">private class="kw">static int burnLifeAndGetRemaining(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1, @Nonnull CommandBuffer<EntityStore> var2) {
         HytaleServerConfig.Defaults var3 = HytaleServer.get().getConfig().getDefaults();
         HardcoreMode var4 = var3.getHardcoreMode();
         if (var4 == HardcoreMode.None) {
            class="kw">return 0;
         }

         Player var5 = var1.getComponent(var0, Player.getComponentType());
         GameMode var6 = var5 != null ? var5.getGameMode() : null;
         GameMode var7 = var6 != null ? var6 : var1.getExternalData().getWorld().getWorldConfig().getGameMode();
         if (var7 != GameMode.Adventure) {
            class="kw">return -1;
         }

         if (var4 != HardcoreMode.Global) {
            class="kw">return burnPersonalLife(var0, var1, var2, var3.getHardcoreLives());
         }

         int var8 = burnPoolLife(var3.getHardcoreLives());
         if (var8 > 0) {
            class="kw">return var8;
         }

         PlayerLives.markExhausted(var0, var2);
         if (var5 != null) {
            var5.markNeedsSave();
         }

         class="kw">return 0;
      }

      class="kw">private class="kw">static int burnPersonalLife(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1, @Nonnull CommandBuffer<EntityStore> var2, int var3) {
         PlayerLives var4 = var1.getComponent(var0, PlayerLives.getComponentType());
         int var5 = var4 != null ? var4.getRemaining() : var3;
         int var6 = Math.max(var5 - 1, 0);
         var2.putComponent(var0, PlayerLives.getComponentType(), new PlayerLives(var6));
         Player var7 = var1.getComponent(var0, Player.getComponentType());
         if (var7 != null) {
            var7.markNeedsSave();
         }

         class="kw">return var6;
      }

      class="kw">private class="kw">static int burnPoolLife(int var0) {
         Universe var1 = Universe.get();
         HardcoreState var2 = var1.getResource(HardcoreState.getResourceType());
         if (var2.isGameOver()) {
            class="kw">return 0;
         }

         int var3 = var2.burnPoolLife(var0);
         if (var3 > 0) {
            var1.flushResource(HardcoreState.getResourceType()).exceptionally(var0x -> {
               ((HytaleLogger.Api)LOGGER.at(Level.SEVERE).withCause(var0x)).log("Failed to flush the hardcore pool of lives");
               class="kw">return null;
            });
         } else {
            HardcoreGameOver.trigger();
         }

         HardcoreLivesHud.showPoolToAll(Math.max(var3, 0));
         class="kw">return var3;
      }

      class="kw">private class="kw">static void exitSpectatingAndOpenRespawnScreen(
         @Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1, @Nonnull CommandBuffer<EntityStore> var2, int var3
      ) {
         if (Spectating.isSpectating(var0, var2)) {
            GameModeTypes.exit(var0, var2);
         }

         openRespawnScreen(var0, var1, var3);
      }

      @Nullable
      class="kw">private class="kw">static String deathScreenMessage(@Nonnull String var0) {
         GameModeType var1 = GameModeType.getAssetMap().getAsset(var0);
         class="kw">return var1 != null ? var1.getDeathScreenMessage() : null;
      }

      class="kw">private class="kw">static void openRespawnScreen(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1, int var2) {
         DeathComponent var3 = var1.getComponent(var0, DeathComponent.getComponentType());
         if (var3 != null) {
            openDeathScreen(var0, var1, var3, computeDeathMessage(var0, var1, var3), null, var2);
         }
      }

      class="kw">private class="kw">static void openDeathScreen(
         @Nonnull Ref<EntityStore> var0,
         @Nonnull Store<EntityStore> var1,
         @Nonnull DeathComponent var2,
         @Nullable Message var3,
         @Nullable String var4,
         int var5
      ) {
         if (var2.isShowDeathMenu()) {
            Player var6 = var1.getComponent(var0, Player.getComponentType());
            PlayerRef var7 = var1.getComponent(var0, PlayerRef.getComponentType());
            if (var6 != null && var7 != null) {
               RespawnPage var8;
               if (var4 != null) {
                  var8 = RespawnPage.forPermadeath(var7, var3, var2.displayDataOnDeathScreen(), var2.getDeathItemLoss(), Message.translation(var4));
               } else {
                  var8 = RespawnPage.forRespawn(var7, var3, var2.displayDataOnDeathScreen(), var2.getDeathItemLoss(), var5);
               }

               var6.getPageManager().openCustomPage(var0, var1, var8);
            }
         }
      }

      @Nullable
      class="kw">private class="kw">static Message computeDeathMessage(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1, @Nonnull DeathComponent var2) {
         Message var3 = var2.getDeathMessage();
         if (var3 == null) {
            Damage var4 = var2.getDeathInfo();
            var3 = var4 != null ? var4.getDeathMessage(var0, var1) : null;
            var2.setDeathMessage(var3);
         }

         class="kw">return var3;
      }
   }

   class="kw">public class="kw">static class PlayerDropItemsConfig class="kw">extends DeathSystems.OnDeathSystem {
      @Nonnull
      class="kw">private class="kw">static class="kw">final Set<Dependency<EntityStore>> DEPENDENCIES = Set.of(new SystemDependency<>(Order.BEFORE, DeathSystems.DropPlayerDeathItems.class));

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

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

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

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull DeathComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         DeathConfig var5 = var3.getExternalData().getWorld().getDeathConfig();
         var2.setItemsLossMode(var5.getItemsLossMode());
         var2.setItemsAmountLossPercentage(var5.getItemsAmountLossPercentage());
         var2.setItemsDurabilityLossPercentage(var5.getItemsDurabilityLossPercentage());
      }
   }

   class="kw">public class="kw">static class PlayerKilledPlayer class="kw">extends DeathSystems.OnDeathSystem {
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = Archetype.of(Player.getComponentType(), Nameplate.getComponentType());

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

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

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull DeathComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         Nameplate var5 = var4.getComponent(var1, Nameplate.getComponentType());
         Damage var6 = var2.getDeathInfo();
         DamageCause var7 = var2.getDeathCause();
         if (var7 == DamageCause.PHYSICAL || var7 == DamageCause.PROJECTILE) {
            if (var6 != null && var6.getSource() class="kw">instanceof Damage.EntitySource var8) {
               Ref var11 = var8.getRef();
               if (var11.isValid()) {
                  PlayerRef var10 = var3.getComponent(var11, PlayerRef.getComponentType());
                  if (var10 != null) {
                     var10.sendMessage(Message.translation("server.general.killedEntity").param("entityName", var5.getText()));
                  }
               }
            }
         }
      }
   }

   class="kw">public class="kw">static class RunDeathInteractions class="kw">extends DeathSystems.OnDeathSystem {
      @Nonnull
      class="kw">private class="kw">static class="kw">final ComponentType<EntityStore, Interactions> INTERACTIONS_COMPONENT_TYPE = Interactions.getComponentType();
      @Nonnull
      class="kw">private class="kw">static class="kw">final ComponentType<EntityStore, InteractionManager> INTERACTION_MANAGER_COMPONENT_TYPE = InteractionModule.get()
         .getInteractionManagerComponent();
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = Query.and(INTERACTIONS_COMPONENT_TYPE, INTERACTION_MANAGER_COMPONENT_TYPE);
      @Nonnull
      class="kw">private class="kw">static class="kw">final Set<Dependency<EntityStore>> DEPENDENCIES = Set.of(new SystemDependency<>(Order.AFTER, DeathSystems.ClearEntityEffects.class));

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

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

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

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull DeathComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         InteractionManager var5 = var4.getComponent(var1, INTERACTION_MANAGER_COMPONENT_TYPE);
         assert var5 != null;
         Interactions var6 = var4.getComponent(var1, INTERACTIONS_COMPONENT_TYPE);
         assert var6 != null;
         String var7 = var6.getInteractionId(InteractionType.Death);
         if (var7 == null) {
            UnarmedInteractions var8 = UnarmedInteractions.getAssetMap().getAsset("Empty");
            if (var8 != null) {
               var7 = var8.getInteractions().get(InteractionType.Death);
            }
         }

         RootInteraction var11 = var7 != null ? RootInteraction.getAssetMap().getAsset(var7) : null;
         if (var11 != null) {
            InteractionContext var9 = InteractionContext.forInteraction(var5, var1, InteractionType.Death, var4);
            InteractionChain var10 = var5.initChain(InteractionType.Death, var9, var11, false);
            var5.queueExecuteChain(var10);
            var2.setInteractionChain(var10);
         }
      }
   }

   class="kw">public class="kw">static class SpawnedDeathAnimation class="kw">extends RefSystem<EntityStore> {
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = Query.and(
         AllLegacyLivingEntityTypesQuery.INSTANCE, DeathComponent.getComponentType(), MovementStatesComponent.getComponentType()
      );

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

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

      @Override
      class="kw">public void onEntityAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         DeathComponent var5 = var4.getComponent(var1, DeathComponent.getComponentType());
         assert var5 != null;
         ModelComponent var6 = var4.getComponent(var1, ModelComponent.getComponentType());
         MovementStatesComponent var7 = var4.getComponent(var1, MovementStatesComponent.getComponentType());
         assert var7 != null;
         DeathSystems.playDeathAnimation(var1, var5, var6, var7, var4);
      }

      @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 StopVoiceOnDeath class="kw">extends DeathSystems.OnDeathSystem {
      class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();

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

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

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull DeathComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         PlayerRef var5 = var3.getComponent(var1, PlayerRef.getComponentType());
         if (var5 != null) {
            UUID var6 = var5.getUuid();
            VoiceModule var7 = VoiceModule.get();
            if (var7 != null) {
               VoicePlayerState var8 = var7.getPlayerState(var6);
               if (var8 != null) {
                  var8.setSilenced(true);
                  var8.setSpeaking(false);
                  VoiceRouter var9 = var7.getVoiceRouter();
                  if (var9 != null) {
                     PlayerRef var10 = Universe.get().getPlayer(var6);
                     if (var10 != null) {
                        var9.sendVoiceConfig(var10);
                     }
                  }
               }
            }
         }
      }
   }

   class="kw">public class="kw">static class TickCorpseRemoval class="kw">extends EntityTickingSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">static class="kw">final ComponentType<EntityStore, DeferredCorpseRemoval> DEFERRED_CORPSE_REMOVAL_COMPONENT_TYPE = DeferredCorpseRemoval.getComponentType();
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = Query.and(
         DeathComponent.getComponentType(), Query.not(Player.getComponentType()), TransformComponent.getComponentType(), DEFERRED_CORPSE_REMOVAL_COMPONENT_TYPE
      );

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

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

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         DeathComponent var6 = var3.getComponent(var2, DeathComponent.getComponentType());
         assert var6 != null;
         InteractionChain var7 = var6.getInteractionChain();
         if (var7 == null || var7.getServerState() != InteractionState.NotFinished) {
            DeferredCorpseRemoval var8 = var3.getComponent(var2, DEFERRED_CORPSE_REMOVAL_COMPONENT_TYPE);
            assert var8 != null;
            var8.tick(var1);
         }
      }
   }
}