SnapshotProvider interface
Пакет: com.hypixel.hytale.server.core.entity
Файл: com/hypixel/hytale/server/core/entity/InteractionContext.java
Методы (1)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
EntitySnapshot |
getSnapshotEntitySnapshot getSnapshot(CommandBuffer<EntityStore> var1, Ref<EntityStore> var2, int var3) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.entity;
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.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.InteractionSyncData;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.protocol.PrioritySlot;
class="kw">import com.hypixel.hytale.protocol.RootInteractionSettings;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.Item;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.inventory.InventoryComponent;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemContext;
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.inventory.container.SimpleItemContainer;
class="kw">import com.hypixel.hytale.server.core.meta.DynamicMetaStore;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.SnapshotBuffer;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.tracker.NetworkId;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.Interactions;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.components.CarriedBlock;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.UnarmedInteractions;
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.operation.Label;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.util.Arrays;
class="kw">import java.util.Map;
class="kw">import java.util.function.Function;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3f;
class="kw">import org.joml.Vector4d;
class="kw">public class InteractionContext {
@Nonnull
class="kw">private class="kw">static class="kw">final Function<InteractionContext, Map<String, String>> DEFAULT_VAR_GETTER = InteractionContext::defaultGetVars;
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
class="kw">private class="kw">final int heldItemSectionId;
@Nullable
class="kw">private class="kw">final ItemContainer heldItemContainer;
class="kw">private class="kw">final byte heldItemSlot;
@Nullable
class="kw">private ItemStack heldItem;
@Nullable
class="kw">private class="kw">final Item originalItemType;
class="kw">private Function<InteractionContext, Map<String, String>> interactionVarsGetter = DEFAULT_VAR_GETTER;
@Nullable
class="kw">private class="kw">final InteractionManager interactionManager;
@Nullable
class="kw">private class="kw">final Ref<EntityStore> owningEntity;
@Nullable
class="kw">private class="kw">final Ref<EntityStore> runningForEntity;
@Nullable
class="kw">private InteractionChain chain;
@Nullable
class="kw">private InteractionEntry entry;
@Nullable
class="kw">private Label[] labels;
@Nullable
class="kw">private InteractionContext.SnapshotProvider snapshotProvider;
@Nonnull
class="kw">private class="kw">final DynamicMetaStore<InteractionContext> metaStore;
class="kw">private InteractionContext(
@Nullable InteractionManager var1, @Nullable Ref<EntityStore> var2, int var3, @Nullable ItemContainer var4, byte var5, @Nullable ItemStack var6
) {
this(var1, var2, var2, var3, var4, var5, var6);
}
class="kw">private InteractionContext(
@Nullable InteractionManager var1,
@Nullable Ref<EntityStore> var2,
@Nullable Ref<EntityStore> var3,
int var4,
@Nullable ItemContainer var5,
byte var6,
@Nullable ItemStack var7
) {
this.interactionManager = var1;
this.owningEntity = var2;
this.runningForEntity = var3;
this.heldItemSectionId = var4;
this.heldItemContainer = var5;
this.heldItemSlot = var6;
this.heldItem = var7;
this.originalItemType = var7 != null ? var7.getItem() : null;
this.metaStore = new DynamicMetaStore<>(this, Interaction.CONTEXT_META_REGISTRY);
}
@Nonnull
class="kw">public InteractionChain fork(@Nonnull InteractionContext var1, @Nonnull RootInteraction var2, boolean var3) {
assert this.chain != null;
class="kw">return this.fork(this.chain.getType(), var1, var2, var3);
}
@Nonnull
class="kw">public InteractionChain fork(@Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nonnull RootInteraction var3, boolean var4) {
InteractionChainData var5 = new InteractionChainData(this.chain.getChainData());
class="kw">return this.fork(var5, var1, var2, var3, var4);
}
@Nonnull
class="kw">public InteractionChain fork(
@Nonnull InteractionChainData var1, @Nonnull InteractionType var2, @Nonnull InteractionContext var3, @Nonnull RootInteraction var4, boolean var5
) {
if (var3 == this) {
throw new IllegalArgumentException("Cannot use current context");
}
Integer var6 = var3.metaStore.getMetaObject(Interaction.TARGET_SLOT);
if (var6 == null) {
var6 = this.metaStore.getMetaObject(Interaction.TARGET_SLOT);
var3.metaStore.putMetaObject(Interaction.TARGET_SLOT, var6);
}
if (var6 != null) {
var1.targetSlot = var6;
}
Ref var7 = var3.metaStore.getIfPresentMetaObject(Interaction.TARGET_ENTITY);
if (var7 != null && var7.isValid()) {
CommandBuffer var8 = this.getCommandBuffer();
assert var8 != null;
NetworkId var9 = var8.getComponent(var7, NetworkId.getComponentType());
if (var9 != null) {
var1.entityId = var9.getId();
}
}
Vector4d var16 = var3.metaStore.getIfPresentMetaObject(Interaction.HIT_LOCATION);
if (var16 != null) {
var1.hitLocation = new Vector3f((float)var16.x, (float)var16.y, (float)var16.z);
}
String var17 = var3.metaStore.getIfPresentMetaObject(Interaction.HIT_DETAIL);
if (var17 != null) {
var1.hitDetail = var17;
}
BlockPosition var10 = var3.metaStore.getIfPresentMetaObject(Interaction.TARGET_BLOCK_RAW);
if (var10 != null) {
var1.blockPosition = var10;
}
int var11 = this.chain.getChainId();
ForkedChainId var12 = this.chain.getForkedChainId();
ForkedChainId var13 = new ForkedChainId(this.entry.getIndex(), this.entry.nextForkId(), null);
if (var12 != null) {
ForkedChainId var14 = var12 = var12.clone();
while (var14.forkedId != null) {
var14 = var14.forkedId;
}
var14.forkedId = var13;
} else {
var12 = var13;
}
InteractionChain var19 = new InteractionChain(var12, var13, var2, var3, var1, var4, null, true);
var19.setChainId(var11);
var19.setBaseType(this.chain.getBaseType());
var19.setPredicted(var5);
var19.skipChainOnClick = this.allowSkipChainOnClick();
var19.setTimeShift(this.chain.getTimeShift());
this.chain.putForkedChain(var13, var19);
InteractionChain.TempChain var15 = this.chain.removeTempForkedChain(var13, var19);
if (var15 != null) {
LOGGER.at(Level.FINEST).log("Loading temp chain data for fork %s", var13);
var19.copyTempFrom(var15);
}
class="kw">return var19;
}
@Nonnull
class="kw">public InteractionContext duplicate() {
InteractionContext var1 = new InteractionContext(
this.interactionManager, this.owningEntity, this.runningForEntity, this.heldItemSectionId, this.heldItemContainer, this.heldItemSlot, this.heldItem
);
var1.interactionVarsGetter = this.interactionVarsGetter;
var1.metaStore.copyFrom(this.metaStore);
class="kw">return var1;
}
@Nonnull
class="kw">public Ref<EntityStore> getEntity() {
class="kw">return this.runningForEntity;
}
@Nullable
class="kw">public Ref<EntityStore> getOwningEntity() {
class="kw">return this.owningEntity;
}
class="kw">public void execute(@Nonnull RootInteraction var1) {
this.chain.getContext().getState().enteredRootInteraction = RootInteraction.getAssetMap().getIndex(var1.getId());
this.chain.pushRoot(var1, this.entry.isUseSimulationState());
}
@Nullable
class="kw">public InteractionChain getChain() {
class="kw">return this.chain;
}
@Nullable
class="kw">public InteractionEntry getEntry() {
class="kw">return this.entry;
}
class="kw">public int getOperationCounter() {
class="kw">return this.entry.isUseSimulationState() ? this.chain.getSimulatedOperationCounter() : this.chain.getOperationCounter();
}
class="kw">public void setOperationCounter(int var1) {
if (this.entry.isUseSimulationState()) {
this.chain.setSimulatedOperationCounter(var1);
} else {
this.chain.setOperationCounter(var1);
}
}
class="kw">public void jump(@Nonnull Label var1) {
this.setOperationCounter(var1.getIndex());
}
@Nullable
class="kw">public Item getOriginalItemType() {
class="kw">return this.originalItemType;
}
class="kw">public int getHeldItemSectionId() {
class="kw">return this.heldItemSectionId;
}
@Nullable
class="kw">public ItemContainer getHeldItemContainer() {
class="kw">return this.heldItemContainer;
}
class="kw">public byte getHeldItemSlot() {
class="kw">return this.heldItemSlot;
}
@Nullable
class="kw">public ItemStack getHeldItem() {
class="kw">return this.heldItem;
}
class="kw">public void setHeldItem(@Nullable ItemStack var1) {
this.heldItem = var1;
}
@Nullable
class="kw">public ItemContext createHeldItemContext() {
class="kw">return this.heldItemContainer != null && this.heldItem != null ? new ItemContext(this.heldItemContainer, this.heldItemSlot, this.heldItem) : null;
}
class="kw">public Function<InteractionContext, Map<String, String>> getInteractionVarsGetter() {
class="kw">return this.interactionVarsGetter;
}
class="kw">public Map<String, String> getInteractionVars() {
class="kw">return this.interactionVarsGetter.apply(this);
}
class="kw">public void setInteractionVarsGetter(Function<InteractionContext, Map<String, String>> var1) {
this.interactionVarsGetter = var1;
}
class="kw">public InteractionManager getInteractionManager() {
class="kw">return this.interactionManager;
}
@Nullable
class="kw">public Ref<EntityStore> getTargetEntity() {
class="kw">return this.metaStore.getIfPresentMetaObject(Interaction.TARGET_ENTITY);
}
@Nullable
class="kw">public BlockPosition getTargetBlock() {
class="kw">return this.metaStore.getIfPresentMetaObject(Interaction.TARGET_BLOCK);
}
@Nullable
class="kw">public BlockPosition getTargetBlockRaw() {
class="kw">return this.metaStore.getIfPresentMetaObject(Interaction.TARGET_BLOCK_RAW);
}
@Nonnull
class="kw">public DynamicMetaStore<InteractionContext> getMetaStore() {
class="kw">return this.metaStore;
}
@Nonnull
class="kw">public InteractionSyncData getState() {
class="kw">return this.entry.getState();
}
@Nullable
class="kw">public InteractionSyncData getClientState() {
class="kw">return this.entry.getClientState();
}
@Nonnull
class="kw">public InteractionSyncData getServerState() {
class="kw">return this.entry.getServerState();
}
@Nonnull
class="kw">public DynamicMetaStore<Interaction> getInstanceStore() {
class="kw">return this.entry.getMetaStore();
}
class="kw">public boolean allowSkipChainOnClick() {
class="kw">return this.chain.skipChainOnClick;
}
class="kw">public void setLabels(Label[] var1) {
this.labels = var1;
}
class="kw">public boolean hasLabels() {
class="kw">return this.labels != null;
}
class="kw">public Label getLabel(int var1) {
class="kw">return this.labels[var1];
}
class="kw">public EntitySnapshot getSnapshot(@Nonnull Ref<EntityStore> var1, @Nonnull ComponentAccessor<EntityStore> var2) {
NetworkId var3 = var2.getComponent(var1, NetworkId.getComponentType());
assert var3 != null;
int var4 = var3.getId();
if (this.snapshotProvider != null) {
class="kw">return this.snapshotProvider.getSnapshot(this.getCommandBuffer(), this.runningForEntity, var4);
}
SnapshotBuffer var5 = var2.getComponent(var1, SnapshotBuffer.getComponentType());
if (var5 != null) {
EntitySnapshot var6 = var5.getSnapshot(var5.getCurrentTickIndex());
if (var6 != null) {
class="kw">return var6;
}
}
TransformComponent var7 = var2.getComponent(var1, TransformComponent.getComponentType());
assert var7 != null;
class="kw">return new EntitySnapshot(var7.getPosition(), var7.getRotation());
}
class="kw">public void setSnapshotProvider(@Nullable InteractionContext.SnapshotProvider var1) {
this.snapshotProvider = var1;
}
class="kw">public void setTimeShift(float var1) {
if (!this.entry.isUseSimulationState()) {
this.chain.setTimeShift(var1);
if (this.chain.getForkedChainId() == null) {
this.interactionManager.setGlobalTimeShift(this.chain.getType(), var1);
}
}
}
@Nullable
class="kw">public CommandBuffer<EntityStore> getCommandBuffer() {
class="kw">return this.interactionManager.commandBuffer;
}
@Nullable
class="kw">public String getRootInteractionId(@Nonnull InteractionType var1) {
if (this.runningForEntity != null && this.runningForEntity.isValid()) {
Interactions var2 = this.runningForEntity.getStore().getComponent(this.runningForEntity, Interactions.getComponentType());
if (var2 != null) {
String var3 = var2.getInteractionId(var1);
if (var3 != null) {
class="kw">return var3;
}
if (var2.isOverrideAll()) {
class="kw">return null;
}
}
}
Item var5 = this.originalItemType;
if (var5 == null) {
UnarmedInteractions var7 = UnarmedInteractions.getAssetMap().getAsset("Empty");
class="kw">return var7 != null ? var7.getInteractions().get(var1) : null;
}
if (this.runningForEntity != null && this.runningForEntity.isValid()) {
CarriedBlock var6 = this.runningForEntity.getStore().getComponent(this.runningForEntity, CarriedBlock.getComponentType());
if (var6 != null) {
if (var6.getCarriedItemId() != null) {
class="kw">return Item.getAssetMap().getAsset(var6.getCarriedItemId()).getCarryInteractions().get(var1);
}
UnarmedInteractions var4 = UnarmedInteractions.getAssetMap().getAsset("Empty");
class="kw">return var4 != null ? var4.getInteractions().get(var1) : null;
}
}
class="kw">return var5.getInteractions().get(var1);
}
void initEntry(@Nonnull InteractionChain var1, @Nonnull InteractionEntry var2, @Nullable Ref<EntityStore> var3) {
CommandBuffer var4 = this.getCommandBuffer();
assert var4 != null;
this.chain = var1;
this.entry = var2;
this.labels = null;
Player var5 = null;
if (var3 != null) {
var5 = var4.getComponent(var3, Player.getComponentType());
}
GameMode var6 = var5 != null ? var5.getGameMode() : GameMode.Adventure;
RootInteractionSettings var7 = var1.getRootInteraction().getSettings().get(var6);
var1.skipChainOnClick = var1.skipChainOnClick | (var7 != null && var7.allowSkipChainOnClick);
}
void deinitEntry(InteractionChain var1, InteractionEntry var2, Ref<EntityStore> var3) {
this.chain = null;
this.entry = null;
this.labels = null;
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "InteractionContext{heldItemSectionId="
+ this.heldItemSectionId
+ ", heldItemContainer="
+ this.heldItemContainer
+ ", heldItemSlot="
+ this.heldItemSlot
+ ", heldItem="
+ this.heldItem
+ ", originalItemType="
+ this.originalItemType
+ ", interactionVarsGetter="
+ this.interactionVarsGetter
+ ", labels="
+ Arrays.toString(this.labels)
+ ", snapshotProvider="
+ this.snapshotProvider
+ ", metaStore="
+ this.metaStore
+ "}";
}
@Nonnull
class="kw">public class="kw">static InteractionContext forProxyEntity(
@Nonnull InteractionManager var0, @Nonnull Ref<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull ComponentAccessor<EntityStore> var3
) {
InventoryComponent.Hotbar var4 = var3.getComponent(var1, InventoryComponent.Hotbar.getComponentType());
class="kw">return new InteractionContext(
var0, var1, var2, -1, var4 != null ? var4.getInventory() : null, var4 != null ? var4.getActiveSlot() : -1, var4 != null ? var4.getActiveItem() : null
);
}
@Nonnull
class="kw">public class="kw">static InteractionContext forInteraction(
@Nonnull InteractionManager var0, @Nonnull Ref<EntityStore> var1, @Nonnull InteractionType var2, @Nonnull ComponentAccessor<EntityStore> var3
) {
if (var2 == InteractionType.Equipped) {
throw new IllegalArgumentException("Equipped interaction type requires a slot set");
} else {
class="kw">return forInteraction(var0, var1, var2, 0, var3);
}
}
@Nonnull
class="kw">public class="kw">static InteractionContext forInteraction(
@Nonnull InteractionManager var0, @Nonnull Ref<EntityStore> var1, @Nonnull InteractionType var2, int var3, @Nonnull ComponentAccessor<EntityStore> var4
) {
InventoryComponent.Hotbar var5 = var4.getComponent(var1, InventoryComponent.Hotbar.getComponentType());
CarriedBlock var6 = var4.getComponent(var1, CarriedBlock.getComponentType());
if (var6 != null && var6.getCarriedItemId() != null) {
SimpleItemContainer var15 = var6.getItemContainer();
class="kw">return new InteractionContext(var0, var1, -10, var15, (byte)0, var15.getItemStack((short)0));
}
InventoryComponent.Utility var7 = var4.getComponent(var1, InventoryComponent.Utility.getComponentType());
InventoryComponent.Armor var8 = var4.getComponent(var1, InventoryComponent.Armor.getComponentType());
InventoryComponent.Tool var9 = var4.getComponent(var1, InventoryComponent.Tool.getComponentType());
class="kw">switch (var2) {
case Equipped:
class="kw">return new InteractionContext(
var0, var1, -3, var8 != null ? var8.getInventory() : null, (byte)var3, var8 != null ? var8.getInventory().getItemStack((short)var3) : null
);
case HeldOffhand:
class="kw">return new InteractionContext(
var0, var1, -5, var7 != null ? var7.getInventory() : null, var7 != null ? var7.getActiveSlot() : -1, var7 != null ? var7.getActiveItem() : null
);
case Ability1:
case Ability2:
case Ability3:
case Pick:
case Primary:
case Secondary:
if (var9 != null && var9.isUsingToolsItem()) {
class="kw">return new InteractionContext(var0, var1, -8, var9.getInventory(), var9.getActiveSlot(), var9.getActiveItem());
} else {
ItemStack var10 = var5 != null ? var5.getActiveItem() : null;
ItemStack var11 = var7 != null ? var7.getActiveItem() : null;
int var12 = -1;
if (var10 == null && var11 != null) {
var12 = -5;
} else if (var10 != null && var11 != null) {
int var13 = var10.getItem().getInteractionConfig().getPriorityFor(var2, PrioritySlot.MainHand);
int var14 = var11.getItem().getInteractionConfig().getPriorityFor(var2, PrioritySlot.OffHand);
if (var13 == var14) {
if (var2 == InteractionType.Secondary && var10.getItem().getUtility().isCompatible()) {
var12 = -5;
}
} else if (var13 < var14) {
var12 = -5;
} else {
if (var2 == InteractionType.Primary && !var10.getItem().getInteractions().containsKey(InteractionType.Primary)) {
var12 = -5;
}
if (var2 == InteractionType.Secondary && !var10.getItem().getInteractions().containsKey(InteractionType.Secondary)) {
var12 = -5;
}
}
}
class="kw">return var12 == -5
? new InteractionContext(
var0,
var1,
-5,
var7 != null ? var7.getInventory() : null,
var7 != null ? var7.getActiveSlot() : -1,
var7 != null ? var7.getActiveItem() : null
)
: new InteractionContext(
var0,
var1,
-1,
var5 != null ? var5.getInventory() : null,
var5 != null ? var5.getActiveSlot() : -1,
var5 != null ? var5.getActiveItem() : null
);
}
case Held:
class="kw">default:
class="kw">return new InteractionContext(
var0, var1, -1, var5 != null ? var5.getInventory() : null, var5 != null ? var5.getActiveSlot() : -1, var5 != null ? var5.getActiveItem() : null
);
}
}
@Nonnull
class="kw">public class="kw">static InteractionContext withoutEntity() {
class="kw">return new InteractionContext(null, null, -1, null, (byte)-1, null);
}
@Nullable
class="kw">private class="kw">static Map<String, String> defaultGetVars(@Nonnull InteractionContext var0) {
Item var1 = var0.originalItemType;
class="kw">return var1 != null ? var1.getInteractionVars() : null;
}
@Deprecated
@FunctionalInterface
class="kw">public class="kw">interface SnapshotProvider {
EntitySnapshot getSnapshot(CommandBuffer<EntityStore> var1, Ref<EntityStore> var2, int var3);
}
}