Interaction class
Пакет: com.hypixel.hytale.server.core.modules.interaction.interaction.config
Файл: com/hypixel/hytale/server/core/modules/interaction/interaction/config/Interaction.java
implements: Operation,
JsonAssetWithMap<String, IndexedLookupTableAssetMap<String, Interaction>>,
NetworkSerializable<com.hypixel.hytale.protocol.Interaction>
Поля (68)
| Модификаторы | Тип | Имя |
|---|---|---|
|
|
ASSET_STORE |
|
|
return |
|
com.hypixel.hytale.protocol.Interaction |
var1 |
|
IndexedLookupTableAssetMap |
var1 |
|
Interaction |
var1 |
|
InteractionSyncData |
var10 |
|
InteractionSyncData |
var10 |
|
InteractionSyncData |
var10 |
|
ForkedChainId |
var10 |
|
Float |
var11 |
|
Float |
var11 |
|
int |
var11 |
|
Item |
var12 |
|
NetworkId |
var12 |
|
float |
var13 |
|
int |
var13 |
|
double |
var14 |
|
|
var14 |
|
PlayInteractionFor |
var14 |
|
InteractionSyncData |
var15 |
|
TransformComponent |
var15 |
|
Vector3d |
var16 |
|
SpatialResource |
var17 |
|
List |
var18 |
|
Ref |
var19 |
|
com.hypixel.hytale.protocol.Interaction |
var2 |
|
String |
var2 |
|
|
var2 |
|
|
var2 |
|
|
var2 |
|
int |
var2 |
|
|
var2 |
|
ComponentType |
var20 |
|
PlayerRef |
var23 |
|
ItemPlayerAnimations |
var3 |
|
Archetype |
var3 |
|
int |
var3 |
|
ItemAnimation |
var4 |
|
boolean |
var4 |
|
CommandBuffer |
var5 |
|
CommandBuffer |
var5 |
|
BlockyAnimationCache.BlockyAnimation |
var5 |
|
boolean |
var5 |
|
|
var5 |
|
byte |
var6 |
|
Player |
var6 |
|
Ref |
var6 |
|
String |
var6 |
|
Player |
var6 |
|
int |
var7 |
|
int |
var7 |
|
byte |
var7 |
|
GameMode |
var7 |
|
InteractionSyncData |
var7 |
|
InteractionType |
var7 |
|
PlayerSettings |
var7 |
|
int |
var8 |
|
int |
var8 |
|
ItemStack |
var8 |
|
InteractionSettings |
var8 |
|
InteractionChain |
var8 |
|
int |
var8 |
|
boolean |
var8 |
|
CommandBuffer |
var9 |
|
CommandBuffer |
var9 |
|
ItemContainer |
var9 |
|
InteractionChain |
var9 |
|
int |
var9 |
Методы (46)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Unknown key! " + var0) |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Unknown interaction: " + var0) |
public |
void |
compilevoid compile(@Nonnull OperationsBuilder var1) |
protected |
void |
configurePacketvoid configurePacket(com.hypixel.hytale.protocol.Interaction var1) |
static |
boolean |
failedboolean failed(@Nonnull InteractionState var0) |
|
|
for for(Ref var22 : var18) |
protected |
double |
getAnimationDurationdouble getAnimationDuration(@Nullable Item var1) |
static |
IndexedLookupTableAssetMap<String, Interaction> |
getAssetMapIndexedLookupTableAssetMap<String, Interaction> getAssetMap() |
public |
float |
getHorizontalSpeedMultiplierfloat getHorizontalSpeedMultiplier() |
public |
String |
getIdString getId() |
public |
InteractionItemChangeBehavior |
getOnItemChangeBehaviorInteractionItemChangeBehavior getOnItemChangeBehavior() |
public |
float |
getRunTimefloat getRunTime() |
public |
double |
getViewDistancedouble getViewDistance() |
|
|
if if(ASSET_STORE == null) |
|
|
if if(var11 != null) |
|
|
if if(var11 != null) |
|
|
if if(var2 < var13) |
|
|
if if(var13 > 0.0F) |
|
|
if if(var7.state != InteractionState.NotFinished) |
|
|
if if(var2 && var7.state == InteractionState.Finished) |
|
|
if if(var2) |
|
|
if if(var1 != null) |
|
|
if if(this.data != null) |
|
|
if if(this.camera != null) |
|
|
if if(this.effects.itemPlayerAnimationsId != null) |
|
|
if if(var3 == null) |
|
|
if if(var4 == null) |
|
|
if if(var5) |
|
|
if if(var0 == null) |
|
|
if if(var2 == Integer.MIN_VALUE) |
|
|
if if(var3 == Integer.MIN_VALUE) |
|
|
if if(var0 == null) |
|
|
if if(var1 == null) |
static |
boolean |
isTargetInvulnerableboolean isTargetInvulnerable(CommandBuffer<EntityStore> var0, Ref<EntityStore> var1, Ref<EntityStore> var2) |
public |
boolean |
isUnknownboolean isUnknown() |
static |
boolean |
needsRemoteSyncboolean needsRemoteSync(@Nullable String var0) |
abstract abstract |
boolean |
needsRemoteSyncboolean needsRemoteSync() |
private |
void |
sendPlayInteractvoid sendPlayInteract(@Nonnull Ref<EntityStore> var1, @Nonnull InteractionContext var2, @Nonnull InteractionChain var3, boolean var4) |
abstract abstract |
void |
simulateTick0void simulateTick0(boolean var1, float var2, @Nonnull InteractionType var3, @Nonnull InteractionContext var4, @Nonnull CooldownHandler var5) |
|
|
switch switch(var10.state) |
|
|
switch switch(var10.state) |
|
return |
switchreturn switch(var0) |
abstract abstract |
void |
tick0void tick0(boolean var1, float var2, @Nonnull InteractionType var3, @Nonnull InteractionContext var4, @Nonnull CooldownHandler var5) |
private |
boolean |
tickInternalboolean tickInternal(@Nonnull Ref<EntityStore> var1, float var2, @Nonnull InteractionType var3, @Nonnull InteractionContext var4, @Nonnull ComponentAccessor<EntityStore> var5) |
private |
void |
trySkipChainvoid trySkipChain(@Nonnull Ref<EntityStore> var1, float var2, @Nonnull InteractionContext var3, @Nonnull InteractionSyncData var4) |
abstract abstract |
boolean |
walkboolean walk(@Nonnull Collector var1, @Nonnull InteractionContext var2) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.interaction.interaction.config;
class="kw">import com.hypixel.hytale.assetstore.AssetExtraInfo;
class="kw">import com.hypixel.hytale.assetstore.AssetKeyValidator;
class="kw">import com.hypixel.hytale.assetstore.AssetRegistry;
class="kw">import com.hypixel.hytale.assetstore.AssetStore;
class="kw">import com.hypixel.hytale.assetstore.codec.AssetCodecMapCodec;
class="kw">import com.hypixel.hytale.assetstore.codec.ContainedAssetCodec;
class="kw">import com.hypixel.hytale.assetstore.map.IndexedLookupTableAssetMap;
class="kw">import com.hypixel.hytale.assetstore.map.JsonAssetWithMap;
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.array.ArrayCodec;
class="kw">import com.hypixel.hytale.codec.codecs.map.EnumMapCodec;
class="kw">import com.hypixel.hytale.codec.schema.metadata.ui.UIEditor;
class="kw">import com.hypixel.hytale.codec.validation.ValidatorCache;
class="kw">import com.hypixel.hytale.codec.validation.Validators;
class="kw">import com.hypixel.hytale.component.Archetype;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.spatial.SpatialResource;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.protocol.BlockPosition;
class="kw">import com.hypixel.hytale.protocol.ForkedChainId;
class="kw">import com.hypixel.hytale.protocol.GameMode;
class="kw">import com.hypixel.hytale.protocol.InteractionChainData;
class="kw">import com.hypixel.hytale.protocol.InteractionItemChangeBehavior;
class="kw">import com.hypixel.hytale.protocol.InteractionSettings;
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.ItemAnimation;
class="kw">import com.hypixel.hytale.protocol.packets.interaction.PlayInteractionFor;
class="kw">import com.hypixel.hytale.server.core.asset.common.BlockyAnimationCache;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.Item;
class="kw">import com.hypixel.hytale.server.core.asset.type.itemanimation.config.ItemPlayerAnimations;
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.entities.Player;
class="kw">import com.hypixel.hytale.server.core.inventory.InventoryUtils;
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.MetaKey;
class="kw">import com.hypixel.hytale.server.core.meta.MetaRegistry;
class="kw">import com.hypixel.hytale.server.core.modules.entity.EntityModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.Invulnerable;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.RespondToHit;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.Damage;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DeathComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.player.PlayerSettings;
class="kw">import com.hypixel.hytale.server.core.modules.entity.tracker.NetworkId;
class="kw">import com.hypixel.hytale.server.core.modules.entitystats.EntityStatMap;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.CooldownHandler;
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.none.simple.SendMessageInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.operation.Operation;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.operation.OperationsBuilder;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.core.util.UUIDUtil;
class="kw">import java.lang.ref.SoftReference;
class="kw">import java.util.Collections;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector4d;
class="kw">public class="kw">abstract class Interaction
class="kw">implements Operation,
JsonAssetWithMap<String, IndexedLookupTableAssetMap<String, Interaction>>,
NetworkSerializable<com.hypixel.hytale.protocol.Interaction> {
@Nonnull
class="kw">public class="kw">static class="kw">final AssetCodecMapCodec<String, Interaction> CODEC = new AssetCodecMapCodec<>(
Codec.STRING, (var0, var1) -> var0.id = var1, var0 -> var0.id, (var0, var1) -> var0.data = var1, var0 -> var0.data
);
@Nonnull
class="kw">public class="kw">static class="kw">final Codec<String> CHILD_ASSET_CODEC = new ContainedAssetCodec<>(Interaction.class, CODEC);
@Nonnull
class="kw">public class="kw">static class="kw">final Codec<String[]> CHILD_ASSET_CODEC_ARRAY = new ArrayCodec<>(CHILD_ASSET_CODEC, String[]::new);
@Nonnull
class="kw">public class="kw">static class="kw">final BuilderCodec<Interaction> ABSTRACT_CODEC = BuilderCodec.abstractBuilder(Interaction.class)
.appendInherited(
new KeyedCodec<>("ViewDistance", Codec.DOUBLE),
(var0, var1) -> var0.viewDistance = var1,
var0 -> var0.viewDistance,
(var0, var1) -> var0.viewDistance = var1.viewDistance
)
.documentation("Configures the distance in which other players will be able to see the effects of this interaction.")
.add()
.<InteractionEffects>appendInherited(
new KeyedCodec<>("Effects", InteractionEffects.CODEC),
(var0, var1) -> var0.effects = var1,
var0 -> var0.effects,
(var0, var1) -> var0.effects = var1.effects
)
.documentation("Sets effects that will be applied whilst the interaction is running.")
.add()
.<Float>appendInherited(
new KeyedCodec<>("HorizontalSpeedMultiplier", Codec.FLOAT),
(var0, var1) -> var0.horizontalSpeedMultiplier = var1,
var0 -> var0.horizontalSpeedMultiplier,
(var0, var1) -> var0.horizontalSpeedMultiplier = var1.horizontalSpeedMultiplier
)
.documentation("The multiplier to apply to the horizontal speed of the entity whilst this interaction is running.")
.metadata(new UIEditor(new UIEditor.FormattedNumber(0.1, null, null)))
.add()
.<Float>appendInherited(
new KeyedCodec<>("RunTime", Codec.FLOAT), (var0, var1) -> var0.runTime = var1, var0 -> var0.runTime, (var0, var1) -> var0.runTime = var1.runTime
)
.documentation(
"The time in seconds this interaction should run for. \n\nIf *Effects.WaitForAnimationToFinish* is set and the length of the animation is longer than the runtime then the interaction will run for longer than the set time."
)
.metadata(new UIEditor(new UIEditor.FormattedNumber(0.01, "s", null)))
.add()
.<InteractionItemChangeBehavior>appendInherited(
new KeyedCodec<>("OnItemChangeBehavior", new EnumCodec<>(InteractionItemChangeBehavior.class)),
(var0, var1) -> var0.onItemChangeBehavior = var1,
var0 -> var0.onItemChangeBehavior,
(var0, var1) -> var0.onItemChangeBehavior = var1.onItemChangeBehavior
)
.documentation("What should happen to the interaction when the entity's held item changes.")
.add()
.<Boolean>appendInherited(
new KeyedCodec<>("CancelOnItemChange", Codec.BOOLEAN),
(var0, var1) -> var0.onItemChangeBehavior = var1 ? InteractionItemChangeBehavior.Cancel : InteractionItemChangeBehavior.Ignore,
var0 -> null,
(var0, var1) -> var0.onItemChangeBehavior = var1.onItemChangeBehavior
)
.addValidator(Validators.deprecated())
.documentation("Deprecated field for whether the interaction will be cancelled when the entity's held item changes.")
.add()
.<InteractionRules>appendInherited(
new KeyedCodec<>("Rules", InteractionRules.CODEC), (var0, var1) -> var0.rules = var1, var0 -> var0.rules, (var0, var1) -> var0.rules = var1.rules
)
.documentation("A set of rules that control when this interaction can run.")
.addValidator(Validators.nonNull())
.add()
.<Map<GameMode, InteractionSettings>>appendInherited(
new KeyedCodec<>(
"Settings",
new EnumMapCodec<>(
GameMode.class,
BuilderCodec.builder(InteractionSettings.class, InteractionSettings::new)
.appendInherited(
new KeyedCodec<>("AllowSkipOnClick", Codec.BOOLEAN),
(var0, var1) -> var0.allowSkipOnClick = var1,
var0 -> var0.allowSkipOnClick,
(var0, var1) -> var0.allowSkipOnClick = var1.allowSkipOnClick
)
.documentation("Whether to skip this interaction when another click is sent.")
.add()
.build()
)
),
(var0, var1) -> var0.settings = var1,
var0 -> var0.settings,
(var0, var1) -> var0.settings = var1.settings
)
.documentation("Per a gamemode settings.")
.add()
.<InteractionCameraSettings>appendInherited(
new KeyedCodec<>("Camera", InteractionCameraSettings.CODEC),
(var0, var1) -> var0.camera = var1,
var0 -> var0.camera,
(var0, var1) -> var0.camera = var1.camera
)
.documentation("Configures the camera behaviour for this interaction.")
.add()
.build();
@Nonnull
class="kw">public class="kw">static class="kw">final ValidatorCache<String> VALIDATOR_CACHE = new ValidatorCache<>(new AssetKeyValidator<>(Interaction::getAssetStore));
class="kw">private class="kw">static AssetStore<String, Interaction, IndexedLookupTableAssetMap<String, Interaction>> ASSET_STORE;
class="kw">public class="kw">static class="kw">final MetaRegistry<InteractionContext> CONTEXT_META_REGISTRY = new MetaRegistry<>();
class="kw">public class="kw">static class="kw">final MetaRegistry<Interaction> META_REGISTRY = new MetaRegistry<>();
class="kw">public class="kw">static class="kw">final MetaKey<Ref<EntityStore>> TARGET_ENTITY = CONTEXT_META_REGISTRY.registerMetaObject(var0 -> null);
class="kw">public class="kw">static class="kw">final MetaKey<Vector4d> HIT_LOCATION = CONTEXT_META_REGISTRY.registerMetaObject(var0 -> null);
class="kw">public class="kw">static class="kw">final MetaKey<String> HIT_DETAIL = CONTEXT_META_REGISTRY.registerMetaObject(var0 -> null);
class="kw">public class="kw">static class="kw">final MetaKey<BlockPosition> TARGET_BLOCK = CONTEXT_META_REGISTRY.registerMetaObject(var0 -> null);
class="kw">public class="kw">static class="kw">final MetaKey<BlockPosition> TARGET_BLOCK_RAW = CONTEXT_META_REGISTRY.registerMetaObject(var0 -> null);
class="kw">public class="kw">static class="kw">final MetaKey<BlockType> TARGET_BLOCK_TYPE = CONTEXT_META_REGISTRY.registerMetaObject(var0 -> null);
class="kw">public class="kw">static class="kw">final MetaKey<Integer> TARGET_BLOCK_ROTATION_INDEX = CONTEXT_META_REGISTRY.registerMetaObject(var0 -> 0);
class="kw">public class="kw">static class="kw">final MetaKey<Integer> TARGET_SLOT = CONTEXT_META_REGISTRY.registerMetaObject(var0 -> 0);
class="kw">public class="kw">static class="kw">final MetaKey<Float> TIME_SHIFT = META_REGISTRY.registerMetaObject(var0 -> null);
class="kw">public class="kw">static class="kw">final MetaKey<Damage> DAMAGE = CONTEXT_META_REGISTRY.registerMetaObject(var0 -> null);
class="kw">protected String id;
class="kw">protected AssetExtraInfo.Data data;
class="kw">protected boolean unknown;
class="kw">protected double viewDistance = 96.0;
@Nonnull
class="kw">protected InteractionEffects effects = new InteractionEffects();
class="kw">protected float horizontalSpeedMultiplier = 1.0F;
class="kw">protected float runTime;
class="kw">protected InteractionItemChangeBehavior onItemChangeBehavior = InteractionItemChangeBehavior.Cancel;
@Nonnull
class="kw">protected Map<GameMode, InteractionSettings> settings = Collections.emptyMap();
@Nonnull
class="kw">protected InteractionRules rules = InteractionRules.DEFAULT_RULES;
@Nullable
class="kw">protected InteractionCameraSettings camera;
@Nullable
class="kw">private class="kw">transient SoftReference<com.hypixel.hytale.protocol.Interaction> cachedPacket;
@Nonnull
class="kw">public class="kw">static AssetStore<String, Interaction, IndexedLookupTableAssetMap<String, Interaction>> getAssetStore() {
if (ASSET_STORE == null) {
ASSET_STORE = AssetRegistry.getAssetStore(Interaction.class);
}
class="kw">return ASSET_STORE;
}
class="kw">public class="kw">static IndexedLookupTableAssetMap<String, Interaction> getAssetMap() {
class="kw">return (IndexedLookupTableAssetMap<String, Interaction>)getAssetStore().getAssetMap();
}
class="kw">public Interaction() {
}
class="kw">public Interaction(@Nonnull String var1) {
this.id = var1;
}
class="kw">public String getId() {
class="kw">return this.id;
}
class="kw">public boolean isUnknown() {
class="kw">return this.unknown;
}
@Nonnull
class="kw">public InteractionEffects getEffects() {
class="kw">return this.effects;
}
class="kw">public float getHorizontalSpeedMultiplier() {
class="kw">return this.horizontalSpeedMultiplier;
}
class="kw">public double getViewDistance() {
class="kw">return this.viewDistance;
}
class="kw">public float getRunTime() {
class="kw">return this.runTime;
}
class="kw">public InteractionItemChangeBehavior getOnItemChangeBehavior() {
class="kw">return this.onItemChangeBehavior;
}
@Nonnull
@Override
class="kw">public InteractionRules getRules() {
class="kw">return this.rules;
}
@Nonnull
class="kw">public Map<GameMode, InteractionSettings> getSettings() {
class="kw">return this.settings;
}
@Override
class="kw">public class="kw">final void tick(
@Nonnull Ref<EntityStore> var1, boolean var2, float var3, @Nonnull InteractionType var4, @Nonnull InteractionContext var5, @Nonnull CooldownHandler var6
) {
int var7 = var5.getOperationCounter();
int var8 = var5.getChain().getCallDepth();
CommandBuffer var9 = var5.getCommandBuffer();
assert var9 != null;
if (!this.tickInternal(var1, var3, var4, var5, var9)) {
this.tick0(var2, var3, var4, var5, var6);
}
InteractionSyncData var10 = var5.getState();
this.trySkipChain(var1, var3, var5, var10);
class="kw">switch (var10.state) {
case Failed:
case Finished:
case Skip:
Float var11 = var5.getInstanceStore().getMetaObject(TIME_SHIFT);
if (var11 != null) {
var5.setTimeShift(var11);
}
if (var5.getOperationCounter() == var7 && var8 == var5.getChain().getCallDepth()) {
var5.setOperationCounter(var5.getOperationCounter() + 1);
}
case NotFinished:
class="kw">default:
class="kw">return;
case ItemChanged:
throw new InteractionManager.ChainCancelledException(var10.state);
}
}
@Override
class="kw">public class="kw">final void simulateTick(
@Nonnull Ref<EntityStore> var1, boolean var2, float var3, @Nonnull InteractionType var4, @Nonnull InteractionContext var5, @Nonnull CooldownHandler var6
) {
int var7 = var5.getOperationCounter();
int var8 = var5.getChain().getSimulatedCallDepth();
CommandBuffer var9 = var5.getCommandBuffer();
assert var9 != null;
if (!this.tickInternal(var1, var3, var4, var5, var9)) {
this.simulateTick0(var2, var3, var4, var5, var6);
}
InteractionSyncData var10 = var5.getState();
this.trySkipChain(var1, var3, var5, var10);
class="kw">switch (var10.state) {
case Failed:
case Finished:
case Skip:
Float var11 = var5.getInstanceStore().getMetaObject(TIME_SHIFT);
if (var11 != null) {
var5.setTimeShift(var11);
}
if (var5.getOperationCounter() == var7 && var8 == var5.getChain().getSimulatedCallDepth()) {
var5.setOperationCounter(var5.getOperationCounter() + 1);
}
case ItemChanged:
case NotFinished:
}
}
class="kw">private boolean tickInternal(
@Nonnull Ref<EntityStore> var1, float var2, @Nonnull InteractionType var3, @Nonnull InteractionContext var4, @Nonnull ComponentAccessor<EntityStore> var5
) {
byte var6 = var3 == InteractionType.Equipped ? var4.getHeldItemSlot() : InventoryUtils.getActiveSlot(var1, var4.getHeldItemSectionId(), var5);
byte var7 = var4.getHeldItemSlot();
ItemStack var8 = var4.getHeldItem();
ItemContainer var9 = var4.getHeldItemContainer();
if (!UUIDUtil.isEmptyOrNull(var4.getChain().getChainData().proxyId)
|| this.onItemChangeBehavior == InteractionItemChangeBehavior.Ignore
|| (var3 == InteractionType.Equipped || var6 == var7) && (var7 == -1 || ItemStack.isEquivalentType(var9.getItemStack(var7), var8))) {
if (!failed(var4.getState().state)) {
double var14 = 0.0;
if (this.effects.isWaitForAnimationToFinish()) {
Item var12 = var8 != null ? var8.getItem() : null;
var14 = this.getAnimationDuration(var12);
}
InteractionSyncData var15 = var4.getState();
float var13 = Math.max(this.runTime, (float)var14);
if (var2 < var13) {
var15.state = InteractionState.NotFinished;
} else {
if (var13 > 0.0F) {
var4.getInstanceStore().putMetaObject(TIME_SHIFT, var2 - var13);
}
var15.state = InteractionState.Finished;
}
var15.progress = var2;
}
class="kw">return false;
} else {
InteractionSyncData var10 = var4.getState();
var10.state = class="kw">switch (this.onItemChangeBehavior) {
case Fail -> InteractionState.Failed;
case Finish -> InteractionState.Finished;
class="kw">default -> InteractionState.ItemChanged;
};
var10.progress = var2;
class="kw">return var10.state == InteractionState.ItemChanged;
}
}
class="kw">private void trySkipChain(@Nonnull Ref<EntityStore> var1, float var2, @Nonnull InteractionContext var3, @Nonnull InteractionSyncData var4) {
CommandBuffer var5 = var3.getCommandBuffer();
assert var5 != null;
Player var6 = var5.getComponent(var1, Player.getComponentType());
GameMode var7 = var6 != null ? var6.getGameMode() : GameMode.Adventure;
InteractionSettings var8 = this.settings.get(var7);
InteractionChain var9 = var3.getChain();
assert var9 != null;
if (!var9.isFirstRun()
&& var4.state == InteractionState.NotFinished
&& (var3.allowSkipChainOnClick() || var8 != null && var8.allowSkipOnClick)
&& var3.getClientState() != null
&& var3.getClientState().state == InteractionState.Skip) {
var4.state = InteractionState.Skip;
var4.progress = var2;
}
}
class="kw">public void compile(@Nonnull OperationsBuilder var1) {
var1.addOperation(this);
}
class="kw">protected class="kw">abstract void tick0(boolean var1, float var2, @Nonnull InteractionType var3, @Nonnull InteractionContext var4, @Nonnull CooldownHandler var5);
class="kw">protected class="kw">abstract void simulateTick0(
boolean var1, float var2, @Nonnull InteractionType var3, @Nonnull InteractionContext var4, @Nonnull CooldownHandler var5
);
class="kw">public class="kw">abstract boolean walk(@Nonnull Collector var1, @Nonnull InteractionContext var2);
@Override
class="kw">public void handle(@Nonnull Ref<EntityStore> var1, boolean var2, float var3, @Nonnull InteractionType var4, @Nonnull InteractionContext var5) {
Ref var6 = var5.getEntity();
if (var6.isValid()) {
if (var1.isValid()) {
InteractionSyncData var7 = var5.getState();
InteractionChain var8 = var5.getChain();
assert var8 != null;
if (var7.state != InteractionState.NotFinished) {
if (var2 && var7.state == InteractionState.Finished) {
this.sendPlayInteract(var6, var5, var8, false);
}
this.sendPlayInteract(var6, var5, var8, true);
} else {
if (var2) {
this.sendPlayInteract(var6, var5, var8, false);
}
}
}
}
}
@Nullable
class="kw">public InteractionChain mapForkChain(@Nonnull InteractionContext var1, @Nonnull InteractionChainData var2) {
class="kw">return null;
}
class="kw">private void sendPlayInteract(@Nonnull Ref<EntityStore> var1, @Nonnull InteractionContext var2, @Nonnull InteractionChain var3, boolean var4) {
CommandBuffer var5 = var2.getCommandBuffer();
assert var5 != null;
String var6 = null;
InteractionType var7 = var3.getBaseType();
int var8 = getInteractionIdOrUnknown(this.id);
int var9 = var3.getChainId();
ForkedChainId var10 = var3.getForkedChainId();
int var11 = var3.getOperationIndex();
NetworkId var12 = var5.getComponent(var1, NetworkId.getComponentType());
assert var12 != null;
int var13 = var12.getId();
PlayInteractionFor var14 = new PlayInteractionFor(var13, var9, var10, var11, var8, var6, var7, var4);
TransformComponent var15 = var5.getComponent(var1, TransformComponent.getComponentType());
assert var15 != null;
Vector3d var16 = var15.getPosition();
SpatialResource var17 = var5.getResource(EntityModule.get().getPlayerSpatialResourceType());
List var18 = SpatialResource.getThreadLocalReferenceList();
var17.getSpatialStructure().collect(var16, this.viewDistance, var18);
Ref var19 = var2.getOwningEntity();
ComponentType var20 = PlayerRef.getComponentType();
for (Ref var22 : var18) {
if (var22.isValid() && (!var3.requiresClient() || !var22.equals(var19))) {
PlayerRef var23 = var5.getComponent(var22, var20);
assert var23 != null;
var23.getPacketHandler().writeNoCache(var14);
}
}
}
@Nonnull
class="kw">public class="kw">final com.hypixel.hytale.protocol.Interaction toPacket() {
com.hypixel.hytale.protocol.Interaction var1 = this.cachedPacket == null ? null : this.cachedPacket.get();
if (var1 != null) {
class="kw">return var1;
}
com.hypixel.hytale.protocol.Interaction var2 = this.generatePacket();
this.configurePacket(var2);
this.cachedPacket = new SoftReference<>(var2);
class="kw">return var2;
}
@Nonnull
class="kw">protected class="kw">abstract com.hypixel.hytale.protocol.Interaction generatePacket();
class="kw">protected void configurePacket(com.hypixel.hytale.protocol.Interaction var1) {
var1.waitForDataFrom = this.getWaitForDataFrom();
var1.effects = this.effects.toPacket();
var1.horizontalSpeedMultiplier = this.horizontalSpeedMultiplier;
var1.runTime = this.runTime;
var1.onItemChangeBehavior = this.onItemChangeBehavior;
var1.settings = this.settings;
var1.rules = this.rules.toPacket();
if (this.data != null) {
var1.tags = this.data.getTags().keySet().toIntArray();
}
if (this.camera != null) {
var1.camera = this.camera.toPacket();
}
}
class="kw">protected double getAnimationDuration(@Nullable Item var1) {
String var2;
if (this.effects.itemPlayerAnimationsId != null) {
var2 = this.effects.itemPlayerAnimationsId;
} else if (var1 != null) {
var2 = var1.getPlayerAnimationsId();
} else {
var2 = "Default";
}
ItemPlayerAnimations var3 = ItemPlayerAnimations.getAssetMap().getAsset(var2);
if (var3 == null) {
class="kw">return 0.0;
}
ItemAnimation var4 = this.effects.getItemAnimationId() != null ? var3.getAnimations().get(this.effects.getItemAnimationId()) : null;
if (var4 == null) {
class="kw">return 0.0;
}
BlockyAnimationCache.BlockyAnimation var5 = BlockyAnimationCache.getNow(var4.firstPerson);
class="kw">return var5 == null ? 0.0 : var5.getDurationSeconds() * var4.speed;
}
class="kw">protected class="kw">static boolean isTargetInvulnerable(CommandBuffer<EntityStore> var0, Ref<EntityStore> var1, Ref<EntityStore> var2) {
Archetype var3 = var0.getArchetype(var2);
boolean var4 = var3.contains(DeathComponent.getComponentType());
boolean var5 = var3.contains(Invulnerable.getComponentType());
if (var5) {
Player var6 = var0.getComponent(var2, Player.getComponentType());
if (var6 != null && var6.getGameMode() == GameMode.Creative) {
PlayerSettings var7 = var0.getComponent(var2, PlayerSettings.getComponentType());
if (var7 != null && var7.creativeSettings().respondToHit()) {
var5 = false;
}
}
}
boolean var8 = var3.contains(EntityStatMap.getComponentType()) || var3.contains(RespondToHit.getComponentType());
class="kw">return var4 || var5 || var2.equals(var1) || !var8;
}
class="kw">public class="kw">abstract boolean needsRemoteSync();
@Override
class="kw">public String toString() {
class="kw">return "Interaction{id='"
+ this.id
+ "', viewDistance="
+ this.viewDistance
+ ", effects="
+ this.effects
+ ", horizontalSpeedMultiplier="
+ this.horizontalSpeedMultiplier
+ ", runTime="
+ this.runTime
+ ", onItemChangeBehavior="
+ this.onItemChangeBehavior
+ ", settings="
+ this.settings
+ ", rules="
+ this.rules
+ ", camera="
+ this.camera
+ "}";
}
class="kw">public class="kw">static boolean failed(@Nonnull InteractionState var0) {
class="kw">return class="kw">switch (var0) {
case Failed, Skip, ItemChanged -> true;
case Finished, NotFinished -> false;
};
}
@Nullable
@Deprecated
class="kw">public class="kw">static Interaction getInteractionOrUnknown(@Nonnull String var0) {
class="kw">return getAssetMap().getAsset(getInteractionIdOrUnknown(var0));
}
@Deprecated
class="kw">public class="kw">static int getInteractionIdOrUnknown(@Nullable String var0) {
if (var0 == null) {
class="kw">return Integer.MIN_VALUE;
}
IndexedLookupTableAssetMap var1 = getAssetMap();
int var2 = var1.getIndex(var0);
if (var2 == Integer.MIN_VALUE) {
HytaleLogger.getLogger().at(Level.WARNING).log("Missing interaction %s", var0);
getAssetStore().loadAssets("Hytale:Hytale", List.of(new SendMessageInteraction(var0, "Missing interaction: " + var0)));
int var3 = var1.getIndex(var0);
if (var3 == Integer.MIN_VALUE) {
throw new IllegalArgumentException("Unknown key! " + var0);
}
var2 = var3;
}
class="kw">return var2;
}
class="kw">protected class="kw">static boolean needsRemoteSync(@Nullable String var0) {
if (var0 == null) {
class="kw">return false;
} else {
Interaction var1 = getInteractionOrUnknown(var0);
if (var1 == null) {
throw new IllegalArgumentException("Unknown interaction: " + var0);
} else {
class="kw">return var1.needsRemoteSync();
}
}
}
}