WieldingInteraction class
Пакет: com.hypixel.hytale.server.core.modules.interaction.interaction.config.client
Файл: com/hypixel/hytale/server/core/modules/interaction/interaction/config/client/WieldingInteraction.java
extends: ChargingInteraction
Поля (43)
| Модификаторы | Тип | Имя |
|---|---|---|
|
public static final BuilderCodec<WieldingInteraction.AngledWielding> |
CODEC |
|
public static final BuilderCodec<WieldingInteraction.StaminaCost> |
CODEC |
|
MAX_HEALTH_PERCENTAGE, |
DAMAGE |
final |
float |
WIELDING_INDEX |
|
protected float |
angleDistanceRad |
|
protected float |
angleRad |
|
private WieldingInteraction.StaminaCost.CostType |
costType |
|
protected transient Int2FloatMap |
damageModifiers |
|
protected Object2FloatMap<String> |
damageModifiersRaw |
|
protected transient Int2DoubleMap |
knockbackModifiers |
|
protected Object2DoubleMap<String> |
knockbackModifiersRaw |
|
|
return |
|
|
return |
|
private float |
value |
|
Iterator |
var1 |
|
Iterator |
var1 |
|
com.hypixel.hytale.protocol.AngledWielding |
var1 |
|
CombatConfig |
var10 |
|
EffectControllerComponent |
var10 |
|
EffectControllerComponent |
var11 |
|
Int2ObjectMap |
var11 |
|
Int2ObjectMap |
var12 |
|
Entry |
var2 |
|
com.hypixel.hytale.protocol.WieldingInteraction |
var2 |
|
Entry |
var2 |
|
int |
var3 |
|
int |
var3 |
|
Iterator |
var4 |
|
Iterator |
var4 |
|
it.unimi.dsi.fastutil.objects.Object2FloatMap.Entry |
var5 |
|
it.unimi.dsi.fastutil.objects.Object2FloatMap.Entry |
var5 |
|
int |
var6 |
|
CommandBuffer |
var6 |
|
CommandBuffer |
var6 |
|
CommandBuffer |
var6 |
|
int |
var6 |
|
Ref |
var7 |
|
Ref |
var7 |
|
DamageDataComponent |
var7 |
|
World |
var8 |
|
World |
var8 |
|
DamageDataComponent |
var9 |
|
CombatConfig |
var9 |
Методы (24)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public |
AngledWieldingpublic AngledWielding() |
|
|
CostType CostType() |
|
public |
StaminaCostpublic StaminaCost() |
|
public float |
computeStaminaAmountToConsumepublic float computeStaminaAmountToConsume(float var1, @Nonnull EntityStatMap var2) |
|
public double |
getAngleDistanceRadpublic double getAngleDistanceRad() |
|
public double |
getAngleRadpublic double getAngleRad() |
public |
WieldingInteraction.AngledWielding |
getAngledWieldingWieldingInteraction.AngledWielding getAngledWielding() |
public |
DamageEffects |
getBlockedEffectsDamageEffects getBlockedEffects() |
public |
String |
getBlockedInteractionsString getBlockedInteractions() |
|
public Int2FloatMap |
getDamageModifierspublic Int2FloatMap getDamageModifiers() |
|
public Int2DoubleMap |
getKnockbackModifierspublic Int2DoubleMap getKnockbackModifiers() |
public |
WieldingInteraction.StaminaCost |
getStaminaCostWieldingInteraction.StaminaCost getStaminaCost() |
|
|
if if(var0.next != null && var0.runTime > 0.0F) |
|
|
if if(var0.knockbackModifiersRaw != null) |
|
|
if if(var0.damageModifiersRaw != null) |
|
|
if if(var11 != null) |
|
|
if if(var10 != null) |
|
|
if if(this.blockedEffects != null) |
|
|
if if(this.angledWielding != null) |
|
|
if if(var0.knockbackModifiersRaw != null) |
|
|
if if(var0.damageModifiersRaw != null) |
|
return |
switchreturn switch(this.costType) |
|
public com.hypixel.hytale.protocol.AngledWielding |
toPacketpublic com.hypixel.hytale.protocol.AngledWielding toPacket() |
|
public String |
toStringpublic String toString() |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.interaction.interaction.config.client;
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.Object2DoubleMapCodec;
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.component.CommandBuffer;
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.server.core.asset.type.gameplay.CombatConfig;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionContext;
class="kw">import com.hypixel.hytale.server.core.entity.damage.DamageDataComponent;
class="kw">import com.hypixel.hytale.server.core.entity.effect.ActiveEntityEffect;
class="kw">import com.hypixel.hytale.server.core.entity.effect.EffectControllerComponent;
class="kw">import com.hypixel.hytale.server.core.io.NetworkSerializable;
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.DefaultEntityStatTypes;
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.RootInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.server.combat.DamageEffects;
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.floats.Float2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2DoubleMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2DoubleMaps;
class="kw">import it.unimi.dsi.fastutil.ints.Int2DoubleOpenHashMap;
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.ints.Int2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.objects.Object2DoubleMap;
class="kw">import it.unimi.dsi.fastutil.objects.Object2DoubleOpenHashMap;
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.Object2DoubleMap.Entry;
class="kw">import java.util.Iterator;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class WieldingInteraction class="kw">extends ChargingInteraction {
class="kw">public class="kw">static class="kw">final float WIELDING_INDEX = 0.0F;
@Nonnull
class="kw">public class="kw">static class="kw">final BuilderCodec<WieldingInteraction> CODEC = BuilderCodec.builder(
WieldingInteraction.class, WieldingInteraction::new, ChargingInteraction.ABSTRACT_CODEC
)
.documentation("Interaction that blocks while the key is held and applies various modifiers while active.")
.<Object2DoubleMap<String>>appendInherited(
new KeyedCodec<>("KnockbackModifiers", new Object2DoubleMapCodec<>(Codec.STRING, Object2DoubleOpenHashMap::new)),
(var0, var1) -> var0.knockbackModifiersRaw = var1,
var0 -> var0.knockbackModifiersRaw,
(var0, var1) -> var0.knockbackModifiersRaw = var1.knockbackModifiersRaw
)
.addValidator(DamageCause.VALIDATOR_CACHE.getMapKeyValidator())
.add()
.<Object2FloatMap<String>>appendInherited(
new KeyedCodec<>("DamageModifiers", new Object2FloatMapCodec<>(Codec.STRING, Object2FloatOpenHashMap::new)),
(var0, var1) -> var0.damageModifiersRaw = var1,
var0 -> var0.damageModifiersRaw,
(var0, var1) -> var0.damageModifiersRaw = var1.damageModifiersRaw
)
.addValidator(DamageCause.VALIDATOR_CACHE.getMapKeyValidator())
.add()
.appendInherited(
new KeyedCodec<>("AngledWielding", WieldingInteraction.AngledWielding.CODEC),
(var0, var1) -> var0.angledWielding = var1,
var0 -> var0.angledWielding,
(var0, var1) -> var0.angledWielding = var1.angledWielding
)
.add()
.<String>appendInherited(new KeyedCodec<>("Next", Interaction.CHILD_ASSET_CODEC), (var0, var1) -> {
var0.next = new Float2ObjectOpenHashMap();
var0.next.put(0.0F, var1);
}, var0 -> var0.next != null ? (String)var0.next.get(0.0F) : null, (var0, var1) -> var0.next = var1.next)
.addValidatorLate(() -> VALIDATOR_CACHE.getValidator().late())
.add()
.<WieldingInteraction.StaminaCost>appendInherited(
new KeyedCodec<>("StaminaCost", WieldingInteraction.StaminaCost.CODEC),
(var0, var1) -> var0.staminaCost = var1,
var0 -> var0.staminaCost,
(var0, var1) -> var0.staminaCost = var1.staminaCost
)
.documentation("Configuration to define how stamina loss is computed.")
.add()
.appendInherited(
new KeyedCodec<>("BlockedEffects", DamageEffects.CODEC),
(var0, var1) -> var0.blockedEffects = var1,
var0 -> var0.blockedEffects,
(var0, var1) -> var0.blockedEffects = var1.blockedEffects
)
.add()
.<String>appendInherited(
new KeyedCodec<>("BlockedInteractions", RootInteraction.CHILD_ASSET_CODEC),
(var0, var1) -> var0.blockedInteractions = var1,
var0 -> var0.blockedInteractions,
(var0, var1) -> var0.blockedInteractions = var1.blockedInteractions
)
.addValidatorLate(() -> RootInteraction.VALIDATOR_CACHE.getValidator().late())
.add()
.afterDecode(var0 -> {
var0.allowIndefiniteHold = true;
if (var0.next != null && var0.runTime > 0.0F) {
var0.next.put(var0.runTime, (String)var0.next.get(0.0F));
}
if (var0.knockbackModifiersRaw != null) {
var0.knockbackModifiers = new Int2DoubleOpenHashMap();
Iterator var1 = var0.knockbackModifiersRaw.object2DoubleEntrySet().iterator();
while (var1.hasNext()) {
Entry var2 = (Entry<String>)var1.next();
int var3 = DamageCause.getAssetMap().getIndex((String)var2.getKey());
var0.knockbackModifiers.put(var3, var2.getDoubleValue());
}
}
if (var0.damageModifiersRaw != null) {
var0.damageModifiers = new Int2FloatOpenHashMap();
Iterator var4 = var0.damageModifiersRaw.object2FloatEntrySet().iterator();
while (var4.hasNext()) {
it.unimi.dsi.fastutil.objects.Object2FloatMap.Entry var5 = (it.unimi.dsi.fastutil.objects.Object2FloatMap.Entry<String>)var4.next();
int var6 = DamageCause.getAssetMap().getIndex((String)var5.getKey());
var0.damageModifiers.put(var6, var5.getFloatValue());
}
}
})
.build();
@Nullable
class="kw">protected Object2DoubleMap<String> knockbackModifiersRaw;
@Nullable
class="kw">protected Object2FloatMap<String> damageModifiersRaw;
class="kw">protected WieldingInteraction.AngledWielding angledWielding;
class="kw">protected WieldingInteraction.StaminaCost staminaCost;
class="kw">protected DamageEffects blockedEffects;
class="kw">protected String blockedInteractions;
@Nonnull
class="kw">protected class="kw">transient Int2DoubleMap knockbackModifiers = Int2DoubleMaps.EMPTY_MAP;
@Nonnull
class="kw">protected class="kw">transient Int2FloatMap damageModifiers = Int2FloatMaps.EMPTY_MAP;
class="kw">public WieldingInteraction() {
}
@Nonnull
class="kw">public Int2DoubleMap getKnockbackModifiers() {
class="kw">return this.knockbackModifiers;
}
@Nonnull
class="kw">public Int2FloatMap getDamageModifiers() {
class="kw">return this.damageModifiers;
}
class="kw">public WieldingInteraction.AngledWielding getAngledWielding() {
class="kw">return this.angledWielding;
}
class="kw">public DamageEffects getBlockedEffects() {
class="kw">return this.blockedEffects;
}
class="kw">public WieldingInteraction.StaminaCost getStaminaCost() {
class="kw">return this.staminaCost;
}
class="kw">public String getBlockedInteractions() {
class="kw">return this.blockedInteractions;
}
@Override
class="kw">protected void tick0(boolean var1, float var2, @Nonnull InteractionType var3, @Nonnull InteractionContext var4, @Nonnull CooldownHandler var5) {
CommandBuffer var6 = var4.getCommandBuffer();
assert var6 != null;
Ref var7 = var4.getEntity();
World var8 = var6.getExternalData().getWorld();
DamageDataComponent var9 = var6.getComponent(var7, DamageDataComponent.getComponentType());
assert var9 != null;
if (Interaction.failed(var4.getState().state)) {
var9.setCurrentWielding(null);
} else {
CombatConfig var10 = var8.getGameplayConfig().getCombatConfig();
EffectControllerComponent var11 = var6.getComponent(var7, EffectControllerComponent.getComponentType());
if (var11 != null) {
Int2ObjectMap var12 = var11.getActiveEffects();
if (!var1 && var12.containsKey(var10.getStaminaBrokenEffectIndex())) {
var9.setCurrentWielding(null);
var4.getState().state = InteractionState.Failed;
if (var4.hasLabels()) {
var4.jump(var4.getLabel(this.next != null ? this.next.size() : 0));
}
class="kw">return;
}
}
super.tick0(var1, var2, var3, var4, var5);
if (var1 && var4.getState().state == InteractionState.NotFinished) {
var9.setCurrentWielding(this);
} else {
if (var4.getState().state == InteractionState.Finished) {
var9.setCurrentWielding(null);
}
}
}
}
@Override
class="kw">protected void simulateTick0(boolean var1, float var2, @Nonnull InteractionType var3, @Nonnull InteractionContext var4, @Nonnull CooldownHandler var5) {
CommandBuffer var6 = var4.getCommandBuffer();
assert var6 != null;
Ref var7 = var4.getEntity();
World var8 = var6.getExternalData().getWorld();
CombatConfig var9 = var8.getGameplayConfig().getCombatConfig();
EffectControllerComponent var10 = var6.getComponent(var7, EffectControllerComponent.getComponentType());
if (var10 != null) {
Int2ObjectMap var11 = var10.getActiveEffects();
if (!var1 && var11.containsKey(var9.getStaminaBrokenEffectIndex())) {
var4.getState().state = InteractionState.Failed;
if (var4.hasLabels()) {
var4.jump(var4.getLabel(this.next != null ? this.next.size() : 0));
}
class="kw">return;
}
}
super.simulateTick0(var1, var2, var3, var4, var5);
}
@Override
class="kw">public void handle(@Nonnull Ref<EntityStore> var1, boolean var2, float var3, @Nonnull InteractionType var4, @Nonnull InteractionContext var5) {
super.handle(var1, var2, var3, var4, var5);
if (var5.getState().state != InteractionState.NotFinished) {
CommandBuffer var6 = var5.getCommandBuffer();
assert var6 != null;
DamageDataComponent var7 = var6.getComponent(var1, DamageDataComponent.getComponentType());
assert var7 != null;
var7.setCurrentWielding(null);
}
}
@Nonnull
@Override
class="kw">protected com.hypixel.hytale.protocol.Interaction generatePacket() {
class="kw">return new com.hypixel.hytale.protocol.WieldingInteraction();
}
@Override
class="kw">protected void configurePacket(com.hypixel.hytale.protocol.Interaction var1) {
super.configurePacket(var1);
com.hypixel.hytale.protocol.WieldingInteraction var2 = (com.hypixel.hytale.protocol.WieldingInteraction)var1;
if (this.blockedEffects != null) {
var2.blockedEffects = this.blockedEffects.toPacket();
}
if (this.angledWielding != null) {
var2.angledWielding = this.angledWielding.toPacket();
}
var2.hasModifiers = this.damageModifiersRaw != null || this.knockbackModifiersRaw != null;
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "WieldingInteraction{knockbackModifiers="
+ this.knockbackModifiersRaw
+ ", damageModifiers="
+ this.damageModifiersRaw
+ ", angledWielding="
+ this.angledWielding
+ ", failed='"
+ this.failed
+ "', staminaCost="
+ this.staminaCost
+ ", blockedEffects="
+ this.blockedEffects
+ "} "
+ super.toString();
}
class="kw">public class="kw">static class AngledWielding class="kw">implements NetworkSerializable<com.hypixel.hytale.protocol.AngledWielding> {
class="kw">public class="kw">static class="kw">final BuilderCodec<WieldingInteraction.AngledWielding> CODEC = BuilderCodec.builder(
WieldingInteraction.AngledWielding.class, WieldingInteraction.AngledWielding::new
)
.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()
.<Object2DoubleMap<String>>appendInherited(
new KeyedCodec<>("KnockbackModifiers", new Object2DoubleMapCodec<>(Codec.STRING, Object2DoubleOpenHashMap::new)),
(var0, var1) -> var0.knockbackModifiersRaw = var1,
var0 -> var0.knockbackModifiersRaw,
(var0, var1) -> var0.knockbackModifiersRaw = var1.knockbackModifiersRaw
)
.addValidator(DamageCause.VALIDATOR_CACHE.getMapKeyValidator())
.add()
.<Object2FloatMap<String>>appendInherited(
new KeyedCodec<>("DamageModifiers", new Object2FloatMapCodec<>(Codec.STRING, Object2FloatOpenHashMap::new)),
(var0, var1) -> var0.damageModifiersRaw = var1,
var0 -> var0.damageModifiersRaw,
(var0, var1) -> var0.damageModifiersRaw = var1.damageModifiersRaw
)
.addValidator(DamageCause.VALIDATOR_CACHE.getMapKeyValidator())
.add()
.afterDecode(var0 -> {
if (var0.knockbackModifiersRaw != null) {
var0.knockbackModifiers = new Int2DoubleOpenHashMap();
Iterator var1 = var0.knockbackModifiersRaw.object2DoubleEntrySet().iterator();
while (var1.hasNext()) {
Entry var2 = (Entry<String>)var1.next();
int var3 = DamageCause.getAssetMap().getIndex((String)var2.getKey());
var0.knockbackModifiers.put(var3, var2.getDoubleValue());
}
}
if (var0.damageModifiersRaw != null) {
var0.damageModifiers = new Int2FloatOpenHashMap();
Iterator var4 = var0.damageModifiersRaw.object2FloatEntrySet().iterator();
while (var4.hasNext()) {
it.unimi.dsi.fastutil.objects.Object2FloatMap.Entry var5 = (it.unimi.dsi.fastutil.objects.Object2FloatMap.Entry<String>)var4.next();
int var6 = DamageCause.getAssetMap().getIndex((String)var5.getKey());
var0.damageModifiers.put(var6, var5.getFloatValue());
}
}
})
.build();
class="kw">protected float angleRad;
class="kw">protected float angleDistanceRad;
@Nullable
class="kw">protected Object2DoubleMap<String> knockbackModifiersRaw;
@Nullable
class="kw">protected Object2FloatMap<String> damageModifiersRaw;
@Nonnull
class="kw">protected class="kw">transient Int2DoubleMap knockbackModifiers = Int2DoubleMaps.EMPTY_MAP;
@Nonnull
class="kw">protected class="kw">transient Int2FloatMap damageModifiers = Int2FloatMaps.EMPTY_MAP;
class="kw">public AngledWielding() {
}
class="kw">public double getAngleRad() {
class="kw">return this.angleRad;
}
class="kw">public double getAngleDistanceRad() {
class="kw">return this.angleDistanceRad;
}
@Nonnull
class="kw">public Int2DoubleMap getKnockbackModifiers() {
class="kw">return this.knockbackModifiers;
}
@Nonnull
class="kw">public Int2FloatMap getDamageModifiers() {
class="kw">return this.damageModifiers;
}
@Nonnull
class="kw">public com.hypixel.hytale.protocol.AngledWielding toPacket() {
com.hypixel.hytale.protocol.AngledWielding var1 = new com.hypixel.hytale.protocol.AngledWielding();
var1.angleRad = this.angleRad;
var1.angleDistanceRad = this.angleDistanceRad;
var1.hasModifiers = this.damageModifiersRaw != null || this.knockbackModifiersRaw != null;
class="kw">return var1;
}
}
class="kw">public class="kw">static class StaminaCost {
class="kw">public class="kw">static class="kw">final BuilderCodec<WieldingInteraction.StaminaCost> CODEC = BuilderCodec.builder(
WieldingInteraction.StaminaCost.class, WieldingInteraction.StaminaCost::new
)
.append(
new KeyedCodec<>("CostType", new EnumCodec<>(WieldingInteraction.StaminaCost.CostType.class)),
(var0, var1) -> var0.costType = var1,
var0 -> var0.costType
)
.documentation(
"Define how the stamina loss is computed. Use MAX_HEALTH_PERCENTAGE to define how many % of the player's max health 1 stamina point is worth. Use DAMAGE define how much damage 1 stamina point is worth. Default value is MAX_HEALTH_PERCENTAGE."
)
.add()
.<Float>append(new KeyedCodec<>("Value", Codec.FLOAT), (var0, var1) -> var0.value = var1, var0 -> var0.value)
.addValidator(Validators.greaterThanOrEqual(0.0F))
.documentation(
"The value to define how much a stamina point is worth. When CostType.MAX_HEALTH_PERCENTAGE, a ratio is expected, so for 4% of max health, the value expected here is 0.04. Default value is 0.04f"
)
.add()
.build();
class="kw">private WieldingInteraction.StaminaCost.CostType costType = WieldingInteraction.StaminaCost.CostType.MAX_HEALTH_PERCENTAGE;
class="kw">private float value = 0.04F;
class="kw">public StaminaCost() {
}
class="kw">public float computeStaminaAmountToConsume(float var1, @Nonnull EntityStatMap var2) {
class="kw">return class="kw">switch (this.costType) {
case MAX_HEALTH_PERCENTAGE -> var1 / (this.value * var2.get(DefaultEntityStatTypes.getHealth()).getMax());
case DAMAGE -> var1 / this.value;
};
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "StaminaCost{costType=" + this.costType + ", value=" + this.value + "}";
}
enum CostType {
MAX_HEALTH_PERCENTAGE,
DAMAGE;
CostType() {
}
}
}
}