diff --git a/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/context/IFContext.java b/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/context/IFContext.java index 190c7a5ce..cad4025c3 100644 --- a/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/context/IFContext.java +++ b/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/context/IFContext.java @@ -181,4 +181,48 @@ public interface IFContext extends VirtualView, StateValueHost { */ @ApiStatus.Experimental boolean isShared(); + + /** + * Updates the container title for everyone that's viewing it. + * + *
This should not be used before the container is opened, if you need to set the __initial + * title__ use {@link IFOpenContext#modifyConfig()} on open handler instead. + * + *
This method is version dependant, so it may be that your server version is not yet + * supported, if you try to use this method and fail (can fail silently), report it to the + * library developers to add support to your version. + * + * @param title The new container title. + */ + void updateTitleForEveryone(@NotNull String title); + + /** + * Updates the container title to all viewers in this context, to the initially defined title. + * Must be used after {@link #updateTitleForEveryone(String)} to take effect. + */ + void resetTitleForEveryone(); + + /** + * Closes this context's container to all viewers who are viewing it. + */ + void closeForEveryone(); + + /** + * Opens a new view for all viewers in that context. + *
+ * This context will be immediately invalidated if there are no viewers left after opening. + * + * @param other The view to be opened. + */ + void openForEveryone(@NotNull Class extends RootView> other); + + /** + * Opens a new view for all viewers in that context with an initially defined data. + *
+ * This context will be immediately invalidated if there are no viewers left after opening. + * + * @param other The view to be opened. + * @param initialData The initial data. + */ + void openForEveryone(@NotNull Class extends RootView> other, Object initialData); } diff --git a/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/context/Context.java b/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/context/Context.java index a89115d4b..15c815e59 100644 --- a/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/context/Context.java +++ b/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/context/Context.java @@ -4,8 +4,9 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.UnknownNullability; -public interface Context extends IFContext { +public interface Context extends IFConfinedContext { /** * The player for the current interaction context. @@ -15,8 +16,8 @@ public interface Context extends IFContext { * * @return A player in this interaction context. */ - // @UnknownNullability - // Player getPlayer(); + @UnknownNullability + Player getPlayer(); /** *
This API is experimental and is not subject to the general compatibility guarantees diff --git a/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/context/SlotRenderContext.java b/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/context/SlotRenderContext.java index 52fe25eee..45dfc3aeb 100644 --- a/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/context/SlotRenderContext.java +++ b/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/context/SlotRenderContext.java @@ -1,14 +1,18 @@ package me.devnatan.inventoryframework.context; +import me.devnatan.inventoryframework.BukkitViewer; import me.devnatan.inventoryframework.RootView; import me.devnatan.inventoryframework.Viewer; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.UnknownNullability; public class SlotRenderContext extends SlotContext implements IFSlotRenderContext { + private final Player player; private final Viewer viewer; private ItemStack item; @@ -19,6 +23,12 @@ public class SlotRenderContext extends SlotContext implements IFSlotRenderContex public SlotRenderContext(int slot, @NotNull IFRenderContext parent, @Nullable Viewer viewer) { super(slot, parent); this.viewer = viewer; + this.player = viewer == null ? null : ((BukkitViewer) viewer).getPlayer(); + } + + @Override + public final @UnknownNullability Player getPlayer() { + return player; } @Override diff --git a/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/PlatformView.java b/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/PlatformView.java index 6f7cad0b3..8eee2dc96 100644 --- a/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/PlatformView.java +++ b/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/PlatformView.java @@ -758,7 +758,7 @@ public void onOpen(@NotNull TOpenContext open) {} * This function should only be used to render items, any external call is completely forbidden * as the function runs on the main thread. * - * @param render The renderization context. + * @param render The rendering context. */ @ApiStatus.OverrideOnly public void onFirstRender(@NotNull TRenderContext render) {} @@ -768,7 +768,7 @@ public void onFirstRender(@NotNull TRenderContext render) {} * *
This is a rendering function and can modify the view's inventory.
*
- * @param update The player view context.
+ * @param update The update context.
*/
@ApiStatus.OverrideOnly
public void onUpdate(@NotNull TContext update) {}
diff --git a/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/context/PlatformContext.java b/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/context/PlatformContext.java
index 34a67e1a4..e2737cccd 100644
--- a/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/context/PlatformContext.java
+++ b/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/context/PlatformContext.java
@@ -89,7 +89,7 @@ public final void closeForEveryone() {
*
* @param other The view to be opened.
*/
- public final void openForEveryone(Class extends RootView> other) {
+ public final void openForEveryone(@NotNull Class extends RootView> other) {
openForEveryone(other, null);
}
@@ -102,7 +102,7 @@ public final void openForEveryone(Class extends RootView> other) {
* @param initialData The initial data.
*/
@SuppressWarnings("unchecked")
- public final void openForEveryone(Class extends RootView> other, Object initialData) {
+ public final void openForEveryone(@NotNull Class extends RootView> other, Object initialData) {
getRoot().navigateTo(other, this, initialData);
}
}
diff --git a/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/pipeline/PlatformCloseInterceptor.java b/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/pipeline/PlatformCloseInterceptor.java
index 5170b627d..077541149 100644
--- a/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/pipeline/PlatformCloseInterceptor.java
+++ b/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/pipeline/PlatformCloseInterceptor.java
@@ -4,7 +4,7 @@
import me.devnatan.inventoryframework.RootView;
import me.devnatan.inventoryframework.VirtualView;
import me.devnatan.inventoryframework.context.IFCloseContext;
-import me.devnatan.inventoryframework.context.PlatformRenderContext;
+import me.devnatan.inventoryframework.context.IFRenderContext;
import org.jetbrains.annotations.NotNull;
@SuppressWarnings("unchecked")
@@ -16,8 +16,8 @@ public void intercept(@NotNull PipelineContext