@@ -30,6 +30,10 @@ import org.bukkit.entity.Player
3030import org.bukkit.event.EventHandler
3131import org.bukkit.event.Listener
3232import org.bukkit.event.entity.EntityPickupItemEvent
33+ import org.bukkit.event.inventory.InventoryClickEvent
34+ import org.bukkit.event.inventory.InventoryCloseEvent
35+ import org.bukkit.event.inventory.InventoryMoveItemEvent
36+ import org.bukkit.event.inventory.InventoryOpenEvent
3337import org.bukkit.event.player.PlayerJoinEvent
3438import org.bukkit.inventory.ItemStack
3539import kotlin.math.min
@@ -273,13 +277,27 @@ class Research(
273277 private fun onPlayerPickup (event : EntityPickupItemEvent ) {
274278 val entity = event.entity
275279 if (entity is Player ) {
276- Rebar .launch {
277- delay(1 .ticks)
278- entity.ejectUnknownItems()
280+ val rebar = RebarItem .fromStack(event.item.itemStack)
281+ if (rebar == null ) return
282+
283+ if (! entity.canPickUp(rebar, sendMessage = true )) {
284+ // See net.minecraft.world.entity.item.ItemEntity#setDefaultPickUpDelay
285+ event.item.pickupDelay = 10
286+ event.isCancelled = true
279287 }
280288 }
281289 }
282290
291+ @EventHandler
292+ private fun onPlayerOpenInventory (event : InventoryOpenEvent ) {
293+ (event.player as Player ).ejectUnknownItems()
294+ }
295+
296+ @EventHandler
297+ private fun onPlayerCloseInventory (event : InventoryCloseEvent ) {
298+ (event.player as Player ).ejectUnknownItems()
299+ }
300+
283301 @EventHandler
284302 private fun onJoin (e : PlayerJoinEvent ) {
285303 if (! RebarConfig .ResearchConfig .ENABLED ) return
@@ -326,7 +344,7 @@ private fun Player.ejectUnknownItems() {
326344 rebarItem != null && ! canPickUp(rebarItem, sendMessage = true )
327345 }
328346 for (item in toRemove) {
329- inventory.remove (item)
347+ inventory.removeItemAnySlot (item)
330348 dropItem(item)
331349 }
332350}
0 commit comments