mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 16:16:17 +02:00
always display changed left item to user
This commit is contained in:
parent
3217a9e4cc
commit
78e4ffd0c6
2 changed files with 89 additions and 69 deletions
|
|
@ -27,7 +27,6 @@ import xyz.alexcrea.cuanvil.util.AnvilXpUtil
|
||||||
import xyz.alexcrea.cuanvil.util.CustomRecipeUtil
|
import xyz.alexcrea.cuanvil.util.CustomRecipeUtil
|
||||||
import xyz.alexcrea.cuanvil.util.UnitRepairUtil.getRepair
|
import xyz.alexcrea.cuanvil.util.UnitRepairUtil.getRepair
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import kotlin.collections.ArrayList
|
|
||||||
import kotlin.math.min
|
import kotlin.math.min
|
||||||
|
|
||||||
class AnvilResultListener : Listener {
|
class AnvilResultListener : Listener {
|
||||||
|
|
@ -198,9 +197,9 @@ class AnvilResultListener : Listener {
|
||||||
event: InventoryClickEvent,
|
event: InventoryClickEvent,
|
||||||
player: Player,
|
player: Player,
|
||||||
inventory: AnvilInventory,
|
inventory: AnvilInventory,
|
||||||
leftItem: ItemStack,
|
leftItem: ItemStack?,
|
||||||
leftRemoveCount: Int,
|
leftRemoveCount: Int,
|
||||||
rightItem: ItemStack,
|
rightItem: ItemStack?,
|
||||||
rightRemoveCount: Int,
|
rightRemoveCount: Int,
|
||||||
output: ItemStack,
|
output: ItemStack,
|
||||||
repairCost: Int,
|
repairCost: Int,
|
||||||
|
|
@ -215,10 +214,10 @@ class AnvilResultListener : Listener {
|
||||||
// If not creative middle click...
|
// If not creative middle click...
|
||||||
if (event.click != ClickType.MIDDLE) {
|
if (event.click != ClickType.MIDDLE) {
|
||||||
// We remove what should be removed
|
// We remove what should be removed
|
||||||
leftItem.amount -= leftRemoveCount
|
if (leftItem != null) leftItem.amount -= leftRemoveCount
|
||||||
inventory.setItem(ANVIL_INPUT_LEFT, leftItem)
|
inventory.setItem(ANVIL_INPUT_LEFT, leftItem)
|
||||||
|
|
||||||
rightItem.amount -= rightRemoveCount
|
if (rightItem != null) rightItem.amount -= rightRemoveCount
|
||||||
inventory.setItem(ANVIL_INPUT_RIGHT, rightItem)
|
inventory.setItem(ANVIL_INPUT_RIGHT, rightItem)
|
||||||
|
|
||||||
inventory.setItem(ANVIL_OUTPUT_SLOT, null)
|
inventory.setItem(ANVIL_OUTPUT_SLOT, null)
|
||||||
|
|
@ -335,18 +334,32 @@ class AnvilResultListener : Listener {
|
||||||
output, 0
|
output, 0
|
||||||
) //TODO DO REPAIR COST
|
) //TODO DO REPAIR COST
|
||||||
} else {
|
} else {
|
||||||
if (output != AnvilLoreEditUtil.handleLoreRemoveByBook(player, leftItem, rightItem, bookMeta)) return false
|
if (output != AnvilLoreEditUtil.handleLoreRemoveByBook(player, leftItem)) return false
|
||||||
|
|
||||||
// remove lore
|
// fill book meta
|
||||||
val leftCopy = leftItem.clone()
|
val meta = leftItem.itemMeta
|
||||||
val leftMeta = leftCopy.itemMeta!!
|
if (meta == null || !meta.hasLore()) return false
|
||||||
leftMeta.lore = null
|
val lore = meta.lore!!
|
||||||
leftCopy.itemMeta = leftMeta
|
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(
|
return extractAnvilResult(
|
||||||
event, player, inventory,
|
event, player, inventory,
|
||||||
leftCopy, 0,
|
leftItem, 1,
|
||||||
rightItem, 1,
|
rightCopy, 0,
|
||||||
output, 0
|
output, 0
|
||||||
) //TODO DO REPAIR COST
|
) //TODO DO REPAIR COST
|
||||||
}
|
}
|
||||||
|
|
@ -370,37 +383,62 @@ class AnvilResultListener : Listener {
|
||||||
|
|
||||||
// Remove custom name to paper
|
// Remove custom name to paper
|
||||||
val paperCopy = rightItem.clone()
|
val paperCopy = rightItem.clone()
|
||||||
|
paperCopy.amount = 1
|
||||||
paperMeta.setDisplayName(null)
|
paperMeta.setDisplayName(null)
|
||||||
paperCopy.itemMeta = paperMeta
|
paperCopy.itemMeta = paperMeta
|
||||||
|
|
||||||
return extractAnvilResult(
|
// TODO CONSUME PAPER CONFIG
|
||||||
event, player, inventory,
|
return if (rightItem.amount > 1) {
|
||||||
leftItem, 1,
|
extractAnvilResult(
|
||||||
paperCopy, 0,
|
event, player, inventory,
|
||||||
output, 0
|
paperCopy, 0,
|
||||||
) //TODO DO REPAIR COST
|
rightItem, 1,
|
||||||
|
output, 0
|
||||||
|
) //TODO DO REPAIR COST
|
||||||
|
} else {
|
||||||
|
extractAnvilResult(
|
||||||
|
event, player, inventory,
|
||||||
|
null, 0,
|
||||||
|
paperCopy, 0,
|
||||||
|
output, 0
|
||||||
|
) //TODO DO REPAIR COST
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (output != AnvilLoreEditUtil.handleLoreRemoveByPaper(player, leftItem, rightItem)) return false
|
if (output != AnvilLoreEditUtil.handleLoreRemoveByPaper(player, leftItem)) return false
|
||||||
|
|
||||||
// remove lore line
|
val leftMeta = leftItem.itemMeta
|
||||||
val leftCopy = leftItem.clone()
|
if (leftMeta == null || !leftMeta.hasLore()) return false
|
||||||
val leftMeta = leftCopy.itemMeta!!
|
val lore = leftMeta.lore!!
|
||||||
|
if (lore.isEmpty()) return false
|
||||||
|
|
||||||
val removeEnd = ConfigOptions.paperLoreOrderIsEnd
|
val removeEnd = ConfigOptions.paperLoreOrderIsEnd
|
||||||
val lore: ArrayList<String> = 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)
|
// Create result item
|
||||||
else lore.removeAt(0)
|
val rightClone = rightItem.clone()
|
||||||
|
rightClone.amount = 1
|
||||||
|
|
||||||
leftMeta.lore = if(lore.isEmpty()) null else lore
|
val resultMeta = rightClone.itemMeta ?: return false
|
||||||
leftCopy.itemMeta = leftMeta
|
resultMeta.setDisplayName(line)
|
||||||
|
rightClone.itemMeta = resultMeta
|
||||||
|
|
||||||
return extractAnvilResult(
|
return if (rightItem.amount > 1) {
|
||||||
event, player, inventory,
|
extractAnvilResult(
|
||||||
leftCopy, 0,
|
event, player, inventory,
|
||||||
rightItem, 1,
|
rightClone, 0,
|
||||||
output, 0
|
rightItem, 1,
|
||||||
) //TODO DO REPAIR COST
|
output, 0
|
||||||
|
) //TODO DO REPAIR COST
|
||||||
|
} else {
|
||||||
|
extractAnvilResult(
|
||||||
|
event, player, inventory,
|
||||||
|
null, 0,
|
||||||
|
rightClone, 0,
|
||||||
|
output, 0
|
||||||
|
) //TODO DO REPAIR COST
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,27 +37,14 @@ object AnvilLoreEditUtil {
|
||||||
return result
|
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
|
if (!hasLoreEditByBookPermission(player)) return null
|
||||||
|
|
||||||
val meta = first.itemMeta
|
// remove lore
|
||||||
if (meta == null || !meta.hasLore()) return null
|
val result = first.clone()
|
||||||
val lore = meta.lore!!
|
val leftMeta = result.itemMeta!!
|
||||||
if(lore.isEmpty()) return null
|
leftMeta.lore = null
|
||||||
|
result.itemMeta = leftMeta
|
||||||
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
|
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
@ -98,7 +85,7 @@ object AnvilLoreEditUtil {
|
||||||
|
|
||||||
val meta = second.itemMeta as BookMeta
|
val meta = second.itemMeta as BookMeta
|
||||||
return if (bookType) handleLoreAppendByBook(player, first, meta)
|
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
|
// Return true if append, false if remove, null if neither
|
||||||
|
|
@ -144,26 +131,21 @@ object AnvilLoreEditUtil {
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
fun handleLoreRemoveByPaper(player: Permissible, first: ItemStack, second: ItemStack): ItemStack? {
|
fun handleLoreRemoveByPaper(player: Permissible, first: ItemStack): ItemStack? {
|
||||||
if (!hasLoreEditByPaperPermission(player)) return null
|
if (!hasLoreEditByPaperPermission(player)) return null
|
||||||
|
|
||||||
val meta = first.itemMeta
|
// remove lore line
|
||||||
if (meta == null || !meta.hasLore()) return null
|
val result = first.clone()
|
||||||
val lore = meta.lore!!
|
val meta = result.itemMeta!!
|
||||||
if(lore.isEmpty()) return null
|
|
||||||
|
|
||||||
val removeEnd = ConfigOptions.paperLoreOrderIsEnd
|
val removeEnd = ConfigOptions.paperLoreOrderIsEnd
|
||||||
//TODO check & do color
|
val lore: ArrayList<String> = ArrayList(meta.lore!!)
|
||||||
val line = if(removeEnd) lore[lore.size-1]
|
|
||||||
else lore[0]
|
|
||||||
|
|
||||||
// Create result item
|
if(removeEnd) lore.removeAt(lore.size - 1)
|
||||||
val result = second.clone()
|
else lore.removeAt(0)
|
||||||
result.amount = 1
|
|
||||||
|
|
||||||
val resultMeta = result.itemMeta ?: return null
|
meta.lore = if(lore.isEmpty()) null else lore
|
||||||
resultMeta.setDisplayName(line)
|
result.itemMeta = meta
|
||||||
result.itemMeta = resultMeta
|
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
@ -172,7 +154,7 @@ object AnvilLoreEditUtil {
|
||||||
val bookType = paperLoreEditIsAppend(first, second) ?: return null
|
val bookType = paperLoreEditIsAppend(first, second) ?: return null
|
||||||
|
|
||||||
return if (bookType) handleLoreAppendByPaper(player, first, second)
|
return if (bookType) handleLoreAppendByPaper(player, first, second)
|
||||||
else handleLoreRemoveByPaper(player, first, second)
|
else handleLoreRemoveByPaper(player, first)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue