always display changed left item to user

This commit is contained in:
alexcrea 2025-03-08 16:58:50 +01:00
parent 3217a9e4cc
commit 78e4ffd0c6
No known key found for this signature in database
GPG key ID: 43FD265DB0DBF91F
2 changed files with 89 additions and 69 deletions

View file

@ -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(
// TODO CONSUME PAPER CONFIG
return if (rightItem.amount > 1) {
extractAnvilResult(
event, player, inventory,
leftItem, 1,
paperCopy, 0,
output, 0
) //TODO DO REPAIR COST
} else {
if (output != AnvilLoreEditUtil.handleLoreRemoveByPaper(player, leftItem, rightItem)) return false
// remove lore line
val leftCopy = leftItem.clone()
val leftMeta = leftCopy.itemMeta!!
val removeEnd = ConfigOptions.paperLoreOrderIsEnd
val lore: ArrayList<String> = ArrayList(leftMeta.lore!!)
if(removeEnd) lore.removeAt(lore.size - 1)
else lore.removeAt(0)
leftMeta.lore = if(lore.isEmpty()) null else lore
leftCopy.itemMeta = leftMeta
return extractAnvilResult(
event, player, inventory,
leftCopy, 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)) return false
val leftMeta = leftItem.itemMeta
if (leftMeta == null || !leftMeta.hasLore()) return false
val lore = leftMeta.lore!!
if (lore.isEmpty()) return false
val removeEnd = ConfigOptions.paperLoreOrderIsEnd
//TODO check & do color
val line = if (removeEnd) lore[lore.size - 1]
else lore[0]
// Create result item
val rightClone = rightItem.clone()
rightClone.amount = 1
val resultMeta = rightClone.itemMeta ?: return false
resultMeta.setDisplayName(line)
rightClone.itemMeta = resultMeta
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
}
}
}

View file

@ -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<String> = 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)
}
}