StatModifiersManager class

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

Файл: com/hypixel/hytale/server/core/entity/StatModifiersManager.java

Поля (48)

МодификаторыТипИмя
private boolean recalculate
ItemStack var10
Entry var10
Entry var10
World var11
ItemStack var12
float var12
StaticModifier.CalculationType var12
StaticModifier.CalculationType var12
Object2FloatMap var13
float var13
String var13
StaticModifier var14
Object2FloatMap var14
StaticModifier var14
Int2ObjectOpenHashMap var2
Int2ObjectOpenHashMap var2
EffectControllerComponent var3
int var3
Object2FloatMap var3
double var3
Object2FloatMap var3
IntIterator var4
EntityEffect var4
ItemArmor var4
Int2ObjectMap var4
Int2ObjectOpenHashMap var5
Iterator var5
boolean var5
Int2ObjectMap var5
ObjectIterator var5
String var5
var5
BrokenPenalties var6
it.unimi.dsi.fastutil.ints.Int2ObjectMap.Entry var6
ObjectIterator var6
ItemStack var6
it.unimi.dsi.fastutil.ints.Int2ObjectMap.Entry var6
InventoryComponent.Armor var7
int var7
it.unimi.dsi.fastutil.ints.Int2ObjectMap.Entry var7
int var7
Int2ObjectMap var8
ObjectIterator var8
int var8
int var8
ObjectIterator var8
InventoryComponent.Utility var9

Методы (32)

МодификаторыВозвратСигнатура
static void addArmorStatModifiersvoid addArmorStatModifiers(@Nonnull ItemStack var0, double var1, @Nonnull Int2ObjectOpenHashMap<Object2FloatMap<StaticModifier.CalculationType>> var3)
abstract addArmorStatModifiers addArmorStatModifiers(var6, var3, var2)
static void addItemStatModifiersvoid addItemStatModifiers(@Nullable ItemStack var0, @Nonnull EntityStatMap var1, @Nonnull String var2, @Nonnull Function<Item, Int2ObjectMap<StaticModifier[]>> var3)
static void applyEffectModifiersvoid applyEffectModifiers(@Nonnull EntityStatMap var0, @Nonnull Int2ObjectMap<Object2FloatMap<StaticModifier.CalculationType>> var1)
abstract applyEffectModifiers applyEffectModifiers(var2, var5)
static void applyStatModifiersvoid applyStatModifiers(@Nonnull EntityStatMap var0, @Nonnull Int2ObjectMap<Object2FloatMap<StaticModifier.CalculationType>> var1)
abstract applyStatModifiers applyStatModifiers(var2, var8)
static void clearAllStatModifiersvoid clearAllStatModifiers(@Nonnull EntityStatMap.Predictable var0, @Nonnull EntityStatMap var1, @Nonnull String var2, @Nullable Int2ObjectMap<StaticModifier[]> var3)
abstract clearAllStatModifiers clearAllStatModifiers(EntityStatMap.Predictable.SELF, var1, var2, null)
abstract clearAllStatModifiers clearAllStatModifiers(EntityStatMap.Predictable.SELF, var1, var2, var4)
static void clearStatModifiersvoid clearStatModifiers(@Nonnull EntityStatMap.Predictable var0, @Nonnull EntityStatMap var1, int var2, @Nonnull String var3, int var4)
abstract clearStatModifiers clearStatModifiers(EntityStatMap.Predictable.SELF, var1, var8, var2, var7)
abstract clearStatModifiers clearStatModifiers(var0, var1, var4, var2, 0)
static void computeStatModifiersvoid computeStatModifiers(double var0, @Nonnull Int2ObjectMap<Object2FloatMap<StaticModifier.CalculationType>> var2, @Nonnull ItemStack var3, @Nonnull Int2ObjectMap<StaticModifier[]> var4)
abstract computeStatModifiers computeStatModifiers(var1, var3, var0, var5)
for for(int var2 = 0; var2 < var1.length; var2++)
abstract for for(int var2 = 0; var2 < var0.size()
abstract for for(short var5 = 0; var5 < var1.getCapacity()
abstract for for(int var4 = 0; var4 < var1.size()
if if(this.recalculate)
if if(var7 != null)
if if(var3 == null)
if if(var3 == null)
if if(var5)
if if(var6 != null)
if if(var4 != null)
if if(var5 != null)
if if(var4 == null)
if if(var3 == null)
public void queueEntityStatsToClearvoid queueEntityStatsToClear(@Nonnull int[] var1)
public void recalculateEntityStatModifiersvoid recalculateEntityStatModifiers(@Nonnull Ref<EntityStore> var1, @Nonnull EntityStatMap var2, @Nonnull ComponentAccessor<EntityStore> var3)
public void scheduleRecalculatevoid scheduleRecalculate()

Исходный код

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

class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Ref;
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.item.config.Item;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.ItemArmor;
class="kw">import com.hypixel.hytale.server.core.entity.effect.EffectControllerComponent;
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.ItemContainer;
class="kw">import com.hypixel.hytale.server.core.modules.entitystats.EntityStatMap;
class="kw">import com.hypixel.hytale.server.core.modules.entitystats.modifier.Modifier;
class="kw">import com.hypixel.hytale.server.core.modules.entitystats.modifier.StaticModifier;
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.Int2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.ints.IntIterator;
class="kw">import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
class="kw">import it.unimi.dsi.fastutil.ints.IntSet;
class="kw">import it.unimi.dsi.fastutil.objects.Object2FloatMap;
class="kw">import it.unimi.dsi.fastutil.objects.Object2FloatOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import it.unimi.dsi.fastutil.objects.Object2FloatMap.Entry;
class="kw">import java.util.Iterator;
class="kw">import java.util.function.Function;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class StatModifiersManager {
   class="kw">private boolean recalculate = true;
   @Nonnull
   class="kw">private class="kw">final IntSet statsToClear = new IntOpenHashSet();

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

   class="kw">public void scheduleRecalculate() {
      this.recalculate = true;
   }

   class="kw">public void queueEntityStatsToClear(@Nonnull int[] var1) {
      for (int var2 = 0; var2 < var1.length; var2++) {
         this.statsToClear.add(var1[var2]);
      }
   }

   class="kw">public void recalculateEntityStatModifiers(@Nonnull Ref<EntityStore> var1, @Nonnull EntityStatMap var2, @Nonnull ComponentAccessor<EntityStore> var3) {
      if (this.recalculate) {
         this.recalculate = false;
         if (!this.statsToClear.isEmpty()) {
            IntIterator var4 = this.statsToClear.iterator();

            while (var4.hasNext()) {
               var2.minimizeStatValue(EntityStatMap.Predictable.SELF, var4.nextInt());
            }

            this.statsToClear.clear();
         }

         World var11 = var3.getExternalData().getWorld();
         Int2ObjectOpenHashMap var5 = calculateEffectStatModifiers(var1, var3);
         applyEffectModifiers(var2, var5);
         BrokenPenalties var6 = var11.getGameplayConfig().getItemDurabilityConfig().getBrokenPenalties();
         InventoryComponent.Armor var7 = var3.getComponent(var1, InventoryComponent.Armor.getComponentType());
         if (var7 != null) {
            Int2ObjectMap var8 = computeStatModifiers(var6, var7.getInventory());
            applyStatModifiers(var2, var8);
         }

         ItemStack var12 = InventoryComponent.getItemInHand(var3, var1);
         addItemStatModifiers(var12, var2, "*Weapon_", var0 -> var0.getWeapon() != null ? var0.getWeapon().getStatModifiers() : null);
         if (var12 == null || var12.getItem().getUtility().isCompatible()) {
            InventoryComponent.Utility var9 = var3.getComponent(var1, InventoryComponent.Utility.getComponentType());
            ItemStack var10 = var9 != null ? var9.getActiveItem() : null;
            addItemStatModifiers(var10, var2, "*Utility_", var0 -> var0.getUtility().getStatModifiers());
         }
      }
   }

   @Nonnull
   class="kw">private class="kw">static Int2ObjectOpenHashMap<Object2FloatMap<StaticModifier.CalculationType>> calculateEffectStatModifiers(
      @Nonnull Ref<EntityStore> var0, @Nonnull ComponentAccessor<EntityStore> var1
   ) {
      Int2ObjectOpenHashMap var2 = new Int2ObjectOpenHashMap();
      EffectControllerComponent var3 = var1.getComponent(var0, EffectControllerComponent.getComponentType());
      if (var3 == null) {
         class="kw">return var2;
      }

      var3.getActiveEffects()
         .forEach(
            (var1x, var2x) -> {
               if (var2x.isInfinite() || !(var2x.getRemainingDuration() <= 0.0F)) {
                  int var3 = var2x.getEntityEffectIndex();
                  EntityEffect var4 = EntityEffect.getAssetMap().getAsset(var3);
                  if (var4 != null && var4.getStatModifiers() != null) {
                     Iterator var5 = var4.getStatModifiers().int2ObjectEntrySet().iterator();

                     while (var5.hasNext()) {
                        it.unimi.dsi.fastutil.ints.Int2ObjectMap.Entry var6 = (it.unimi.dsi.fastutil.ints.Int2ObjectMap.Entry<StaticModifier[]>)var5.next();
                        int var7 = var6.getIntKey();

                        for (StaticModifier var11 : (StaticModifier[])var6.getValue()) {
                           float var12 = var11.getAmount();
                           Object2FloatMap var13 = (Object2FloatMap<StaticModifier.CalculationType>)var2.computeIfAbsent(
                              var7, var0x -> new Object2FloatOpenHashMap()
                           );
                           var13.mergeFloat(var11.getCalculationType(), var12, Float::sum);
                        }
                     }
                  }
               }
            }
         );
      class="kw">return var2;
   }

   class="kw">private class="kw">static void applyEffectModifiers(@Nonnull EntityStatMap var0, @Nonnull Int2ObjectMap<Object2FloatMap<StaticModifier.CalculationType>> var1) {
      for (int var2 = 0; var2 < var0.size(); var2++) {
         Object2FloatMap var3 = (Object2FloatMap<StaticModifier.CalculationType>)var1.get(var2);
         if (var3 == null) {
            for (StaticModifier.CalculationType var15 : StaticModifier.CalculationType.values()) {
               var0.removeModifier(var2, var15.createKey("Effect"));
            }
         } else {
            for (StaticModifier.CalculationType var7 : StaticModifier.CalculationType.values()) {
               if (!var3.containsKey(var7)) {
                  var0.removeModifier(var2, var7.createKey("Effect"));
               }
            }

            ObjectIterator var8 = var3.object2FloatEntrySet().iterator();

            while (var8.hasNext()) {
               Entry var10 = (Entry<StaticModifier.CalculationType>)var8.next();
               StaticModifier.CalculationType var12 = (StaticModifier.CalculationType)var10.getKey();
               StaticModifier var14 = new StaticModifier(Modifier.ModifierTarget.MAX, var12, var10.getFloatValue());
               var0.putModifier(var2, var12.createKey("Effect"), var14);
            }
         }
      }
   }

   class="kw">private class="kw">static void computeStatModifiers(
      double var0,
      @Nonnull Int2ObjectMap<Object2FloatMap<StaticModifier.CalculationType>> var2,
      @Nonnull ItemStack var3,
      @Nonnull Int2ObjectMap<StaticModifier[]> var4
   ) {
      boolean var5 = var3.isBroken();
      ObjectIterator var6 = var4.int2ObjectEntrySet().iterator();

      while (var6.hasNext()) {
         it.unimi.dsi.fastutil.ints.Int2ObjectMap.Entry var7 = (it.unimi.dsi.fastutil.ints.Int2ObjectMap.Entry<StaticModifier[]>)var6.next();
         int var8 = var7.getIntKey();

         for (StaticModifier var12 : (StaticModifier[])var7.getValue()) {
            float var13 = var12.getAmount();
            if (var5) {
               var13 *= (float)var0;
            }

            Object2FloatMap var14 = (Object2FloatMap<StaticModifier.CalculationType>)var2.computeIfAbsent(var8, var0x -> new Object2FloatOpenHashMap());
            var14.mergeFloat(var12.getCalculationType(), var13, Float::sum);
         }
      }
   }

   @Nonnull
   class="kw">private class="kw">static Int2ObjectMap<Object2FloatMap<StaticModifier.CalculationType>> computeStatModifiers(
      @Nonnull BrokenPenalties var0, @Nonnull ItemContainer var1
   ) {
      Int2ObjectOpenHashMap var2 = new Int2ObjectOpenHashMap();
      double var3 = var0.getArmor(0.0);

      for (short var5 = 0; var5 < var1.getCapacity(); var5++) {
         ItemStack var6 = var1.getItemStack(var5);
         if (var6 != null) {
            addArmorStatModifiers(var6, var3, var2);
         }
      }

      class="kw">return var2;
   }

   class="kw">private class="kw">static void addArmorStatModifiers(
      @Nonnull ItemStack var0, double var1, @Nonnull Int2ObjectOpenHashMap<Object2FloatMap<StaticModifier.CalculationType>> var3
   ) {
      if (!ItemStack.isEmpty(var0)) {
         ItemArmor var4 = var0.getItem().getArmor();
         if (var4 != null) {
            Int2ObjectMap var5 = var4.getStatModifiers();
            if (var5 != null) {
               computeStatModifiers(var1, var3, var0, var5);
            }
         }
      }
   }

   class="kw">private class="kw">static void addItemStatModifiers(
      @Nullable ItemStack var0, @Nonnull EntityStatMap var1, @Nonnull String var2, @Nonnull Function<Item, Int2ObjectMap<StaticModifier[]>> var3
   ) {
      if (ItemStack.isEmpty(var0)) {
         clearAllStatModifiers(EntityStatMap.Predictable.SELF, var1, var2, null);
      } else {
         Int2ObjectMap var4 = var3.apply(var0.getItem());
         if (var4 == null) {
            clearAllStatModifiers(EntityStatMap.Predictable.SELF, var1, var2, null);
         } else {
            ObjectIterator var5 = var4.int2ObjectEntrySet().iterator();

            while (var5.hasNext()) {
               it.unimi.dsi.fastutil.ints.Int2ObjectMap.Entry var6 = (it.unimi.dsi.fastutil.ints.Int2ObjectMap.Entry<StaticModifier[]>)var5.next();
               int var7 = 0;
               int var8 = var6.getIntKey();

               for (StaticModifier var12 : (StaticModifier[])var6.getValue()) {
                  String var13 = var2 + var7;
                  var7++;
                  if (!(var1.getModifier(var8, var13) class="kw">instanceof StaticModifier var15 && var15.equals(var12))) {
                     var1.putModifier(EntityStatMap.Predictable.SELF, var8, var13, var12);
                  }
               }

               clearStatModifiers(EntityStatMap.Predictable.SELF, var1, var8, var2, var7);
            }

            clearAllStatModifiers(EntityStatMap.Predictable.SELF, var1, var2, var4);
         }
      }
   }

   class="kw">private class="kw">static void clearAllStatModifiers(
      @Nonnull EntityStatMap.Predictable var0, @Nonnull EntityStatMap var1, @Nonnull String var2, @Nullable Int2ObjectMap<StaticModifier[]> var3
   ) {
      for (int var4 = 0; var4 < var1.size(); var4++) {
         if (var3 == null || !var3.containsKey(var4)) {
            clearStatModifiers(var0, var1, var4, var2, 0);
         }
      }
   }

   class="kw">private class="kw">static void clearStatModifiers(@Nonnull EntityStatMap.Predictable var0, @Nonnull EntityStatMap var1, int var2, @Nonnull String var3, int var4) {
      String var5;
      do {
         var5 = var3 + var4;
         var4++;
      } while (var1.removeModifier(var0, var2, var5) != null);
   }

   class="kw">private class="kw">static void applyStatModifiers(@Nonnull EntityStatMap var0, @Nonnull Int2ObjectMap<Object2FloatMap<StaticModifier.CalculationType>> var1) {
      for (int var2 = 0; var2 < var0.size(); var2++) {
         Object2FloatMap var3 = (Object2FloatMap<StaticModifier.CalculationType>)var1.get(var2);
         if (var3 == null) {
            for (StaticModifier.CalculationType var15 : StaticModifier.CalculationType.values()) {
               var0.removeModifier(var2, var15.createKey("Armor"));
            }
         } else {
            for (StaticModifier.CalculationType var7 : StaticModifier.CalculationType.values()) {
               if (!var3.containsKey(var7)) {
                  var0.removeModifier(var2, var7.createKey("Armor"));
               }
            }

            ObjectIterator var8 = var3.object2FloatEntrySet().iterator();

            while (var8.hasNext()) {
               Entry var10 = (Entry<StaticModifier.CalculationType>)var8.next();
               StaticModifier.CalculationType var12 = (StaticModifier.CalculationType)var10.getKey();
               StaticModifier var14 = new StaticModifier(Modifier.ModifierTarget.MAX, var12, var10.getFloatValue());
               var0.putModifier(var2, var12.createKey("Armor"), var14);
            }
         }
      }
   }
}