DamageEntityInteraction class
Пакет: com.hypixel.hytale.server.core.modules.interaction.interaction.config.server
Файл: com/hypixel/hytale/server/core/modules/interaction/interaction/config/server/DamageEntityInteraction.java
extends: Interaction
Поля (103)
| Модификаторы | Тип | Имя |
|---|---|---|
|
public static final BuilderCodec<DamageEntityInteraction.AngledDamage> |
CODEC |
|
public static final BuilderCodec<DamageEntityInteraction.EntityStatOnHit> |
CODEC |
|
public static final BuilderCodec<DamageEntityInteraction.TargetedDamage> |
CODEC |
|
public static final float[] |
DEFAULT_MULTIPLIERS_PER_ENTITIES_HIT |
|
public static final float |
DEFAULT_MULTIPLIER_PER_EXTRA_ENTITY_HIT |
|
protected float |
amount |
|
protected float |
angleDistanceRad |
|
protected float |
angleRad |
|
|
break |
|
protected DamageCalculator |
damageCalculator |
|
protected DamageEffects |
damageEffects |
|
protected String |
entityStatId |
|
private int |
entityStatIndex |
|
private final int |
index |
|
protected int |
index |
|
private final String |
key |
|
protected float |
multiplierPerExtraEntityHit |
|
protected float[] |
multipliersPerEntitiesHit |
|
protected String |
next |
|
protected Map<String, TargetEntityEffect> |
targetEntityEffects |
|
String[] |
var1 |
|
com.hypixel.hytale.protocol.DamageEffects |
var1 |
|
com.hypixel.hytale.protocol.DamageEffects |
var1 |
|
Damage.EntitySource |
var10 |
|
String |
var10 |
|
|
var10 |
|
EntitySnapshot |
var10 |
|
float |
var10 |
|
Vector3d |
var11 |
|
Vector3d |
var12 |
|
ItemStack |
var12 |
|
float |
var13 |
|
Item |
var13 |
|
int |
var14 |
|
|
var14 |
|
|
var14 |
|
Map |
var14 |
|
DamageEntityInteraction.TargetedDamage |
var15 |
|
float |
var15 |
|
ObjectIterator |
var15 |
|
DamageCause |
var16 |
|
DamageEntityInteraction.AngledDamage |
var17 |
|
StaticModifier[] |
var17 |
|
Object2FloatMap |
var18 |
|
Rotation3fc |
var19 |
|
|
var19 |
|
|
var19 |
|
int |
var2 |
|
Label[] |
var2 |
|
com.hypixel.hytale.protocol.DamageEntityInteraction |
var2 |
|
HeadRotation |
var20 |
|
double[] |
var21 |
|
float[] |
var22 |
|
StaticModifier[] |
var22 |
|
KnockbackComponent |
var23 |
|
|
var23 |
|
|
var23 |
|
Knockback |
var24 |
|
Map |
var24 |
|
Damage[] |
var25 |
|
Damage |
var26 |
|
DamageCalculatorSystems.DamageSequence |
var27 |
|
String |
var3 |
|
boolean |
var3 |
|
|
var3 |
|
Label |
var3 |
|
float |
var3 |
|
|
var3 |
|
|
var3 |
|
float |
var32 |
|
float |
var33 |
|
|
var33 |
|
float |
var34 |
|
String |
var35 |
|
DamageEntityInteraction.TargetedDamage |
var36 |
|
DynamicMetaStore |
var37 |
|
DamageCalculatorSystems.Sequence |
var38 |
|
ItemStack |
var39 |
|
boolean |
var4 |
|
|
var4 |
|
int |
var4 |
|
DamageEntityInteraction.AngledDamage |
var4 |
|
String |
var5 |
|
Ref |
var6 |
|
String |
var6 |
|
CommandBuffer |
var6 |
|
CommandBuffer |
var7 |
|
DamageCalculator |
var7 |
|
|
var7 |
|
|
var7 |
|
EffectControllerComponent |
var7 |
|
Ref |
var8 |
|
DamageEffects |
var8 |
|
|
var8 |
|
|
var8 |
|
InventoryComponent.Armor |
var8 |
|
Vector4d |
var9 |
|
int |
var9 |
|
String |
var9 |
|
|
var9 |
|
DamageEntityInteraction.TargetedDamage |
var9 |
|
EntitySnapshot |
var9 |
|
ItemContainer |
var9 |
Методы (72)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public |
AngledDamagepublic AngledDamage() |
|
private |
AngledDamageTagprivate AngledDamageTag(int var1) |
|
public |
EntityStatOnHitpublic EntityStatOnHit() |
|
public |
TargetedDamagepublic TargetedDamage() |
|
private |
TargetedDamageTagprivate TargetedDamageTag(@Nonnull String var1) |
private |
void |
attemptEntityDamage0void attemptEntityDamage0(@Nonnull Damage.Source var1, @Nonnull InteractionContext var2, @Nonnull Ref<EntityStore> var3, @Nonnull Ref<EntityStore> var4, @Nullable Vector4d var5) |
static |
void |
calculateKnockbackAndArmorModifiersvoid calculateKnockbackAndArmorModifiers(@Nonnull DamageClass var0,
@Nonnull Object2FloatMap<DamageCause> var1,
@Nonnull Ref<EntityStore> var2,
@Nonnull Ref<EntityStore> var3,
float[] var4,
double[] var5,
@Nonnull ComponentAccessor<EntityStore> var6) |
|
public boolean |
equalspublic boolean equals(@Nullable Object var1) |
|
public boolean |
equalspublic boolean equals(@Nullable Object var1) |
|
|
for for(Damage var8 : var2) |
|
|
for for(DamageEntityInteraction.AngledDamage var8 : this.angledDamage) |
|
|
for for(String var14 : this.sortedTargetDamageKeys) |
|
|
for for(int var3 = 0; var3 < this.angledDamage.length; var3++) |
|
|
for for(int var3 = 0; var3 < this.angledDamage.length; var3++) |
|
|
for for(int var5 = 0; var5 < this.entityStatsOnHit.length; var5++) |
|
|
for for(int var16 = 0; var16 < this.angledDamage.length; var16++) |
|
|
for for(Damage var31 : var25) |
|
|
for for(StaticModifier var21 : var17) |
|
|
for for(StaticModifier var27 : var22) |
abstract |
|
for for(short var11 = 0; var11 < var9.getCapacity() |
|
public DamageCalculator |
getDamageCalculatorpublic DamageCalculator getDamageCalculator() |
|
public int |
getIndexpublic int getIndex() |
|
public String |
getKeypublic String getKey() |
|
public int |
hashCodepublic int hashCode() |
|
public int |
hashCodepublic int hashCode() |
|
|
if if(SelectInteraction.SHOW_VISUAL_DEBUG && var9 != null) |
|
|
if if(var2 == null) |
|
|
if if(var3) |
|
|
if if(this.failed != null) |
|
|
if if(this.next != null) |
|
|
if if(this.blocked != null) |
|
|
if if(this.angledDamage != null) |
|
|
if if(var9 == null) |
|
|
if if(var9 != null) |
|
|
if if(var10 == null) |
|
|
if if(var10 != null) |
|
|
if if(this.angledDamage != null) |
|
|
if if(this.angledDamage != null) |
|
|
if if(this.entityStatsOnHit != null) |
|
|
if if(this.angledDamage != null) |
|
|
if if(var35 != null) |
|
|
if if(var36 != null) |
|
|
if if(var7 != null) |
|
|
if if(var20 != null) |
|
|
if if(var23 == null) |
|
|
if if(var25.length > 0) |
|
|
if if(var8 != null) |
|
|
if if(var23 != null) |
|
|
if if(var5 != null) |
|
|
if if(var7 != null) |
|
|
if if(var8 != null) |
|
|
if if(var14 != null) |
|
|
if if(var17 != null) |
|
|
if if(var22 != null) |
|
|
if if(this == var1) |
|
|
if if(var0.entityStatId != null) |
|
|
if if(var1 != 0) |
|
|
if if(var1 <= this.multipliersPerEntitiesHit.length) |
|
|
if if(this == var1) |
|
public static DamageEntityInteraction.AngledDamageTag |
ofpublic static DamageEntityInteraction.AngledDamageTag of(int var0) |
|
public static DamageEntityInteraction.TargetedDamageTag |
ofpublic static DamageEntityInteraction.TargetedDamageTag of(@Nonnull String var0) |
private |
boolean |
processDamageboolean processDamage(@Nonnull InteractionContext var1, @Nullable Damage[] var2) |
|
public void |
processEntityStatsOnHitpublic void processEntityStatsOnHit(int var1, @Nonnull EntityStatMap var2) |
|
public com.hypixel.hytale.protocol.AngledDamage |
toAngledDamagePacketpublic com.hypixel.hytale.protocol.AngledDamage toAngledDamagePacket() |
|
public com.hypixel.hytale.protocol.EntityStatOnHit |
toPacketpublic com.hypixel.hytale.protocol.EntityStatOnHit toPacket() |
|
public String |
toStringpublic String toString() |
|
public String |
toStringpublic String toString() |
|
public String |
toStringpublic String toString() |
|
public String |
toStringpublic String toString() |
|
public String |
toStringpublic String toString() |
|
public com.hypixel.hytale.protocol.TargetedDamage |
toTargetedDamagePacketpublic com.hypixel.hytale.protocol.TargetedDamage toTargetedDamagePacket() |
|
|
while while(var2 < var1.length) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.interaction.interaction.config.server;
class="kw">import com.hypixel.hytale.assetstore.map.IndexedLookupTableAssetMap;
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.codec.codecs.array.ArrayCodec;
class="kw">import com.hypixel.hytale.codec.codecs.map.MapCodec;
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.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.math.vector.Rotation3fc;
class="kw">import com.hypixel.hytale.protocol.InteractionState;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.protocol.WaitForDataFrom;
class="kw">import com.hypixel.hytale.server.core.asset.type.entityeffect.config.EntityEffect;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.Item;
class="kw">import com.hypixel.hytale.server.core.entity.EntitySnapshot;
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.effect.EffectControllerComponent;
class="kw">import com.hypixel.hytale.server.core.entity.knockback.KnockbackComponent;
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.io.NetworkSerializable;
class="kw">import com.hypixel.hytale.server.core.meta.DynamicMetaStore;
class="kw">import com.hypixel.hytale.server.core.meta.MetaKey;
class="kw">import com.hypixel.hytale.server.core.modules.debug.DebugUtils;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.Damage;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DamageCalculatorSystems;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DamageCause;
class="kw">import com.hypixel.hytale.server.core.modules.entitystats.EntityStatMap;
class="kw">import com.hypixel.hytale.server.core.modules.entitystats.asset.EntityStatType;
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.modules.interaction.interaction.config.Interaction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.data.Collector;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.data.CollectorTag;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.data.StringTag;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.none.SelectInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.server.combat.DamageCalculator;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.server.combat.DamageClass;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.server.combat.DamageEffects;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.server.combat.Knockback;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.server.combat.TargetEntityEffect;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.operation.Label;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.operation.OperationsBuilder;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.util.InteractionValidation;
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.Object2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import java.util.Arrays;
class="kw">import java.util.Collections;
class="kw">import java.util.HashMap;
class="kw">import java.util.Map;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.stream.IntStream;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3f;
class="kw">import org.joml.Vector4d;
class="kw">public class DamageEntityInteraction class="kw">extends Interaction {
@Nonnull
class="kw">public class="kw">static class="kw">final BuilderCodec<DamageEntityInteraction> CODEC = BuilderCodec.builder(
DamageEntityInteraction.class, DamageEntityInteraction::new, Interaction.ABSTRACT_CODEC
)
.documentation("Damages the target entity.")
.appendInherited(
new KeyedCodec<>("DamageCalculator", DamageCalculator.CODEC),
(var0, var1) -> var0.damageCalculator = var1,
var0 -> var0.damageCalculator,
(var0, var1) -> var0.damageCalculator = var1.damageCalculator
)
.add()
.appendInherited(
new KeyedCodec<>("DamageEffects", DamageEffects.CODEC),
(var0, var1) -> var0.damageEffects = var1,
var0 -> var0.damageEffects,
(var0, var1) -> var0.damageEffects = var1.damageEffects
)
.add()
.appendInherited(
new KeyedCodec<>("AngledDamage", new ArrayCodec<>(DamageEntityInteraction.AngledDamage.CODEC, DamageEntityInteraction.AngledDamage[]::new)),
(var0, var1) -> var0.angledDamage = var1,
var0 -> var0.angledDamage,
(var0, var1) -> var0.angledDamage = var1.angledDamage
)
.add()
.<Map>appendInherited(
new KeyedCodec<>("TargetedDamage", new MapCodec<>(DamageEntityInteraction.TargetedDamage.CODEC, HashMap::new)),
(var0, var1) -> var0.targetedDamage = var1,
var0 -> var0.targetedDamage,
(var0, var1) -> var0.targetedDamage = var1.targetedDamage
)
.addValidator(Validators.nonNull())
.add()
.<DamageEntityInteraction.EntityStatOnHit[]>appendInherited(
new KeyedCodec<>("EntityStatsOnHit", new ArrayCodec<>(DamageEntityInteraction.EntityStatOnHit.CODEC, DamageEntityInteraction.EntityStatOnHit[]::new)),
(var0, var1) -> var0.entityStatsOnHit = var1,
var0 -> var0.entityStatsOnHit,
(var0, var1) -> var0.entityStatsOnHit = var1.entityStatsOnHit
)
.documentation("EntityStats to apply based on the hits resulting from this interaction.")
.add()
.<String>appendInherited(
new KeyedCodec<>("Next", Interaction.CHILD_ASSET_CODEC), (var0, var1) -> var0.next = var1, var0 -> var0.next, (var0, var1) -> var0.next = var1.next
)
.documentation("The interactions to run when this interaction succeeds.")
.addValidatorLate(() -> VALIDATOR_CACHE.getValidator().late())
.add()
.<String>appendInherited(
new KeyedCodec<>("Failed", Interaction.CHILD_ASSET_CODEC),
(var0, var1) -> var0.failed = var1,
var0 -> var0.failed,
(var0, var1) -> var0.failed = var1.failed
)
.documentation("The interactions to run when this interaction fails.")
.addValidatorLate(() -> VALIDATOR_CACHE.getValidator().late())
.add()
.<String>appendInherited(
new KeyedCodec<>("Blocked", Interaction.CHILD_ASSET_CODEC),
(var0, var1) -> var0.blocked = var1,
var0 -> var0.blocked,
(var0, var1) -> var0.blocked = var1.blocked
)
.documentation("The interactions to run when this interaction fails.")
.addValidatorLate(() -> VALIDATOR_CACHE.getValidator().late())
.add()
.afterDecode(var0 -> {
String[] var1 = var0.sortedTargetDamageKeys = var0.targetedDamage.keySet().toArray(String[]::new);
Arrays.sort(var1);
int var2 = 0;
while (var2 < var1.length) {
String var3 = var1[var2];
var0.targetedDamage.get(var3).index = var2++;
}
})
.build();
class="kw">private class="kw">static class="kw">final int FAILED_LABEL_INDEX = 0;
class="kw">private class="kw">static class="kw">final int SUCCESS_LABEL_INDEX = 1;
class="kw">private class="kw">static class="kw">final int BLOCKED_LABEL_INDEX = 2;
class="kw">private class="kw">static class="kw">final int ANGLED_LABEL_OFFSET = 3;
class="kw">public class="kw">static class="kw">final int ARMOR_RESISTANCE_FLAT_MODIFIER = 0;
class="kw">public class="kw">static class="kw">final int ARMOR_RESISTANCE_MULTIPLIER_MODIFIER = 1;
class="kw">private class="kw">static class="kw">final StringTag TAG_NEXT = StringTag.of("Next");
class="kw">private class="kw">static class="kw">final StringTag TAG_FAILED = StringTag.of("Failed");
class="kw">private class="kw">static class="kw">final StringTag TAG_BLOCKED = StringTag.of("Blocked");
class="kw">private class="kw">static class="kw">final MetaKey<DamageCalculatorSystems.Sequence> SEQUENTIAL_HITS = META_REGISTRY.registerMetaObject(
var0 -> new DamageCalculatorSystems.Sequence()
);
class="kw">private class="kw">static class="kw">final MetaKey<Integer> NEXT_INDEX = META_REGISTRY.registerMetaObject();
class="kw">private class="kw">static class="kw">final MetaKey<Damage[]> QUEUED_DAMAGE = META_REGISTRY.registerMetaObject();
class="kw">protected DamageCalculator damageCalculator;
@Nullable
class="kw">protected DamageEffects damageEffects;
class="kw">protected DamageEntityInteraction.AngledDamage[] angledDamage;
class="kw">protected DamageEntityInteraction.EntityStatOnHit[] entityStatsOnHit;
class="kw">protected Map<String, DamageEntityInteraction.TargetedDamage> targetedDamage = Collections.emptyMap();
class="kw">protected String[] sortedTargetDamageKeys;
@Nullable
class="kw">protected String next;
@Nullable
class="kw">protected String blocked;
@Nullable
class="kw">protected String failed;
class="kw">public DamageEntityInteraction() {
}
@Override
class="kw">protected void tick0(boolean var1, float var2, @Nonnull InteractionType var3, @Nonnull InteractionContext var4, @Nonnull CooldownHandler var5) {
Ref var6 = var4.getTargetEntity();
if (var6 != null && var6.isValid() && var4.getEntity().isValid()) {
CommandBuffer var7 = var4.getCommandBuffer();
assert var7 != null;
if (!InteractionValidation.canPlayerInteractWithEntity(var4.getEntity(), var7, var4.getHeldItem(), var6)) {
var4.jump(var4.getLabel(0));
var4.getState().nextLabel = 0;
var4.getState().state = InteractionState.Failed;
} else if (!this.processDamage(var4, var4.getInstanceStore().getIfPresentMetaObject(QUEUED_DAMAGE))) {
Ref var8 = var4.getOwningEntity();
Vector4d var9 = var4.getMetaStore().getMetaObject(Interaction.HIT_LOCATION);
Damage.EntitySource var10 = new Damage.EntitySource(var8);
this.attemptEntityDamage0(var10, var4, var4.getEntity(), var6, var9);
if (SelectInteraction.SHOW_VISUAL_DEBUG && var9 != null) {
DebugUtils.addSphere(var7.getExternalData().getWorld(), new Vector3d(var9.x, var9.y, var9.z), new Vector3f(1.0F, 0.0F, 0.0F), 0.2F, 5.0F);
}
}
} else {
var4.jump(var4.getLabel(0));
var4.getState().nextLabel = 0;
var4.getState().state = InteractionState.Failed;
}
}
@Override
class="kw">protected void simulateTick0(boolean var1, float var2, @Nonnull InteractionType var3, @Nonnull InteractionContext var4, @Nonnull CooldownHandler var5) {
this.tick0(var1, var2, var3, var4, var5);
}
class="kw">private boolean processDamage(@Nonnull InteractionContext var1, @Nullable Damage[] var2) {
if (var2 == null) {
class="kw">return false;
}
boolean var3 = true;
boolean var4 = false;
for (Damage var8 : var2) {
if (!var8.isCancelled()) {
var3 = false;
}
if (var8.getMetaObject(Damage.BLOCKED)) {
var4 = true;
}
}
if (var3) {
var1.jump(var1.getLabel(0));
var1.getState().nextLabel = 0;
var1.getState().state = InteractionState.Failed;
} else if (var4) {
var1.jump(var1.getLabel(2));
var1.getState().nextLabel = 2;
var1.getState().state = InteractionState.Finished;
} else {
int var9 = var1.getInstanceStore().getMetaObject(NEXT_INDEX);
var1.getState().nextLabel = var9;
var1.jump(var1.getLabel(var9));
var1.getState().state = InteractionState.Finished;
}
class="kw">return true;
}
@Override
class="kw">public void compile(@Nonnull OperationsBuilder var1) {
Label[] var2 = new Label[3 + (this.angledDamage != null ? this.angledDamage.length : 0) + this.targetedDamage.size()];
var1.addOperation(this, var2);
Label var3 = var1.createUnresolvedLabel();
var2[0] = var1.createLabel();
if (this.failed != null) {
Interaction.getInteractionOrUnknown(this.failed).compile(var1);
}
var1.jump(var3);
var2[1] = var1.createLabel();
if (this.next != null) {
Interaction.getInteractionOrUnknown(this.next).compile(var1);
}
var1.jump(var3);
var2[2] = var1.createLabel();
if (this.blocked != null) {
Interaction.getInteractionOrUnknown(this.blocked).compile(var1);
}
var1.jump(var3);
int var4 = 3;
if (this.angledDamage != null) {
for (DamageEntityInteraction.AngledDamage var8 : this.angledDamage) {
var2[var4++] = var1.createLabel();
String var9 = var8.next;
if (var9 == null) {
var9 = this.next;
}
if (var9 != null) {
Interaction.getInteractionOrUnknown(var9).compile(var1);
}
var1.jump(var3);
}
}
if (!this.targetedDamage.isEmpty()) {
for (String var14 : this.sortedTargetDamageKeys) {
DamageEntityInteraction.TargetedDamage var15 = this.targetedDamage.get(var14);
var2[var4++] = var1.createLabel();
String var10 = var15.next;
if (var10 == null) {
var10 = this.next;
}
if (var10 != null) {
Interaction.getInteractionOrUnknown(var10).compile(var1);
}
var1.jump(var3);
}
}
var1.resolveLabel(var3);
}
@Nullable
class="kw">public DamageCalculator getDamageCalculator() {
class="kw">return this.damageCalculator;
}
@Nullable
class="kw">public DamageEntityInteraction.AngledDamage[] getAngledDamage() {
class="kw">return this.angledDamage;
}
@Nonnull
class="kw">public Map<String, DamageEntityInteraction.TargetedDamage> getTargetedDamage() {
class="kw">return this.targetedDamage;
}
@Override
class="kw">public boolean walk(@Nonnull Collector var1, @Nonnull InteractionContext var2) {
if (this.next != null && InteractionManager.walkInteraction(var1, var2, TAG_NEXT, this.next)) {
class="kw">return true;
}
if (this.failed != null && InteractionManager.walkInteraction(var1, var2, TAG_FAILED, this.failed)) {
class="kw">return true;
}
if (this.blocked != null && InteractionManager.walkInteraction(var1, var2, TAG_BLOCKED, this.blocked)) {
class="kw">return true;
}
if (this.angledDamage != null) {
for (int var3 = 0; var3 < this.angledDamage.length; var3++) {
DamageEntityInteraction.AngledDamage var4 = this.angledDamage[var3];
String var5 = var4.next != null ? var4.next : this.next;
if (var5 != null && InteractionManager.walkInteraction(var1, var2, DamageEntityInteraction.AngledDamageTag.of(var3), var5)) {
class="kw">return true;
}
}
}
if (!this.targetedDamage.isEmpty()) {
for (Entry var8 : this.targetedDamage.entrySet()) {
DamageEntityInteraction.TargetedDamage var9 = var8.getValue();
String var6 = var9.next != null ? var9.next : this.next;
if (var6 != null && InteractionManager.walkInteraction(var1, var2, DamageEntityInteraction.TargetedDamageTag.of(var8.getKey()), var6)) {
class="kw">return true;
}
}
}
class="kw">return false;
}
@Nonnull
@Override
class="kw">protected com.hypixel.hytale.protocol.Interaction generatePacket() {
class="kw">return new com.hypixel.hytale.protocol.DamageEntityInteraction();
}
@Override
class="kw">protected void configurePacket(com.hypixel.hytale.protocol.Interaction var1) {
super.configurePacket(var1);
com.hypixel.hytale.protocol.DamageEntityInteraction var2 = (com.hypixel.hytale.protocol.DamageEntityInteraction)var1;
var2.damageEffects = this.damageEffects != null ? this.damageEffects.toPacket() : null;
var2.next = Interaction.getInteractionIdOrUnknown(this.next);
var2.failed = Interaction.getInteractionIdOrUnknown(this.failed);
var2.blocked = Interaction.getInteractionIdOrUnknown(this.blocked);
if (this.angledDamage != null) {
var2.angledDamage = new com.hypixel.hytale.protocol.AngledDamage[this.angledDamage.length];
for (int var3 = 0; var3 < this.angledDamage.length; var3++) {
var2.angledDamage[var3] = this.angledDamage[var3].toAngledDamagePacket();
}
}
if (this.entityStatsOnHit != null) {
var2.entityStatsOnHit = new com.hypixel.hytale.protocol.EntityStatOnHit[this.entityStatsOnHit.length];
for (int var5 = 0; var5 < this.entityStatsOnHit.length; var5++) {
var2.entityStatsOnHit[var5] = this.entityStatsOnHit[var5].toPacket();
}
}
var2.targetedDamage = new Object2ObjectOpenHashMap();
for (Entry var4 : this.targetedDamage.entrySet()) {
var2.targetedDamage.put(var4.getKey(), var4.getValue().toTargetedDamagePacket());
}
}
@Override
class="kw">public boolean needsRemoteSync() {
class="kw">return true;
}
@Nonnull
@Override
class="kw">public WaitForDataFrom getWaitForDataFrom() {
class="kw">return WaitForDataFrom.None;
}
class="kw">private void attemptEntityDamage0(
@Nonnull Damage.Source var1, @Nonnull InteractionContext var2, @Nonnull Ref<EntityStore> var3, @Nonnull Ref<EntityStore> var4, @Nullable Vector4d var5
) {
CommandBuffer var6 = var2.getCommandBuffer();
assert var6 != null;
if (isTargetInvulnerable(var6, var3, var4)) {
var2.jump(var2.getLabel(0));
var2.getState().nextLabel = 0;
var2.getState().state = InteractionState.Failed;
} else {
DamageCalculator var7 = this.damageCalculator;
DamageEffects var8 = this.damageEffects;
EntitySnapshot var9 = var2.getSnapshot(var4, var6);
EntitySnapshot var10 = var2.getSnapshot(var3, var6);
Vector3d var11 = var9.getPosition();
Vector3d var12 = var10.getPosition();
float var13 = TrigMathUtil.atan2(var12.x - var11.x, var12.z - var11.z);
int var14 = 1;
if (this.angledDamage != null) {
float var15 = MathUtil.wrapAngle(var13 + (float) Math.PI - var9.getBodyRotation().yaw());
for (int var16 = 0; var16 < this.angledDamage.length; var16++) {
DamageEntityInteraction.AngledDamage var17 = this.angledDamage[var16];
if (Math.abs(MathUtil.compareAngle(var15, var17.angleRad)) < var17.angleDistanceRad) {
var7 = var17.damageCalculator == null ? var7 : var17.damageCalculator;
var8 = var17.damageEffects == null ? var8 : var17.damageEffects;
var14 = 3 + var16;
break;
}
}
}
String var35 = var2.getMetaStore().getIfPresentMetaObject(HIT_DETAIL);
if (var35 != null) {
DamageEntityInteraction.TargetedDamage var36 = this.targetedDamage.get(var35);
if (var36 != null) {
var7 = var36.damageCalculator == null ? var7 : var36.damageCalculator;
var8 = var36.damageEffects == null ? var8 : var36.damageEffects;
var14 = var36.index;
}
}
var2.getInstanceStore().putMetaObject(NEXT_INDEX, var14);
if (var7 != null) {
DynamicMetaStore var37 = var2.getMetaStore().getMetaObject(SelectInteraction.SELECT_META_STORE);
DamageCalculatorSystems.Sequence var38 = var37 == null ? new DamageCalculatorSystems.Sequence() : var37.getMetaObject(SEQUENTIAL_HITS);
Object2FloatMap var18 = var7.calculateDamage(this.getRunTime());
HeadRotation var20 = var6.getComponent(var3, HeadRotation.getComponentType());
Rotation3fc var19;
if (var20 != null) {
var19 = var20.getRotation();
} else {
var19 = Rotation3f.IDENTITY;
}
if (var18 != null && !var18.isEmpty()) {
double[] var21 = new double[]{1.0};
float[] var22 = new float[]{0.0F, 1.0F};
calculateKnockbackAndArmorModifiers(var7.getDamageClass(), var18, var4, var3, var22, var21, var6);
KnockbackComponent var23 = null;
if (var8 != null && var8.getKnockback() != null) {
var23 = var6.getComponent(var4, KnockbackComponent.getComponentType());
if (var23 == null) {
var23 = new KnockbackComponent();
var6.putComponent(var4, KnockbackComponent.getComponentType(), var23);
}
Knockback var24 = var8.getKnockback();
var23.setVelocity(var24.calculateVector(var12, var19.yaw(), var11).mul(var21[0]));
var23.setVelocityType(var24.getVelocityType());
var23.setVelocityConfig(var24.getVelocityConfig());
var23.setDuration(var24.getDuration());
}
ItemStack var39 = ItemUtils.canApplyItemStackPenalties(var3, var6) ? var2.getHeldItem() : null;
Damage[] var25 = DamageCalculatorSystems.queueDamageCalculator(
var6.getExternalData().getWorld(), var18, var4, var2.getCommandBuffer(), var1, var39
);
if (var25.length > 0) {
Damage var26 = var25[0];
DamageCalculatorSystems.DamageSequence var27 = new DamageCalculatorSystems.DamageSequence(var38, var7);
var27.setEntityStatOnHit(this.entityStatsOnHit);
var26.putMetaObject(DamageCalculatorSystems.DAMAGE_SEQUENCE, var27);
if (var8 != null) {
var8.addToDamage(var26);
}
for (Damage var31 : var25) {
if (var23 != null) {
var31.putMetaObject(Damage.KNOCKBACK_COMPONENT, var23);
}
float var32 = var31.getAmount();
var32 += var22[0];
var31.setAmount(var32 * Math.max(0.0F, var22[1]));
if (var5 != null) {
var31.putMetaObject(Damage.HIT_LOCATION, var5);
float var33 = TrigMathUtil.atan2(var12.x - var5.x, var12.z - var5.z);
var33 = MathUtil.wrapAngle(var33 - var19.yaw());
float var34 = var33 * (180.0F / (float)Math.PI);
var31.putMetaObject(Damage.HIT_ANGLE, var34);
}
var6.invoke(var4, var31);
}
this.processDamage(var2, var25);
}
var2.getInstanceStore().putMetaObject(QUEUED_DAMAGE, var25);
}
}
}
}
class="kw">private class="kw">static void calculateKnockbackAndArmorModifiers(
@Nonnull DamageClass var0,
@Nonnull Object2FloatMap<DamageCause> var1,
@Nonnull Ref<EntityStore> var2,
@Nonnull Ref<EntityStore> var3,
float[] var4,
double[] var5,
@Nonnull ComponentAccessor<EntityStore> var6
) {
EffectControllerComponent var7 = var6.getComponent(var2, EffectControllerComponent.getComponentType());
if (var7 != null) {
var5[0] = IntStream.of(var7.getActiveEffectIndexes())
.mapToObj(var0x -> (EntityEffect)((IndexedLookupTableAssetMap)EntityEffect.getAssetStore().getAssetMap()).getAsset(var0x))
.filter(var0x -> var0x != null && var0x.getApplicationEffects() != null)
.mapToDouble(var0x -> var0x.getApplicationEffects().getKnockbackMultiplier())
.reduce(1.0, (var0x, var2x) -> var0x * var2x);
}
InventoryComponent.Armor var8 = var6.getComponent(var3, InventoryComponent.Armor.getComponentType());
if (var8 != null) {
ItemContainer var9 = var8.getInventory();
float var10 = 1.0F;
for (short var11 = 0; var11 < var9.getCapacity(); var11++) {
ItemStack var12 = var9.getItemStack(var11);
if (var12 != null && !var12.isEmpty()) {
Item var13 = var12.getItem();
if (var13.getArmor() != null) {
Map var14 = var13.getArmor().getDamageEnhancementValues();
ObjectIterator var15 = var1.keySet().iterator();
while (var15.hasNext()) {
DamageCause var16 = (DamageCause)var15.next();
if (var14 != null) {
StaticModifier[] var17 = var14.get(var16);
if (var17 != null) {
for (StaticModifier var21 : var17) {
if (var21.getCalculationType() == StaticModifier.CalculationType.ADDITIVE) {
var4[0] += var21.getAmount();
} else {
var4[1] += var21.getAmount();
}
}
}
}
Map var24 = var13.getArmor().getKnockbackEnhancements();
if (var24 != null && var24.containsKey(var16)) {
var10 += var24.get(var16);
}
}
StaticModifier[] var22 = var13.getArmor().getDamageClassEnhancement().get(var0);
if (var22 != null) {
for (StaticModifier var27 : var22) {
if (var27.getCalculationType() == StaticModifier.CalculationType.ADDITIVE) {
var4[0] += var27.getAmount();
} else {
var4[1] += var27.getAmount();
}
}
}
}
}
}
var5[0] *= var10;
}
}
class="kw">public class="kw">static class AngledDamage class="kw">extends DamageEntityInteraction.TargetedDamage {
class="kw">public class="kw">static class="kw">final BuilderCodec<DamageEntityInteraction.AngledDamage> CODEC = BuilderCodec.builder(
DamageEntityInteraction.AngledDamage.class, DamageEntityInteraction.AngledDamage::new, DamageEntityInteraction.TargetedDamage.CODEC
)
.appendInherited(
new KeyedCodec<>("Angle", Codec.FLOAT),
(var0, var1) -> var0.angleRad = var1 * (float) (Math.PI / 180.0),
var0 -> var0.angleRad * (180.0F / (float)Math.PI),
(var0, var1) -> var0.angleRad = var1.angleRad
)
.add()
.appendInherited(
new KeyedCodec<>("AngleDistance", Codec.FLOAT),
(var0, var1) -> var0.angleDistanceRad = var1 * (float) (Math.PI / 180.0),
var0 -> var0.angleDistanceRad * (180.0F / (float)Math.PI),
(var0, var1) -> var0.angleDistanceRad = var1.angleDistanceRad
)
.add()
.build();
class="kw">protected float angleRad;
class="kw">protected float angleDistanceRad;
class="kw">public AngledDamage() {
}
@Nonnull
class="kw">public com.hypixel.hytale.protocol.AngledDamage toAngledDamagePacket() {
com.hypixel.hytale.protocol.DamageEffects var1 = this.damageEffects == null ? null : this.damageEffects.toPacket();
class="kw">return new com.hypixel.hytale.protocol.AngledDamage(this.angleRad, this.angleDistanceRad, var1, Interaction.getInteractionIdOrUnknown(this.next));
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "AngledDamage{angleRad=" + this.angleRad + ", angleDistanceRad=" + this.angleDistanceRad + "} " + super.toString();
}
}
class="kw">public class="kw">static class="kw">final class AngledDamageTag class="kw">implements CollectorTag {
class="kw">private class="kw">final int index;
class="kw">private AngledDamageTag(int var1) {
this.index = var1;
}
class="kw">public int getIndex() {
class="kw">return this.index;
}
@Override
class="kw">public boolean equals(@Nullable Object var1) {
if (this == var1) {
class="kw">return true;
} else {
class="kw">return var1 != null && this.getClass() == var1.getClass() ? this.index == ((DamageEntityInteraction.AngledDamageTag)var1).index : false;
}
}
@Override
class="kw">public int hashCode() {
class="kw">return this.index;
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "AngledDamageTag{index=" + this.index + "}";
}
@Nonnull
class="kw">public class="kw">static DamageEntityInteraction.AngledDamageTag of(int var0) {
class="kw">return new DamageEntityInteraction.AngledDamageTag(var0);
}
}
class="kw">public class="kw">static class EntityStatOnHit class="kw">implements NetworkSerializable<com.hypixel.hytale.protocol.EntityStatOnHit> {
class="kw">public class="kw">static class="kw">final BuilderCodec<DamageEntityInteraction.EntityStatOnHit> CODEC = BuilderCodec.builder(
DamageEntityInteraction.EntityStatOnHit.class, DamageEntityInteraction.EntityStatOnHit::new
)
.appendInherited(
new KeyedCodec<>("EntityStatId", Codec.STRING),
(var0, var1) -> var0.entityStatId = var1,
var0 -> var0.entityStatId,
(var0, var1) -> var0.entityStatId = var1.entityStatId
)
.documentation("The id of the EntityStat that will be affected by the interaction.")
.addValidator(Validators.nonNull())
.addValidator(EntityStatType.VALIDATOR_CACHE.getValidator())
.add()
.<Float>appendInherited(
new KeyedCodec<>("Amount", Codec.FLOAT), (var0, var1) -> var0.amount = var1, var0 -> var0.amount, (var0, var1) -> var0.amount = var1.amount
)
.documentation("The base amount for a single entity hit.")
.add()
.<float[]>appendInherited(
new KeyedCodec<>("MultipliersPerEntitiesHit", Codec.FLOAT_ARRAY),
(var0, var1) -> var0.multipliersPerEntitiesHit = var1,
var0 -> var0.multipliersPerEntitiesHit,
(var0, var1) -> var0.multipliersPerEntitiesHit = var1.multipliersPerEntitiesHit
)
.documentation("An array of multipliers corresponding to how much the amount should be multiplied by for each entity hit.")
.addValidator(Validators.nonEmptyFloatArray())
.add()
.<Float>appendInherited(
new KeyedCodec<>("MultiplierPerExtraEntityHit", Codec.FLOAT),
(var0, var1) -> var0.multiplierPerExtraEntityHit = var1,
var0 -> var0.multiplierPerExtraEntityHit,
(var0, var1) -> var0.multiplierPerExtraEntityHit = var1.multiplierPerExtraEntityHit
)
.documentation(
"When the number of entity hit is higher than the number of multipliers defined, the amount will be multiplied by this multiplier for each extra entity hit."
)
.add()
.afterDecode(var0 -> {
if (var0.entityStatId != null) {
var0.entityStatIndex = EntityStatType.getAssetMap().getIndex(var0.entityStatId);
}
})
.build();
class="kw">public class="kw">static class="kw">final float[] DEFAULT_MULTIPLIERS_PER_ENTITIES_HIT = new float[]{1.0F, 0.6F, 0.4F, 0.2F, 0.1F};
class="kw">public class="kw">static class="kw">final float DEFAULT_MULTIPLIER_PER_EXTRA_ENTITY_HIT = 0.05F;
class="kw">protected String entityStatId;
class="kw">protected float amount;
class="kw">protected float[] multipliersPerEntitiesHit = DEFAULT_MULTIPLIERS_PER_ENTITIES_HIT;
class="kw">protected float multiplierPerExtraEntityHit = 0.05F;
class="kw">private int entityStatIndex;
class="kw">public EntityStatOnHit() {
}
class="kw">public void processEntityStatsOnHit(int var1, @Nonnull EntityStatMap var2) {
if (var1 != 0) {
float var3;
if (var1 <= this.multipliersPerEntitiesHit.length) {
var3 = this.multipliersPerEntitiesHit[var1 - 1];
} else {
var3 = this.multiplierPerExtraEntityHit;
}
var2.addStatValue(EntityStatMap.Predictable.SELF, this.entityStatIndex, var3 * this.amount);
}
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "EntityStatOnHit{entityStatId='"
+ this.entityStatId
+ "', amount="
+ this.amount
+ ", multipliersPerEntitiesHit="
+ Arrays.toString(this.multipliersPerEntitiesHit)
+ ", multiplierPerExtraEntityHit="
+ this.multiplierPerExtraEntityHit
+ ", entityStatIndex="
+ this.entityStatIndex
+ "}";
}
@Nonnull
class="kw">public com.hypixel.hytale.protocol.EntityStatOnHit toPacket() {
class="kw">return new com.hypixel.hytale.protocol.EntityStatOnHit(
this.entityStatIndex, this.amount, this.multipliersPerEntitiesHit, this.multiplierPerExtraEntityHit
);
}
}
class="kw">public class="kw">static class TargetedDamage {
class="kw">public class="kw">static class="kw">final BuilderCodec<DamageEntityInteraction.TargetedDamage> CODEC = BuilderCodec.builder(
DamageEntityInteraction.TargetedDamage.class, DamageEntityInteraction.TargetedDamage::new
)
.appendInherited(
new KeyedCodec<>("DamageCalculator", DamageCalculator.CODEC),
(var0, var1) -> var0.damageCalculator = var1,
var0 -> var0.damageCalculator,
(var0, var1) -> var0.damageCalculator = var1.damageCalculator
)
.add()
.appendInherited(
new KeyedCodec<>("TargetEntityEffects", new MapCodec<>(TargetEntityEffect.CODEC, HashMap::new)),
(var0, var1) -> var0.targetEntityEffects = var1,
var0 -> var0.targetEntityEffects,
(var0, var1) -> var0.targetEntityEffects = var1.targetEntityEffects
)
.add()
.appendInherited(
new KeyedCodec<>("DamageEffects", DamageEffects.CODEC),
(var0, var1) -> var0.damageEffects = var1,
var0 -> var0.damageEffects,
(var0, var1) -> var0.damageEffects = var1.damageEffects
)
.add()
.<String>appendInherited(
new KeyedCodec<>("Next", Interaction.CHILD_ASSET_CODEC), (var0, var1) -> var0.next = var1, var0 -> var0.next, (var0, var1) -> var0.next = var1.next
)
.documentation("The interactions to run when this interaction succeeds.")
.addValidatorLate(() -> Interaction.VALIDATOR_CACHE.getValidator().late())
.add()
.build();
class="kw">protected int index;
class="kw">protected DamageCalculator damageCalculator;
class="kw">protected Map<String, TargetEntityEffect> targetEntityEffects;
class="kw">protected DamageEffects damageEffects;
@Nullable
class="kw">protected String next;
class="kw">public TargetedDamage() {
}
@Nullable
class="kw">public DamageCalculator getDamageCalculator() {
class="kw">return this.damageCalculator;
}
@Nonnull
class="kw">public com.hypixel.hytale.protocol.TargetedDamage toTargetedDamagePacket() {
com.hypixel.hytale.protocol.DamageEffects var1 = this.damageEffects == null ? null : this.damageEffects.toPacket();
class="kw">return new com.hypixel.hytale.protocol.TargetedDamage(this.index, var1, Interaction.getInteractionIdOrUnknown(this.next));
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "TargetedDamage{damageCalculator="
+ this.damageCalculator
+ ", targetEntityEffects="
+ this.targetEntityEffects
+ ", damageEffects="
+ this.damageEffects
+ ", next='"
+ this.next
+ "'}";
}
}
class="kw">public class="kw">static class="kw">final class TargetedDamageTag class="kw">implements CollectorTag {
class="kw">private class="kw">final String key;
class="kw">private TargetedDamageTag(@Nonnull String var1) {
this.key = var1;
}
@Nonnull
class="kw">public String getKey() {
class="kw">return this.key;
}
@Override
class="kw">public boolean equals(@Nullable Object var1) {
if (this == var1) {
class="kw">return true;
} else {
class="kw">return var1 != null && this.getClass() == var1.getClass() ? this.key.equals(((DamageEntityInteraction.TargetedDamageTag)var1).key) : false;
}
}
@Override
class="kw">public int hashCode() {
class="kw">return this.key.hashCode();
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "TargetedDamageTag{key='" + this.key + "'}";
}
@Nonnull
class="kw">public class="kw">static DamageEntityInteraction.TargetedDamageTag of(@Nonnull String var0) {
class="kw">return new DamageEntityInteraction.TargetedDamageTag(var0);
}
}
}