ChargingInteraction class
Пакет: com.hypixel.hytale.server.core.modules.interaction.interaction.config.client
Файл: com/hypixel/hytale/server/core/modules/interaction/interaction/config/client/ChargingInteraction.java
extends: Interaction
Поля (55)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
HytaleLogger |
LOGGER |
|
|
return |
|
|
return |
|
|
return |
|
private final float |
seconds |
|
float |
var1 |
|
|
var1 |
|
float |
var10 |
|
int |
var12 |
|
String |
var13 |
|
InteractionContext |
var14 |
|
float |
var15 |
|
CommandBuffer |
var16 |
|
Ref |
var17 |
|
DamageDataComponent |
var18 |
|
FloatIterator |
var2 |
|
Label |
var2 |
|
com.hypixel.hytale.protocol.ChargingInteraction |
var2 |
|
Long |
var2 |
|
ChargingInteraction.ChargingTag |
var2 |
|
float |
var3 |
|
float |
var3 |
|
|
var3 |
|
Label[] |
var3 |
|
ObjectIterator |
var3 |
|
Float2IntOpenHashMap |
var3 |
|
Long |
var3 |
|
CommandBuffer |
var3 |
|
int |
var4 |
|
|
var4 |
|
it.unimi.dsi.fastutil.floats.Float2ObjectMap.Entry |
var4 |
|
ObjectIterator |
var4 |
|
CommandBuffer |
var4 |
|
float |
var4 |
|
int |
var5 |
|
float |
var5 |
|
it.unimi.dsi.fastutil.floats.Float2ObjectMap.Entry |
var5 |
|
float |
var5 |
|
float |
var5 |
|
InteractionSyncData |
var6 |
|
Ref |
var6 |
|
Interaction |
var6 |
|
Object2IntOpenHashMap |
var6 |
|
float |
var6 |
|
Object2IntMap |
var7 |
|
IInteractionSimulationHandler |
var7 |
|
float |
var7 |
|
|
var7 |
|
InteractionChain |
var8 |
|
|
var8 |
|
|
var8 |
|
float |
var8 |
|
int |
var8 |
|
boolean |
var9 |
|
Interaction |
var9 |
Методы (34)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
private |
ChargingTagprivate ChargingTag(float var1) |
|
public boolean |
equalspublic boolean equals(@Nullable Object var1) |
|
|
for for(float var9 : this.sortedKeys) |
|
|
for for(int var4 = 0; var4 < var3.length; var4++) |
|
|
for for(int var7 = 0; var7 < this.sortedKeys.length; var7++) |
|
public double |
getSecondspublic double getSeconds() |
|
public int |
hashCodepublic int hashCode() |
|
|
if if(var0.next != null) |
|
|
if if(var3 > var1) |
|
|
if if(var1) |
|
|
if if(var6.forkCounts != null && this.forks != null) |
|
|
if if(!var9) |
|
|
if if(var6.chargeValue == -1.0F) |
|
|
if if(this.next != null) |
|
|
if if(this.next == null) |
|
|
if if(var2 < var9) |
|
|
if if(var4 == -1 || var10 < var3) |
|
|
if if(var4 != -1) |
|
|
if if(this.sortedKeys != null) |
|
|
if if(this.failed != null) |
|
|
if if(this.next != null) |
|
|
if if(this.next != null) |
|
|
if if(this.forks != null) |
|
|
if if(var3 != 0L) |
|
|
if if(!this.allowIndefiniteHold && this.highestChargeValue > 0.0F) |
|
|
if if(var1 > var7) |
|
|
if if(var2 != 0L) |
|
|
if if(var4 * var5 > this.highestChargeValue + 0.25F) |
|
|
if if(this == var1) |
private |
void |
jumpToChargeValuevoid jumpToChargeValue(@Nonnull InteractionContext var1, float var2) |
|
public static ChargingInteraction.ChargingTag |
ofpublic static ChargingInteraction.ChargingTag of(float var0) |
|
public String |
toStringpublic String toString() |
private |
void |
validateChargeValuevoid validateChargeValue(float var1, @Nonnull InteractionContext var2) |
private |
void |
validateHoldDurationvoid validateHoldDuration(@Nonnull InteractionContext var1) |
Исходный код
Показать/скрыть
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.map.EnumMapCodec;
class="kw">import com.hypixel.hytale.codec.codecs.map.Float2ObjectMapCodec;
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.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.protocol.ChargingDelay;
class="kw">import com.hypixel.hytale.protocol.InteractionState;
class="kw">import com.hypixel.hytale.protocol.InteractionSyncData;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.protocol.WaitForDataFrom;
class="kw">import com.hypixel.hytale.server.core.entity.EntityUtils;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionChain;
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.damage.DamageDataComponent;
class="kw">import com.hypixel.hytale.server.core.meta.MetaKey;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.IInteractionSimulationHandler;
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.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.operation.Label;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.operation.OperationsBuilder;
class="kw">import com.hypixel.hytale.server.core.modules.time.TimeResource;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.floats.Float2IntOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.floats.Float2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.floats.Float2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.floats.FloatIterator;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntMap;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import java.util.Arrays;
class="kw">import java.util.Map;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class ChargingInteraction class="kw">extends Interaction {
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
@Nonnull
class="kw">public class="kw">static class="kw">final BuilderCodec<ChargingDelay> DELAY_CODEC = BuilderCodec.<ChargingDelay>builder(ChargingDelay.class, ChargingDelay::new)
.documentation(
"Configuration for delay when the user is attacked.\nThe delay will be between **MinDelay** when the incoming at **MinHealth** and **MaxDelay** when the incoming damage is at or above **MaxHealth**."
)
.<Float>appendInherited(
new KeyedCodec<>("MinDelay", Codec.FLOAT), (var0, var1) -> var0.minDelay = var1, var0 -> var0.minDelay, (var0, var1) -> var0.minDelay = var1.minDelay
)
.documentation("The smallest amount of delay that can be applied.")
.addValidator(Validators.nonNull())
.addValidator(Validators.greaterThanOrEqual(0.0F))
.add()
.<Float>appendInherited(
new KeyedCodec<>("MaxDelay", Codec.FLOAT), (var0, var1) -> var0.maxDelay = var1, var0 -> var0.maxDelay, (var0, var1) -> var0.maxDelay = var1.maxDelay
)
.documentation("The largest amount of delay that can be applied.")
.addValidator(Validators.nonNull())
.addValidator(Validators.greaterThanOrEqual(0.0F))
.add()
.<Float>appendInherited(
new KeyedCodec<>("MaxTotalDelay", Codec.FLOAT),
(var0, var1) -> var0.maxTotalDelay = var1,
var0 -> var0.maxTotalDelay,
(var0, var1) -> var0.maxTotalDelay = var1.maxTotalDelay
)
.documentation("The max amount of delay applied during this interaction before any additional delay is ignored.")
.addValidator(Validators.nonNull())
.addValidator(Validators.greaterThanOrEqual(0.0F))
.add()
.<Float>appendInherited(
new KeyedCodec<>("MinHealth", Codec.FLOAT),
(var0, var1) -> var0.minHealth = var1,
var0 -> var0.minHealth,
(var0, var1) -> var0.minHealth = var1.minHealth
)
.documentation("The amount of health (as a percentage between 1.0 and 0.0) where if the user's health is below the value then the delay wont be applied.")
.addValidator(Validators.nonNull())
.addValidator(Validators.greaterThanOrEqual(0.0F))
.add()
.<Float>appendInherited(
new KeyedCodec<>("MaxHealth", Codec.FLOAT),
(var0, var1) -> var0.maxHealth = var1,
var0 -> var0.maxHealth,
(var0, var1) -> var0.maxHealth = var1.maxHealth
)
.documentation("The amount of health (as a percentage between 1.0 and 0.0) where if the user's health is above the value then the delay will be capped.")
.addValidator(Validators.nonNull())
.addValidator(Validators.greaterThanOrEqual(0.0F))
.add()
.build();
class="kw">public class="kw">static class="kw">final BuilderCodec<ChargingInteraction> ABSTRACT_CODEC = BuilderCodec.abstractBuilder(ChargingInteraction.class, Interaction.ABSTRACT_CODEC)
.appendInherited(
new KeyedCodec<>("FailOnDamage", Codec.BOOLEAN),
(var0, var1) -> var0.failOnDamage = var1,
var0 -> var0.failOnDamage,
(var0, var1) -> var0.failOnDamage = var1.failOnDamage
)
.documentation("Whether the interaction will be cancelled and the item removed when the entity takes damage")
.add()
.appendInherited(
new KeyedCodec<>("CancelOnOtherClick", Codec.BOOLEAN),
(var0, var1) -> var0.cancelOnOtherClick = var1,
var0 -> var0.cancelOnOtherClick,
(var0, var1) -> var0.cancelOnOtherClick = var1.cancelOnOtherClick
)
.add()
.<Map<InteractionType, String>>appendInherited(
new KeyedCodec<>("Forks", new EnumMapCodec<>(InteractionType.class, RootInteraction.CHILD_ASSET_CODEC)),
(var0, var1) -> var0.forks = var1,
var0 -> var0.forks,
(var0, var1) -> var0.forks = var1.forks
)
.documentation(
"A collection of interactions to fork into when the input associated with the interaction type is used.\n\nFor example listing a `Primary` interaction type here with interactions will allow the user to press the input tied to the `Primary` interaction type whilst holding the input used to run the current interaction to run the specified interactions. e.g. Having a shield that you can hold `Secondary` to block and whilst blocking press `Primary` to shield bash.\n\nThis does not cancel the current interaction when triggered but the `CancelOnOtherClick` check will still run and may cancel the interaction.\n\nThe existing forks will class="kw">continue to run even if this interaction ends."
)
.addValidatorLate(() -> RootInteraction.VALIDATOR_CACHE.getMapValueValidator().late())
.add()
.afterDecode(var0 -> {
float var1 = 0.0F;
if (var0.next != null) {
FloatIterator var2 = var0.next.keySet().iterator();
while (var2.hasNext()) {
float var3 = var2.nextFloat();
if (var3 > var1) {
var1 = var3;
}
}
var0.sortedKeys = var0.next.keySet().toFloatArray();
Arrays.sort(var0.sortedKeys);
}
var0.highestChargeValue = var1;
})
.<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()
.build();
@Nonnull
class="kw">public class="kw">static class="kw">final BuilderCodec<ChargingInteraction> CODEC = BuilderCodec.builder(ChargingInteraction.class, ChargingInteraction::new, ABSTRACT_CODEC)
.documentation(
"An interaction that holds until the key is released (or a time limit is reached) and executes different interactions based on how long the key was pressed."
)
.appendInherited(
new KeyedCodec<>("AllowIndefiniteHold", Codec.BOOLEAN),
(var0, var1) -> var0.allowIndefiniteHold = var1,
var0 -> var0.allowIndefiniteHold,
(var0, var1) -> var0.allowIndefiniteHold = var1.allowIndefiniteHold
)
.add()
.appendInherited(
new KeyedCodec<>("DisplayProgress", Codec.BOOLEAN),
(var0, var1) -> var0.displayProgress = var1,
var0 -> var0.displayProgress,
(var0, var1) -> var0.displayProgress = var1.displayProgress
)
.add()
.<Float2ObjectMap<String>>appendInherited(
new KeyedCodec<>("Next", new Float2ObjectMapCodec<>(Interaction.CHILD_ASSET_CODEC, Float2ObjectOpenHashMap::new)),
(var0, var1) -> var0.next = var1,
var0 -> var0.next,
(var0, var1) -> var0.next = var1.next
)
.addValidatorLate(() -> VALIDATOR_CACHE.getMapValueValidator().late())
.add()
.<Float>appendInherited(
new KeyedCodec<>("MouseSensitivityAdjustmentTarget", Codec.FLOAT),
(var0, var1) -> var0.mouseSensitivityAdjustmentTarget = var1,
var0 -> var0.mouseSensitivityAdjustmentTarget,
(var0, var1) -> var0.mouseSensitivityAdjustmentTarget = var1.mouseSensitivityAdjustmentTarget
)
.documentation("What is the target modifier to apply to mouse sensitivity while this interaction is active.")
.addValidator(Validators.range(0.0F, 1.0F))
.add()
.<Float>appendInherited(
new KeyedCodec<>("MouseSensitivityAdjustmentDuration", Codec.FLOAT),
(var0, var1) -> var0.mouseSensitivityAdjustmentDuration = var1,
var0 -> var0.mouseSensitivityAdjustmentDuration,
(var0, var1) -> var0.mouseSensitivityAdjustmentDuration = var1.mouseSensitivityAdjustmentDuration
)
.documentation("Override the global linear modifier adjustment with this as the time to go from 1.0 to 0.0.")
.add()
.<ChargingDelay>appendInherited(
new KeyedCodec<>("Delay", DELAY_CODEC),
(var0, var1) -> var0.chargingDelay = var1,
var0 -> var0.chargingDelay,
(var0, var1) -> var0.chargingDelay = var1.chargingDelay
)
.documentation("Settings that allow for delaying the charging interaction on damage.")
.add()
.build();
class="kw">private class="kw">static class="kw">final MetaKey<Object2IntMap<InteractionType>> FORK_COUNTS = Interaction.META_REGISTRY.registerMetaObject(var0 -> new Object2IntOpenHashMap());
class="kw">private class="kw">static class="kw">final MetaKey<InteractionChain> FORKED_CHAIN = Interaction.META_REGISTRY.registerMetaObject(var0 -> null);
class="kw">private class="kw">static class="kw">final MetaKey<Long> CHARGE_START_NANOS = Interaction.META_REGISTRY.registerMetaObject(var0 -> 0L);
class="kw">private class="kw">static class="kw">final float CHARGING_HELD = -1.0F;
class="kw">private class="kw">static class="kw">final float CHARGING_CANCELED = -2.0F;
class="kw">private class="kw">static class="kw">final float CHARGE_GRACE_SECONDS = 0.25F;
class="kw">private class="kw">static class="kw">final StringTag TAG_FAILED = StringTag.of("Failed");
class="kw">protected boolean allowIndefiniteHold;
class="kw">protected boolean displayProgress = true;
class="kw">protected boolean cancelOnOtherClick = true;
class="kw">protected boolean failOnDamage;
class="kw">protected float mouseSensitivityAdjustmentTarget = 1.0F;
class="kw">protected float mouseSensitivityAdjustmentDuration = 1.0F;
@Nullable
class="kw">protected String failed;
@Nullable
class="kw">protected Float2ObjectMap<String> next;
class="kw">protected float[] sortedKeys;
class="kw">protected Map<InteractionType, String> forks;
@Nullable
class="kw">protected ChargingDelay chargingDelay;
class="kw">protected float highestChargeValue;
class="kw">public ChargingInteraction() {
}
@Nonnull
@Override
class="kw">public WaitForDataFrom getWaitForDataFrom() {
class="kw">return WaitForDataFrom.Client;
}
@Override
class="kw">protected void tick0(boolean var1, float var2, @Nonnull InteractionType var3, @Nonnull InteractionContext var4, @Nonnull CooldownHandler var5) {
InteractionSyncData var6 = var4.getClientState();
if (var4.getClientState().state == InteractionState.Failed && var4.hasLabels()) {
var4.getState().state = InteractionState.Failed;
var4.jump(var4.getLabel(this.next != null ? this.next.size() : 0));
} else {
if (var1) {
var4.getInstanceStore().putMetaObject(CHARGE_START_NANOS, System.nanoTime());
}
if (var6.forkCounts != null && this.forks != null) {
Object2IntMap var7 = var4.getInstanceStore().getMetaObject(FORK_COUNTS);
InteractionChain var8 = var4.getInstanceStore().getMetaObject(FORKED_CHAIN);
if (var8 != null && var8.getServerState() != InteractionState.NotFinished) {
var8 = null;
}
boolean var9 = true;
for (Entry var11 : var6.forkCounts.entrySet()) {
int var12 = var7.getInt(var11.getKey());
String var13 = this.forks.get(var11.getKey());
if (var8 == null && var12 < var11.getValue() && var13 != null) {
InteractionContext var14 = var4.duplicate();
var8 = var4.fork(var11.getKey(), var14, RootInteraction.getRootInteractionOrUnknown(var13), true);
var4.getInstanceStore().putMetaObject(FORKED_CHAIN, var8);
var7.put(var11.getKey(), ++var12);
}
var9 &= var12 == var11.getValue();
}
if (!var9) {
var4.getState().state = InteractionState.NotFinished;
class="kw">return;
}
}
if (var6.chargeValue == -1.0F) {
this.validateHoldDuration(var4);
var4.getState().state = InteractionState.NotFinished;
} else if (var6.chargeValue == -2.0F) {
var4.getState().state = InteractionState.Finished;
} else {
var4.getState().state = InteractionState.Finished;
float var15 = var6.chargeValue;
this.validateChargeValue(var15, var4);
if (this.next != null) {
this.jumpToChargeValue(var4, var15);
CommandBuffer var16 = var4.getCommandBuffer();
assert var16 != null;
Ref var17 = var4.getEntity();
DamageDataComponent var18 = var16.getComponent(var17, DamageDataComponent.getComponentType());
assert var18 != null;
var18.setLastChargeTime(var16.getResource(TimeResource.getResourceType()).getNow());
}
}
}
}
@Override
class="kw">protected void simulateTick0(boolean var1, float var2, @Nonnull InteractionType var3, @Nonnull InteractionContext var4, @Nonnull CooldownHandler var5) {
Ref var6 = var4.getEntity();
IInteractionSimulationHandler var7 = var4.getInteractionManager().getInteractionSimulationHandler();
if (var7.isCharging(var1, var2, var3, var4, var6, var5) && (this.allowIndefiniteHold || var2 < this.highestChargeValue)) {
if (this.failOnDamage && var7.shouldCancelCharging(var1, var2, var3, var4, var6, var5)) {
var4.getState().state = InteractionState.Failed;
class="kw">return;
}
var4.getState().state = InteractionState.NotFinished;
} else {
var4.getState().state = InteractionState.Finished;
float var8 = var7.getChargeValue(var1, var2, var3, var4, var6, var5);
var4.getState().chargeValue = var8;
if (this.next == null) {
class="kw">return;
}
this.jumpToChargeValue(var4, var8);
}
}
class="kw">private void jumpToChargeValue(@Nonnull InteractionContext var1, float var2) {
float var3 = 2.1474836E9F;
int var4 = -1;
int var5 = 0;
for (float var9 : this.sortedKeys) {
if (var2 < var9) {
var5++;
} else {
float var10 = var2 - var9;
if (var4 == -1 || var10 < var3) {
var3 = var10;
var4 = var5;
}
var5++;
}
}
if (var4 != -1) {
var1.jump(var1.getLabel(var4));
}
}
@Override
class="kw">public void compile(@Nonnull OperationsBuilder var1) {
Label var2 = var1.createUnresolvedLabel();
Label[] var3 = new Label[(this.next != null ? this.next.size() : 0) + 1];
for (int var4 = 0; var4 < var3.length; var4++) {
var3[var4] = var1.createUnresolvedLabel();
}
var1.addOperation(this, var3);
var1.jump(var2);
if (this.sortedKeys != null) {
for (int var7 = 0; var7 < this.sortedKeys.length; var7++) {
float var5 = this.sortedKeys[var7];
var1.resolveLabel(var3[var7]);
Interaction var6 = Interaction.getInteractionOrUnknown((String)this.next.get(var5));
var6.compile(var1);
var1.jump(var2);
}
}
int var8 = this.sortedKeys != null ? this.sortedKeys.length : 0;
var1.resolveLabel(var3[var8]);
if (this.failed != null) {
Interaction var9 = Interaction.getInteractionOrUnknown(this.failed);
var9.compile(var1);
}
var1.resolveLabel(var2);
}
@Override
class="kw">public boolean walk(@Nonnull Collector var1, @Nonnull InteractionContext var2) {
if (this.next != null) {
ObjectIterator var3 = this.next.float2ObjectEntrySet().iterator();
while (var3.hasNext()) {
it.unimi.dsi.fastutil.floats.Float2ObjectMap.Entry var4 = (it.unimi.dsi.fastutil.floats.Float2ObjectMap.Entry<String>)var3.next();
if (InteractionManager.walkInteraction(var1, var2, ChargingInteraction.ChargingTag.of(var4.getFloatKey()), (String)var4.getValue())) {
class="kw">return true;
}
}
}
class="kw">return this.failed != null && InteractionManager.walkInteraction(var1, var2, TAG_FAILED, this.failed);
}
@Nonnull
@Override
class="kw">protected com.hypixel.hytale.protocol.Interaction generatePacket() {
class="kw">return new com.hypixel.hytale.protocol.ChargingInteraction();
}
@Override
class="kw">protected void configurePacket(com.hypixel.hytale.protocol.Interaction var1) {
super.configurePacket(var1);
com.hypixel.hytale.protocol.ChargingInteraction var2 = (com.hypixel.hytale.protocol.ChargingInteraction)var1;
var2.allowIndefiniteHold = this.allowIndefiniteHold;
var2.mouseSensitivityAdjustmentTarget = this.mouseSensitivityAdjustmentTarget;
var2.mouseSensitivityAdjustmentDuration = this.mouseSensitivityAdjustmentDuration;
var2.displayProgress = this.displayProgress;
var2.cancelOnOtherClick = this.cancelOnOtherClick;
var2.failOnDamage = this.failOnDamage;
var2.failed = Interaction.getInteractionIdOrUnknown(this.failed);
var2.chargingDelay = this.chargingDelay;
if (this.next != null) {
Float2IntOpenHashMap var3 = new Float2IntOpenHashMap();
ObjectIterator var4 = this.next.float2ObjectEntrySet().iterator();
while (var4.hasNext()) {
it.unimi.dsi.fastutil.floats.Float2ObjectMap.Entry var5 = (it.unimi.dsi.fastutil.floats.Float2ObjectMap.Entry<String>)var4.next();
var3.put(var5.getFloatKey(), Interaction.getInteractionIdOrUnknown((String)var5.getValue()));
}
var2.chargedNext = var3;
}
if (this.forks != null) {
Object2IntOpenHashMap var6 = new Object2IntOpenHashMap();
for (Entry var8 : this.forks.entrySet()) {
var6.put(var8.getKey(), RootInteraction.getRootInteractionIdOrUnknown(var8.getValue()));
}
var2.forks = var6;
}
}
@Override
class="kw">public boolean needsRemoteSync() {
class="kw">return true;
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "ChargingInteraction{allowIndefiniteHold="
+ this.allowIndefiniteHold
+ ", displayProgress="
+ this.displayProgress
+ ", mouseSensitivityAdjustmentTarget="
+ this.mouseSensitivityAdjustmentTarget
+ ", mouseSensitivityAdjustmentDuration="
+ this.mouseSensitivityAdjustmentDuration
+ ", cancelOnOtherClick="
+ this.cancelOnOtherClick
+ ", next="
+ this.next
+ ", forks="
+ this.forks
+ ", highestChargeValue="
+ this.highestChargeValue
+ ", failOnDamage="
+ this.failOnDamage
+ "} "
+ super.toString();
}
class="kw">private void validateChargeValue(float var1, @Nonnull InteractionContext var2) {
Long var3 = var2.getInstanceStore().getMetaObject(CHARGE_START_NANOS);
if (var3 != 0L) {
CommandBuffer var4 = var2.getCommandBuffer();
assert var4 != null;
float var5 = (float)(System.nanoTime() - var3) / 1.0E9F;
float var6 = var4.getResource(TimeResource.getResourceType()).getTimeDilationModifier();
float var7 = var5 * var6 + 0.25F;
if (!this.allowIndefiniteHold && this.highestChargeValue > 0.0F) {
var7 = Math.min(var7, this.highestChargeValue);
}
if (var1 > var7) {
LOGGER.at(Level.WARNING)
.log(
"%s charge value %.3f exceeds max allowed %.3f (wall: %.3f, dilation: %.2f)",
EntityUtils.getEntityName(var2.getEntity(), var4),
var1,
var7,
var5,
var6
);
}
}
}
class="kw">private void validateHoldDuration(@Nonnull InteractionContext var1) {
if (!this.allowIndefiniteHold && !(this.highestChargeValue <= 0.0F)) {
Long var2 = var1.getInstanceStore().getMetaObject(CHARGE_START_NANOS);
if (var2 != 0L) {
CommandBuffer var3 = var1.getCommandBuffer();
assert var3 != null;
float var4 = (float)(System.nanoTime() - var2) / 1.0E9F;
float var5 = var3.getResource(TimeResource.getResourceType()).getTimeDilationModifier();
if (var4 * var5 > this.highestChargeValue + 0.25F) {
LOGGER.at(Level.WARNING)
.log(
"%s held charge %.3fs beyond max %.3f (wall: %.3f, dilation: %.2f)",
EntityUtils.getEntityName(var1.getEntity(), var3),
var4 * var5,
this.highestChargeValue,
var4,
var5
);
}
}
}
}
class="kw">public class="kw">static class="kw">final class ChargingTag class="kw">implements CollectorTag {
class="kw">private class="kw">final float seconds;
class="kw">private ChargingTag(float var1) {
this.seconds = var1;
}
class="kw">public double getSeconds() {
class="kw">return this.seconds;
}
@Override
class="kw">public boolean equals(@Nullable Object var1) {
if (this == var1) {
class="kw">return true;
} else if (var1 != null && this.getClass() == var1.getClass()) {
ChargingInteraction.ChargingTag var2 = (ChargingInteraction.ChargingTag)var1;
class="kw">return Float.compare(var2.seconds, this.seconds) == 0;
} else {
class="kw">return false;
}
}
@Override
class="kw">public int hashCode() {
class="kw">return this.seconds != 0.0F ? Float.floatToIntBits(this.seconds) : 0;
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "ChargingTag{seconds=" + this.seconds + "}";
}
@Nonnull
class="kw">public class="kw">static ChargingInteraction.ChargingTag of(float var0) {
class="kw">return new ChargingInteraction.ChargingTag(var0);
}
}
}