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();
}
}