@@ -10,9 +10,11 @@ import me.spartacus04.jext.utils.isRecordFragment
10
10
import org.bukkit.event.EventHandler
11
11
import org.bukkit.event.entity.EntityPickupItemEvent
12
12
import org.bukkit.event.inventory.InventoryOpenEvent
13
+ import org.bukkit.event.inventory.InventoryType
13
14
import org.bukkit.event.player.PlayerJoinEvent
14
15
import org.bukkit.inventory.Inventory
15
16
import org.bukkit.inventory.ItemStack
17
+ import org.bukkit.block.Crafter
16
18
17
19
internal class DiscUpdateEvent : JextListener () {
18
20
@EventHandler(ignoreCancelled = true )
@@ -26,7 +28,22 @@ internal class DiscUpdateEvent : JextListener() {
26
28
e.item.itemStack = updateItem(e.item.itemStack)
27
29
}
28
30
31
+ @Suppress(" UnstableApiUsage" )
29
32
private fun updateInventory (inv : Inventory ) {
33
+ // If the inventory is a crafter, we need to keep track of the disabled slots
34
+ val crafterArr = if (inv .type == InventoryType .CRAFTER ) {
35
+ val disabled = arrayListOf<Int >()
36
+ val holder = inv .holder as ? Crafter ? : return
37
+
38
+ for (i in 1 .. inv .size) {
39
+ if (holder.isSlotDisabled(i)) {
40
+ disabled.add(i)
41
+ }
42
+ }
43
+
44
+ disabled
45
+ } else null
46
+
30
47
// We can't use inv.contents.forEachIndexed because it interferes with other inventory plugins
31
48
val contents = inv .contents
32
49
contents.forEachIndexed { i, it ->
@@ -35,6 +52,15 @@ internal class DiscUpdateEvent : JextListener() {
35
52
}
36
53
}
37
54
inv .contents = contents
55
+
56
+ // Restore the disabled slots
57
+ if (crafterArr != null ) {
58
+ val holder = inv .holder as ? Crafter ? : return
59
+
60
+ for (i in crafterArr) {
61
+ holder.setSlotDisabled(i, true )
62
+ }
63
+ }
38
64
}
39
65
40
66
private fun updateItem (itemStack : ItemStack ) : ItemStack {
0 commit comments