Skip to content

Commit 7556f20

Browse files
committed
fix: nocost
1 parent 1499918 commit 7556f20

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

src/main/kotlin/cc/modlabs/kpaper/inventory/AnvilGUI.kt

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import org.bukkit.entity.Player
88
import org.bukkit.event.inventory.InventoryClickEvent
99
import org.bukkit.event.inventory.InventoryType
1010
import org.bukkit.inventory.Inventory
11+
import org.bukkit.inventory.InventoryView
1112
import org.bukkit.inventory.ItemStack
1213

1314
/**
@@ -34,6 +35,7 @@ data class SlotConfig(
3435

3536
class 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
}

src/main/kotlin/cc/modlabs/kpaper/inventory/_internal/AnvilListener.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ object AnvilListener : Listener {
3939
if (clickedSlot == AnvilSlot.OUTPUT && slotConfig?.onClick == null) {
4040
val clickedItem = event.currentItem
4141
// Typically the "renamed" text is taken from the item's display name
42-
val inputText = clickedItem?.itemMeta?.displayName()
42+
val inputText = clickedItem?.displayName()
4343
gui.onComplete?.invoke(player, inputText)
4444
player.closeInventory()
4545
unregisterGUI(event.inventory)

0 commit comments

Comments
 (0)