DamageSequence class

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

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

Поля (3)

МодификаторыТипИмя
private final DamageCalculator damageCalculator
private DamageEntityInteraction.EntityStatOnHit[] entityStatOnHit
private final DamageCalculatorSystems.Sequence sequence

Методы (5)

МодификаторыВозвратСигнатура
public void addSequentialHitpublic void addSequentialHit()
public DamageCalculator getDamageCalculatorpublic DamageCalculator getDamageCalculator()
public DamageEntityInteraction.EntityStatOnHit[] getEntityStatOnHitpublic DamageEntityInteraction.EntityStatOnHit[] getEntityStatOnHit()
public int getSequentialHitspublic int getSequentialHits()
public void setEntityStatOnHitpublic void setEntityStatOnHit(@Nullable DamageEntityInteraction.EntityStatOnHit[] var1)

Исходный код

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

class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
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.Ref;
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.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.server.core.asset.type.gameplay.BrokenPenalties;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.meta.MetaKey;
class="kw">import com.hypixel.hytale.server.core.modules.entitystats.EntityStatMap;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.server.DamageEntityInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.server.combat.DamageCalculator;
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.Object2FloatMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import java.util.Set;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class DamageCalculatorSystems {
   @Nonnull
   class="kw">public class="kw">static class="kw">final MetaKey<DamageCalculatorSystems.DamageSequence> DAMAGE_SEQUENCE = Damage.META_REGISTRY.registerMetaObject();

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

   @Nonnull
   class="kw">public class="kw">static Damage[] queueDamageCalculator(
      @Nonnull World var0,
      @Nonnull Object2FloatMap<DamageCause> var1,
      @Nonnull Ref<EntityStore> var2,
      @Nonnull CommandBuffer<EntityStore> var3,
      @Nonnull Damage.Source var4,
      @Nullable ItemStack var5
   ) {
      Damage[] var6 = new Damage[var1.size()];
      int var7 = 0;
      ObjectIterator var8 = var1.keySet().iterator();

      while (var8.hasNext()) {
         DamageCause var9 = (DamageCause)var8.next();
         float var10 = var1.getFloat(var9);
         if (var9 == DamageCause.PHYSICAL && var5 != null && var5.isBroken()) {
            BrokenPenalties var11 = var0.getGameplayConfig().getItemDurabilityConfig().getBrokenPenalties();
            var10 *= (float)(1.0 - var11.getWeapon(0.0));
         }

         Damage var12 = new Damage(var4, var9, var10);
         var12.getMetaStore().putMetaObject(Damage.CAN_BE_PREDICTED, Boolean.TRUE);
         var6[var7++] = var12;
      }

      class="kw">return var6;
   }

   class="kw">public class="kw">static class DamageSequence {
      @Nonnull
      class="kw">private class="kw">final DamageCalculatorSystems.Sequence sequence;
      @Nonnull
      class="kw">private class="kw">final DamageCalculator damageCalculator;
      @Nullable
      class="kw">private DamageEntityInteraction.EntityStatOnHit[] entityStatOnHit;

      class="kw">public DamageSequence(@Nonnull DamageCalculatorSystems.Sequence var1, @Nonnull DamageCalculator var2) {
         this.sequence = var1;
         this.damageCalculator = var2;
      }

      class="kw">public int getSequentialHits() {
         class="kw">return this.sequence.hits;
      }

      class="kw">public void addSequentialHit() {
         this.sequence.hits++;
      }

      @Nonnull
      class="kw">public DamageCalculator getDamageCalculator() {
         class="kw">return this.damageCalculator;
      }

      @Nullable
      class="kw">public DamageEntityInteraction.EntityStatOnHit[] getEntityStatOnHit() {
         class="kw">return this.entityStatOnHit;
      }

      class="kw">public void setEntityStatOnHit(@Nullable DamageEntityInteraction.EntityStatOnHit[] var1) {
         this.entityStatOnHit = var1;
      }
   }

   class="kw">public class="kw">static class Sequence {
      @Nonnull
      class="kw">public class="kw">static class="kw">final BuilderCodec<DamageCalculatorSystems.Sequence> CODEC = BuilderCodec.builder(
            DamageCalculatorSystems.Sequence.class, DamageCalculatorSystems.Sequence::new
         )
         .append(new KeyedCodec<>("Hits", Codec.INTEGER), (var0, var1) -> var0.hits = var1, var0 -> var0.hits)
         .add()
         .build();
      class="kw">private int hits;

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

      class="kw">public Sequence(int var1) {
         this.hits = var1;
      }

      class="kw">public int getHits() {
         class="kw">return this.hits;
      }

      @Nonnull
      @Override
      class="kw">public String toString() {
         class="kw">return "Sequence{hits=" + this.hits + "}";
      }
   }

   class="kw">public class="kw">static class SequenceModifier class="kw">extends DamageEventSystem {
      @Nonnull
      class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies = Set.of(
         new SystemGroupDependency<>(Order.AFTER, DamageModule.get().getGatherDamageGroup()),
         new SystemGroupDependency<>(Order.AFTER, DamageModule.get().getFilterDamageGroup()),
         new SystemDependency<EntityStore, DamageSystems.ApplyDamage>(Order.BEFORE, DamageSystems.ApplyDamage.class)
      );

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

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

      @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
      ) {
         if (!(var5.getAmount() <= 0.0F)) {
            DamageCalculatorSystems.DamageSequence var6 = var5.getIfPresentMetaObject(DamageCalculatorSystems.DAMAGE_SEQUENCE);
            if (var6 != null) {
               DamageCalculator var7 = var6.getDamageCalculator();
               if (var6.getSequentialHits() > 0) {
                  float var8 = Math.max(1.0F - var7.getSequentialModifierStep() * var6.getSequentialHits(), var7.getSequentialModifierMinimum());
                  var5.setAmount(var5.getAmount() * var8);
               }

               var6.addSequentialHit();
               DamageEntityInteraction.EntityStatOnHit[] var16 = var6.getEntityStatOnHit();
               if (var16 != null && var5.getSource() class="kw">instanceof Damage.EntitySource var9) {
                  Ref var17 = var9.getRef();
                  EntityStatMap var11 = var4.getComponent(var17, EntityStatMap.getComponentType());
                  if (var11 == null) {
                     class="kw">return;
                  }

                  for (DamageEntityInteraction.EntityStatOnHit var15 : var16) {
                     var15.processEntityStatsOnHit(var6.getSequentialHits(), var11);
                  }
               }
            }
         }
      }
   }
}