Skip to content

Commit 8246c15

Browse files
authored
Fix a bug that occurs when the slot is bigger then the size of the inventory (#803)
Signed-off-by: Webhead1104 <webhead1104@hotmail.com>
1 parent 5d03a59 commit 8246c15

File tree

10 files changed

+35
-23
lines changed

10 files changed

+35
-23
lines changed

inventory-framework-anvil-input/src/main/java/me/devnatan/inventoryframework/AnvilInputNMS.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class AnvilInputNMS {
4040
private static final MethodHandle SET_PLAYER_ACTIVE_CONTAINER;
4141
private static final MethodHandle ADD_CONTAINER_SLOT_LISTENER;
4242
private static final MethodHandle INIT_MENU;
43-
private static final MethodHandle GET_TOP_INVENTORY;
43+
private static final MethodHandle GET_TOP_INVENTORY;
4444

4545
// FIELDS
4646
private static final MethodHandle CONTAINER_CHECK_REACHABLE;
@@ -75,7 +75,8 @@ class AnvilInputNMS {
7575
CONTAINER, "a", MethodType.methodType(void.class, getNMSClass("world.inventory.ICrafting")));
7676
INIT_MENU = getMethod(ENTITY_PLAYER, "a", MethodType.methodType(void.class, CONTAINER));
7777

78-
GET_TOP_INVENTORY = getMethod(InventoryView.class, "getTopInventory", MethodType.methodType(Inventory.class));
78+
GET_TOP_INVENTORY =
79+
getMethod(InventoryView.class, "getTopInventory", MethodType.methodType(Inventory.class));
7980
} catch (Exception exception) {
8081
throw new RuntimeException(
8182
"Unsupported version for Anvil Input feature: " + ReflectionUtils.getVersionInformation(),
@@ -95,7 +96,8 @@ public static Inventory open(Player player, Object title, String initialInput) {
9596
final Object anvilContainer = ANVIL_CONSTRUCTOR.invoke(windowId, GET_PLAYER_INVENTORY.invoke(entityPlayer));
9697
CONTAINER_CHECK_REACHABLE.invoke(anvilContainer, false);
9798

98-
final AnvilInventory inventory = (AnvilInventory) GET_TOP_INVENTORY.invoke(InventoryUpdate.getBukkitView.invoke(anvilContainer));
99+
final AnvilInventory inventory =
100+
(AnvilInventory) GET_TOP_INVENTORY.invoke(InventoryUpdate.getBukkitView.invoke(anvilContainer));
99101

100102
inventory.setMaximumRepairCost(0);
101103

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@ public interface IFCloseContext extends IFConfinedContext {
3939
@NotNull
4040
ViewContainer getContainer();
4141

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();
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();
4848
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ 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, @NotNull Object origin);
79+
public abstract IFCloseContext createCloseContext(
80+
@NotNull Viewer viewer, @NotNull IFRenderContext parent, @NotNull Object origin);
8081

8182
/**
8283
* Creates a new platform builder instance.

inventory-framework-core/src/main/java/me/devnatan/inventoryframework/pipeline/AvailableSlotInterceptor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ List<ComponentFactory> resolveFromLayoutSlot(IFRenderContext context) {
119119

120120
private boolean isSlotNotAvailableForAutoFilling(IFRenderContext context, int slot) {
121121
if (!context.getContainer().getType().canPlayerInteractOn(slot)) return true;
122+
if (context.getContainer().getSize() >= slot) return false;
122123

123124
// fast path -- check for already rendered items
124125
if (context.getContainer().hasItem(slot)) return true;

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

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,23 @@ public class CloseContext extends PlatformConfinedContext implements IFCloseCont
2222
private final Viewer subject;
2323
private final Player player;
2424
private final IFRenderContext parent;
25-
private final InventoryCloseEvent closeOrigin;
25+
private final InventoryCloseEvent closeOrigin;
2626

2727
private boolean cancelled;
2828

2929
@ApiStatus.Internal
30-
public CloseContext(@NotNull Viewer subject, @NotNull IFRenderContext parent, @NotNull InventoryCloseEvent closeOrigin) {
30+
public CloseContext(
31+
@NotNull Viewer subject, @NotNull IFRenderContext parent, @NotNull InventoryCloseEvent closeOrigin) {
3132
this.subject = subject;
3233
this.player = ((BukkitViewer) subject).getPlayer();
3334
this.parent = parent;
34-
this.closeOrigin = closeOrigin;
35+
this.closeOrigin = closeOrigin;
3536
}
3637

37-
@Override
38-
public Object getPlatformEvent() {
39-
return closeOrigin;
40-
}
38+
@Override
39+
public Object getPlatformEvent() {
40+
return closeOrigin;
41+
}
4142

4243
// TODO Needs documentation
4344
public final @NotNull Player getPlayer() {

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,8 @@ public IFSlotRenderContext createSlotRenderContext(
120120
}
121121

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

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,8 @@ 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, event)
91+
val closeContext: IFCloseContext =
92+
root.elementFactory.createCloseContext(viewer, context, event)
9293

9394
root.pipeline.execute(StandardPipelinePhases.CLOSE, closeContext)
9495
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class CloseContext
2020
constructor(
2121
subject: Viewer,
2222
private val parent: IFRenderContext,
23-
val origin: InventoryCloseEvent
23+
val origin: InventoryCloseEvent,
2424
) : PlatformConfinedContext(),
2525
IFCloseContext,
2626
Context {

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,11 @@ class MinestomElementFactory : ElementFactory() {
166166
viewer: Viewer?,
167167
): IFSlotRenderContext = SlotRenderContext(slot, parent, viewer)
168168

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

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

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

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

9898
@Override
99-
public IFCloseContext createCloseContext(@NotNull Viewer viewer, @NotNull IFRenderContext parent, @NotNull Object origin) {
99+
public IFCloseContext createCloseContext(
100+
@NotNull Viewer viewer, @NotNull IFRenderContext parent, @NotNull Object origin) {
100101
IFCloseContext mock = mock(IFCloseContext.class);
101102
when(mock.getViewer()).thenReturn(viewer);
102103
when(mock.getParent()).thenReturn(parent);
103-
when(mock.getPlatformEvent()).thenReturn(origin);
104+
when(mock.getPlatformEvent()).thenReturn(origin);
104105
return mock;
105106
}
106107

0 commit comments

Comments
 (0)