RunDeathInteractions class

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

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

extends: DeathSystems.OnDeathSystem

Поля (12)

МодификаторыТипИмя
private static final Set<Dependency<EntityStore>> DEPENDENCIES
private static final ComponentType<EntityStore, Interactions> INTERACTIONS_COMPONENT_TYPE
private static final ComponentType<EntityStore, InteractionManager> INTERACTION_MANAGER_COMPONENT_TYPE
private static final Query<EntityStore> QUERY
InteractionChain var10
RootInteraction var11
InteractionManager var5
Interactions var6
String var7
var7
UnarmedInteractions var8
InteractionContext var9

Методы (6)

МодификаторыВозвратСигнатура
public Set<Dependency<EntityStore>> getDependenciespublic Set<Dependency<EntityStore>> getDependencies()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
if if(var7 == null)
if if(var8 != null)
if if(var11 != null)
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);
         }
      }
   }
}