diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/anvil/AnvilMergeLogic.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/anvil/AnvilMergeLogic.kt index 8699285..e018eff 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/anvil/AnvilMergeLogic.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/anvil/AnvilMergeLogic.kt @@ -55,7 +55,7 @@ object AnvilMergeLogic { } } - class UnitRepairResult: AnvilResult { + class UnitRepairResult : AnvilResult { companion object { val EMPTY = UnitRepairResult(null, AnvilCost(), 0) } @@ -67,7 +67,7 @@ object AnvilMergeLogic { } } - class CustomCraftResult: AnvilResult { + class CustomCraftResult : AnvilResult { companion object { val EMPTY = CustomCraftResult(null, CustomCraftCost(0), 0, null) } @@ -76,15 +76,17 @@ object AnvilMergeLogic { val amount: Int val recipe: AnvilCustomRecipe? - constructor(item: ItemStack?, cost: CustomCraftCost, - amount: Int, recipe: AnvilCustomRecipe?) : super(item, cost, true) { + constructor( + item: ItemStack?, cost: CustomCraftCost, + amount: Int, recipe: AnvilCustomRecipe? + ) : super(item, cost, true) { this.customCraftCost = cost this.amount = amount this.recipe = recipe } } - class LoreEditResult: AnvilResult { + class LoreEditResult : AnvilResult { companion object { val EMPTY = LoreEditResult(null, AnvilCost(), LoreEditType.APPEND_PAPER) } @@ -96,8 +98,9 @@ object AnvilMergeLogic { } } - fun doRenaming(inventory: AnvilInventory, - player: Player, first: ItemStack + fun doRenaming( + inventory: AnvilInventory, + player: Player, first: ItemStack ): AnvilResult { val resultItem = DependencyManager.cloneItem(player, first) val cost = AnvilCost() @@ -115,15 +118,19 @@ object AnvilMergeLogic { 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 pdc = it.persistentDataContainer - if(!keepDialog) + val pdc = meta.persistentDataContainer + if (!keepDialog) pdc.remove(AnvilRenameDialog.PCD_KEEP_RENAME_TEXT_KEY) 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) else pdc.set(AnvilRenameDialog.PCD_KEEP_RENAME_TEXT_KEY, PersistentDataType.STRING, text) } @@ -138,7 +145,8 @@ object AnvilMergeLogic { if (ConfigOptions.renameColorPossible && renameText != null) { val component = AnvilColorUtil.handleColor( renameText, - AnvilColorUtil.renamePermission(player)) + AnvilColorUtil.renamePermission(player) + ) if (component != null) { renameText = MiniMessageUtil.legacy_mm.serialize(component) @@ -160,7 +168,8 @@ object AnvilMergeLogic { renameText == "" || //TODO on recent paper check effective name instead renameText == CasedStringUtil.snakeToUpperSpacedCase(resultItem.type.name.lowercase()) - )) { + ) + ) { it.setDisplayName(renameText) processDialogPCD(it, player) resultItem.itemMeta = it @@ -184,7 +193,7 @@ object AnvilMergeLogic { val resultItem = DependencyManager.cloneItem(player, first) val cost = AnvilCost() - if(hasChanged){ + if (hasChanged) { resultItem.setEnchantmentsUnsafe(newEnchants) // Calculate enchantment cost AnvilXpUtil.getRightValues(second, resultItem, cost) @@ -217,9 +226,9 @@ object AnvilMergeLogic { firstEnchants: MutableMap, resultEnchants: MutableMap ): Boolean { - if(firstEnchants.size != resultEnchants.size) return false + if (firstEnchants.size != resultEnchants.size) return false 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 @@ -262,11 +271,11 @@ object AnvilMergeLogic { } fun testUnitRepair( - inventory: AnvilInventory, - player: Player, - first: ItemStack, second: ItemStack, - unitRepairAmount: Double - ): UnitRepairResult { + inventory: AnvilInventory, + player: Player, + first: ItemStack, second: ItemStack, + unitRepairAmount: Double + ): UnitRepairResult { val resultItem = DependencyManager.cloneItem(player, first) val cost = AnvilCost() cost.rename = handleRename(resultItem, inventory, player) @@ -300,7 +309,7 @@ object AnvilMergeLogic { AnvilLoreEditUtil.tryLoreEditByPaper(player, first, second) else LoreEditResult.EMPTY - if(result.isEmpty()) return result + if (result.isEmpty()) return result if (result.item!!.isAir || first == result.item) { CustomAnvil.log("lore edit, But input is same as output") diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/listener/AnvilResultListener.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/listener/AnvilResultListener.kt index 6b5f510..a232046 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/listener/AnvilResultListener.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/listener/AnvilResultListener.kt @@ -91,7 +91,7 @@ class AnvilResultListener : Listener { // Rename if (rightItem == null) { val result = AnvilMergeLogic.doRenaming(inventory, player, leftItem) - if(result.isEmpty()) return + if (result.isEmpty()) return extractAnvilResult( event, player, inventory, @@ -119,7 +119,8 @@ class AnvilResultListener : Listener { // Unit repair val unitRepairResult = AnvilMergeLogic.testUnitRepair( inventory, player, - leftItem, rightItem) + leftItem, rightItem + ) if (unitRepairResult.isEmpty()) { onUnitRepairExtract( rightItem, event, player, inventory, @@ -130,8 +131,8 @@ class AnvilResultListener : Listener { // For lore edit val loreResult = AnvilMergeLogic.testLoreEdit(player, leftItem, rightItem) - if(!loreResult.isEmpty()) { - if(loreResult.type.isBook) + if (!loreResult.isEmpty()) { + if (loreResult.type.isBook) handleBookLoreEdit(event, inventory, player, leftItem, rightItem, loreResult) else handlePaperLoreEdit(event, inventory, player, leftItem, rightItem, loreResult) @@ -153,14 +154,16 @@ class AnvilResultListener : Listener { if (recipe.removeExactLinearXp) rawCost else AnvilXpUtil.calculateLevelForXp(rawCost) - CustomAnvil.log("gamemode: ${player.gameMode != GameMode.CREATIVE}, " + - "cost: $finalCost, level: ${player.level}, " + - "result: ${player.totalExperience < finalCost} ${player.level < finalCost}") + CustomAnvil.log( + "gamemode: ${player.gameMode != GameMode.CREATIVE}, " + + "cost: $finalCost, level: ${player.level}, " + + "result: ${player.totalExperience < finalCost} ${player.level < finalCost}" + ) if (player.gameMode != GameMode.CREATIVE) { - if(ConfigOptions.shouldUseMoney(player)) { + if (ConfigOptions.shouldUseMoney(player)) { 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) { val levelXp = AnvilXpUtil.calculateXpForLevel(player.level) val delta = AnvilXpUtil.calculateXpForLevel(player.level + 1) - levelXp @@ -242,7 +245,7 @@ class AnvilResultListener : Listener { if (player.gameMode == GameMode.CREATIVE) return val rawCost = result.customCraftCost.rawCost - if(result.cost.isMonetary) { + if (result.cost.isMonetary) { EconomyManager.economy!!.remove(player, result.cost.asMonetaryCost()) return } @@ -268,10 +271,10 @@ class AnvilResultListener : Listener { } private fun tryRemoveCost(player: Player, cost: AnvilCost): Boolean { - if(player.gameMode == GameMode.CREATIVE) return true - if(cost.isMonetary) { + if (player.gameMode == GameMode.CREATIVE) return true + if (cost.isMonetary) { val result = EconomyManager.economy!!.remove(player, cost.asMonetaryCost()) - if(!result) return false + if (!result) return false } else { player.level -= cost.asXpCost() } @@ -289,7 +292,7 @@ class AnvilResultListener : Listener { rightRemoveCount: Int, result: AnvilResult ): Boolean { - if(result.isEmpty()) return false + if (result.isEmpty()) return false // To avoid vanilla, we cancel the event event.result = Event.Result.DENY @@ -305,7 +308,7 @@ class AnvilResultListener : Listener { // If not creative middle click... if (event.click != ClickType.MIDDLE) { - if(!tryRemoveCost(player, cost)) return false + if (!tryRemoveCost(player, cost)) return false // We remove what should be removed if (leftItem != null) leftItem.amount -= leftRemoveCount @@ -417,7 +420,7 @@ class AnvilResultListener : Listener { leftItem: ItemStack, rightItem: ItemStack, result: LoreEditResult - ){ + ) { val bookMeta = rightItem.itemMeta as BookMeta? ?: return // fill book meta @@ -486,6 +489,10 @@ class AnvilResultListener : Listener { paperCopy = rightItem.clone() paperCopy.amount = 1 paperMeta.setComponentDisplayName(null) + + // Remove pcd name + AnvilMergeLogic.processPCD(paperMeta, player, null) + paperCopy.itemMeta = paperMeta }