diff --git a/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/internal/ElementFactory.java b/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/internal/ElementFactory.java index 11da99a66..6bde3f53e 100644 --- a/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/internal/ElementFactory.java +++ b/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/internal/ElementFactory.java @@ -54,7 +54,7 @@ public abstract IFRenderContext createRenderContext( @NotNull UUID id, @NotNull RootView root, @NotNull ViewConfig config, - @NotNull ViewContainer container, + ViewContainer container, @NotNull Map viewers, Viewer subject, Object initialData); diff --git a/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/context/RenderContext.java b/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/context/RenderContext.java index fb1e44abc..b89eae09c 100644 --- a/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/context/RenderContext.java +++ b/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/context/RenderContext.java @@ -13,12 +13,15 @@ import me.devnatan.inventoryframework.Viewer; import me.devnatan.inventoryframework.component.BukkitItemComponentBuilder; import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public final class RenderContext extends PlatformRenderContext implements Context { +public final class RenderContext extends PlatformRenderContext + implements Context, InventoryHolder { private final Player player; @@ -31,7 +34,7 @@ public RenderContext( @NotNull UUID id, @NotNull View root, @NotNull ViewConfig config, - @NotNull ViewContainer container, + ViewContainer container, @NotNull Map viewers, Viewer subject, Object initialData) { @@ -163,4 +166,9 @@ public int hashCode() { public String toString() { return "RenderContext{" + "player=" + player + "} " + super.toString(); } + + @Override + public @NotNull Inventory getInventory() { + return ((BukkitViewContainer) getContainerOrThrow()).getInventory(); + } } diff --git a/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/internal/BukkitElementFactory.java b/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/internal/BukkitElementFactory.java index 8062e57ac..59e101a72 100644 --- a/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/internal/BukkitElementFactory.java +++ b/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/internal/BukkitElementFactory.java @@ -31,7 +31,6 @@ public class BukkitElementFactory extends ElementFactory { return new View(); } - // TODO Test it @Override public @NotNull ViewContainer createContainer(@NotNull IFContext context) { final ViewConfig config = context.getConfig(); @@ -49,8 +48,7 @@ public class BukkitElementFactory extends ElementFactory { finalType.getMaxSize(), context.getRoot().getClass().getName())); - final InventoryHolder holder = - context.getRoot() instanceof InventoryHolder ? (InventoryHolder) context.getRoot() : null; + final InventoryHolder holder = context instanceof InventoryHolder ? (InventoryHolder) context : null; final Inventory inventory = InventoryFactory.current().createInventory(holder, finalType, size, config.getTitle()); @@ -80,7 +78,7 @@ public IFRenderContext createRenderContext( @NotNull UUID id, @NotNull RootView root, @NotNull ViewConfig config, - @NotNull ViewContainer container, + ViewContainer container, @NotNull Map viewers, Viewer subject, Object initialData) { diff --git a/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/context/PlatformRenderContext.java b/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/context/PlatformRenderContext.java index e65294f19..3a26742ad 100644 --- a/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/context/PlatformRenderContext.java +++ b/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/context/PlatformRenderContext.java @@ -37,7 +37,7 @@ public abstract class PlatformRenderContext private final Viewer subject; // --- Inherited --- - private final ViewContainer container; + private ViewContainer container; private boolean rendered; // --- Properties --- @@ -49,7 +49,7 @@ public abstract class PlatformRenderContext @NotNull UUID id, @NotNull PlatformView root, @NotNull ViewConfig config, - @NotNull ViewContainer container, + ViewContainer container, @NotNull Map viewers, Viewer subject, Object initialData) { @@ -233,6 +233,11 @@ public final void layoutSlot(char character, @NotNull BiConsumer fac return container; } + @ApiStatus.Internal + public void setContainer(ViewContainer container) { + this.container = container; + } + @Override public final @NotNull ViewConfig getConfig() { return config; diff --git a/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/pipeline/PlatformOpenInterceptor.java b/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/pipeline/PlatformOpenInterceptor.java index 07bc0e60f..04cf834d5 100644 --- a/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/pipeline/PlatformOpenInterceptor.java +++ b/inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/pipeline/PlatformOpenInterceptor.java @@ -4,6 +4,7 @@ import me.devnatan.inventoryframework.*; import me.devnatan.inventoryframework.context.IFOpenContext; import me.devnatan.inventoryframework.context.IFRenderContext; +import me.devnatan.inventoryframework.context.PlatformRenderContext; import me.devnatan.inventoryframework.exception.InvalidLayoutException; import me.devnatan.inventoryframework.internal.ElementFactory; import org.jetbrains.annotations.NotNull; @@ -70,18 +71,19 @@ IFRenderContext createRenderContext(IFOpenContext openContext) { final ElementFactory elementFactory = root.getElementFactory(); - ViewContainer createdContainer = openContext.getContainer(); - if (createdContainer == null) createdContainer = elementFactory.createContainer(openContext); - final IFRenderContext renderContext = elementFactory.createRenderContext( openContext.getId(), root, openContext.getConfig(), - createdContainer, + null, new HashMap<>(), openContext.isShared() ? null : openContext.getViewer(), openContext.getInitialData()); + ViewContainer createdContainer = openContext.getContainer(); + if (createdContainer == null) createdContainer = elementFactory.createContainer(renderContext); + + ((PlatformRenderContext) renderContext).setContainer(createdContainer); renderContext.setEndless(openContext.isEndless()); openContext.getStateValues().forEach(renderContext::initializeState);