mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 08:14:00 +02:00
deduplicate lore edit logic
This commit is contained in:
parent
e6293be1c6
commit
106bc724a1
5 changed files with 230 additions and 198 deletions
|
|
@ -28,9 +28,10 @@ import xyz.alexcrea.cuanvil.util.anvil.AnvilColorUtil
|
||||||
import xyz.alexcrea.cuanvil.util.anvil.AnvilLoreEditUtil
|
import xyz.alexcrea.cuanvil.util.anvil.AnvilLoreEditUtil
|
||||||
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil
|
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil
|
||||||
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil.AnvilCost
|
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil.AnvilCost
|
||||||
|
import xyz.alexcrea.cuanvil.util.config.LoreEditType
|
||||||
import xyz.alexcrea.cuanvil.util.dialog.AnvilRenameDialogUtil
|
import xyz.alexcrea.cuanvil.util.dialog.AnvilRenameDialogUtil
|
||||||
|
|
||||||
object AnvilMergeUtil {
|
object AnvilMergeLogic {
|
||||||
|
|
||||||
open class AnvilResult {
|
open class AnvilResult {
|
||||||
companion object {
|
companion object {
|
||||||
|
|
@ -64,6 +65,19 @@ object AnvilMergeUtil {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class LoreEditResult: AnvilResult {
|
||||||
|
companion object {
|
||||||
|
val EMPTY = LoreEditResult(null, AnvilCost(), LoreEditType.APPEND_PAPER)
|
||||||
|
}
|
||||||
|
|
||||||
|
val type: LoreEditType
|
||||||
|
|
||||||
|
constructor(item: ItemStack?, cost: AnvilCost, type: LoreEditType) : super(item, cost) {
|
||||||
|
this.type = type
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun doRenaming(inventory: AnvilInventory,
|
fun doRenaming(inventory: AnvilInventory,
|
||||||
player: Player, first: ItemStack
|
player: Player, first: ItemStack
|
||||||
): AnvilResult {
|
): AnvilResult {
|
||||||
|
|
@ -258,23 +272,23 @@ object AnvilMergeUtil {
|
||||||
fun testLoreEdit(
|
fun testLoreEdit(
|
||||||
player: Player,
|
player: Player,
|
||||||
first: ItemStack, second: ItemStack
|
first: ItemStack, second: ItemStack
|
||||||
): AnvilResult {
|
): LoreEditResult {
|
||||||
val type = second.type
|
val type = second.type
|
||||||
var resultItem: ItemStack? = null
|
|
||||||
|
|
||||||
val cost = AnvilCost()
|
val result = if (Material.WRITABLE_BOOK == type)
|
||||||
if (Material.WRITABLE_BOOK == type) {
|
AnvilLoreEditUtil.tryLoreEditByBook(player, first, second)
|
||||||
resultItem = AnvilLoreEditUtil.tryLoreEditByBook(player, first, second, cost)
|
else if (Material.PAPER == type)
|
||||||
} else if (Material.PAPER == type) {
|
AnvilLoreEditUtil.tryLoreEditByPaper(player, first, second)
|
||||||
resultItem = AnvilLoreEditUtil.tryLoreEditByPaper(player, first, second, cost)
|
else LoreEditResult.EMPTY
|
||||||
}
|
|
||||||
|
|
||||||
if (resultItem.isAir || first == resultItem) {
|
if(result.isEmpty()) return result
|
||||||
|
|
||||||
|
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")
|
||||||
return AnvilResult.EMPTY
|
return LoreEditResult.EMPTY
|
||||||
}
|
}
|
||||||
|
|
||||||
return AnvilResult(resultItem, cost)
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -15,8 +15,9 @@ import org.bukkit.inventory.AnvilInventory
|
||||||
import org.bukkit.inventory.InventoryView
|
import org.bukkit.inventory.InventoryView
|
||||||
import org.bukkit.inventory.ItemStack
|
import org.bukkit.inventory.ItemStack
|
||||||
import org.bukkit.inventory.meta.BookMeta
|
import org.bukkit.inventory.meta.BookMeta
|
||||||
import xyz.alexcrea.cuanvil.anvil.AnvilMergeUtil
|
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic
|
||||||
import xyz.alexcrea.cuanvil.anvil.AnvilMergeUtil.AnvilResult
|
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.AnvilResult
|
||||||
|
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.LoreEditResult
|
||||||
import xyz.alexcrea.cuanvil.dependency.DependencyManager
|
import xyz.alexcrea.cuanvil.dependency.DependencyManager
|
||||||
import xyz.alexcrea.cuanvil.dependency.economy.EconomyManager
|
import xyz.alexcrea.cuanvil.dependency.economy.EconomyManager
|
||||||
import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil.setComponentDisplayName
|
import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil.setComponentDisplayName
|
||||||
|
|
@ -112,14 +113,14 @@ class AnvilResultListener : Listener {
|
||||||
}
|
}
|
||||||
|
|
||||||
// For lore edit
|
// For lore edit
|
||||||
if (handleBookLoreEdit(event, inventory, player, leftItem, rightItem, output)) {
|
val loreResult = AnvilMergeLogic.testLoreEdit(player, leftItem, rightItem)
|
||||||
return
|
if(!loreResult.isEmpty()) {
|
||||||
} else if (handlePaperLoreEdit(event, inventory, player, leftItem, rightItem, output)) {
|
if(loreResult.type.isBook)
|
||||||
|
handleBookLoreEdit(event, inventory, player, leftItem, rightItem, loreResult)
|
||||||
|
else
|
||||||
|
handlePaperLoreEdit(event, inventory, player, leftItem, rightItem, loreResult)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Else there was no working situation somehow so we deny
|
|
||||||
event.result = Event.Result.DENY
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun onCustomCraft(
|
private fun onCustomCraft(
|
||||||
|
|
@ -341,7 +342,7 @@ class AnvilResultListener : Listener {
|
||||||
player: Player,
|
player: Player,
|
||||||
inventory: AnvilInventory
|
inventory: AnvilInventory
|
||||||
) {
|
) {
|
||||||
val result = AnvilMergeUtil.testUnitRepair(inventory, player,
|
val result = AnvilMergeLogic.testUnitRepair(inventory, player,
|
||||||
leftItem.clone(), rightItem,
|
leftItem.clone(), rightItem,
|
||||||
unitRepairResult)
|
unitRepairResult)
|
||||||
|
|
||||||
|
|
@ -356,99 +357,90 @@ class AnvilResultListener : Listener {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getFromLoreEditXpCost(
|
|
||||||
cost: AnvilCost,
|
|
||||||
player: Player,
|
|
||||||
inventory: AnvilInventory,
|
|
||||||
): AnvilCost {
|
|
||||||
if (GameMode.CREATIVE == player.gameMode) return AnvilCost(0)
|
|
||||||
|
|
||||||
if (ConfigOptions.shouldUseMoney(player)) {
|
|
||||||
cost.isMonetary = true
|
|
||||||
if (!EconomyManager.economy!!.has(player, cost.asMonetaryCost()))
|
|
||||||
cost.valid = false
|
|
||||||
} else {
|
|
||||||
val repairCost = cost.asXpCost()
|
|
||||||
|
|
||||||
if ((inventory.maximumRepairCost <= repairCost)
|
|
||||||
|| (player.level < repairCost)
|
|
||||||
)
|
|
||||||
cost.valid = false
|
|
||||||
}
|
|
||||||
|
|
||||||
return cost
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun handleBookLoreEdit(
|
private fun handleBookLoreEdit(
|
||||||
event: InventoryClickEvent,
|
event: InventoryClickEvent,
|
||||||
inventory: AnvilInventory,
|
inventory: AnvilInventory,
|
||||||
player: Player,
|
player: Player,
|
||||||
leftItem: ItemStack,
|
leftItem: ItemStack,
|
||||||
rightItem: ItemStack,
|
rightItem: ItemStack,
|
||||||
output: ItemStack,
|
result: LoreEditResult
|
||||||
): Boolean {
|
) {
|
||||||
if (Material.WRITABLE_BOOK != rightItem.type) return false
|
if (result.type.isAppend)
|
||||||
val bookMeta = rightItem.itemMeta as BookMeta? ?: return false
|
handleBookLoreAppend(event, inventory, player, rightItem, result)
|
||||||
|
else
|
||||||
|
handleBookLoreRemove(event, inventory, player, leftItem, rightItem, result)
|
||||||
|
}
|
||||||
|
|
||||||
val editType = AnvilLoreEditUtil.bookLoreEditIsAppend(leftItem, rightItem) ?: return false
|
private fun handleBookLoreAppend(
|
||||||
|
event: InventoryClickEvent,
|
||||||
|
inventory: AnvilInventory,
|
||||||
|
player: Player,
|
||||||
|
rightItem: ItemStack,
|
||||||
|
result: LoreEditResult
|
||||||
|
) {
|
||||||
|
val bookMeta = rightItem.itemMeta as BookMeta? ?: return
|
||||||
|
|
||||||
val cost = AnvilCost()
|
// Remove pages to book
|
||||||
if (editType) {
|
val clearedBook: ItemStack?
|
||||||
if (output != AnvilLoreEditUtil.handleLoreAppendByBook(player, leftItem, bookMeta, cost)) return false
|
if (LoreEditType.APPEND_BOOK.doConsume) {
|
||||||
|
clearedBook = null
|
||||||
// Remove pages to book
|
|
||||||
val clearedBook: ItemStack?
|
|
||||||
if (LoreEditType.APPEND_BOOK.doConsume) {
|
|
||||||
clearedBook = null
|
|
||||||
} else {
|
|
||||||
clearedBook = rightItem.clone()
|
|
||||||
bookMeta.pages = Collections.emptyList()
|
|
||||||
clearedBook.itemMeta = bookMeta
|
|
||||||
}
|
|
||||||
|
|
||||||
return extractAnvilResult(
|
|
||||||
event, player, inventory,
|
|
||||||
null, 0,
|
|
||||||
clearedBook, 0,
|
|
||||||
output, getFromLoreEditXpCost(cost, player, inventory)
|
|
||||||
)
|
|
||||||
} else {
|
} else {
|
||||||
if (output != AnvilLoreEditUtil.handleLoreRemoveByBook(player, leftItem, cost)) return false
|
clearedBook = rightItem.clone()
|
||||||
|
bookMeta.pages = Collections.emptyList()
|
||||||
|
clearedBook.itemMeta = bookMeta
|
||||||
|
}
|
||||||
|
|
||||||
// fill book meta
|
extractAnvilResult(
|
||||||
val lore = DependencyManager.stripLore(leftItem)
|
event, player, inventory,
|
||||||
if (lore.isEmpty()) return false
|
null, 0,
|
||||||
|
clearedBook, 0,
|
||||||
|
result
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
val rightCopy: ItemStack?
|
private fun handleBookLoreRemove(
|
||||||
if (LoreEditType.REMOVE_BOOK.doConsume) {
|
event: InventoryClickEvent,
|
||||||
rightCopy = null
|
inventory: AnvilInventory,
|
||||||
} else {
|
player: Player,
|
||||||
// Uncolor the page
|
leftItem: ItemStack,
|
||||||
AnvilLoreEditUtil.uncolorLines(player, lore, LoreEditType.REMOVE_BOOK)
|
rightItem: ItemStack,
|
||||||
|
result: LoreEditResult
|
||||||
|
){
|
||||||
|
val bookMeta = rightItem.itemMeta as BookMeta? ?: return
|
||||||
|
|
||||||
val bookPage = StringBuilder()
|
// fill book meta
|
||||||
lore.forEach {
|
val lore = DependencyManager.stripLore(leftItem)
|
||||||
if (bookPage.isNotEmpty()) bookPage.append('\n')
|
if (lore.isEmpty()) return
|
||||||
if (it == null) return@forEach
|
|
||||||
|
|
||||||
bookPage.append(MiniMessageUtil.plain_text_mm.serialize(it))
|
val rightCopy: ItemStack?
|
||||||
}
|
if (LoreEditType.REMOVE_BOOK.doConsume) {
|
||||||
|
rightCopy = null
|
||||||
|
} else {
|
||||||
|
// Uncolor the page
|
||||||
|
AnvilLoreEditUtil.uncolorLines(player, lore, LoreEditType.REMOVE_BOOK)
|
||||||
|
|
||||||
val resultPage = bookPage.toString()
|
val bookPage = StringBuilder()
|
||||||
//TODO maybe check page size ? bc it may be too big ???
|
lore.forEach {
|
||||||
|
if (bookPage.isNotEmpty()) bookPage.append('\n')
|
||||||
|
if (it == null) return@forEach
|
||||||
|
|
||||||
rightCopy = rightItem.clone()
|
bookPage.append(MiniMessageUtil.plain_text_mm.serialize(it))
|
||||||
bookMeta.setPages(resultPage)
|
|
||||||
rightCopy.itemMeta = bookMeta
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return extractAnvilResult(
|
val resultPage = bookPage.toString()
|
||||||
event, player, inventory,
|
//TODO maybe check page size ? bc it may be too big ???
|
||||||
null, 0,
|
|
||||||
rightCopy, 0,
|
rightCopy = rightItem.clone()
|
||||||
output, getFromLoreEditXpCost(cost, player, inventory)
|
bookMeta.setPages(resultPage)
|
||||||
)
|
rightCopy.itemMeta = bookMeta
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extractAnvilResult(
|
||||||
|
event, player, inventory,
|
||||||
|
null, 0,
|
||||||
|
rightCopy, 0,
|
||||||
|
result
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handlePaperLoreEdit(
|
private fun handlePaperLoreEdit(
|
||||||
|
|
@ -457,89 +449,101 @@ class AnvilResultListener : Listener {
|
||||||
player: Player,
|
player: Player,
|
||||||
leftItem: ItemStack,
|
leftItem: ItemStack,
|
||||||
rightItem: ItemStack,
|
rightItem: ItemStack,
|
||||||
output: ItemStack,
|
result: LoreEditResult
|
||||||
): Boolean {
|
) {
|
||||||
if (Material.PAPER != rightItem.type) return false
|
if (result.type.isAppend)
|
||||||
val paperMeta = rightItem.itemMeta ?: return false
|
handlePaperLoreAppend(event, inventory, player, rightItem, result)
|
||||||
|
else
|
||||||
|
handlePaperLoreRemove(event, inventory, player, leftItem, rightItem, result)
|
||||||
|
}
|
||||||
|
|
||||||
val editTypeIsAppend = AnvilLoreEditUtil.paperLoreEditIsAppend(leftItem, rightItem) ?: return false
|
private fun handlePaperLoreAppend(
|
||||||
|
event: InventoryClickEvent,
|
||||||
|
inventory: AnvilInventory,
|
||||||
|
player: Player,
|
||||||
|
rightItem: ItemStack,
|
||||||
|
result: LoreEditResult
|
||||||
|
) {
|
||||||
|
val paperMeta = rightItem.itemMeta ?: return
|
||||||
|
|
||||||
val cost = AnvilCost()
|
val paperCopy: ItemStack?
|
||||||
if (editTypeIsAppend) {
|
if (LoreEditType.APPEND_PAPER.doConsume) {
|
||||||
if (output != AnvilLoreEditUtil.handleLoreAppendByPaper(player, leftItem, rightItem, cost)) return false
|
paperCopy = null
|
||||||
|
|
||||||
val paperCopy: ItemStack?
|
|
||||||
if (LoreEditType.APPEND_PAPER.doConsume) {
|
|
||||||
paperCopy = null
|
|
||||||
} else {
|
|
||||||
// Remove custom name to paper
|
|
||||||
paperCopy = rightItem.clone()
|
|
||||||
paperCopy.amount = 1
|
|
||||||
paperMeta.setComponentDisplayName(null)
|
|
||||||
paperCopy.itemMeta = paperMeta
|
|
||||||
}
|
|
||||||
|
|
||||||
return if (rightItem.amount > 1) {
|
|
||||||
extractAnvilResult(
|
|
||||||
event, player, inventory,
|
|
||||||
paperCopy, 0,
|
|
||||||
rightItem, 1,
|
|
||||||
output, getFromLoreEditXpCost(cost, player, inventory)
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
extractAnvilResult(
|
|
||||||
event, player, inventory,
|
|
||||||
null, 0,
|
|
||||||
paperCopy, 0,
|
|
||||||
output, getFromLoreEditXpCost(cost, player, inventory)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (output != AnvilLoreEditUtil.handleLoreRemoveByPaper(player, leftItem, cost)) return false
|
// Remove custom name to paper
|
||||||
|
paperCopy = rightItem.clone()
|
||||||
val leftMeta = leftItem.itemMeta
|
paperCopy.amount = 1
|
||||||
if (leftMeta == null || !leftMeta.hasLore()) return false
|
paperMeta.setComponentDisplayName(null)
|
||||||
val lore = DependencyManager.stripLore(leftItem)
|
paperCopy.itemMeta = paperMeta
|
||||||
if (lore.isEmpty()) return false
|
|
||||||
|
|
||||||
// Create result item
|
|
||||||
val rightClone: ItemStack?
|
|
||||||
if (LoreEditType.REMOVE_PAPER.doConsume) {
|
|
||||||
rightClone = null
|
|
||||||
} else {
|
|
||||||
val removeEnd = LoreEditConfigUtil.paperLoreOrderIsEnd
|
|
||||||
val line = if (removeEnd) lore[lore.size - 1]
|
|
||||||
else lore[0]
|
|
||||||
|
|
||||||
// uncolor the line
|
|
||||||
val ref = AtomicReference(line)
|
|
||||||
AnvilLoreEditUtil.uncolorLine(player, ref, LoreEditType.REMOVE_PAPER)
|
|
||||||
|
|
||||||
rightClone = rightItem.clone()
|
|
||||||
rightClone.amount = 1
|
|
||||||
|
|
||||||
val resultMeta = rightClone.itemMeta ?: return false
|
|
||||||
resultMeta.setComponentDisplayName(ref.get())
|
|
||||||
rightClone.itemMeta = resultMeta
|
|
||||||
}
|
|
||||||
|
|
||||||
return if (rightItem.amount > 1) {
|
|
||||||
extractAnvilResult(
|
|
||||||
event, player, inventory,
|
|
||||||
rightClone, 0,
|
|
||||||
rightItem, 1,
|
|
||||||
output, getFromLoreEditXpCost(cost, player, inventory)
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
extractAnvilResult(
|
|
||||||
event, player, inventory,
|
|
||||||
null, 0,
|
|
||||||
rightClone, 0,
|
|
||||||
output, getFromLoreEditXpCost(cost, player, inventory)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (rightItem.amount > 1) {
|
||||||
|
extractAnvilResult(
|
||||||
|
event, player, inventory,
|
||||||
|
paperCopy, 0,
|
||||||
|
rightItem, 1,
|
||||||
|
result
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
extractAnvilResult(
|
||||||
|
event, player, inventory,
|
||||||
|
null, 0,
|
||||||
|
paperCopy, 0,
|
||||||
|
result
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun handlePaperLoreRemove(
|
||||||
|
event: InventoryClickEvent,
|
||||||
|
inventory: AnvilInventory,
|
||||||
|
player: Player,
|
||||||
|
leftItem: ItemStack,
|
||||||
|
rightItem: ItemStack,
|
||||||
|
result: LoreEditResult
|
||||||
|
) {
|
||||||
|
val leftMeta = leftItem.itemMeta
|
||||||
|
if (leftMeta == null || !leftMeta.hasLore()) return
|
||||||
|
|
||||||
|
val lore = DependencyManager.stripLore(leftItem)
|
||||||
|
if (lore.isEmpty()) return
|
||||||
|
|
||||||
|
// Create result item
|
||||||
|
val rightClone: ItemStack?
|
||||||
|
if (LoreEditType.REMOVE_PAPER.doConsume) {
|
||||||
|
rightClone = null
|
||||||
|
} else {
|
||||||
|
val removeEnd = LoreEditConfigUtil.paperLoreOrderIsEnd
|
||||||
|
val line = if (removeEnd) lore[lore.size - 1]
|
||||||
|
else lore[0]
|
||||||
|
|
||||||
|
// uncolor the line
|
||||||
|
val ref = AtomicReference(line)
|
||||||
|
AnvilLoreEditUtil.uncolorLine(player, ref, LoreEditType.REMOVE_PAPER)
|
||||||
|
|
||||||
|
rightClone = rightItem.clone()
|
||||||
|
rightClone.amount = 1
|
||||||
|
|
||||||
|
val resultMeta = rightClone.itemMeta ?: return
|
||||||
|
resultMeta.setComponentDisplayName(ref.get())
|
||||||
|
rightClone.itemMeta = resultMeta
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rightItem.amount > 1) {
|
||||||
|
extractAnvilResult(
|
||||||
|
event, player, inventory,
|
||||||
|
rightClone, 0,
|
||||||
|
rightItem, 1,
|
||||||
|
result
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
extractAnvilResult(
|
||||||
|
event, player, inventory,
|
||||||
|
null, 0,
|
||||||
|
rightClone, 0,
|
||||||
|
result
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -13,12 +13,12 @@ import org.bukkit.inventory.AnvilInventory
|
||||||
import org.bukkit.inventory.ItemStack
|
import org.bukkit.inventory.ItemStack
|
||||||
import org.bukkit.inventory.meta.EnchantmentStorageMeta
|
import org.bukkit.inventory.meta.EnchantmentStorageMeta
|
||||||
import org.bukkit.inventory.meta.ItemMeta
|
import org.bukkit.inventory.meta.ItemMeta
|
||||||
import xyz.alexcrea.cuanvil.anvil.AnvilMergeUtil.AnvilResult
|
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.AnvilResult
|
||||||
import xyz.alexcrea.cuanvil.anvil.AnvilMergeUtil.doMerge
|
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.doMerge
|
||||||
import xyz.alexcrea.cuanvil.anvil.AnvilMergeUtil.doRenaming
|
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.doRenaming
|
||||||
import xyz.alexcrea.cuanvil.anvil.AnvilMergeUtil.testCustomRecipe
|
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.testCustomRecipe
|
||||||
import xyz.alexcrea.cuanvil.anvil.AnvilMergeUtil.testLoreEdit
|
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.testLoreEdit
|
||||||
import xyz.alexcrea.cuanvil.anvil.AnvilMergeUtil.testUnitRepair
|
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.testUnitRepair
|
||||||
import xyz.alexcrea.cuanvil.dependency.DependencyManager
|
import xyz.alexcrea.cuanvil.dependency.DependencyManager
|
||||||
import xyz.alexcrea.cuanvil.util.JustForEasierHotswapUtil
|
import xyz.alexcrea.cuanvil.util.JustForEasierHotswapUtil
|
||||||
import xyz.alexcrea.cuanvil.util.MaterialUtil.isAir
|
import xyz.alexcrea.cuanvil.util.MaterialUtil.isAir
|
||||||
|
|
|
||||||
|
|
@ -5,10 +5,12 @@ import org.bukkit.entity.HumanEntity
|
||||||
import org.bukkit.inventory.ItemStack
|
import org.bukkit.inventory.ItemStack
|
||||||
import org.bukkit.inventory.meta.BookMeta
|
import org.bukkit.inventory.meta.BookMeta
|
||||||
import org.bukkit.permissions.Permissible
|
import org.bukkit.permissions.Permissible
|
||||||
|
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.LoreEditResult
|
||||||
import xyz.alexcrea.cuanvil.dependency.DependencyManager
|
import xyz.alexcrea.cuanvil.dependency.DependencyManager
|
||||||
import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil.componentLore
|
import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil.componentLore
|
||||||
import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil.setComponentLore
|
import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil.setComponentLore
|
||||||
import xyz.alexcrea.cuanvil.util.MiniMessageUtil
|
import xyz.alexcrea.cuanvil.util.MiniMessageUtil
|
||||||
|
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil.AnvilCost
|
||||||
import xyz.alexcrea.cuanvil.util.config.LoreEditConfigUtil
|
import xyz.alexcrea.cuanvil.util.config.LoreEditConfigUtil
|
||||||
import xyz.alexcrea.cuanvil.util.config.LoreEditType
|
import xyz.alexcrea.cuanvil.util.config.LoreEditType
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
@ -31,7 +33,7 @@ object AnvilLoreEditUtil {
|
||||||
player: Permissible,
|
player: Permissible,
|
||||||
first: ItemStack,
|
first: ItemStack,
|
||||||
book: BookMeta,
|
book: BookMeta,
|
||||||
cost: AnvilXpUtil.AnvilCost
|
cost: AnvilCost
|
||||||
): ItemStack? {
|
): ItemStack? {
|
||||||
if (!hasLoreEditByBookPermission(player)) return null
|
if (!hasLoreEditByBookPermission(player)) return null
|
||||||
|
|
||||||
|
|
@ -60,7 +62,7 @@ object AnvilLoreEditUtil {
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
fun handleLoreRemoveByBook(player: Permissible, first: ItemStack, cost: AnvilXpUtil.AnvilCost): ItemStack? {
|
fun handleLoreRemoveByBook(player: Permissible, first: ItemStack, cost: AnvilCost): ItemStack? {
|
||||||
if (!hasLoreEditByBookPermission(player)) return null
|
if (!hasLoreEditByBookPermission(player)) return null
|
||||||
|
|
||||||
// remove lore
|
// remove lore
|
||||||
|
|
@ -116,12 +118,17 @@ object AnvilLoreEditUtil {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
fun tryLoreEditByBook(player: HumanEntity, first: ItemStack, second: ItemStack, cost: AnvilXpUtil.AnvilCost): ItemStack? {
|
fun tryLoreEditByBook(player: HumanEntity, first: ItemStack, second: ItemStack): LoreEditResult {
|
||||||
val isAppend = bookLoreEditIsAppend(first, second) ?: return null
|
val isAppend = bookLoreEditIsAppend(first, second) ?: return LoreEditResult.EMPTY
|
||||||
|
val type = if(isAppend) LoreEditType.APPEND_BOOK else LoreEditType.REMOVE_BOOK
|
||||||
|
|
||||||
val meta = second.itemMeta as BookMeta
|
val meta = second.itemMeta as BookMeta
|
||||||
return if (isAppend) handleLoreAppendByBook(player, first, meta, cost)
|
val cost = AnvilCost()
|
||||||
|
val item = if (isAppend)
|
||||||
|
handleLoreAppendByBook(player, first, meta, cost)
|
||||||
else handleLoreRemoveByBook(player, first, cost)
|
else handleLoreRemoveByBook(player, first, cost)
|
||||||
|
|
||||||
|
return LoreEditResult(item, cost, type)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return true if appended, false if removed, null if neither
|
// Return true if appended, false if removed, null if neither
|
||||||
|
|
@ -147,7 +154,7 @@ object AnvilLoreEditUtil {
|
||||||
player: Permissible,
|
player: Permissible,
|
||||||
first: ItemStack,
|
first: ItemStack,
|
||||||
second: ItemStack,
|
second: ItemStack,
|
||||||
cost: AnvilXpUtil.AnvilCost
|
cost: AnvilCost
|
||||||
): ItemStack? {
|
): ItemStack? {
|
||||||
if (!hasLoreEditByPaperPermission(player)) return null
|
if (!hasLoreEditByPaperPermission(player)) return null
|
||||||
|
|
||||||
|
|
@ -181,7 +188,7 @@ object AnvilLoreEditUtil {
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
fun handleLoreRemoveByPaper(player: Permissible, first: ItemStack, cost: AnvilXpUtil.AnvilCost): ItemStack? {
|
fun handleLoreRemoveByPaper(player: Permissible, first: ItemStack, cost: AnvilCost): ItemStack? {
|
||||||
if (!hasLoreEditByPaperPermission(player)) return null
|
if (!hasLoreEditByPaperPermission(player)) return null
|
||||||
|
|
||||||
// remove lore line
|
// remove lore line
|
||||||
|
|
@ -222,17 +229,21 @@ object AnvilLoreEditUtil {
|
||||||
fun tryLoreEditByPaper(
|
fun tryLoreEditByPaper(
|
||||||
player: HumanEntity,
|
player: HumanEntity,
|
||||||
first: ItemStack,
|
first: ItemStack,
|
||||||
second: ItemStack,
|
second: ItemStack
|
||||||
cost: AnvilXpUtil.AnvilCost
|
): LoreEditResult {
|
||||||
): ItemStack? {
|
val isAppend = paperLoreEditIsAppend(first, second) ?: return LoreEditResult.EMPTY
|
||||||
val isAppend = paperLoreEditIsAppend(first, second) ?: return null
|
val type = if(isAppend) LoreEditType.APPEND_BOOK else LoreEditType.REMOVE_BOOK
|
||||||
|
|
||||||
return if (isAppend) handleLoreAppendByPaper(player, first, second, cost)
|
val cost = AnvilCost()
|
||||||
|
val item = if (isAppend)
|
||||||
|
handleLoreAppendByPaper(player, first, second, cost)
|
||||||
else handleLoreRemoveByPaper(player, first, cost)
|
else handleLoreRemoveByPaper(player, first, cost)
|
||||||
|
|
||||||
|
return LoreEditResult(item, cost, type)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun baseEditLoreXpCost(
|
private fun baseEditLoreXpCost(
|
||||||
cost: AnvilXpUtil.AnvilCost,
|
cost: AnvilCost,
|
||||||
first: ItemStack,
|
first: ItemStack,
|
||||||
result: ItemStack,
|
result: ItemStack,
|
||||||
editType: LoreEditType
|
editType: LoreEditType
|
||||||
|
|
|
||||||
|
|
@ -18,20 +18,23 @@ import xyz.alexcrea.cuanvil.config.ConfigHolder.DEFAULT_CONFIG as CONFIG
|
||||||
enum class LoreEditType(
|
enum class LoreEditType(
|
||||||
val rootPath: String,
|
val rootPath: String,
|
||||||
val useType: AnvilUseType,
|
val useType: AnvilUseType,
|
||||||
|
val isBook: Boolean,
|
||||||
val isAppend: Boolean,
|
val isAppend: Boolean,
|
||||||
val isMultiLine: Boolean,
|
val isMultiLine: Boolean,
|
||||||
) {
|
) {
|
||||||
APPEND_BOOK(AnvilUseType.LORE_EDIT_BOOK_APPEND, true, true),
|
APPEND_BOOK(AnvilUseType.LORE_EDIT_BOOK_APPEND, true, true, true),
|
||||||
REMOVE_BOOK(AnvilUseType.LORE_EDIT_BOOK_REMOVE, false, true),
|
REMOVE_BOOK(AnvilUseType.LORE_EDIT_BOOK_REMOVE, true, false, true),
|
||||||
APPEND_PAPER(AnvilUseType.LORE_EDIT_PAPER_APPEND, true, false),
|
APPEND_PAPER(AnvilUseType.LORE_EDIT_PAPER_APPEND, false, true, false),
|
||||||
REMOVE_PAPER(AnvilUseType.LORE_EDIT_PAPER_REMOVE, false, false),
|
REMOVE_PAPER(AnvilUseType.LORE_EDIT_PAPER_REMOVE, false, false, false),
|
||||||
;
|
;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
useType: AnvilUseType,
|
useType: AnvilUseType,
|
||||||
|
isPaper: Boolean,
|
||||||
isAppend: Boolean,
|
isAppend: Boolean,
|
||||||
isMultiLine: Boolean,
|
isMultiLine: Boolean,
|
||||||
) : this(useType.path, useType, isAppend, isMultiLine)
|
) : this(useType.path, useType,
|
||||||
|
isPaper, isAppend, isMultiLine)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If this edit type is enabled
|
* If this edit type is enabled
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue