diff --git a/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/component/ComponentBuilder.java b/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/component/ComponentBuilder.java
index f884c8ee..ba0e3b7e 100644
--- a/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/component/ComponentBuilder.java
+++ b/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/component/ComponentBuilder.java
@@ -83,9 +83,32 @@ public interface ComponentBuilder, C extends IF
*
* @param states The state to watch.
* @return This component builder.
+ * @deprecated Use {@link #updateOnStateChange(State)} instead.
*/
+ @Deprecated
+ @ApiStatus.ScheduledForRemoval(inVersion = "3.2.0")
S watch(State>... states);
+ /**
+ * Listens for value updates in the specified state.
+ *
+ * Everytime the value of the given state updates, this component will be updated as well. + * + * @param state The state to listen changes to. + * @return This component builder. + */ + S updateOnStateChange(@NotNull State> state); + + /** + * Listens for value updates in any of the specified states. + *
+ * Everytime the value ANY of the given state updates, this component will be updated as well. + * + * @param states The state to listen changes to. + * @return This component builder. + */ + S updateOnStateChange(State>... states); + /** * Returns a copy of this component builder. * diff --git a/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/component/DefaultComponentBuilder.java b/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/component/DefaultComponentBuilder.java index 5da7dcf5..69860b37 100644 --- a/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/component/DefaultComponentBuilder.java +++ b/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/component/DefaultComponentBuilder.java @@ -79,6 +79,20 @@ public S watch(State>... states) { return (S) this; } + @Override + public S updateOnStateChange(@NotNull State> state) { + if (watchingStates == null) watchingStates = new LinkedHashSet<>(); + watchingStates.add(state); + return (S) this; + } + + @Override + public S updateOnStateChange(State>... states) { + if (watchingStates == null) watchingStates = new LinkedHashSet<>(); + watchingStates.addAll(Arrays.asList(states)); + return (S) this; + } + @Override public S withExternallyManaged(boolean isExternallyManaged) { isManagedExternally = isExternallyManaged;