PlayerDeathMarker class

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

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

extends: DeathSystems.OnDeathSystem

Поля (12)

МодификаторыТипИмя
Vector3d var10
Transform var11
WorldTimeResource var12
Instant var13
int var14
String var15
PlayerWorldData var16
World var5
GameplayConfig var6
WorldMapConfig var7
Player var8
TransformComponent var9

Методы (2)

МодификаторыВозвратСигнатура
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public void onComponentAddedpublic void onComponentAdded(@Nonnull Ref<EntityStore> var1, @Nonnull DeathComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)

Исходный код

Показать/скрыть
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);
         }
      }
   }
}