From 30af263bc8f318db8ce35c2d9c3d8074b40d5499 Mon Sep 17 00:00:00 2001 From: Natan Date: Wed, 9 Apr 2025 13:00:21 -0300 Subject: [PATCH] feat: allow earlier state update --- .../me/devnatan/inventoryframework/AnvilInputFeature.java | 4 ++-- .../devnatan/inventoryframework/state/StateValueHost.java | 4 ++-- .../inventoryframework/component/PaginationImpl.java | 2 +- .../devnatan/inventoryframework/state/BaseMutableState.java | 2 +- .../inventoryframework/state/DefaultStateValueHost.java | 6 +++--- .../inventoryframework/state/MutableGenericStateImpl.java | 2 +- .../devnatan/inventoryframework/context/CloseContext.java | 4 ++-- .../me/devnatan/inventoryframework/context/SlotContext.java | 4 ++-- .../me/devnatan/inventoryframework/context/CloseContext.kt | 4 ++-- .../me/devnatan/inventoryframework/context/SlotContext.kt | 4 ++-- .../inventoryframework/pipeline/GlobalClickInterceptor.kt | 3 +-- 11 files changed, 19 insertions(+), 20 deletions(-) diff --git a/inventory-framework-anvil-input/src/main/java/me/devnatan/inventoryframework/AnvilInputFeature.java b/inventory-framework-anvil-input/src/main/java/me/devnatan/inventoryframework/AnvilInputFeature.java index 19bd692e8..14d7e7b0d 100644 --- a/inventory-framework-anvil-input/src/main/java/me/devnatan/inventoryframework/AnvilInputFeature.java +++ b/inventory-framework-anvil-input/src/main/java/me/devnatan/inventoryframework/AnvilInputFeature.java @@ -117,7 +117,7 @@ private void handleClick(PlatformView view) { final ItemStack ingredientItem = requireNonNull(clickedInventory.getItem(INGREDIENT_SLOT)); final ItemMeta ingredientMeta = requireNonNull(ingredientItem.getItemMeta()); ingredientMeta.setDisplayName(text); - context.updateState(anvilInput.internalId(), text); + context.updateState(anvilInput, text); ingredientItem.setItemMeta(ingredientMeta); if (config.closeOnSelect) { @@ -189,7 +189,7 @@ private void handleClose(PlatformView view) { if (item == null || item.getType() == Material.AIR) return; final String input = requireNonNull(item.getItemMeta()).getDisplayName(); - context.updateState(anvilInput.internalId(), input); + context.updateState(anvilInput, input); }); } } diff --git a/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/state/StateValueHost.java b/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/state/StateValueHost.java index 829afb1a8..63f35d797 100644 --- a/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/state/StateValueHost.java +++ b/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/state/StateValueHost.java @@ -61,11 +61,11 @@ public interface StateValueHost { *

This is an internal inventory-framework API that should not be used from outside of * this library. No compatibility guarantees are provided. * - * @param id The state id. + * @param state The target state to update. * @param value The new state value. */ @ApiStatus.Internal - void updateState(long id, Object value); + void updateState(State state, Object value); @ApiStatus.Internal void watchState(long id, StateWatcher listener); diff --git a/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/component/PaginationImpl.java b/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/component/PaginationImpl.java index 65145c540..20bb5cdea 100644 --- a/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/component/PaginationImpl.java +++ b/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/component/PaginationImpl.java @@ -438,7 +438,7 @@ public void updated(@NotNull IFSlotRenderContext context) { */ private void simulateStateUpdate() { debug("[Pagination] State update simulation triggered on %d", getState().internalId()); - host.updateState(getState().internalId(), this); + host.updateState(getState(), this); } @Override diff --git a/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/BaseMutableState.java b/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/BaseMutableState.java index 138cf9408..256b7af26 100644 --- a/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/BaseMutableState.java +++ b/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/BaseMutableState.java @@ -14,6 +14,6 @@ public BaseMutableState(long id, StateValueFactory valueFactory) { @Override public final void set(T value, @NotNull StateValueHost host) { - host.updateState(internalId(), value); + host.updateState(this, value); } } diff --git a/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/DefaultStateValueHost.java b/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/DefaultStateValueHost.java index 63a42039a..e050121d6 100644 --- a/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/DefaultStateValueHost.java +++ b/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/DefaultStateValueHost.java @@ -60,13 +60,13 @@ public void initializeState(long id, @NotNull StateValue value) { } @Override - public void updateState(long id, Object value) { - final StateValue stateValue = getUninitializedStateValue(id); + public void updateState(State state, Object value) { + final StateValue stateValue = getInternalStateValue(state); final Object oldValue = stateValue.get(); stateValue.set(value); final Object newValue = stateValue.get(); - IFDebug.debug("State %s updated (oldValue = %s, newValue = %s)", id, oldValue, newValue); + IFDebug.debug("State %s updated (oldValue = %s, newValue = %s)", state.internalId(), oldValue, newValue); callListeners(stateValue, listener -> listener.stateValueSet(this, stateValue, oldValue, newValue)); } diff --git a/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/MutableGenericStateImpl.java b/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/MutableGenericStateImpl.java index 86a93b5b9..59cf0a979 100644 --- a/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/MutableGenericStateImpl.java +++ b/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/MutableGenericStateImpl.java @@ -16,6 +16,6 @@ public MutableGenericStateImpl(long id, @NotNull StateValueFactory valueFactory) @Override public void set(T value, @NotNull StateValueHost host) { - host.updateState(internalId(), value); + host.updateState(this, value); } } diff --git a/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/context/CloseContext.java b/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/context/CloseContext.java index 82abcb5f2..ec8d1a354 100644 --- a/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/context/CloseContext.java +++ b/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/context/CloseContext.java @@ -132,8 +132,8 @@ public final StateValue getUninitializedStateValue(long stateId) { } @Override - public final void updateState(long id, Object value) { - getParent().updateState(id, value); + public final void updateState(State state, Object value) { + getParent().updateState(state, value); } @Override diff --git a/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/context/SlotContext.java b/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/context/SlotContext.java index a054ee899..fe0888379 100644 --- a/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/context/SlotContext.java +++ b/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/context/SlotContext.java @@ -128,8 +128,8 @@ public final void initializeState(long id, @NotNull StateValue value) { } @Override - public final void updateState(long id, Object value) { - getParent().updateState(id, value); + public final void updateState(State state, Object value) { + getParent().updateState(state, value); } @Override diff --git a/inventory-framework-platform-minestom/src/main/kotlin/me/devnatan/inventoryframework/context/CloseContext.kt b/inventory-framework-platform-minestom/src/main/kotlin/me/devnatan/inventoryframework/context/CloseContext.kt index 9bd36a459..fb4c1a8bf 100644 --- a/inventory-framework-platform-minestom/src/main/kotlin/me/devnatan/inventoryframework/context/CloseContext.kt +++ b/inventory-framework-platform-minestom/src/main/kotlin/me/devnatan/inventoryframework/context/CloseContext.kt @@ -88,10 +88,10 @@ class CloseContext override fun getUninitializedStateValue(stateId: Long): StateValue = getParent().getUninitializedStateValue(stateId) override fun updateState( - id: Long, + state: State<*>, value: Any, ) { - getParent().updateState(id, value) + getParent().updateState(state, value) } override fun toString(): String = diff --git a/inventory-framework-platform-minestom/src/main/kotlin/me/devnatan/inventoryframework/context/SlotContext.kt b/inventory-framework-platform-minestom/src/main/kotlin/me/devnatan/inventoryframework/context/SlotContext.kt index 57de2b87e..8f20d470d 100644 --- a/inventory-framework-platform-minestom/src/main/kotlin/me/devnatan/inventoryframework/context/SlotContext.kt +++ b/inventory-framework-platform-minestom/src/main/kotlin/me/devnatan/inventoryframework/context/SlotContext.kt @@ -98,10 +98,10 @@ abstract class SlotContext } override fun updateState( - id: Long, + state: State<*>, value: Any, ) { - getParent().updateState(id, value) + getParent().updateState(state, value) } override fun watchState( diff --git a/inventory-framework-platform-minestom/src/main/kotlin/me/devnatan/inventoryframework/pipeline/GlobalClickInterceptor.kt b/inventory-framework-platform-minestom/src/main/kotlin/me/devnatan/inventoryframework/pipeline/GlobalClickInterceptor.kt index c06c2b327..9d5f6bed5 100644 --- a/inventory-framework-platform-minestom/src/main/kotlin/me/devnatan/inventoryframework/pipeline/GlobalClickInterceptor.kt +++ b/inventory-framework-platform-minestom/src/main/kotlin/me/devnatan/inventoryframework/pipeline/GlobalClickInterceptor.kt @@ -20,8 +20,7 @@ class GlobalClickInterceptor : PipelineInterceptor { // inherit cancellation so we can un-cancel it subject.isCancelled = - event.isCancelled || - subject.config.isOptionSet(ViewConfig.CANCEL_ON_CLICK, true) + event.isCancelled || subject.config.isOptionSet(ViewConfig.CANCEL_ON_CLICK, true) subject.root.onClick(subject) } }