FallDamagePlayers class

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

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

extends: EntityTickingSystem<EntityStore>

Поля (29)

МодификаторыТипИмя
static final float CURVE_MODIFIER
static final float CURVE_MULTIPLIER
private static final Set<Dependency<EntityStore>> DEPENDENCIES
public static final double MIN_DAMAGE
private static final Query<EntityStore> QUERY
break
break
World var10
PlayerConfig var11
List var12
PlayerInput.InputUpdate var14
Player var19
int var20
MovementConfig var21
float var22
EntityStatMap var23
double var24
EntityStatValue var26
float var27
double var28
int var30
var30
var30
Damage var31
World var4
PlayerInput var6
Velocity var7
double var8
var8

Методы (9)

МодификаторыВозвратСигнатура
abstract for for(int var13 = 0; var13 < var12.size()
public Set<Dependency<EntityStore>> getDependenciespublic Set<Dependency<EntityStore>> getDependencies()
public SystemGroup<EntityStore> getGrouppublic SystemGroup<EntityStore> getGroup()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
if if(var30 > 0)
public boolean isParallelpublic boolean isParallel(int var1, int var2)
switch switch(var14)
public void tickpublic void tick(float var1, int var2, @Nonnull Store<EntityStore> var3)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)

Исходный код

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

class="kw">import com.hypixel.hytale.assetstore.AssetRegistry;
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.Ref;
class="kw">import com.hypixel.hytale.component.ResourceType;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.SystemGroup;
class="kw">import com.hypixel.hytale.component.dependency.Dependency;
class="kw">import com.hypixel.hytale.component.dependency.Order;
class="kw">import com.hypixel.hytale.component.dependency.SystemDependency;
class="kw">import com.hypixel.hytale.component.dependency.SystemGroupDependency;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.spatial.SpatialResource;
class="kw">import com.hypixel.hytale.component.spatial.SpatialStructure;
class="kw">import com.hypixel.hytale.component.system.RefChangeSystem;
class="kw">import com.hypixel.hytale.component.system.tick.DelayedEntitySystem;
class="kw">import com.hypixel.hytale.component.system.tick.EntityTickingSystem;
class="kw">import com.hypixel.hytale.math.random.RandomExtra;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.math.util.TrigMathUtil;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.protocol.AnimationSlot;
class="kw">import com.hypixel.hytale.protocol.CombatTextUpdate;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.protocol.MovementStates;
class="kw">import com.hypixel.hytale.protocol.SoundCategory;
class="kw">import com.hypixel.hytale.protocol.packets.entities.SpawnModelParticles;
class="kw">import com.hypixel.hytale.protocol.packets.player.DamageInfo;
class="kw">import com.hypixel.hytale.protocol.packets.player.ReticleEvent;
class="kw">import com.hypixel.hytale.server.core.asset.type.entityeffect.config.EntityEffect;
class="kw">import com.hypixel.hytale.server.core.asset.type.gameplay.BrokenPenalties;
class="kw">import com.hypixel.hytale.server.core.asset.type.gameplay.GameplayConfig;
class="kw">import com.hypixel.hytale.server.core.asset.type.gameplay.PlayerConfig;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.Item;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.ItemArmor;
class="kw">import com.hypixel.hytale.server.core.asset.type.model.config.Model;
class="kw">import com.hypixel.hytale.server.core.asset.type.model.config.ModelParticle;
class="kw">import com.hypixel.hytale.server.core.asset.type.particle.config.WorldParticle;
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.EntityUtils;
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.ItemUtils;
class="kw">import com.hypixel.hytale.server.core.entity.LivingEntity;
class="kw">import com.hypixel.hytale.server.core.entity.damage.DamageDataComponent;
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.movement.MovementConfig;
class="kw">import com.hypixel.hytale.server.core.entity.knockback.KnockbackComponent;
class="kw">import com.hypixel.hytale.server.core.entity.movement.MovementStatesComponent;
class="kw">import com.hypixel.hytale.server.core.inventory.InventoryComponent;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.inventory.container.EmptyItemContainer;
class="kw">import com.hypixel.hytale.server.core.inventory.container.ItemContainer;
class="kw">import com.hypixel.hytale.server.core.meta.DynamicMetaStore;
class="kw">import com.hypixel.hytale.server.core.modules.entity.AllLegacyLivingEntityTypesQuery;
class="kw">import com.hypixel.hytale.server.core.modules.entity.EntityModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.BreathingComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.CachedStatsComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.Intangible;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.Invulnerable;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.ModelComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.player.PlayerInput;
class="kw">import com.hypixel.hytale.server.core.modules.entity.player.PlayerSystems;
class="kw">import com.hypixel.hytale.server.core.modules.entity.tracker.EntityTrackerSystems;
class="kw">import com.hypixel.hytale.server.core.modules.entity.tracker.NetworkId;
class="kw">import com.hypixel.hytale.server.core.modules.entitystats.EntityStatMap;
class="kw">import com.hypixel.hytale.server.core.modules.entitystats.EntityStatValue;
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.entityui.EntityUIModule;
class="kw">import com.hypixel.hytale.server.core.modules.entityui.UIComponentList;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.InteractionModule;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.Interaction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.RootInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.client.WieldingInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.server.combat.DamageEffects;
class="kw">import com.hypixel.hytale.server.core.modules.physics.component.Velocity;
class="kw">import com.hypixel.hytale.server.core.modules.splitvelocity.SplitVelocity;
class="kw">import com.hypixel.hytale.server.core.modules.time.TimeResource;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.ParticleUtil;
class="kw">import com.hypixel.hytale.server.core.universe.world.SoundUtil;
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.ints.Int2DoubleMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2FloatMap;
class="kw">import it.unimi.dsi.fastutil.ints.IntIterator;
class="kw">import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.shorts.ShortArrayList;
class="kw">import java.time.Instant;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.Objects;
class="kw">import java.util.Set;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.function.Predicate;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector4d;

class="kw">public class DamageSystems {
   class="kw">public class="kw">static class="kw">final float DEFAULT_DAMAGE_DELAY = 1.0F;
   class="kw">private class="kw">static class="kw">final Query<EntityStore> NPCS_QUERY = Query.and(
      AllLegacyLivingEntityTypesQuery.INSTANCE,
      EntityStatMap.getComponentType(),
      MovementStatesComponent.getComponentType(),
      Query.not(EntityModule.get().getPlayerComponentType())
   );

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

   class="kw">public class="kw">static void executeDamage(@Nonnull Ref<EntityStore> var0, @Nonnull ComponentAccessor<EntityStore> var1, @Nonnull Damage var2) {
      var1.invoke(var0, var2);
   }

   class="kw">public class="kw">static void executeDamage(int var0, @Nonnull ArchetypeChunk<EntityStore> var1, @Nonnull CommandBuffer<EntityStore> var2, @Nonnull Damage var3) {
      var2.invoke(var1.getReferenceTo(var0), var3);
   }

   class="kw">public class="kw">static void executeDamage(@Nonnull Ref<EntityStore> var0, @Nonnull CommandBuffer<EntityStore> var1, @Nonnull Damage var2) {
      var1.invoke(var0, var2);
   }

   class="kw">public class="kw">static class ApplyDamage class="kw">extends DamageEventSystem class="kw">implements EntityStatsSystems.StatModifyingSystem {
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = EntityStatMap.getComponentType();
      @Nonnull
      class="kw">private class="kw">static class="kw">final Set<Dependency<EntityStore>> DEPENDENCIES = Set.of(
         new SystemGroupDependency<>(Order.AFTER, DamageModule.get().getGatherDamageGroup()),
         new SystemGroupDependency<>(Order.AFTER, DamageModule.get().getFilterDamageGroup()),
         new SystemGroupDependency<>(Order.BEFORE, DamageModule.get().getInspectDamageGroup())
      );

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

      @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 handle(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
         EntityStatMap var6 = var2.getComponent(var1, EntityStatMap.getComponentType());
         assert var6 != null;
         int var7 = DefaultEntityStatTypes.getHealth();
         EntityStatValue var8 = var6.get(var7);
         Objects.requireNonNull(var8);
         boolean var9 = var2.getArchetype().contains(DeathComponent.getComponentType());
         if (var9) {
            var5.setCancelled(true);
         } else {
            var5.setAmount(Math.round(var5.getAmount()));
            float var10 = var6.subtractStatValue(var7, var5.getAmount());
            if (var10 <= var8.getMin()) {
               DeathComponent.tryAddComponent(var4, var2.getReferenceTo(var1), var5);
            }
         }
      }
   }

   class="kw">public class="kw">static class ApplyParticles class="kw">extends DamageEventSystem {
      @Nonnull
      class="kw">private class="kw">static class="kw">final ResourceType<EntityStore, SpatialResource<Ref<EntityStore>, EntityStore>> PLAYER_SPATIAL_RESOURCE_TYPE = EntityModule.get()
         .getPlayerSpatialResourceType();
      @Nonnull
      class="kw">private class="kw">static class="kw">final ComponentType<EntityStore, TransformComponent> TRANSFORM_COMPONENT_TYPE = TransformComponent.getComponentType();
      @Nonnull
      class="kw">private class="kw">static class="kw">final ComponentType<EntityStore, NetworkId> NETWORK_ID_COMPONENT_TYPE = NetworkId.getComponentType();
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = Query.and(TRANSFORM_COMPONENT_TYPE, NETWORK_ID_COMPONENT_TYPE);

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

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

      class="kw">public void handle(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
         Damage.Particles var6 = var5.getIfPresentMetaObject(Damage.IMPACT_PARTICLES);
         if (var6 != null) {
            if (var5.getSource() class="kw">instanceof Damage.EntitySource var7) {
               Ref var27 = var7.getRef();
               if (var27.isValid()) {
                  TransformComponent var9 = var2.getComponent(var1, TRANSFORM_COMPONENT_TYPE);
                  assert var9 != null;
                  Vector4d var10 = var5.getIfPresentMetaObject(Damage.HIT_LOCATION);
                  Vector3d var11 = var10 == null ? var9.getPosition() : new Vector3d(var10.x, var10.y, var10.z);
                  boolean var12 = var5.getMetaStore().getMetaObject(Damage.CAN_BE_PREDICTED);
                  double var13 = var6.getViewDistance();
                  WorldParticle[] var15 = var6.getWorldParticles();
                  if (var15 != null && var15.length > 0) {
                     TransformComponent var16 = var4.getComponent(var27, TransformComponent.getComponentType());
                     if (var16 != null) {
                        float var17 = TrigMathUtil.atan2(var16.getPosition().x - var11.x, var16.getPosition().z - var11.z);
                        SpatialResource var18 = var4.getResource(EntityModule.get().getPlayerSpatialResourceType());
                        List var19 = SpatialResource.getThreadLocalReferenceList();
                        var18.getSpatialStructure().collect(var11, var13, var19);
                        Ref var20 = var12 ? var27 : null;

                        for (WorldParticle var24 : var15) {
                           ParticleUtil.spawnParticleEffect(var24, var11, var17, 0.0F, 0.0F, var20, var19, var4);
                        }
                     }
                  }

                  ModelParticle[] var28 = var6.getModelParticles();
                  if (var28 != null && var28.length > 0) {
                     com.hypixel.hytale.protocol.ModelParticle[] var29 = new com.hypixel.hytale.protocol.ModelParticle[var28.length];

                     for (int var30 = 0; var30 < var28.length; var30++) {
                        var29[var30] = var28[var30].toPacket();
                     }

                     NetworkId var31 = var2.getComponent(var1, NETWORK_ID_COMPONENT_TYPE);
                     assert var31 != null;
                     int var32 = var31.getId();
                     SpawnModelParticles var33 = new SpawnModelParticles(var32, var29);
                     SpatialResource var34 = var3.getResource(PLAYER_SPATIAL_RESOURCE_TYPE);
                     SpatialStructure var35 = var34.getSpatialStructure();
                     List var36 = SpatialResource.getThreadLocalReferenceList();
                     var35.ordered(var11, var13, var36);

                     for (Ref var25 : var36) {
                        if (!var12 || !var25.equals(var27)) {
                           PlayerRef var26 = var4.getComponent(var25, PlayerRef.getComponentType());
                           if (var26 != null) {
                              var26.getPacketHandler().write(var33);
                           }
                        }
                     }
                  }
               }
            }
         }
      }

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getInspectDamageGroup();
      }
   }

   class="kw">public class="kw">static class ApplySoundEffects class="kw">extends DamageEventSystem {
      @Nonnull
      class="kw">private class="kw">static class="kw">final ComponentType<EntityStore, TransformComponent> TRANSFORM_COMPONENT_TYPE = TransformComponent.getComponentType();
      @Nonnull
      class="kw">private class="kw">static class="kw">final ComponentType<EntityStore, Player> PLAYER_COMPONENT_TYPE = Player.getComponentType();
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = TRANSFORM_COMPONENT_TYPE;

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

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

      class="kw">public void handle(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
      }

      class="kw">public void handleInternal(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
         TransformComponent var6 = var2.getComponent(var1, TRANSFORM_COMPONENT_TYPE);
         assert var6 != null;
         Player var7 = var2.getComponent(var1, PLAYER_COMPONENT_TYPE);
         Ref var8 = var2.getReferenceTo(var1);
         Damage.SoundEffect var9 = var5.getIfPresentMetaObject(Damage.IMPACT_SOUND_EFFECT);
         Damage.SoundEffect var10 = var5.getIfPresentMetaObject(Damage.PLAYER_IMPACT_SOUND_EFFECT);
         if (var9 != null || var10 != null) {
            Ref var11;
            if (var5.getSource() class="kw">instanceof Damage.EntitySource var12) {
               var11 = var12.getRef().isValid() ? var12.getRef() : null;
            } else {
               var11 = null;
            }

            Vector4d var17 = var5.getIfPresentMetaObject(Damage.HIT_LOCATION);
            Vector3d var18 = var17 == null ? var6.getPosition() : new Vector3d(var17.x, var17.y, var17.z);
            boolean var14 = var7 != null && var10 != null && var10.getSoundEventIndex() != 0;
            if (var9 != null && var9.getSoundEventIndex() != 0) {
               Predicate var15 = var3x -> var11 != null && var3x.equals(var11) ? false : !var14 || !var3x.equals(var8);
               SoundUtil.playSoundEvent3d(var9.getSoundEventIndex(), var18.x, var18.y, var18.z, var15, var4);
            }

            if (var14) {
               PlayerRef var19 = var4.getComponent(var8, PlayerRef.getComponentType());
               if (var19 != null) {
                  int var16 = var9 != null ? var9.getSoundEventIndex() : 0;
                  SoundUtil.playLocalPlayerSoundEvent(var19, var10.getSoundEventIndex(), var16, SoundCategory.SFX);
               }
            }
         }
      }

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getInspectDamageGroup();
      }
   }

   @Deprecated
   class="kw">public class="kw">static class ArmorDamageReduction class="kw">extends DamageEventSystem {
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = AllLegacyLivingEntityTypesQuery.INSTANCE;

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

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getFilterDamageGroup();
      }

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

      class="kw">public void handle(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
         World var6 = var4.getExternalData().getWorld();
         Ref var7 = var2.getReferenceTo(var1);
         InventoryComponent.Armor var8 = var4.getComponent(var7, InventoryComponent.Armor.getComponentType());
         ItemContainer var9 = var8 != null ? var8.getInventory() : EmptyItemContainer.INSTANCE;
         EffectControllerComponent var10 = var2.getComponent(var1, EffectControllerComponent.getComponentType());
         Map var11 = getResistanceModifiers(var6, var9, ItemUtils.canApplyItemStackPenalties(var7, var4), var10);
         if (!var5.getCause().doesBypassResistances() && !var11.isEmpty()) {
            DamageSystems.ArmorDamageReduction.ArmorResistanceModifiers var12 = var11.get(var5.getCause());
            if (var12 == null) {
               class="kw">return;
            }

            float var13 = Math.max(0.0F, var5.getAmount() - var12.flatModifier);
            var13 *= Math.max(0.0F, 1.0F - var12.multiplierModifier);

            while (var12.inheritedParentId != null) {
               var12 = var11.get(var12.inheritedParentId);
               if (var12 == null) {
                  break;
               }

               var13 = Math.max(0.0F, var13 - var12.flatModifier);
               var13 *= Math.max(0.0F, 1.0F - var12.multiplierModifier);
            }

            var5.setAmount(var13);
         }
      }

      @Nonnull
      class="kw">public class="kw">static Map<DamageCause, DamageSystems.ArmorDamageReduction.ArmorResistanceModifiers> getResistanceModifiers(
         @Nonnull World var0, @Nonnull ItemContainer var1, boolean var2, @Nullable EffectControllerComponent var3
      ) {
         Map var4 = new Object2ObjectOpenHashMap();

         for (short var5 = 0; var5 < var1.getCapacity(); var5++) {
            ItemStack var6 = var1.getItemStack(var5);
            if (var6 != null && !var6.isEmpty()) {
               Item var7 = var6.getItem();
               ItemArmor var8 = var7.getArmor();
               if (var8 != null) {
                  Map var9 = var8.getDamageResistanceValues();
                  double var10 = var8.getBaseDamageResistance();
                  if (var9 != null) {
                     for (Entry var13 : var9.entrySet()) {
                        if (var13.getValue() != null) {
                           calculateResistanceEntryModifications(var13, var0, var4, var2, var6.isBroken(), var10);
                        }
                     }
                  }
               }
            }
         }

         addResistanceModifiersFromEntityEffects(var4, var3);
         class="kw">return var4;
      }

      class="kw">private class="kw">static void calculateResistanceEntryModifications(
         @Nonnull Entry<DamageCause, ResistanceModifier[]> var0,
         @Nonnull World var1,
         @Nonnull Map<DamageCause, DamageSystems.ArmorDamageReduction.ArmorResistanceModifiers> var2,
         boolean var3,
         boolean var4,
         double var5
      ) {
         DamageSystems.ArmorDamageReduction.ArmorResistanceModifiers var7 = var2.computeIfAbsent(
            var0.getKey(), var0x -> new DamageSystems.ArmorDamageReduction.ArmorResistanceModifiers()
         );
         ResistanceModifier[] var8 = var0.getValue();

         for (int var9 = 0; var9 < var8.length; var9++) {
            ResistanceModifier var10 = var8[var9];
            if (var10.getCalculationType() == ResistanceModifier.ResistanceCalculationType.FLAT) {
               var7.flatModifier = var7.flatModifier + var10.getAmount();
            } else {
               var7.multiplierModifier = var7.multiplierModifier + var10.getAmount();
            }
         }

         var7.flatModifier += (float)var5;
         DamageCause var13 = var0.getKey();
         if (var13 != null && var13.getInherits() != null) {
            var7.inheritedParentId = DamageCause.getAssetMap().getAsset(var13.getInherits());
         }

         if (var3 && var4) {
            BrokenPenalties var14 = var1.getGameplayConfig().getItemDurabilityConfig().getBrokenPenalties();
            double var11 = var14.getWeapon(0.0);
            var7.flatModifier *= (float)(1.0 - var11);
            var7.multiplierModifier *= (float)(1.0 - var11);
         }
      }

      class="kw">private class="kw">static void addResistanceModifiersFromEntityEffects(
         Map<DamageCause, DamageSystems.ArmorDamageReduction.ArmorResistanceModifiers> var0, EffectControllerComponent var1
      ) {
         if (var1 != null) {
            IntIterator var2 = var1.getActiveEffects().keySet().iterator();

            while (var2.hasNext()) {
               int var3 = (Integer)var2.next();
               EntityEffect var4 = EntityEffect.getAssetMap().getAsset(var3);
               if (var4 != null) {
                  Map var5 = var4.getDamageResistanceValues();
                  if (var5 != null && !var5.isEmpty()) {
                     for (Entry var7 : var5.entrySet()) {
                        DamageSystems.ArmorDamageReduction.ArmorResistanceModifiers var8 = var0.computeIfAbsent(
                           var7.getKey(), var0x -> new DamageSystems.ArmorDamageReduction.ArmorResistanceModifiers()
                        );

                        for (ResistanceModifier var12 : var7.getValue()) {
                           if (var12.getCalculationType() == ResistanceModifier.ResistanceCalculationType.FLAT) {
                              var8.flatModifier = var8.flatModifier + var12.getAmount();
                           } else if (var12.getCalculationType() == ResistanceModifier.ResistanceCalculationType.PERCENT) {
                              var8.multiplierModifier = var8.multiplierModifier + var12.getAmount();
                           }
                        }
                     }
                  }
               }
            }
         }
      }

      class="kw">public class="kw">static class ArmorResistanceModifiers {
         class="kw">public float flatModifier;
         class="kw">public float multiplierModifier;
         @Nullable
         class="kw">public DamageCause inheritedParentId;

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

   @Deprecated
   class="kw">public class="kw">static class ArmorKnockbackReduction class="kw">extends DamageEventSystem {
      @Nonnull
      class="kw">private class="kw">static class="kw">final ComponentType<EntityStore, TransformComponent> TRANSFORM_COMPONENT_TYPE = TransformComponent.getComponentType();
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = Query.and(
         AllLegacyLivingEntityTypesQuery.INSTANCE,
         InventoryComponent.Armor.getComponentType(),
         DamageDataComponent.getComponentType(),
         TRANSFORM_COMPONENT_TYPE
      );

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

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getFilterDamageGroup();
      }

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

      class="kw">public void handle(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
      }

      class="kw">public void handleInternal(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
         InventoryComponent.Armor var6 = var2.getComponent(var1, InventoryComponent.Armor.getComponentType());
         assert var6 != null;
         ItemContainer var7 = var6.getInventory();
         if (var7 != null) {
            KnockbackComponent var8 = var5.getIfPresentMetaObject(Damage.KNOCKBACK_COMPONENT);
            if (var8 != null) {
               float var9 = 0.0F;

               for (short var10 = 0; var10 < var7.getCapacity(); var10++) {
                  ItemStack var11 = var7.getItemStack(var10);
                  if (var11 != null && !var11.isEmpty()) {
                     Item var12 = var11.getItem();
                     ItemArmor var13 = var12.getArmor();
                     if (var13 != null) {
                        Map var14 = var13.getKnockbackResistances();
                        if (var14 != null) {
                           DamageCause var15 = var5.getCause();
                           var9 += var14.get(var15);
                        }
                     }
                  }
               }

               var8.addModifier(Math.max(1.0F - var9, 0.0F));
            }
         }
      }
   }

   class="kw">public class="kw">static class BreathingSystem class="kw">extends DelayedEntitySystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = Query.and(
         BreathingComponent.getComponentType(), TransformComponent.getComponentType(), ModelComponent.getComponentType()
      );

      class="kw">public BreathingSystem() {
         super(1.0F);
      }

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getGatherDamageGroup();
      }

      @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
      ) {
         Ref var6 = var3.getReferenceTo(var2);
         BreathingComponent var7 = var3.getComponent(var2, BreathingComponent.getComponentType());
         assert var7 != null;
         CachedStatsComponent var8 = var3.getComponent(var2, CachedStatsComponent.getComponentType());
         boolean var9 = var3.getArchetype().contains(Invulnerable.getComponentType());
         EntityUtils.processEntityBreathing(var6, var7, var8, var9, false, var5);
      }

      @Override
      class="kw">public boolean isParallel(int var1, int var2) {
         class="kw">return false;
      }
   }

   class="kw">public class="kw">static class CanBreathe class="kw">extends DelayedEntitySystem<EntityStore> {
      class="kw">private class="kw">static class="kw">final float DAMAGE_AMOUNT_DROWNING = 10.0F;
      class="kw">private class="kw">static class="kw">final float DAMAGE_AMOUNT_SUFFOCATION = 20.0F;
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = Query.and(BreathingComponent.getComponentType(), EntityStatMap.getComponentType());

      class="kw">public CanBreathe() {
         super(1.0F);
      }

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getGatherDamageGroup();
      }

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

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return Set.of(new SystemDependency<>(Order.AFTER, DamageSystems.BreathingSystem.class));
      }

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         BreathingComponent var6 = var3.getComponent(var2, BreathingComponent.getComponentType());
         assert var6 != null;
         if (var6.isSuffocating()) {
            EntityStatMap var7 = var3.getComponent(var2, EntityStatMap.getComponentType());
            assert var7 != null;
            EntityStatValue var8 = var7.get(DefaultEntityStatTypes.getOxygen());
            if (var8 != null && !(var8.get() > var8.getMin())) {
               Damage var9;
               if (var6.getLastFluidId() != 0) {
                  assert DamageCause.DROWNING != null;
                  var9 = new Damage(Damage.NULL_SOURCE, DamageCause.DROWNING, 10.0F);
               } else {
                  assert DamageCause.SUFFOCATION != null;
                  var9 = new Damage(Damage.NULL_SOURCE, DamageCause.SUFFOCATION, 20.0F);
               }

               DamageSystems.executeDamage(var2, var3, var5, var9);
            }
         }
      }

      @Override
      class="kw">public boolean isParallel(int var1, int var2) {
         class="kw">return false;
      }
   }

   class="kw">public class="kw">static class DamageArmor class="kw">extends DamageEventSystem {
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = AllLegacyLivingEntityTypesQuery.INSTANCE;

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

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getInspectDamageGroup();
      }

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

      class="kw">public void handle(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
         Ref var6 = var2.getReferenceTo(var1);
         DamageCause var7 = var5.getCause();
         if (var7.isDurabilityLoss()) {
            InventoryComponent.Armor var8 = var4.getComponent(var6, InventoryComponent.Armor.getComponentType());
            if (var8 != null) {
               ItemContainer var9 = var8.getInventory();
               ShortArrayList var10 = new ShortArrayList();
               var9.forEachWithMeta((var0, var1x, var2x) -> {
                  if (!var1x.isBroken()) {
                     var2x.add(var0);
                  }
               }, var10);
               if (!var10.isEmpty()) {
                  short var11 = var10.getShort(RandomExtra.randomRange(var10.size()));
                  ItemUtils.decreaseItemStackDurability(var6, var9.getItemStack(var11), -3, var11, var4);
               }
            }
         }
      }
   }

   class="kw">public class="kw">static class DamageAttackerTool class="kw">extends DamageEventSystem {
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = Query.and(AllLegacyLivingEntityTypesQuery.INSTANCE, InventoryComponent.Hotbar.getComponentType());

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

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getInspectDamageGroup();
      }

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

      class="kw">public void handle(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
         if (var5.getCause().isDurabilityLoss() && var5.getSource() class="kw">instanceof Damage.EntitySource var6) {
            Ref var11 = var6.getRef();
            if (var11.isValid()) {
               InventoryComponent.Hotbar var8 = var4.getComponent(var11, InventoryComponent.Hotbar.getComponentType());
               if (var8 != null) {
                  byte var9 = var8.getActiveSlot();
                  if (var9 != -1) {
                     ItemStack var10 = InventoryComponent.getItemInHand(var4, var11);
                     ItemUtils.decreaseItemStackDurability(var11, var10, -1, var9, var4);
                  }
               }
            }
         }
      }
   }

   class="kw">public class="kw">static class DamageStamina class="kw">extends DamageEventSystem class="kw">implements EntityStatsSystems.StatModifyingSystem {
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = Query.and(DamageDataComponent.getComponentType(), EntityStatMap.getComponentType());

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

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getInspectDamageGroup();
      }

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

      class="kw">public void handle(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
      }

      class="kw">public void handleInternal(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
         EntityStatMap var6 = var2.getComponent(var1, EntityStatMap.getComponentType());
         assert var6 != null;
         DamageDataComponent var7 = var2.getComponent(var1, DamageDataComponent.getComponentType());
         assert var7 != null;
         if (var7.getCurrentWielding() != null) {
            WieldingInteraction.StaminaCost var8 = var7.getCurrentWielding().getStaminaCost();
            if (var8 != null) {
               Boolean var9 = var5.getMetaStore().getIfPresentMetaObject(Damage.BLOCKED);
               if (var9 != null && var9) {
                  float var10 = var8.computeStaminaAmountToConsume(var5.getInitialAmount(), var6);
                  Float var11 = var5.getIfPresentMetaObject(Damage.STAMINA_DRAIN_MULTIPLIER);
                  if (var11 != null) {
                     var10 *= var11;
                  }

                  var6.subtractStatValue(DefaultEntityStatTypes.getStamina(), var10);
               }
            }
         }
      }
   }

   class="kw">public class="kw">static class EntityUIEvents class="kw">extends DamageEventSystem {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, EntityTrackerSystems.Visible> visibleComponentType = EntityModule.get().getVisibleComponentType();
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, UIComponentList> uiComponentListComponentType = EntityUIModule.get().getUIComponentListType();
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query = Query.and(this.visibleComponentType, this.uiComponentListComponentType);

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

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getInspectDamageGroup();
      }

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

      class="kw">public void handle(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
         if (!(var5.getAmount() <= 0.0F)) {
            if (var5.getSource() class="kw">instanceof Damage.EntitySource var6) {
               Ref var11 = var6.getRef();
               if (var11.isValid()) {
                  PlayerRef var8 = var4.getComponent(var11, PlayerRef.getComponentType());
                  if (var8 != null && var8.isValid()) {
                     EntityTrackerSystems.EntityViewer var9 = var4.getComponent(var11, EntityTrackerSystems.EntityViewer.getComponentType());
                     if (var9 != null) {
                        Float var10 = var5.getIfPresentMetaObject(Damage.HIT_ANGLE);
                        queueUpdateFor(var2.getReferenceTo(var1), var5.getAmount(), var10, var9);
                     }
                  }
               }
            }
         }
      }

      class="kw">private class="kw">static void queueUpdateFor(@Nonnull Ref<EntityStore> var0, float var1, @Nullable Float var2, @Nonnull EntityTrackerSystems.EntityViewer var3) {
         CombatTextUpdate var4 = new CombatTextUpdate(var2 == null ? 0.0F : var2, Integer.toString((int)Math.floor(var1)));
         var3.queueUpdate(var0, var4);
      }
   }

   class="kw">public class="kw">static class FallDamageNPCs class="kw">extends EntityTickingSystem<EntityStore> {
      class="kw">static class="kw">final float CURVE_MODIFIER = 0.58F;
      class="kw">static class="kw">final float CURVE_MULTIPLIER = 2.0F;
      class="kw">public class="kw">static class="kw">final double MIN_DAMAGE = 10.0;

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

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getGatherDamageGroup();
      }

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

      @Override
      class="kw">public void tick(float var1, int var2, @Nonnull Store<EntityStore> var3) {
         World var4 = var3.getExternalData().getWorld();
         if (var4.getWorldConfig().isFallDamageEnabled()) {
            super.tick(var1, var2, var3);
         }
      }

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         LivingEntity var6 = (LivingEntity)EntityUtils.getEntity(var2, var3);
         assert var6 != null;
         MovementStatesComponent var7 = var3.getComponent(var2, MovementStatesComponent.getComponentType());
         assert var7 != null;
         MovementStates var8 = var7.getMovementStates();
         if (var8.onGround && var6.getCurrentFallDistance() > 0.0) {
            Velocity var9 = var3.getComponent(var2, Velocity.getComponentType());
            assert var9 != null;
            double var10 = Math.abs(var9.getVelocity().y());
            World var12 = var5.getExternalData().getWorld();
            int var13 = var12.getGameplayConfig().getPlayerConfig().getMovementConfigIndex();
            MovementConfig var14 = MovementConfig.getAssetMap().getAsset(var13);
            float var15 = var14.getMinFallSpeedToEngageRoll();
            if (var10 > var15 && !var8.inFluid) {
               EntityStatMap var16 = var3.getComponent(var2, EntityStatMap.getComponentType());
               assert var16 != null;
               double var17 = Math.pow(0.58F * (var10 - var15), 2.0) + 10.0;
               EntityStatValue var19 = var16.get(DefaultEntityStatTypes.getHealth());
               assert var19 != null;
               float var20 = var19.getMax();
               double var21 = var20 / 100.0;
               int var23 = (int)Math.floor(var21 * var17);
               if (var8.rolling) {
                  if (var10 <= var14.getMaxFallSpeedRollFullMitigation()) {
                     var23 = 0;
                  } else if (var10 <= var14.getMaxFallSpeedToEngageRoll()) {
                     var23 = (int)(var23 * (1.0 - var14.getFallDamagePartialMitigationPercent() / 100.0));
                  }
               }

               if (var23 > 0) {
                  assert DamageCause.FALL != null;
                  Damage var24 = new Damage(Damage.NULL_SOURCE, DamageCause.FALL, var23);
                  DamageSystems.executeDamage(var2, var3, var5, var24);
               }
            }

            var6.setCurrentFallDistance(0.0);
         }
      }

      @Override
      class="kw">public boolean isParallel(int var1, int var2) {
         class="kw">return EntityTickingSystem.maybeUseParallel(var1, var2);
      }
   }

   class="kw">public class="kw">static class FallDamagePlayers class="kw">extends EntityTickingSystem<EntityStore> {
      class="kw">static class="kw">final float CURVE_MODIFIER = 0.58F;
      class="kw">static class="kw">final float CURVE_MULTIPLIER = 2.0F;
      class="kw">public class="kw">static class="kw">final double MIN_DAMAGE = 10.0;
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = Query.and(
         EntityStatMap.getComponentType(),
         MovementStatesComponent.getComponentType(),
         EntityModule.get().getPlayerComponentType(),
         PlayerInput.getComponentType()
      );
      @Nonnull
      class="kw">private class="kw">static class="kw">final Set<Dependency<EntityStore>> DEPENDENCIES = Set.of(new SystemDependency<>(Order.BEFORE, PlayerSystems.ProcessPlayerInput.class));

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

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getGatherDamageGroup();
      }

      @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 Store<EntityStore> var3) {
         World var4 = var3.getExternalData().getWorld();
         if (var4.getWorldConfig().isFallDamageEnabled()) {
            super.tick(var1, var2, var3);
         }
      }

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         PlayerInput var6 = var3.getComponent(var2, PlayerInput.getComponentType());
         assert var6 != null;
         Velocity var7 = var3.getComponent(var2, Velocity.getComponentType());
         assert var7 != null;
         double var8 = Math.abs(var7.getClientVelocity().y());
         World var10 = var5.getExternalData().getWorld();
         PlayerConfig var11 = var10.getGameplayConfig().getPlayerConfig();
         List var12 = var6.getMovementUpdateQueue();

         for (int var13 = 0; var13 < var12.size(); var13++) {
            PlayerInput.InputUpdate var14 = var12.get(var13);
            class="kw">switch (var14) {
               case PlayerInput.SetClientVelocity var17:
                  var8 = Math.abs(var17.getVelocity().y);
                  break;
               case PlayerInput.SetMovementStates var18:
                  Player var19 = var3.getComponent(var2, Player.getComponentType());
                  assert var19 != null;
                  if (var18.movementStates().onGround && var19.getCurrentFallDistance() > 0.0) {
                     int var20 = var11.getMovementConfigIndex();
                     MovementConfig var21 = MovementConfig.getAssetMap().getAsset(var20);
                     float var22 = var21.getMinFallSpeedToEngageRoll();
                     if (var8 > var22 && !var18.movementStates().inFluid) {
                        EntityStatMap var23 = var3.getComponent(var2, EntityStatMap.getComponentType());
                        assert var23 != null;
                        double var24 = Math.pow(0.58F * (var8 - var22), 2.0) + 10.0;
                        EntityStatValue var26 = var23.get(DefaultEntityStatTypes.getHealth());
                        assert var26 != null;
                        float var27 = var26.getMax();
                        double var28 = var27 / 100.0;
                        int var30 = (int)Math.floor(var28 * var24);
                        if (var18.movementStates().rolling) {
                           if (var8 <= var21.getMaxFallSpeedRollFullMitigation()) {
                              var30 = 0;
                           } else if (var8 <= var21.getMaxFallSpeedToEngageRoll()) {
                              var30 = (int)(var30 * (1.0 - var21.getFallDamagePartialMitigationPercent() / 100.0));
                           }
                        }

                        if (var30 > 0) {
                           assert DamageCause.FALL != null;
                           Damage var31 = new Damage(Damage.NULL_SOURCE, DamageCause.FALL, var30);
                           DamageSystems.executeDamage(var2, var3, var5, var31);
                        }
                     }

                     var19.setCurrentFallDistance(0.0);
                  }
                  break;
               class="kw">default:
            }
         }
      }

      @Override
      class="kw">public boolean isParallel(int var1, int var2) {
         class="kw">return EntityTickingSystem.maybeUseParallel(var1, var2);
      }
   }

   class="kw">public class="kw">static class FilterNPCWorldConfig class="kw">extends DamageEventSystem {
      class="kw">public FilterNPCWorldConfig() {
      }

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getFilterDamageGroup();
      }

      @Nullable
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return DamageSystems.NPCS_QUERY;
      }

      class="kw">public void handle(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
         World var6 = var3.getExternalData().getWorld();
         GameplayConfig var7 = var6.getGameplayConfig();
         if (var7.getCombatConfig().isNpcIncomingDamageDisabled()) {
            var5.setCancelled(true);
            Ref var8 = var2.getReferenceTo(var1);
            var4.tryRemoveComponent(var8, KnockbackComponent.getComponentType());
         }
      }
   }

   class="kw">public class="kw">static class FilterPlayerWorldConfig class="kw">extends DamageEventSystem {
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = Query.and(AllLegacyLivingEntityTypesQuery.INSTANCE, Player.getComponentType());

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

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getFilterDamageGroup();
      }

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

      class="kw">public void handle(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
         World var6 = var3.getExternalData().getWorld();
         GameplayConfig var7 = var6.getGameplayConfig();
         if (var7.getCombatConfig().isPlayerIncomingDamageDisabled()) {
            var5.setCancelled(true);
            Ref var8 = var2.getReferenceTo(var1);
            var4.tryRemoveComponent(var8, KnockbackComponent.getComponentType());
         }
      }
   }

   class="kw">public class="kw">static class FilterUnkillable class="kw">extends DamageEventSystem {
      class="kw">public class="kw">static boolean CAUSE_DESYNC;
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = AllLegacyLivingEntityTypesQuery.INSTANCE;

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

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getFilterDamageGroup();
      }

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

      class="kw">public void handle(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
         EffectControllerComponent var6 = var2.getComponent(var1, EffectControllerComponent.getComponentType());
         if (var6 != null && var6.isInvulnerable()) {
            var5.setCancelled(true);
         }

         Archetype var7 = var2.getArchetype();
         boolean var8 = var7.contains(DeathComponent.getComponentType());
         boolean var9 = var7.contains(Invulnerable.getComponentType());
         boolean var10 = var7.contains(Intangible.getComponentType());
         if (var8 || var9 || var10 || CAUSE_DESYNC) {
            var5.setCancelled(true);
         }
      }
   }

   @Deprecated
   class="kw">public class="kw">static class HackKnockbackValues class="kw">extends EntityTickingSystem<EntityStore> {
      class="kw">public class="kw">static float PLAYER_KNOCKBACK_SCALE = 25.0F;
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = Query.and(AllLegacyLivingEntityTypesQuery.INSTANCE, KnockbackComponent.getComponentType());

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

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getFilterDamageGroup();
      }

      @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
      ) {
         KnockbackComponent var6 = var3.getComponent(var2, KnockbackComponent.getComponentType());
         assert var6 != null;
         if (var6.getVelocityConfig() == null || SplitVelocity.SHOULD_MODIFY_VELOCITY) {
            Vector3d var7 = var6.getVelocity();
            var7.x = var7.x * PLAYER_KNOCKBACK_SCALE;
            var7.z = var7.z * PLAYER_KNOCKBACK_SCALE;
            var6.setVelocity(var7);
         }
      }

      @Override
      class="kw">public boolean isParallel(int var1, int var2) {
         class="kw">return EntityTickingSystem.maybeUseParallel(var1, var2);
      }
   }

   class="kw">public class="kw">static class HitAnimation class="kw">extends DamageEventSystem {
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = Query.and(Query.not(DeathComponent.getComponentType()), MovementStatesComponent.getComponentType());

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

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getInspectDamageGroup();
      }

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

      class="kw">public void handle(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
         ModelComponent var6 = var2.getComponent(var1, ModelComponent.getComponentType());
         Model var7 = var6 != null ? var6.getModel() : null;
         MovementStatesComponent var8 = var2.getComponent(var1, MovementStatesComponent.getComponentType());
         assert var8 != null;
         MovementStates var9 = var8.getMovementStates();
         if (!(var5.getAmount() <= 0.0F)) {
            String[] var10 = Entity.DefaultAnimations.getHurtAnimationIds(var9, var5.getCause());
            if (var7 != null) {
               String var11 = var7.getFirstBoundAnimationId(var10);
               if (var11 != null) {
                  AnimationUtils.playAnimation(var2.getReferenceTo(var1), AnimationSlot.Status, var11, true, var4);
               }
            }
         }
      }
   }

   class="kw">public class="kw">static class InvulnerableBreathing class="kw">extends RefChangeSystem<EntityStore, Invulnerable> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, Invulnerable> invulnerableComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, BreathingComponent> breathingComponentType;

      class="kw">public InvulnerableBreathing(@Nonnull ComponentType<EntityStore, Invulnerable> var1, @Nonnull ComponentType<EntityStore, BreathingComponent> var2) {
         this.invulnerableComponentType = var1;
         this.breathingComponentType = var2;
      }

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

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

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull Invulnerable var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         BreathingComponent var5 = var4.getComponent(var1, BreathingComponent.getComponentType());
         assert var5 != null;
         CachedStatsComponent var6 = var4.getComponent(var1, CachedStatsComponent.getComponentType());
         EntityUtils.processEntityBreathing(var1, var5, var6, true, true, var4);
      }

      class="kw">public void onComponentSet(
         @Nonnull Ref<EntityStore> var1,
         Invulnerable var2,
         @Nonnull Invulnerable var3,
         @Nonnull Store<EntityStore> var4,
         @Nonnull CommandBuffer<EntityStore> var5
      ) {
         BreathingComponent var6 = var5.getComponent(var1, BreathingComponent.getComponentType());
         assert var6 != null;
         CachedStatsComponent var7 = var5.getComponent(var1, CachedStatsComponent.getComponentType());
         EntityUtils.processEntityBreathing(var1, var6, var7, true, true, var5);
      }

      class="kw">public void onComponentRemoved(
         @Nonnull Ref<EntityStore> var1, @Nonnull Invulnerable var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         BreathingComponent var5 = var4.getComponent(var1, BreathingComponent.getComponentType());
         assert var5 != null;
         CachedStatsComponent var6 = var4.getComponent(var1, CachedStatsComponent.getComponentType());
         EntityUtils.processEntityBreathing(var1, var5, var6, false, true, var4);
      }
   }

   class="kw">public class="kw">static class OutOfWorldDamage class="kw">extends DelayedEntitySystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">static class="kw">final ComponentType<EntityStore, TransformComponent> TRANSFORM_COMPONENT_TYPE = TransformComponent.getComponentType();

      class="kw">public OutOfWorldDamage() {
         super(1.0F);
      }

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getGatherDamageGroup();
      }

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

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         TransformComponent var6 = var3.getComponent(var2, TRANSFORM_COMPONENT_TYPE);
         assert var6 != null;
         double var7 = var6.getPosition().y();
         if (!(var7 >= 0.0)) {
            boolean var9 = var7 < -32.0;
            Damage var10 = new Damage(Damage.NULL_SOURCE, DamageCause.OUT_OF_WORLD, var9 ? 2.1474836E9F : 50.0F);
            if (var9) {
               DeathComponent.tryAddComponent(var5, var3.getReferenceTo(var2), var10);
            } else {
               DamageSystems.executeDamage(var2, var3, var5, var10);
            }
         }
      }

      @Override
      class="kw">public boolean isParallel(int var1, int var2) {
         class="kw">return EntityTickingSystem.maybeUseParallel(var1, var2);
      }
   }

   class="kw">public class="kw">static class PlayerDamageFilterSystem class="kw">extends DamageEventSystem {
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = Player.getComponentType();

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

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getFilterDamageGroup();
      }

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

      class="kw">public void handle(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
         World var6 = var3.getExternalData().getWorld();
         Player var7 = var2.getComponent(var1, Player.getComponentType());
         assert var7 != null;
         if (var7.hasSpawnProtection()) {
            var5.setCancelled(true);
         } else {
            if (!var6.getWorldConfig().isPvpEnabled() && var5.getSource() class="kw">instanceof Damage.EntitySource var8) {
               Ref var10 = var8.getRef();
               if (var10.isValid() && var4.getComponent(var10, Player.getComponentType()) != null) {
                  var5.setCancelled(true);
                  class="kw">return;
               }
            }
         }
      }
   }

   class="kw">public class="kw">static class PlayerHitIndicators class="kw">extends DamageEventSystem {
      @Nonnull
      class="kw">private class="kw">static class="kw">final ComponentType<EntityStore, TransformComponent> TRANSFORM_COMPONENT_TYPE = TransformComponent.getComponentType();
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = PlayerRef.getComponentType();

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

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getInspectDamageGroup();
      }

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

      class="kw">public void handle(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
         PlayerRef var6 = var2.getComponent(var1, PlayerRef.getComponentType());
         assert var6 != null;
         if (var5.getSource() class="kw">instanceof Damage.EntitySource var7) {
            Ref var12 = var7.getRef();
            if (var12.isValid()) {
               DamageCause var9 = var5.getCause();
               if (var9 != null) {
                  TransformComponent var10 = var4.getComponent(var12, TRANSFORM_COMPONENT_TYPE);
                  if (var10 != null) {
                     Vector3d var11 = var10.getPosition();
                     var6.getPacketHandler()
                        .writeNoCache(
                           new DamageInfo(new com.hypixel.hytale.protocol.Vector3d(var11.x(), var11.y(), var11.z()), var5.getAmount(), var9.toPacket())
                        );
                  }
               }
            }
         }
      }
   }

   class="kw">public class="kw">static class RecordLastCombat class="kw">extends DamageEventSystem {
      @Nonnull
      class="kw">private class="kw">static class="kw">final ComponentType<EntityStore, DamageDataComponent> DAMAGE_DATA_COMPONENT_TYPE = DamageDataComponent.getComponentType();
      @Nonnull
      class="kw">private class="kw">static class="kw">final ResourceType<EntityStore, TimeResource> TIME_RESOURCE_TYPE = TimeResource.getResourceType();
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = DAMAGE_DATA_COMPONENT_TYPE;

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

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

      class="kw">public void handle(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
         DamageDataComponent var6 = var2.getComponent(var1, DAMAGE_DATA_COMPONENT_TYPE);
         assert var6 != null;
         Instant var7 = var3.getResource(TIME_RESOURCE_TYPE).getNow();
         var6.setLastCombatAction(var7);
         if (var5.getSource() class="kw">instanceof Damage.EntitySource var8) {
            Ref var11 = var8.getRef();
            if (!var11.isValid()) {
               class="kw">return;
            }

            DamageDataComponent var10 = var3.getComponent(var11, DAMAGE_DATA_COMPONENT_TYPE);
            if (var10 != null) {
               var10.setLastCombatAction(var7);
            }
         }
      }

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getInspectDamageGroup();
      }
   }

   class="kw">public class="kw">static class ReticleEvents class="kw">extends DamageEventSystem {
      class="kw">private class="kw">static class="kw">final int EVENT_ON_HIT_TAG_INDEX = AssetRegistry.getOrCreateTagIndex("OnHit");
      class="kw">private class="kw">static class="kw">final int EVENT_ON_KILL_TAG_INDEX = AssetRegistry.getOrCreateTagIndex("OnKill");
      class="kw">private class="kw">static class="kw">final ReticleEvent ON_HIT = new ReticleEvent(EVENT_ON_HIT_TAG_INDEX);
      class="kw">private class="kw">static class="kw">final ReticleEvent ON_KILL = new ReticleEvent(EVENT_ON_KILL_TAG_INDEX);

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

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getInspectDamageGroup();
      }

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

      class="kw">public void handle(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
         boolean var6 = var2.getArchetype().contains(DeathComponent.getComponentType());
         if (!(var5.getAmount() <= 0.0F)) {
            if (var5.getSource() class="kw">instanceof Damage.EntitySource var7) {
               Ref var10 = var7.getRef();
               if (var10.isValid()) {
                  PlayerRef var9 = var4.getComponent(var10, PlayerRef.getComponentType());
                  if (var9 != null && var9.isValid()) {
                     var9.getPacketHandler().writeNoCache(var6 ? ON_KILL : ON_HIT);
                  }
               }
            }
         }
      }
   }

   class="kw">public class="kw">static class TrackLastDamage class="kw">extends DamageEventSystem {
      @Nonnull
      class="kw">private class="kw">static class="kw">final ComponentType<EntityStore, DamageDataComponent> DAMAGE_DATA_COMPONENT_TYPE = DamageDataComponent.getComponentType();
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = Query.and(AllLegacyLivingEntityTypesQuery.INSTANCE, DAMAGE_DATA_COMPONENT_TYPE);

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

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getInspectDamageGroup();
      }

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

      class="kw">public void handle(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
         TimeResource var6 = var4.getResource(TimeResource.getResourceType());
         DamageDataComponent var7 = var2.getComponent(var1, DAMAGE_DATA_COMPONENT_TYPE);
         assert var7 != null;
         var7.setLastDamageTime(var6.getNow());
      }
   }

   @Deprecated
   class="kw">public class="kw">static class WieldingDamageReduction class="kw">extends DamageEventSystem {
      @Nonnull
      class="kw">private class="kw">static class="kw">final ComponentType<EntityStore, TransformComponent> TRANSFORM_COMPONENT_TYPE = TransformComponent.getComponentType();
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = Query.and(
         AllLegacyLivingEntityTypesQuery.INSTANCE,
         DamageDataComponent.getComponentType(),
         InteractionModule.get().getInteractionManagerComponent(),
         TRANSFORM_COMPONENT_TYPE
      );

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

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getFilterDamageGroup();
      }

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

      class="kw">public void handle(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
         DamageDataComponent var6 = var2.getComponent(var1, DamageDataComponent.getComponentType());
         assert var6 != null;
         InteractionManager var7 = var2.getComponent(var1, InteractionModule.get().getInteractionManagerComponent());
         assert var7 != null;
         WieldingInteraction var8 = var6.getCurrentWielding();
         if (var8 != null) {
            WieldingInteraction.AngledWielding var9 = var8.getAngledWielding();
            Ref var10 = var2.getReferenceTo(var1);
            TransformComponent var11 = var2.getComponent(var1, TRANSFORM_COMPONENT_TYPE);
            assert var11 != null;
            Vector3d var12 = var11.getPosition();
            Rotation3f var13 = var11.getRotation();
            if (var5.getSource() class="kw">instanceof Damage.EntitySource var14) {
               Ref var27 = var14.getRef();
               if (var27.isValid()) {
                  TransformComponent var16 = var4.getComponent(var27, TRANSFORM_COMPONENT_TYPE);
                  if (var16 != null) {
                     int var17 = var5.getDamageCauseIndex();
                     float var18 = 1.0F;
                     float var19 = 1.0F;
                     String var20 = null;
                     Int2FloatMap var21 = var8.getDamageModifiers();
                     if (!var21.isEmpty()) {
                        var18 = var21.getOrDefault(var17, 1.0F);
                        DamageEffects var22 = var8.getBlockedEffects();
                        if (var22 != null) {
                           var22.addToDamage(var5);
                        }

                        String var23 = var8.getBlockedInteractions();
                        if (var23 != null) {
                           var20 = var23;
                        }

                        var5.putMetaObject(Damage.BLOCKED, Boolean.TRUE);
                     }

                     if (var9 != null) {
                        Int2FloatMap var28 = var9.getDamageModifiers();
                        if (var28.containsKey(var17)) {
                           Vector3d var30 = var16.getPosition();
                           float var24 = TrigMathUtil.atan2(var30.x - var12.x, var30.z - var12.z);
                           var24 = MathUtil.wrapAngle(var24 + (float) Math.PI - var13.yaw());
                           if (Math.abs(MathUtil.compareAngle(var24, var9.getAngleRad())) < var9.getAngleDistanceRad()) {
                              var19 = var28.getOrDefault(var17, 1.0F);
                              DamageEffects var25 = var8.getBlockedEffects();
                              if (var25 != null) {
                                 var25.addToDamage(var5);
                              }

                              String var26 = var8.getBlockedInteractions();
                              if (var26 != null) {
                                 var20 = var26;
                              }

                              var5.putMetaObject(Damage.BLOCKED, Boolean.TRUE);
                           }
                        }
                     }

                     var5.setAmount(var5.getAmount() * var18 * var19);
                     if (var20 != null) {
                        NetworkId var29 = var4.getComponent(var27, NetworkId.getComponentType());
                        if (var29 != null) {
                           InteractionContext var31 = InteractionContext.forInteraction(var7, var10, InteractionType.Wielding, var4);
                           DynamicMetaStore var33 = var31.getMetaStore();
                           var33.putMetaObject(Interaction.TARGET_ENTITY, var27);
                           var33.putMetaObject(Interaction.DAMAGE, var5);
                           int var34 = var29.getId();
                           InteractionChain var35 = var7.initChain(
                              InteractionType.Wielding, var31, RootInteraction.getRootInteractionOrUnknown(var20), var34, null, false
                           );
                           var7.queueExecuteChain(var35);
                        }
                     }
                  }
               }
            }
         }
      }
   }

   @Deprecated
   class="kw">public class="kw">static class WieldingKnockbackReduction class="kw">extends DamageEventSystem {
      @Nonnull
      class="kw">private class="kw">static class="kw">final ComponentType<EntityStore, TransformComponent> TRANSFORM_COMPONENT_TYPE = TransformComponent.getComponentType();
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = Query.and(
         AllLegacyLivingEntityTypesQuery.INSTANCE, DamageDataComponent.getComponentType(), TRANSFORM_COMPONENT_TYPE
      );

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

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getFilterDamageGroup();
      }

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

      class="kw">public void handle(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
      }

      class="kw">public void handleInternal(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
         DamageDataComponent var6 = var2.getComponent(var1, DamageDataComponent.getComponentType());
         assert var6 != null;
         TransformComponent var7 = var2.getComponent(var1, TRANSFORM_COMPONENT_TYPE);
         assert var7 != null;
         WieldingInteraction var8 = var6.getCurrentWielding();
         if (var8 != null) {
            Int2DoubleMap var9 = var8.getKnockbackModifiers();
            WieldingInteraction.AngledWielding var10 = var8.getAngledWielding();
            KnockbackComponent var11 = var5.getIfPresentMetaObject(Damage.KNOCKBACK_COMPONENT);
            if (var11 != null) {
               if (var5.getSource() class="kw">instanceof Damage.EntitySource var12) {
                  Ref var24 = var12.getRef();
                  if (var24.isValid()) {
                     TransformComponent var14 = var4.getComponent(var24, TRANSFORM_COMPONENT_TYPE);
                     if (var14 != null) {
                        int var15 = var5.getDamageCauseIndex();
                        double var16 = 1.0;
                        double var18 = var9.getOrDefault(var15, 1.0);
                        if (var10 != null) {
                           Int2DoubleMap var20 = var10.getKnockbackModifiers();
                           if (var20.containsKey(var15)) {
                              Vector3d var21 = var7.getPosition();
                              Vector3d var22 = var14.getPosition();
                              float var23 = TrigMathUtil.atan2(var22.x - var21.x, var22.z - var21.z);
                              var23 = MathUtil.wrapAngle(var23 + (float) Math.PI - var7.getRotation().yaw());
                              if (Math.abs(MathUtil.compareAngle(var23, var10.getAngleRad())) < var10.getAngleDistanceRad()) {
                                 var16 = var20.getOrDefault(var15, 1.0);
                              }
                           }
                        }

                        var11.addModifier(var18);
                        var11.addModifier(var16);
                     }
                  }
               }
            }
         }
      }
   }
}