Skip to content

Commit 9f43032

Browse files
committed
Fix #586
1 parent 40ae558 commit 9f43032

File tree

2 files changed

+29
-6
lines changed

2 files changed

+29
-6
lines changed

src/main/java/me/spartacus04/jext/listeners/DiscUpdateEvent.kt

+26
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@ import me.spartacus04.jext.utils.isRecordFragment
1010
import org.bukkit.event.EventHandler
1111
import org.bukkit.event.entity.EntityPickupItemEvent
1212
import org.bukkit.event.inventory.InventoryOpenEvent
13+
import org.bukkit.event.inventory.InventoryType
1314
import org.bukkit.event.player.PlayerJoinEvent
1415
import org.bukkit.inventory.Inventory
1516
import org.bukkit.inventory.ItemStack
17+
import org.bukkit.block.Crafter
1618

1719
internal class DiscUpdateEvent : JextListener() {
1820
@EventHandler(ignoreCancelled = true)
@@ -26,7 +28,22 @@ internal class DiscUpdateEvent : JextListener() {
2628
e.item.itemStack = updateItem(e.item.itemStack)
2729
}
2830

31+
@Suppress("UnstableApiUsage")
2932
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+
3047
// We can't use inv.contents.forEachIndexed because it interferes with other inventory plugins
3148
val contents = inv.contents
3249
contents.forEachIndexed { i, it ->
@@ -35,6 +52,15 @@ internal class DiscUpdateEvent : JextListener() {
3552
}
3653
}
3754
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+
}
3864
}
3965

4066
private fun updateItem(itemStack: ItemStack) : ItemStack {

src/main/java/me/spartacus04/jext/listeners/PrepareCraftingEvent.kt

+3-6
Original file line numberDiff line numberDiff line change
@@ -13,30 +13,27 @@ import org.bukkit.inventory.CrafterInventory
1313
internal class PrepareCraftingEvent : JextListener("1.19") {
1414
@EventHandler
1515
fun prepareCraftingEvent(e: PrepareItemCraftEvent) {
16-
if (e.inventory.result == null || e.inventory.result!!.type != JEXT_FRAGMENT_OUTPUT) return
1716
val block = e.inventory.holder as Block
18-
1917
printDisabledSlots(block)
18+
19+
if (e.inventory.result == null || e.inventory.result!!.type != JEXT_FRAGMENT_OUTPUT) return
20+
2021
val inventory = e.inventory.matrix.clone()
2122

22-
printDisabledSlots(block)
2323
val isCustomDisc = inventory.any {
2424
return@any Disc.isCustomDisc(it)
2525
}
2626

27-
printDisabledSlots(block)
2827
// check if every disc has same namespace, if they have the same namespace return the namespace else null
2928
val namespace = inventory.map {
3029
Disc.fromItemstack(it)?.namespace
3130
}.distinct().singleOrNull()
3231

33-
printDisabledSlots(block)
3432
if (isCustomDisc && namespace != null) {
3533
e.inventory.result = DISCS[namespace]!!.discItemStack
3634
} else if (isCustomDisc) {
3735
e.inventory.result = null
3836
}
39-
printDisabledSlots(block)
4037
}
4138

4239
fun printDisabledSlots(b: Block) {

0 commit comments

Comments
 (0)