From 4cc2a4168709e57cf4362b078458bacb7de4cb73 Mon Sep 17 00:00:00 2001 From: "natan.nascimento" Date: Mon, 11 Sep 2023 21:19:01 -0300 Subject: [PATCH] Move some methods to IFContext --- .../inventoryframework/context/IFContext.java | 44 +++++++++++++++++++ .../inventoryframework/context/Context.java | 7 +-- .../context/SlotRenderContext.java | 10 +++++ .../inventoryframework/PlatformView.java | 4 +- .../context/PlatformContext.java | 4 +- .../pipeline/PlatformCloseInterceptor.java | 8 ++-- 6 files changed, 66 insertions(+), 11 deletions(-) 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 190c7a5c..cad4025c 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 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 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 a89115d4..15c815e5 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 52fe25ee..45dfc3ae 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 6f7cad0b..8eee2dc9 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 34a67e1a..e2737ccc 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 other) { + public final void openForEveryone(@NotNull Class other) { openForEveryone(other, null); } @@ -102,7 +102,7 @@ public final void openForEveryone(Class other) { * @param initialData The initial data. */ @SuppressWarnings("unchecked") - public final void openForEveryone(Class other, Object initialData) { + public final void openForEveryone(@NotNull Class 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 5170b627..07754114 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 pipeline, VirtualVie if (!(subject instanceof IFCloseContext)) return; final IFCloseContext context = (IFCloseContext) subject; - final PlatformRenderContext parent = (PlatformRenderContext) context.getParent(); - final PlatformView root = parent.getRoot(); + final IFRenderContext parent = context.getParent(); + final RootView root = parent.getRoot(); tryCallPlatformRootCloseHandler(root, context); if (context.isCancelled()) { @@ -25,7 +25,7 @@ public void intercept(@NotNull PipelineContext pipeline, VirtualVie return; } - root.removeAndTryInvalidateContext(context.getViewer(), context); + ((PlatformView) root).removeAndTryInvalidateContext(context.getViewer(), context); } /**