Skip to content

Conversation

@Baktus79
Copy link

• Updated dependencies.

• Updated dependencies.
IllegalArgumentException: Invalid slot index 9 for Crafter.
@Baktus79
Copy link
Author

Latest commit fixes the error;

java.lang.IllegalArgumentException: Invalid slot index 9 for Crafter
        at com.google.common.base.Preconditions.checkArgument(Preconditions.java:191) ~[guava-33.3.1-jre.jar:?]
        at org.bukkit.craftbukkit.block.CraftCrafter.isSlotDisabled(CraftCrafter.java:57) ~[paper-1.21.8.jar:1.21.8-42-b0da38c]
        at JEXT-Reborn.jar/me.spartacus04.jext.listeners.DiscUpdateEvent.updateInventory(DiscUpdateEvent.kt:39) ~[JEXT-Reborn.jar:?]
        at JEXT-Reborn.jar/me.spartacus04.jext.listeners.DiscUpdateEvent.inventoryOpenEvent(DiscUpdateEvent.kt:24) ~[JEXT-Reborn.jar:?]
        at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[paper-api-1.21.8-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:71) ~[paper-api-1.21.8-R0.1-SNAPSHOT.jar:?]
        at io.papermc.paper.plugin.manager.PaperEventManager.callEvent(PaperEventManager.java:54) ~[paper-1.21.8.jar:1.21.8-42-b0da38c]
        at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.callEvent(PaperPluginManagerImpl.java:131) ~[paper-1.21.8.jar:1.21.8-42-b0da38c]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:628) ~[paper-api-1.21.8-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.craftbukkit.event.CraftEventFactory.callInventoryOpenEventWithTitle(CraftEventFactory.java:1292) ~[paper-1.21.8.jar:1.21.8-42-b0da38c]
        at net.minecraft.server.level.ServerPlayer.openMenu(ServerPlayer.java:1718) ~[paper-1.21.8.jar:1.21.8-42-b0da38c]
        at net.minecraft.world.level.block.CrafterBlock.useWithoutItem(CrafterBlock.java:140) ~[paper-1.21.8.jar:1.21.8-42-b0da38c]
        at net.minecraft.world.level.block.state.BlockBehaviour$BlockStateBase.useWithoutItem(BlockBehaviour.java:904) ~[paper-1.21.8.jar:1.21.8-42-b0da38c]
        at net.minecraft.server.level.ServerPlayerGameMode.useItemOn(ServerPlayerGameMode.java:514) ~[paper-1.21.8.jar:1.21.8-42-b0da38c]
        at net.minecraft.server.network.ServerGamePacketListenerImpl.handleUseItemOn(ServerGamePacketListenerImpl.java:2048) ~[paper-1.21.8.jar:1.21.8-42-b0da38c]
        at net.minecraft.network.protocol.game.ServerboundUseItemOnPacket.handle(ServerboundUseItemOnPacket.java:45) ~[paper-1.21.8.jar:1.21.8-42-b0da38c]
        at net.minecraft.network.protocol.game.ServerboundUseItemOnPacket.handle(ServerboundUseItemOnPacket.java:10) ~[paper-1.21.8.jar:1.21.8-42-b0da38c]
        at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$0(PacketUtils.java:29) ~[paper-1.21.8.jar:1.21.8-42-b0da38c]
        at net.minecraft.server.TickTask.run(TickTask.java:18) ~[paper-1.21.8.jar:1.21.8-42-b0da38c]
        at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:155) ~[paper-1.21.8.jar:1.21.8-42-b0da38c]
        at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:24) ~[paper-1.21.8.jar:1.21.8-42-b0da38c]
        at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1449) ~[paper-1.21.8.jar:1.21.8-42-b0da38c]
        at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:176) ~[paper-1.21.8.jar:1.21.8-42-b0da38c]
        at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:129) ~[paper-1.21.8.jar:1.21.8-42-b0da38c]
        at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1429) ~[paper-1.21.8.jar:1.21.8-42-b0da38c]
        at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1423) ~[paper-1.21.8.jar:1.21.8-42-b0da38c]
        at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:139) ~[paper-1.21.8.jar:1.21.8-42-b0da38c]
        at net.minecraft.server.MinecraftServer.managedBlock(MinecraftServer.java:1380) ~[paper-1.21.8.jar:1.21.8-42-b0da38c]
        at net.minecraft.server.MinecraftServer.waitUntilNextTick(MinecraftServer.java:1388) ~[paper-1.21.8.jar:1.21.8-42-b0da38c]
        at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1265) ~[paper-1.21.8.jar:1.21.8-42-b0da38c]
        at net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:310) ~[paper-1.21.8.jar:1.21.8-42-b0da38c]
        at java.base/java.lang.Thread.run(Thread.java:1583) ~[?:?]

- Prevented overwriting entire inv.contents which broke Crafter.
- Added snapshot/restore of disabled slots (BooleanArray).
- Only update slots if items actually change.
- Keeps Crafter blocks functional after inventory updates.
@Baktus79
Copy link
Author

I found that when JEXT is active, disabled slots in the Crafter block are not remembered.
Steps to reproduce:

  1. Open a Crafter.
  2. Disable some slots.
  3. Close the GUI.
  4. Re-open the Crafter → all slots are active again.

This happens because updateInventory overwrote the entire inv.contents array, which resets the Crafter’s internal disabled slot state.

This PR fixes the issue by:

  • Taking a snapshot of the disabled slots before updating.
  • Updating items slot-by-slot instead of replacing the whole contents array.
  • Restoring the exact disabled state afterwards.

With this change, disabled slots in the Crafter persist correctly when reopening the GUI.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant