DamageCalculator class
Пакет: com.hypixel.hytale.server.core.modules.interaction.interaction.config.server.combat
Файл: com/hypixel/hytale/server/core/modules/interaction/interaction/config/server/combat/DamageCalculator.java
Поля (23)
| Модификаторы | Тип | Имя |
|---|---|---|
|
DPS, |
ABSOLUTE |
final |
BuilderCodec<DamageCalculator> |
CODEC |
|
public static final EnumCodec<DamageCalculator.Type> |
CODEC |
|
Iterator |
var1 |
|
int |
var1 |
|
|
var1 |
|
|
var1 |
|
|
var1 |
|
Entry |
var2 |
|
long |
var2 |
|
|
var2 |
|
|
var2 |
|
int |
var3 |
|
Object2FloatMap |
var3 |
|
float |
var4 |
|
float |
var4 |
|
ObjectIterator |
var5 |
|
ObjectIterator |
var5 |
|
it.unimi.dsi.fastutil.ints.Int2FloatMap.Entry |
var6 |
|
it.unimi.dsi.fastutil.ints.Int2FloatMap.Entry |
var6 |
|
DamageCause |
var7 |
|
float |
var8 |
|
float |
var9 |
Методы (10)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
Type Type() |
public |
void |
computeDamageRangevoid computeDamageRange(double var1, @Nonnull float[] var3) |
public |
float |
getSequentialModifierMinimumfloat getSequentialModifierMinimum() |
public |
float |
getSequentialModifierStepfloat getSequentialModifierStep() |
public |
DamageCalculator.Type |
getTypeDamageCalculator.Type getType() |
|
|
if if(var0.baseDamageRaw != null) |
|
|
if if(this == var1) |
|
|
if if(var1 instanceof DamageCalculator var2) |
private |
float |
scaleDamagefloat scaleDamage(double var1, float var3) |
|
return |
switchreturn switch(this.type) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.interaction.interaction.config.server.combat;
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.EnumCodec;
class="kw">import com.hypixel.hytale.codec.codecs.map.Object2FloatMapCodec;
class="kw">import com.hypixel.hytale.codec.validation.Validators;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DamageCause;
class="kw">import it.unimi.dsi.fastutil.ints.Int2FloatMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2FloatMaps;
class="kw">import it.unimi.dsi.fastutil.ints.Int2FloatOpenHashMap;
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.Objects;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class DamageCalculator {
class="kw">public class="kw">static class="kw">final BuilderCodec<DamageCalculator> CODEC = BuilderCodec.builder(DamageCalculator.class, DamageCalculator::new)
.appendInherited(
new KeyedCodec<>("Type", DamageCalculator.Type.CODEC), (var0, var1) -> var0.type = var1, var0 -> var0.type, (var0, var1) -> var0.type = var1.type
)
.add()
.<DamageClass>appendInherited(
new KeyedCodec<>("Class", DamageClass.CODEC),
(var0, var1) -> var0.damageClass = var1,
var0 -> var0.damageClass,
(var0, var1) -> var0.damageClass = var1.damageClass
)
.documentation("The class of the damage being created, used by the damage system to apply modifiers based on equipment of the source.")
.addValidator(Validators.nonNull())
.add()
.<Object2FloatMap<String>>appendInherited(
new KeyedCodec<>("BaseDamage", new Object2FloatMapCodec<>(Codec.STRING, Object2FloatOpenHashMap::new)),
(var0, var1) -> var0.baseDamageRaw = var1,
var0 -> var0.baseDamageRaw,
(var0, var1) -> var0.baseDamageRaw = var1.baseDamageRaw
)
.addValidator(DamageCause.VALIDATOR_CACHE.getMapKeyValidator())
.add()
.appendInherited(
new KeyedCodec<>("SequentialModifierStep", Codec.FLOAT),
(var0, var1) -> var0.sequentialModifierStep = var1,
var0 -> var0.sequentialModifierStep,
(var0, var1) -> var0.sequentialModifierStep = var1.sequentialModifierStep
)
.add()
.appendInherited(
new KeyedCodec<>("SequentialModifierMinimum", Codec.FLOAT),
(var0, var1) -> var0.sequentialModifierMinimum = var1,
var0 -> var0.sequentialModifierMinimum,
(var0, var1) -> var0.sequentialModifierMinimum = var1.sequentialModifierMinimum
)
.add()
.<Float>appendInherited(
new KeyedCodec<>("RandomPercentageModifier", Codec.FLOAT),
(var0, var1) -> var0.randomPercentageModifier = var1,
var0 -> var0.randomPercentageModifier,
(var0, var1) -> var0.randomPercentageModifier = var1.randomPercentageModifier
)
.addValidator(Validators.greaterThanOrEqual(0.0F))
.add()
.afterDecode(var0 -> {
if (var0.baseDamageRaw != null) {
var0.baseDamage = new Int2FloatOpenHashMap();
Iterator var1 = var0.baseDamageRaw.object2FloatEntrySet().iterator();
while (var1.hasNext()) {
Entry var2 = (Entry<String>)var1.next();
int var3 = DamageCause.getAssetMap().getIndex((String)var2.getKey());
var0.baseDamage.put(var3, var2.getFloatValue());
}
}
})
.build();
class="kw">protected DamageCalculator.Type type = DamageCalculator.Type.ABSOLUTE;
@Nonnull
class="kw">protected DamageClass damageClass = DamageClass.UNKNOWN;
class="kw">protected Object2FloatMap<String> baseDamageRaw;
class="kw">protected float sequentialModifierStep;
class="kw">protected float sequentialModifierMinimum;
class="kw">protected float randomPercentageModifier;
@Nonnull
class="kw">protected class="kw">transient Int2FloatMap baseDamage = Int2FloatMaps.EMPTY_MAP;
class="kw">protected DamageCalculator() {
}
@Nullable
class="kw">public Object2FloatMap<DamageCause> calculateDamage(double var1) {
if (this.baseDamageRaw != null && !this.baseDamageRaw.isEmpty()) {
Object2FloatMap var3 = new Object2FloatOpenHashMap(this.baseDamage.size());
float var4 = MathUtil.randomFloat(-this.randomPercentageModifier, this.randomPercentageModifier);
ObjectIterator var5 = this.baseDamage.int2FloatEntrySet().iterator();
while (var5.hasNext()) {
it.unimi.dsi.fastutil.ints.Int2FloatMap.Entry var6 = (it.unimi.dsi.fastutil.ints.Int2FloatMap.Entry)var5.next();
DamageCause var7 = DamageCause.getAssetMap().getAsset(var6.getIntKey());
float var8 = var6.getFloatValue();
float var9 = this.scaleDamage(var1, var8);
var9 += var9 * var4;
var3.put(var7, var9);
}
class="kw">return var3;
} else {
class="kw">return null;
}
}
class="kw">private float scaleDamage(double var1, float var3) {
class="kw">return class="kw">switch (this.type) {
case DPS -> (float)var1 * var3;
case ABSOLUTE -> var3;
};
}
class="kw">public void computeDamageRange(double var1, @Nonnull float[] var3) {
if (this.baseDamage.isEmpty()) {
var3[0] = 0.0F;
var3[1] = 0.0F;
} else {
float var4 = 0.0F;
ObjectIterator var5 = this.baseDamage.int2FloatEntrySet().iterator();
while (var5.hasNext()) {
it.unimi.dsi.fastutil.ints.Int2FloatMap.Entry var6 = (it.unimi.dsi.fastutil.ints.Int2FloatMap.Entry)var5.next();
var4 += this.scaleDamage(var1, var6.getFloatValue());
}
var3[0] = var4 * (1.0F - this.randomPercentageModifier);
var3[1] = var4 * (1.0F + this.randomPercentageModifier);
}
}
class="kw">public DamageCalculator.Type getType() {
class="kw">return this.type;
}
@Nonnull
class="kw">public DamageClass getDamageClass() {
class="kw">return this.damageClass;
}
class="kw">public float getSequentialModifierStep() {
class="kw">return this.sequentialModifierStep;
}
class="kw">public float getSequentialModifierMinimum() {
class="kw">return this.sequentialModifierMinimum;
}
@Override
class="kw">public boolean equals(Object var1) {
if (this == var1) {
class="kw">return true;
}
if (var1 class="kw">instanceof DamageCalculator var2) {
if (Double.compare(var2.sequentialModifierStep, this.sequentialModifierStep) != 0) {
class="kw">return false;
} else if (Double.compare(var2.sequentialModifierMinimum, this.sequentialModifierMinimum) != 0) {
class="kw">return false;
} else if (Double.compare(var2.randomPercentageModifier, this.randomPercentageModifier) != 0) {
class="kw">return false;
} else {
class="kw">return this.type != var2.type ? false : Objects.equals(this.baseDamageRaw, var2.baseDamageRaw);
}
} else {
class="kw">return false;
}
}
@Override
class="kw">public int hashCode() {
int var1 = this.type != null ? this.type.hashCode() : 0;
var1 = 31 * var1 + (this.baseDamageRaw != null ? this.baseDamageRaw.hashCode() : 0);
long var2 = Double.doubleToLongBits(this.sequentialModifierStep);
var1 = 31 * var1 + (int)(var2 ^ var2 >>> 32);
var2 = Double.doubleToLongBits(this.sequentialModifierMinimum);
var1 = 31 * var1 + (int)(var2 ^ var2 >>> 32);
var2 = Double.doubleToLongBits(this.randomPercentageModifier);
class="kw">return 31 * var1 + (int)(var2 ^ var2 >>> 32);
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "DamageCalculator{type="
+ this.type
+ ", baseDamage="
+ this.baseDamageRaw
+ ", sequentialModifierStep="
+ this.sequentialModifierStep
+ ", sequentialModifierMinimum="
+ this.sequentialModifierMinimum
+ ", randomPercentageModifier="
+ this.randomPercentageModifier
+ "}";
}
class="kw">public enum Type {
DPS,
ABSOLUTE;
class="kw">public class="kw">static class="kw">final EnumCodec<DamageCalculator.Type> CODEC = new EnumCodec<>(DamageCalculator.Type.class);
Type() {
}
}
}