Skip to content

Commit f96ce28

Browse files
authored
Add platform inventory close event to IFCloseContext (#794)
1 parent 8400155 commit f96ce28

File tree

9 files changed

+30
-11
lines changed

9 files changed

+30
-11
lines changed

inventory-framework-api/src/main/java/me/devnatan/inventoryframework/context/IFCloseContext.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,11 @@ public interface IFCloseContext extends IFConfinedContext {
3838
*/
3939
@NotNull
4040
ViewContainer getContainer();
41+
42+
/**
43+
* <b><i> This is an internal inventory-framework API that should not be used from outside of
44+
* this library. No compatibility guarantees are provided. </i></b>
45+
*/
46+
@ApiStatus.Internal
47+
Object getPlatformEvent();
4148
}

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
@@ -76,7 +76,7 @@ public abstract IFSlotRenderContext createSlotRenderContext(
7676
* @param viewer The viewer that is currently the subject of the event of close.
7777
* @return A new close context instance.
7878
*/
79-
public abstract IFCloseContext createCloseContext(@NotNull Viewer viewer, @NotNull IFRenderContext parent);
79+
public abstract IFCloseContext createCloseContext(@NotNull Viewer viewer, @NotNull IFRenderContext parent, @NotNull Object origin);
8080

8181
/**
8282
* Creates a new platform builder instance.

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public void onInventoryClose(final InventoryCloseEvent event) {
7474

7575
final IFRenderContext context = viewer.getCurrentContext();
7676
final RootView root = context.getRoot();
77-
final IFCloseContext closeContext = root.getElementFactory().createCloseContext(viewer, context);
77+
final IFCloseContext closeContext = root.getElementFactory().createCloseContext(viewer, context, event);
7878

7979
root.getPipeline().execute(StandardPipelinePhases.CLOSE, closeContext);
8080
}

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import me.devnatan.inventoryframework.state.StateValue;
1313
import me.devnatan.inventoryframework.state.StateWatcher;
1414
import org.bukkit.entity.Player;
15+
import org.bukkit.event.inventory.InventoryCloseEvent;
1516
import org.jetbrains.annotations.ApiStatus;
1617
import org.jetbrains.annotations.NotNull;
1718
import org.jetbrains.annotations.UnmodifiableView;
@@ -21,16 +22,23 @@ public class CloseContext extends PlatformConfinedContext implements IFCloseCont
2122
private final Viewer subject;
2223
private final Player player;
2324
private final IFRenderContext parent;
25+
private final InventoryCloseEvent closeOrigin;
2426

2527
private boolean cancelled;
2628

2729
@ApiStatus.Internal
28-
public CloseContext(@NotNull Viewer subject, @NotNull IFRenderContext parent) {
30+
public CloseContext(@NotNull Viewer subject, @NotNull IFRenderContext parent, @NotNull InventoryCloseEvent closeOrigin) {
2931
this.subject = subject;
3032
this.player = ((BukkitViewer) subject).getPlayer();
3133
this.parent = parent;
34+
this.closeOrigin = closeOrigin;
3235
}
3336

37+
@Override
38+
public Object getPlatformEvent() {
39+
return closeOrigin;
40+
}
41+
3442
// TODO Needs documentation
3543
public final @NotNull Player getPlayer() {
3644
return player;

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import me.devnatan.inventoryframework.logging.NoopLogger;
1818
import org.bukkit.entity.Player;
1919
import org.bukkit.event.inventory.InventoryClickEvent;
20+
import org.bukkit.event.inventory.InventoryCloseEvent;
2021
import org.bukkit.inventory.Inventory;
2122
import org.bukkit.inventory.InventoryHolder;
2223
import org.bukkit.plugin.Plugin;
@@ -119,8 +120,8 @@ public IFSlotRenderContext createSlotRenderContext(
119120
}
120121

121122
@Override
122-
public IFCloseContext createCloseContext(@NotNull Viewer viewer, @NotNull IFRenderContext parent) {
123-
return new CloseContext(viewer, parent);
123+
public IFCloseContext createCloseContext(@NotNull Viewer viewer, @NotNull IFRenderContext parent, @NotNull Object closeOrigin) {
124+
return new CloseContext(viewer, parent, (InventoryCloseEvent) closeOrigin);
124125
}
125126

126127
@Override

inventory-framework-platform-minestom/src/main/kotlin/me/devnatan/inventoryframework/IFInventoryListener.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ internal class IFInventoryListener(
8888

8989
val context: IFRenderContext = viewer.activeContext
9090
val root: RootView = context.getRoot()
91-
val closeContext: IFCloseContext = root.elementFactory.createCloseContext(viewer, context)
91+
val closeContext: IFCloseContext = root.elementFactory.createCloseContext(viewer, context, event)
9292

9393
root.pipeline.execute(StandardPipelinePhases.CLOSE, closeContext)
9494
}

inventory-framework-platform-minestom/src/main/kotlin/me/devnatan/inventoryframework/context/CloseContext.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import me.devnatan.inventoryframework.state.StateValue
1010
import me.devnatan.inventoryframework.state.StateWatcher
1111
import net.kyori.adventure.text.Component
1212
import net.minestom.server.entity.Player
13+
import net.minestom.server.event.inventory.InventoryCloseEvent
1314
import org.jetbrains.annotations.ApiStatus
1415
import org.jetbrains.annotations.UnmodifiableView
1516
import java.util.UUID
@@ -19,6 +20,7 @@ class CloseContext
1920
constructor(
2021
subject: Viewer,
2122
private val parent: IFRenderContext,
23+
val origin: InventoryCloseEvent
2224
) : PlatformConfinedContext(),
2325
IFCloseContext,
2426
Context {
@@ -27,6 +29,8 @@ class CloseContext
2729

2830
private var cancelled = false
2931

32+
override fun getPlatformEvent(): Any = origin
33+
3034
override val allPlayers: List<Player>
3135
get() = getParent().allPlayers
3236

inventory-framework-platform-minestom/src/main/kotlin/me/devnatan/inventoryframework/internal/MinestomElementFactory.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import me.devnatan.inventoryframework.logging.Logger
2828
import me.devnatan.inventoryframework.logging.NoopLogger
2929
import net.kyori.adventure.text.Component.text
3030
import net.minestom.server.entity.Player
31+
import net.minestom.server.event.inventory.InventoryCloseEvent
3132
import net.minestom.server.event.inventory.InventoryPreClickEvent
3233
import net.minestom.server.inventory.Inventory
3334
import net.minestom.server.inventory.InventoryType
@@ -165,10 +166,7 @@ class MinestomElementFactory : ElementFactory() {
165166
viewer: Viewer?,
166167
): IFSlotRenderContext = SlotRenderContext(slot, parent, viewer)
167168

168-
override fun createCloseContext(
169-
viewer: Viewer,
170-
parent: IFRenderContext,
171-
): IFCloseContext = CloseContext(viewer, parent)
169+
override fun createCloseContext(viewer: Viewer, parent: IFRenderContext, origin: Any): IFCloseContext = CloseContext(viewer, parent,origin as InventoryCloseEvent)
172170

173171
override fun createComponentBuilder(root: VirtualView): ComponentBuilder<*, Context> = MinestomItemComponentBuilder(root)
174172

inventory-framework-test/src/main/java/me/devnatan/inventoryframework/internal/MockElementFactory.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,11 @@ public IFSlotRenderContext createSlotRenderContext(
9696
}
9797

9898
@Override
99-
public IFCloseContext createCloseContext(@NotNull Viewer viewer, @NotNull IFRenderContext parent) {
99+
public IFCloseContext createCloseContext(@NotNull Viewer viewer, @NotNull IFRenderContext parent, @NotNull Object origin) {
100100
IFCloseContext mock = mock(IFCloseContext.class);
101101
when(mock.getViewer()).thenReturn(viewer);
102102
when(mock.getParent()).thenReturn(parent);
103+
when(mock.getPlatformEvent()).thenReturn(origin);
103104
return mock;
104105
}
105106

0 commit comments

Comments
 (0)