remove rename pdc on paper lore append

This commit is contained in:
alexcrea 2026-06-09 14:08:17 +02:00
parent bf4395ba3f
commit d679cd73f9
Signed by: alexcrea
GPG key ID: E346CD16413450E3
2 changed files with 55 additions and 39 deletions

View file

@ -55,7 +55,7 @@ object AnvilMergeLogic {
} }
} }
class UnitRepairResult: AnvilResult { class UnitRepairResult : AnvilResult {
companion object { companion object {
val EMPTY = UnitRepairResult(null, AnvilCost(), 0) val EMPTY = UnitRepairResult(null, AnvilCost(), 0)
} }
@ -67,7 +67,7 @@ object AnvilMergeLogic {
} }
} }
class CustomCraftResult: AnvilResult { class CustomCraftResult : AnvilResult {
companion object { companion object {
val EMPTY = CustomCraftResult(null, CustomCraftCost(0), 0, null) val EMPTY = CustomCraftResult(null, CustomCraftCost(0), 0, null)
} }
@ -76,15 +76,17 @@ object AnvilMergeLogic {
val amount: Int val amount: Int
val recipe: AnvilCustomRecipe? val recipe: AnvilCustomRecipe?
constructor(item: ItemStack?, cost: CustomCraftCost, constructor(
amount: Int, recipe: AnvilCustomRecipe?) : super(item, cost, true) { item: ItemStack?, cost: CustomCraftCost,
amount: Int, recipe: AnvilCustomRecipe?
) : super(item, cost, true) {
this.customCraftCost = cost this.customCraftCost = cost
this.amount = amount this.amount = amount
this.recipe = recipe this.recipe = recipe
} }
} }
class LoreEditResult: AnvilResult { class LoreEditResult : AnvilResult {
companion object { companion object {
val EMPTY = LoreEditResult(null, AnvilCost(), LoreEditType.APPEND_PAPER) val EMPTY = LoreEditResult(null, AnvilCost(), LoreEditType.APPEND_PAPER)
} }
@ -96,8 +98,9 @@ object AnvilMergeLogic {
} }
} }
fun doRenaming(inventory: AnvilInventory, fun doRenaming(
player: Player, first: ItemStack inventory: AnvilInventory,
player: Player, first: ItemStack
): AnvilResult { ): AnvilResult {
val resultItem = DependencyManager.cloneItem(player, first) val resultItem = DependencyManager.cloneItem(player, first)
val cost = AnvilCost() val cost = AnvilCost()
@ -115,15 +118,19 @@ object AnvilMergeLogic {
return AnvilResult(result, cost) return AnvilResult(result, cost)
} }
private fun processDialogPCD(it: ItemMeta, player: HumanEntity) { private fun processDialogPCD(meta: ItemMeta, player: HumanEntity) {
val text = AnvilRenameDialogUtil.anvilRenameDialog.currentText(player)
return processPCD(meta, player, text)
}
fun processPCD(meta: ItemMeta, player: HumanEntity, text: String?) {
val keepDialog = ConfigOptions.canUseDialogRename(player) && ConfigOptions.shouldKeepRenameText val keepDialog = ConfigOptions.canUseDialogRename(player) && ConfigOptions.shouldKeepRenameText
val pdc = it.persistentDataContainer val pdc = meta.persistentDataContainer
if(!keepDialog) if (!keepDialog)
pdc.remove(AnvilRenameDialog.PCD_KEEP_RENAME_TEXT_KEY) pdc.remove(AnvilRenameDialog.PCD_KEEP_RENAME_TEXT_KEY)
else { else {
val text = AnvilRenameDialogUtil.anvilRenameDialog.currentText(player) if (text == null || text.isBlank())
if(text == null || text.isBlank())
pdc.remove(AnvilRenameDialog.PCD_KEEP_RENAME_TEXT_KEY) pdc.remove(AnvilRenameDialog.PCD_KEEP_RENAME_TEXT_KEY)
else pdc.set(AnvilRenameDialog.PCD_KEEP_RENAME_TEXT_KEY, PersistentDataType.STRING, text) else pdc.set(AnvilRenameDialog.PCD_KEEP_RENAME_TEXT_KEY, PersistentDataType.STRING, text)
} }
@ -138,7 +145,8 @@ object AnvilMergeLogic {
if (ConfigOptions.renameColorPossible && renameText != null) { if (ConfigOptions.renameColorPossible && renameText != null) {
val component = AnvilColorUtil.handleColor( val component = AnvilColorUtil.handleColor(
renameText, renameText,
AnvilColorUtil.renamePermission(player)) AnvilColorUtil.renamePermission(player)
)
if (component != null) { if (component != null) {
renameText = MiniMessageUtil.legacy_mm.serialize(component) renameText = MiniMessageUtil.legacy_mm.serialize(component)
@ -160,7 +168,8 @@ object AnvilMergeLogic {
renameText == "" || renameText == "" ||
//TODO on recent paper check effective name instead //TODO on recent paper check effective name instead
renameText == CasedStringUtil.snakeToUpperSpacedCase(resultItem.type.name.lowercase()) renameText == CasedStringUtil.snakeToUpperSpacedCase(resultItem.type.name.lowercase())
)) { )
) {
it.setDisplayName(renameText) it.setDisplayName(renameText)
processDialogPCD(it, player) processDialogPCD(it, player)
resultItem.itemMeta = it resultItem.itemMeta = it
@ -184,7 +193,7 @@ object AnvilMergeLogic {
val resultItem = DependencyManager.cloneItem(player, first) val resultItem = DependencyManager.cloneItem(player, first)
val cost = AnvilCost() val cost = AnvilCost()
if(hasChanged){ if (hasChanged) {
resultItem.setEnchantmentsUnsafe(newEnchants) resultItem.setEnchantmentsUnsafe(newEnchants)
// Calculate enchantment cost // Calculate enchantment cost
AnvilXpUtil.getRightValues(second, resultItem, cost) AnvilXpUtil.getRightValues(second, resultItem, cost)
@ -217,9 +226,9 @@ object AnvilMergeLogic {
firstEnchants: MutableMap<CAEnchantment, Int>, firstEnchants: MutableMap<CAEnchantment, Int>,
resultEnchants: MutableMap<CAEnchantment, Int> resultEnchants: MutableMap<CAEnchantment, Int>
): Boolean { ): Boolean {
if(firstEnchants.size != resultEnchants.size) return false if (firstEnchants.size != resultEnchants.size) return false
for (entry in resultEnchants) { for (entry in resultEnchants) {
if(firstEnchants.getOrDefault(entry.key, entry.value-1) != entry.value) return false if (firstEnchants.getOrDefault(entry.key, entry.value - 1) != entry.value) return false
} }
return true return true
@ -262,11 +271,11 @@ object AnvilMergeLogic {
} }
fun testUnitRepair( fun testUnitRepair(
inventory: AnvilInventory, inventory: AnvilInventory,
player: Player, player: Player,
first: ItemStack, second: ItemStack, first: ItemStack, second: ItemStack,
unitRepairAmount: Double unitRepairAmount: Double
): UnitRepairResult { ): UnitRepairResult {
val resultItem = DependencyManager.cloneItem(player, first) val resultItem = DependencyManager.cloneItem(player, first)
val cost = AnvilCost() val cost = AnvilCost()
cost.rename = handleRename(resultItem, inventory, player) cost.rename = handleRename(resultItem, inventory, player)
@ -300,7 +309,7 @@ object AnvilMergeLogic {
AnvilLoreEditUtil.tryLoreEditByPaper(player, first, second) AnvilLoreEditUtil.tryLoreEditByPaper(player, first, second)
else LoreEditResult.EMPTY else LoreEditResult.EMPTY
if(result.isEmpty()) return result if (result.isEmpty()) return result
if (result.item!!.isAir || first == result.item) { if (result.item!!.isAir || first == result.item) {
CustomAnvil.log("lore edit, But input is same as output") CustomAnvil.log("lore edit, But input is same as output")

View file

@ -91,7 +91,7 @@ class AnvilResultListener : Listener {
// Rename // Rename
if (rightItem == null) { if (rightItem == null) {
val result = AnvilMergeLogic.doRenaming(inventory, player, leftItem) val result = AnvilMergeLogic.doRenaming(inventory, player, leftItem)
if(result.isEmpty()) return if (result.isEmpty()) return
extractAnvilResult( extractAnvilResult(
event, player, inventory, event, player, inventory,
@ -119,7 +119,8 @@ class AnvilResultListener : Listener {
// Unit repair // Unit repair
val unitRepairResult = AnvilMergeLogic.testUnitRepair( val unitRepairResult = AnvilMergeLogic.testUnitRepair(
inventory, player, inventory, player,
leftItem, rightItem) leftItem, rightItem
)
if (unitRepairResult.isEmpty()) { if (unitRepairResult.isEmpty()) {
onUnitRepairExtract( onUnitRepairExtract(
rightItem, event, player, inventory, rightItem, event, player, inventory,
@ -130,8 +131,8 @@ class AnvilResultListener : Listener {
// For lore edit // For lore edit
val loreResult = AnvilMergeLogic.testLoreEdit(player, leftItem, rightItem) val loreResult = AnvilMergeLogic.testLoreEdit(player, leftItem, rightItem)
if(!loreResult.isEmpty()) { if (!loreResult.isEmpty()) {
if(loreResult.type.isBook) if (loreResult.type.isBook)
handleBookLoreEdit(event, inventory, player, leftItem, rightItem, loreResult) handleBookLoreEdit(event, inventory, player, leftItem, rightItem, loreResult)
else else
handlePaperLoreEdit(event, inventory, player, leftItem, rightItem, loreResult) handlePaperLoreEdit(event, inventory, player, leftItem, rightItem, loreResult)
@ -153,14 +154,16 @@ class AnvilResultListener : Listener {
if (recipe.removeExactLinearXp) rawCost if (recipe.removeExactLinearXp) rawCost
else AnvilXpUtil.calculateLevelForXp(rawCost) else AnvilXpUtil.calculateLevelForXp(rawCost)
CustomAnvil.log("gamemode: ${player.gameMode != GameMode.CREATIVE}, " + CustomAnvil.log(
"cost: $finalCost, level: ${player.level}, " + "gamemode: ${player.gameMode != GameMode.CREATIVE}, " +
"result: ${player.totalExperience < finalCost} ${player.level < finalCost}") "cost: $finalCost, level: ${player.level}, " +
"result: ${player.totalExperience < finalCost} ${player.level < finalCost}"
)
if (player.gameMode != GameMode.CREATIVE) { if (player.gameMode != GameMode.CREATIVE) {
if(ConfigOptions.shouldUseMoney(player)) { if (ConfigOptions.shouldUseMoney(player)) {
result.cost.isMonetary = true result.cost.isMonetary = true
if(!EconomyManager.economy!!.has(player, result.cost.asMonetaryCost())) return if (!EconomyManager.economy!!.has(player, result.cost.asMonetaryCost())) return
} else if (recipe.removeExactLinearXp) { } else if (recipe.removeExactLinearXp) {
val levelXp = AnvilXpUtil.calculateXpForLevel(player.level) val levelXp = AnvilXpUtil.calculateXpForLevel(player.level)
val delta = AnvilXpUtil.calculateXpForLevel(player.level + 1) - levelXp val delta = AnvilXpUtil.calculateXpForLevel(player.level + 1) - levelXp
@ -242,7 +245,7 @@ class AnvilResultListener : Listener {
if (player.gameMode == GameMode.CREATIVE) return if (player.gameMode == GameMode.CREATIVE) return
val rawCost = result.customCraftCost.rawCost val rawCost = result.customCraftCost.rawCost
if(result.cost.isMonetary) { if (result.cost.isMonetary) {
EconomyManager.economy!!.remove(player, result.cost.asMonetaryCost()) EconomyManager.economy!!.remove(player, result.cost.asMonetaryCost())
return return
} }
@ -268,10 +271,10 @@ class AnvilResultListener : Listener {
} }
private fun tryRemoveCost(player: Player, cost: AnvilCost): Boolean { private fun tryRemoveCost(player: Player, cost: AnvilCost): Boolean {
if(player.gameMode == GameMode.CREATIVE) return true if (player.gameMode == GameMode.CREATIVE) return true
if(cost.isMonetary) { if (cost.isMonetary) {
val result = EconomyManager.economy!!.remove(player, cost.asMonetaryCost()) val result = EconomyManager.economy!!.remove(player, cost.asMonetaryCost())
if(!result) return false if (!result) return false
} else { } else {
player.level -= cost.asXpCost() player.level -= cost.asXpCost()
} }
@ -289,7 +292,7 @@ class AnvilResultListener : Listener {
rightRemoveCount: Int, rightRemoveCount: Int,
result: AnvilResult result: AnvilResult
): Boolean { ): Boolean {
if(result.isEmpty()) return false if (result.isEmpty()) return false
// To avoid vanilla, we cancel the event // To avoid vanilla, we cancel the event
event.result = Event.Result.DENY event.result = Event.Result.DENY
@ -305,7 +308,7 @@ class AnvilResultListener : Listener {
// If not creative middle click... // If not creative middle click...
if (event.click != ClickType.MIDDLE) { if (event.click != ClickType.MIDDLE) {
if(!tryRemoveCost(player, cost)) return false if (!tryRemoveCost(player, cost)) return false
// We remove what should be removed // We remove what should be removed
if (leftItem != null) leftItem.amount -= leftRemoveCount if (leftItem != null) leftItem.amount -= leftRemoveCount
@ -417,7 +420,7 @@ class AnvilResultListener : Listener {
leftItem: ItemStack, leftItem: ItemStack,
rightItem: ItemStack, rightItem: ItemStack,
result: LoreEditResult result: LoreEditResult
){ ) {
val bookMeta = rightItem.itemMeta as BookMeta? ?: return val bookMeta = rightItem.itemMeta as BookMeta? ?: return
// fill book meta // fill book meta
@ -486,6 +489,10 @@ class AnvilResultListener : Listener {
paperCopy = rightItem.clone() paperCopy = rightItem.clone()
paperCopy.amount = 1 paperCopy.amount = 1
paperMeta.setComponentDisplayName(null) paperMeta.setComponentDisplayName(null)
// Remove pcd name
AnvilMergeLogic.processPCD(paperMeta, player, null)
paperCopy.itemMeta = paperMeta paperCopy.itemMeta = paperMeta
} }