From 78e4ffd0c6cee9e1e8f4733685a43b662bf1470b Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Sat, 8 Mar 2025 16:58:50 +0100 Subject: [PATCH] always display changed left item to user --- .../cuanvil/listener/AnvilResultListener.kt | 106 ++++++++++++------ .../cuanvil/util/AnvilLoreEditUtil.kt | 52 +++------ 2 files changed, 89 insertions(+), 69 deletions(-) diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/listener/AnvilResultListener.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/listener/AnvilResultListener.kt index d8c4a0c..15e420f 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/listener/AnvilResultListener.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/listener/AnvilResultListener.kt @@ -27,7 +27,6 @@ import xyz.alexcrea.cuanvil.util.AnvilXpUtil import xyz.alexcrea.cuanvil.util.CustomRecipeUtil import xyz.alexcrea.cuanvil.util.UnitRepairUtil.getRepair import java.util.* -import kotlin.collections.ArrayList import kotlin.math.min class AnvilResultListener : Listener { @@ -198,9 +197,9 @@ class AnvilResultListener : Listener { event: InventoryClickEvent, player: Player, inventory: AnvilInventory, - leftItem: ItemStack, + leftItem: ItemStack?, leftRemoveCount: Int, - rightItem: ItemStack, + rightItem: ItemStack?, rightRemoveCount: Int, output: ItemStack, repairCost: Int, @@ -215,10 +214,10 @@ class AnvilResultListener : Listener { // If not creative middle click... if (event.click != ClickType.MIDDLE) { // We remove what should be removed - leftItem.amount -= leftRemoveCount + if (leftItem != null) leftItem.amount -= leftRemoveCount inventory.setItem(ANVIL_INPUT_LEFT, leftItem) - rightItem.amount -= rightRemoveCount + if (rightItem != null) rightItem.amount -= rightRemoveCount inventory.setItem(ANVIL_INPUT_RIGHT, rightItem) inventory.setItem(ANVIL_OUTPUT_SLOT, null) @@ -335,18 +334,32 @@ class AnvilResultListener : Listener { output, 0 ) //TODO DO REPAIR COST } else { - if (output != AnvilLoreEditUtil.handleLoreRemoveByBook(player, leftItem, rightItem, bookMeta)) return false + if (output != AnvilLoreEditUtil.handleLoreRemoveByBook(player, leftItem)) return false - // remove lore - val leftCopy = leftItem.clone() - val leftMeta = leftCopy.itemMeta!! - leftMeta.lore = null - leftCopy.itemMeta = leftMeta + // fill book meta + val meta = leftItem.itemMeta + if (meta == null || !meta.hasLore()) return false + val lore = meta.lore!! + if (lore.isEmpty()) return false + + val bookPage = StringBuilder() + lore.forEach { + if (bookPage.isNotEmpty()) bookPage.append('\n') + //TODO check & do color + bookPage.append(it) + } + + val resultPage = bookPage.toString() + //TODO maybe check page size ? bc it may be too big ??? + + val rightCopy = rightItem.clone() + bookMeta.setPages(resultPage) + rightCopy.itemMeta = bookMeta return extractAnvilResult( event, player, inventory, - leftCopy, 0, - rightItem, 1, + leftItem, 1, + rightCopy, 0, output, 0 ) //TODO DO REPAIR COST } @@ -370,37 +383,62 @@ class AnvilResultListener : Listener { // Remove custom name to paper val paperCopy = rightItem.clone() + paperCopy.amount = 1 paperMeta.setDisplayName(null) paperCopy.itemMeta = paperMeta - return extractAnvilResult( - event, player, inventory, - leftItem, 1, - paperCopy, 0, - output, 0 - ) //TODO DO REPAIR COST + // TODO CONSUME PAPER CONFIG + return if (rightItem.amount > 1) { + extractAnvilResult( + event, player, inventory, + paperCopy, 0, + rightItem, 1, + output, 0 + ) //TODO DO REPAIR COST + } else { + extractAnvilResult( + event, player, inventory, + null, 0, + paperCopy, 0, + output, 0 + ) //TODO DO REPAIR COST + } } else { - if (output != AnvilLoreEditUtil.handleLoreRemoveByPaper(player, leftItem, rightItem)) return false + if (output != AnvilLoreEditUtil.handleLoreRemoveByPaper(player, leftItem)) return false - // remove lore line - val leftCopy = leftItem.clone() - val leftMeta = leftCopy.itemMeta!! + val leftMeta = leftItem.itemMeta + if (leftMeta == null || !leftMeta.hasLore()) return false + val lore = leftMeta.lore!! + if (lore.isEmpty()) return false val removeEnd = ConfigOptions.paperLoreOrderIsEnd - val lore: ArrayList = ArrayList(leftMeta.lore!!) + //TODO check & do color + val line = if (removeEnd) lore[lore.size - 1] + else lore[0] - if(removeEnd) lore.removeAt(lore.size - 1) - else lore.removeAt(0) + // Create result item + val rightClone = rightItem.clone() + rightClone.amount = 1 - leftMeta.lore = if(lore.isEmpty()) null else lore - leftCopy.itemMeta = leftMeta + val resultMeta = rightClone.itemMeta ?: return false + resultMeta.setDisplayName(line) + rightClone.itemMeta = resultMeta - return extractAnvilResult( - event, player, inventory, - leftCopy, 0, - rightItem, 1, - output, 0 - ) //TODO DO REPAIR COST + return if (rightItem.amount > 1) { + extractAnvilResult( + event, player, inventory, + rightClone, 0, + rightItem, 1, + output, 0 + ) //TODO DO REPAIR COST + } else { + extractAnvilResult( + event, player, inventory, + null, 0, + rightClone, 0, + output, 0 + ) //TODO DO REPAIR COST + } } } diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/util/AnvilLoreEditUtil.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/util/AnvilLoreEditUtil.kt index 9bcf963..539c90b 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/util/AnvilLoreEditUtil.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/util/AnvilLoreEditUtil.kt @@ -37,27 +37,14 @@ object AnvilLoreEditUtil { return result } - fun handleLoreRemoveByBook(player: Permissible, first: ItemStack, second: ItemStack, book: BookMeta): ItemStack? { + fun handleLoreRemoveByBook(player: Permissible, first: ItemStack): ItemStack? { if (!hasLoreEditByBookPermission(player)) return null - val meta = first.itemMeta - if (meta == null || !meta.hasLore()) return null - val lore = meta.lore!! - if(lore.isEmpty()) return null - - val bookPage = StringBuilder() - lore.forEach { - if (bookPage.isNotEmpty()) bookPage.append('\n') - //TODO check & do color - bookPage.append(it) - } - - val resultPage = bookPage.toString() - //TODO maybe check page size ? bc it may be too big ??? - - val result = second.clone() - book.setPages(resultPage) - result.itemMeta = book + // remove lore + val result = first.clone() + val leftMeta = result.itemMeta!! + leftMeta.lore = null + result.itemMeta = leftMeta return result } @@ -98,7 +85,7 @@ object AnvilLoreEditUtil { val meta = second.itemMeta as BookMeta return if (bookType) handleLoreAppendByBook(player, first, meta) - else handleLoreRemoveByBook(player, first, second, meta) + else handleLoreRemoveByBook(player, first) } // Return true if append, false if remove, null if neither @@ -144,26 +131,21 @@ object AnvilLoreEditUtil { return result } - fun handleLoreRemoveByPaper(player: Permissible, first: ItemStack, second: ItemStack): ItemStack? { + fun handleLoreRemoveByPaper(player: Permissible, first: ItemStack): ItemStack? { if (!hasLoreEditByPaperPermission(player)) return null - val meta = first.itemMeta - if (meta == null || !meta.hasLore()) return null - val lore = meta.lore!! - if(lore.isEmpty()) return null + // remove lore line + val result = first.clone() + val meta = result.itemMeta!! val removeEnd = ConfigOptions.paperLoreOrderIsEnd - //TODO check & do color - val line = if(removeEnd) lore[lore.size-1] - else lore[0] + val lore: ArrayList = ArrayList(meta.lore!!) - // Create result item - val result = second.clone() - result.amount = 1 + if(removeEnd) lore.removeAt(lore.size - 1) + else lore.removeAt(0) - val resultMeta = result.itemMeta ?: return null - resultMeta.setDisplayName(line) - result.itemMeta = resultMeta + meta.lore = if(lore.isEmpty()) null else lore + result.itemMeta = meta return result } @@ -172,7 +154,7 @@ object AnvilLoreEditUtil { val bookType = paperLoreEditIsAppend(first, second) ?: return null return if (bookType) handleLoreAppendByPaper(player, first, second) - else handleLoreRemoveByPaper(player, first, second) + else handleLoreRemoveByPaper(player, first) } } \ No newline at end of file