Skip to content

Commit 6ce3252

Browse files
authored
feat: mark Bukkit render context as InventoryHolder (#729)
1 parent e8dce26 commit 6ce3252

File tree

5 files changed

+26
-13
lines changed

5 files changed

+26
-13
lines changed

inventory-framework-api/src/main/java/me/devnatan/inventoryframework/internal/ElementFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public abstract IFRenderContext createRenderContext(
5454
@NotNull UUID id,
5555
@NotNull RootView root,
5656
@NotNull ViewConfig config,
57-
@NotNull ViewContainer container,
57+
ViewContainer container,
5858
@NotNull Map<String, Viewer> viewers,
5959
Viewer subject,
6060
Object initialData);

inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/context/RenderContext.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,15 @@
1313
import me.devnatan.inventoryframework.Viewer;
1414
import me.devnatan.inventoryframework.component.BukkitItemComponentBuilder;
1515
import org.bukkit.entity.Player;
16+
import org.bukkit.inventory.Inventory;
17+
import org.bukkit.inventory.InventoryHolder;
1618
import org.bukkit.inventory.ItemStack;
1719
import org.jetbrains.annotations.ApiStatus;
1820
import org.jetbrains.annotations.NotNull;
1921
import org.jetbrains.annotations.Nullable;
2022

21-
public final class RenderContext extends PlatformRenderContext<BukkitItemComponentBuilder, Context> implements Context {
23+
public final class RenderContext extends PlatformRenderContext<BukkitItemComponentBuilder, Context>
24+
implements Context, InventoryHolder {
2225

2326
private final Player player;
2427

@@ -31,7 +34,7 @@ public RenderContext(
3134
@NotNull UUID id,
3235
@NotNull View root,
3336
@NotNull ViewConfig config,
34-
@NotNull ViewContainer container,
37+
ViewContainer container,
3538
@NotNull Map<String, Viewer> viewers,
3639
Viewer subject,
3740
Object initialData) {
@@ -163,4 +166,9 @@ public int hashCode() {
163166
public String toString() {
164167
return "RenderContext{" + "player=" + player + "} " + super.toString();
165168
}
169+
170+
@Override
171+
public @NotNull Inventory getInventory() {
172+
return ((BukkitViewContainer) getContainerOrThrow()).getInventory();
173+
}
166174
}

inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/internal/BukkitElementFactory.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ public class BukkitElementFactory extends ElementFactory {
3131
return new View();
3232
}
3333

34-
// TODO Test it
3534
@Override
3635
public @NotNull ViewContainer createContainer(@NotNull IFContext context) {
3736
final ViewConfig config = context.getConfig();
@@ -49,8 +48,7 @@ public class BukkitElementFactory extends ElementFactory {
4948
finalType.getMaxSize(),
5049
context.getRoot().getClass().getName()));
5150

52-
final InventoryHolder holder =
53-
context.getRoot() instanceof InventoryHolder ? (InventoryHolder) context.getRoot() : null;
51+
final InventoryHolder holder = context instanceof InventoryHolder ? (InventoryHolder) context : null;
5452
final Inventory inventory =
5553
InventoryFactory.current().createInventory(holder, finalType, size, config.getTitle());
5654

@@ -80,7 +78,7 @@ public IFRenderContext createRenderContext(
8078
@NotNull UUID id,
8179
@NotNull RootView root,
8280
@NotNull ViewConfig config,
83-
@NotNull ViewContainer container,
81+
ViewContainer container,
8482
@NotNull Map<String, Viewer> viewers,
8583
Viewer subject,
8684
Object initialData) {

inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/context/PlatformRenderContext.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public abstract class PlatformRenderContext<T extends ItemComponentBuilder<T, C>
3737
private final Viewer subject;
3838

3939
// --- Inherited ---
40-
private final ViewContainer container;
40+
private ViewContainer container;
4141
private boolean rendered;
4242

4343
// --- Properties ---
@@ -49,7 +49,7 @@ public abstract class PlatformRenderContext<T extends ItemComponentBuilder<T, C>
4949
@NotNull UUID id,
5050
@NotNull PlatformView root,
5151
@NotNull ViewConfig config,
52-
@NotNull ViewContainer container,
52+
ViewContainer container,
5353
@NotNull Map<String, Viewer> viewers,
5454
Viewer subject,
5555
Object initialData) {
@@ -233,6 +233,11 @@ public final void layoutSlot(char character, @NotNull BiConsumer<Integer, T> fac
233233
return container;
234234
}
235235

236+
@ApiStatus.Internal
237+
public void setContainer(ViewContainer container) {
238+
this.container = container;
239+
}
240+
236241
@Override
237242
public final @NotNull ViewConfig getConfig() {
238243
return config;

inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/pipeline/PlatformOpenInterceptor.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import me.devnatan.inventoryframework.*;
55
import me.devnatan.inventoryframework.context.IFOpenContext;
66
import me.devnatan.inventoryframework.context.IFRenderContext;
7+
import me.devnatan.inventoryframework.context.PlatformRenderContext;
78
import me.devnatan.inventoryframework.exception.InvalidLayoutException;
89
import me.devnatan.inventoryframework.internal.ElementFactory;
910
import org.jetbrains.annotations.NotNull;
@@ -70,18 +71,19 @@ IFRenderContext createRenderContext(IFOpenContext openContext) {
7071

7172
final ElementFactory elementFactory = root.getElementFactory();
7273

73-
ViewContainer createdContainer = openContext.getContainer();
74-
if (createdContainer == null) createdContainer = elementFactory.createContainer(openContext);
75-
7674
final IFRenderContext renderContext = elementFactory.createRenderContext(
7775
openContext.getId(),
7876
root,
7977
openContext.getConfig(),
80-
createdContainer,
78+
null,
8179
new HashMap<>(),
8280
openContext.isShared() ? null : openContext.getViewer(),
8381
openContext.getInitialData());
8482

83+
ViewContainer createdContainer = openContext.getContainer();
84+
if (createdContainer == null) createdContainer = elementFactory.createContainer(renderContext);
85+
86+
((PlatformRenderContext) renderContext).setContainer(createdContainer);
8587
renderContext.setEndless(openContext.isEndless());
8688
openContext.getStateValues().forEach(renderContext::initializeState);
8789

0 commit comments

Comments
 (0)