StatsConditionWithModifierInteraction class

Пакет: com.hypixel.hytale.server.core.modules.interaction.interaction.config.none

Файл: com/hypixel/hytale/server/core/modules/interaction/interaction/config/none/StatsConditionWithModifierInteraction.java

extends: StatsConditionBaseInteraction

Поля (18)

МодификаторыТипИмя
float var10
Int2ObjectMap var10
StaticModifier var11
EntityStatMap var3
CommandBuffer var4
ObjectIterator var4
float var4
Ref var5
Entry var5
float var5
EntityStatValue var6
float var6
var6
float var7
InventoryComponent.Armor var8
ItemStack var8
ItemContainer var9
Item var9

Методы (10)

МодификаторыВозвратСигнатура
private float calculateDiscountfloat calculateDiscount(@Nullable ItemContainer var1, int var2, float var3)
abstract for for(short var7 = 0; var7 < var1.getCapacity()
if if(var3 == null)
if if(this.costs == null)
if if(var6 == null)
if if(this.lessThan)
if if(var7 >= var10)
if if(var1 != null)
if if(var10 != null)
if if(var11 != null)

Исходный код

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

class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.codecs.EnumCodec;
class="kw">import com.hypixel.hytale.codec.validation.Validators;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.protocol.InteractionState;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.protocol.ValueType;
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.InteractionContext;
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.EntityStatValue;
class="kw">import com.hypixel.hytale.server.core.modules.entitystats.modifier.StaticModifier;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.CooldownHandler;
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.Int2FloatMap.Entry;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class StatsConditionWithModifierInteraction class="kw">extends StatsConditionBaseInteraction {
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<StatsConditionWithModifierInteraction> CODEC = BuilderCodec.builder(
         StatsConditionWithModifierInteraction.class, StatsConditionWithModifierInteraction::new, StatsConditionBaseInteraction.CODEC
      )
      .documentation("Interaction that is successful if the given stat conditions match.")
      .<ItemArmor.InteractionModifierId>append(
         new KeyedCodec<>("InteractionModifierId", new EnumCodec<>(ItemArmor.InteractionModifierId.class)),
         (var0, var1) -> var0.interactionModifierId = var1,
         var0 -> var0.interactionModifierId
      )
      .addValidator(Validators.nonNull())
      .add()
      .build();
   class="kw">protected ItemArmor.InteractionModifierId interactionModifierId;

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

   @Override
   class="kw">protected void firstRun(@Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nonnull CooldownHandler var3) {
      CommandBuffer var4 = var2.getCommandBuffer();
      assert var4 != null;
      Ref var5 = var2.getEntity();
      if (!this.canAfford(var5, var4)) {
         var2.getState().state = InteractionState.Failed;
      }
   }

   @Override
   class="kw">protected boolean canAfford(@Nonnull Ref<EntityStore> var1, @Nonnull ComponentAccessor<EntityStore> var2) {
      EntityStatMap var3 = var2.getComponent(var1, EntityStatMap.getComponentType());
      if (var3 == null) {
         class="kw">return false;
      }

      if (this.costs == null) {
         class="kw">return false;
      }

      ObjectIterator var4 = this.costs.int2FloatEntrySet().iterator();

      while (var4.hasNext()) {
         Entry var5 = (Entry)var4.next();
         EntityStatValue var6 = var3.get(var5.getIntKey());
         if (var6 == null) {
            class="kw">return false;
         }

         float var7 = this.valueType == ValueType.Absolute ? var6.get() : var6.asPercentage() * 100.0F;
         InventoryComponent.Armor var8 = var2.getComponent(var1, InventoryComponent.Armor.getComponentType());
         ItemContainer var9 = var8 != null ? var8.getInventory() : null;
         float var10 = this.calculateDiscount(var9, var5.getIntKey(), var5.getFloatValue());
         if (this.lessThan) {
            if (var7 >= var10) {
               class="kw">return false;
            }
         } else if (var7 < var10 && !this.canOverdraw(var7, var6.getMin())) {
            class="kw">return false;
         }
      }

      class="kw">return true;
   }

   class="kw">private float calculateDiscount(@Nullable ItemContainer var1, int var2, float var3) {
      float var4 = var3;
      float var5 = 0.0F;
      float var6 = 0.0F;
      if (var1 != null) {
         for (short var7 = 0; var7 < var1.getCapacity(); var7++) {
            ItemStack var8 = var1.getItemStack(var7);
            if (var8 != null && !var8.isEmpty()) {
               Item var9 = var8.getItem();
               if (var9 != null && var9.getArmor() != null) {
                  Int2ObjectMap var10 = var9.getArmor().getInteractionModifier(this.interactionModifierId.toString());
                  if (var10 != null) {
                     StaticModifier var11 = (StaticModifier)var10.get(var2);
                     if (var11 != null) {
                        if (var11.getCalculationType() == StaticModifier.CalculationType.ADDITIVE) {
                           var5 += var11.getAmount();
                        } else {
                           var6 = var11.getAmount();
                        }
                     }
                  }
               }
            }
         }
      }

      var4 += var5;
      class="kw">return var4 * Math.max(0.0F, 1.0F - var6);
   }

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