Skip to content

IllegalStateException: InventoryCloseEvent may only be triggered synchronously (ResidenceChangedEvent / async task) #1385

@qwejerrywolf-AU

Description

@qwejerrywolf-AU

Describe the bug
When a player crosses a Residence boundary, an exception is thrown indicating that InventoryCloseEvent is being triggered asynchronously.

Paper/Purpur strictly enforces that InventoryCloseEvent (and HumanEntity#closeInventory()) must only be called from the main server thread, but Residence currently calls it from an async task, causing the event to be rejected.

This does not crash the server, but it breaks Residence logic (fly/special flag handling) and continuously spams ERROR logs.

To Reproduce
1.Start a Paper / Purpur server (1.21.11)

2.Install the following plugins:

Residence 6.0.1.2

CMILib 1.5.8.2

3.Create at least two adjacent Residence regions with different flags
(for example, regions that affect flying or other special player states)

4.Have a player open any inventory GUI
(e.g. chest, ender chest, or plugin GUI)

5.While the inventory is still open, move across the Residence boundary

6.Observe the server console

Error / Stack Trace
[ERROR]: Could not pass event ResidenceChangedEvent to Residence v6.0.1.2
java.lang.IllegalStateException: InventoryCloseEvent may only be triggered synchronously.
at io.papermc.paper.plugin.manager.PaperEventManager.callEvent(PaperEventManager.java:42)
at org.bukkit.craftbukkit.event.CraftEventFactory.handleInventoryCloseEvent(CraftEventFactory.java:1605)
at net.minecraft.server.level.ServerPlayer.closeContainer(ServerPlayer.java:1979)
at org.bukkit.craftbukkit.entity.CraftHumanEntity.closeInventory(CraftHumanEntity.java:597)
at org.bukkit.entity.HumanEntity.closeInventory(HumanEntity.java:309)
at com.bekvon.bukkit.residence.listeners.ResidencePlayerListener.fly(ResidencePlayerListener.java:2154)
at com.bekvon.bukkit.residence.listeners.ResidencePlayerListener.checkSpecialFlags(ResidencePlayerListener.java:2211)
at com.bekvon.bukkit.residence.listeners.ResidencePlayerListener.onResidenceChange(ResidencePlayerListener.java:2189)
at com.bekvon.bukkit.residence.event.ResidenceEvent.lambda$0(ResidenceEvent.java:61)
at net.Zrips.CMILib.Version.Schedulers.CMIBukkitImpl.lambda$runTaskAsynchronously$1(CMIBukkitImpl.java:48)

Server version:
[11:11:02 INFO]: Residence version: 6.0.1.2
[11:11:02 INFO]: CMILib version: 1.5.8.2
[11:11:02 INFO]: Server version: Purpur(2545)
[11:11:02 INFO]: Java version: 21.0.9

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions