ClearEntityEffects class
Пакет: com.hypixel.hytale.server.core.modules.entity.damage
Файл: com/hypixel/hytale/server/core/modules/entity/damage/DeathSystems.java
extends: DeathSystems.OnDeathSystem
Поля (1)
| Модификаторы | Тип | Имя |
|---|---|---|
|
EffectControllerComponent |
var5 |
Методы (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);
}
}
}
}