add more debug & fix price not displaying after fail

This commit is contained in:
alexcrea 2026-06-28 23:29:49 +02:00
parent 8447233b1e
commit fcbe6ba3fb
Signed by: alexcrea
GPG key ID: E346CD16413450E3
4 changed files with 46 additions and 13 deletions

View file

@ -107,12 +107,17 @@ class AnvilResultListener : Listener {
if (canMerge) {
val result = AnvilMergeLogic.doMerge(view, inventory, player, leftItem, rightItem)
extractAnvilResult(
val worked = extractAnvilResult(
event, player, inventory,
null, 0,
null, 0,
result
)
if(!worked) {
CustomAnvil.verboseLog("Merge extract failed. reset the displayed price")
// Reset the price
AnvilXpUtil.setAnvilResult(inventory, view, player, result)
}
return
}
@ -276,11 +281,20 @@ class AnvilResultListener : Listener {
val cost = result.cost
if (cost.isMonetary) {
val result = EconomyManager.economy!!.remove(player, cost.asMonetaryCost())
if (!result) return false
if (!result) {
CustomAnvil.verboseLog("Could not remove monetary cost ${cost.asMonetaryCost()}")
return false
}
} else {
val xpCost = cost.filteredXpCost()
if (xpCost > AnvilXpUtil.maximumXpCost(result.ignoreXpRules)) return false
if (player.level < xpCost) return false
if (xpCost > AnvilXpUtil.maximumXpCost(result.ignoreXpRules)) {
CustomAnvil.verboseLog("Cost above maximum $xpCost > ${AnvilXpUtil.maximumXpCost(result.ignoreXpRules)}")
return false
}
if (player.level < xpCost) {
CustomAnvil.verboseLog("Player do not have enough xp ${player.level} < $xpCost")
return false
}
player.level -= xpCost
}
@ -298,7 +312,10 @@ class AnvilResultListener : Listener {
rightRemoveCount: Int,
result: AnvilResult
): Boolean {
if (result.isEmpty()) return false
if (result.isEmpty()) {
CustomAnvil.verboseLog("Merge result is empty")
return false
}
// To avoid vanilla, we cancel the event
event.result = Event.Result.DENY
@ -306,7 +323,10 @@ class AnvilResultListener : Listener {
val cost = result.cost
processCost(inventory, player, cost)
if (!cost.valid && player.gameMode != GameMode.CREATIVE) return false
if (!cost.valid && player.gameMode != GameMode.CREATIVE) {
CustomAnvil.verboseLog("Player cannot afford the cost")
return false
}
// Where should we get the item
val slotDestination = getActionSlot(event, player)

View file

@ -171,11 +171,7 @@ class PrepareAnvilListener : Listener {
private fun applyResult(event: PrepareAnvilEvent, player: Player, result: AnvilResult) {
event.result = result.item
if(result.item == null) {
AnvilXpUtil.onNoResult(player, event.view)
return
}
AnvilXpUtil.setAnvilInvCost(event.inventory, event.view, player, result.cost, result.ignoreXpRules)
AnvilXpUtil.setAnvilResult(event.inventory, event.view, player, result)
}
}

View file

@ -15,6 +15,7 @@ import org.bukkit.inventory.ItemStack
import org.bukkit.inventory.meta.Repairable
import org.bukkit.persistence.PersistentDataType
import xyz.alexcrea.cuanvil.anvil.AnvilCost
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.AnvilResult
import xyz.alexcrea.cuanvil.anvil.AnvilUseType
import xyz.alexcrea.cuanvil.config.ConfigHolder
import xyz.alexcrea.cuanvil.dependency.DependencyManager
@ -28,7 +29,23 @@ object AnvilXpUtil {
const val EXCLUSIVE_PENALTY_PREFIX = "repair_cost"
/**
* Display the required cost (either as xp or as )
* Display the required cost (either as xp or as money) or reset anvil price depending on result
*/
fun setAnvilResult(
inventory: AnvilInventory,
view: InventoryView,
player: Player,
result: AnvilResult) {
if(result.item == null) {
onNoResult(player, view)
return
}
setAnvilInvCost(inventory, view, player, result.cost, result.ignoreXpRules)
}
/**
* Display the required cost (either as xp or as money)
*/
fun setAnvilInvCost(
inventory: AnvilInventory,