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