@@ -8,6 +8,7 @@ import org.bukkit.entity.Player
88import org.bukkit.event.inventory.InventoryClickEvent
99import org.bukkit.event.inventory.InventoryType
1010import org.bukkit.inventory.Inventory
11+ import org.bukkit.inventory.InventoryView
1112import org.bukkit.inventory.ItemStack
1213
1314/* *
@@ -34,6 +35,7 @@ data class SlotConfig(
3435
3536class AnvilGUI {
3637 var title: String = " Anvil"
38+ var noCost: Boolean = false
3739 val slotConfigs: MutableMap <AnvilSlot , SlotConfig > = mutableMapOf ()
3840 var onComplete: ((player: Player , input: Component ? ) -> Unit )? = null
3941 var onClose: ((player: Player ) -> Unit )? = null
@@ -54,12 +56,32 @@ class SlotBuilder {
5456 var consumeItem: Boolean = true
5557}
5658
57- fun Player.openAnvilGUI (builder : AnvilGUI .() -> Unit ) {
59+ fun Player.openAnvilGUI (builder : AnvilGUI .() -> Unit ): InventoryView ? {
5860 val gui = AnvilGUI ().apply (builder)
5961 val inv : Inventory = Bukkit .createInventory(null , InventoryType .ANVIL , text(gui.title))
6062 gui.slotConfigs.forEach { (slot, config) ->
6163 config.item?.let { inv .setItem(slot.index, it) }
6264 }
6365 AnvilListener .registerGUI(this , inv , gui)
64- this .openInventory(inv )
66+ val view = this .openInventory(inv )
67+
68+ if (gui.noCost) {
69+ try {
70+ val holder = view?.topInventory?.holder
71+ val containerField = holder?.javaClass?.getDeclaredField(" container" )
72+ if (containerField != null ) {
73+ containerField.isAccessible = true
74+ }
75+ val container = containerField?.get(holder)
76+ val repairCostField = container?.javaClass?.getDeclaredField(" repairCost" )
77+ if (repairCostField != null ) {
78+ repairCostField.isAccessible = true
79+ }
80+ repairCostField?.setInt(container, 0 )
81+ } catch (e: Exception ) {
82+ e.printStackTrace()
83+ }
84+ }
85+
86+ return view
6587}
0 commit comments