move anvil cost to its own class

This commit is contained in:
alexcrea 2026-06-10 14:59:28 +02:00
parent 2efb6e55e2
commit 49b0054eca
Signed by: alexcrea
GPG key ID: E346CD16413450E3
11 changed files with 101 additions and 90 deletions

View file

@ -8,8 +8,8 @@ import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import xyz.alexcrea.cuanvil.anvil.AnvilCost;
import xyz.alexcrea.cuanvil.anvil.AnvilUseType; import xyz.alexcrea.cuanvil.anvil.AnvilUseType;
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil;
/** /**
* Called after custom anvil processed the click on the result on the anvil inventory. * Called after custom anvil processed the click on the result on the anvil inventory.
@ -48,7 +48,7 @@ public class CATreatAnvilResult2Event extends Event {
@Nullable @Nullable
private ItemStack result; private ItemStack result;
private final AnvilXpUtil.AnvilCost cost; private final AnvilCost cost;
@ApiStatus.Internal @ApiStatus.Internal
public CATreatAnvilResult2Event( public CATreatAnvilResult2Event(
@ -56,7 +56,7 @@ public class CATreatAnvilResult2Event extends Event {
Inventory inv, Inventory inv,
AnvilUseType useType, AnvilUseType useType,
@Nullable ItemStack result, @Nullable ItemStack result,
AnvilXpUtil.AnvilCost cost) { AnvilCost cost) {
this.view = view; this.view = view;
this.useType = useType; this.useType = useType;
@ -190,7 +190,7 @@ public class CATreatAnvilResult2Event extends Event {
* *
* @return the current anvil cost * @return the current anvil cost
*/ */
public AnvilXpUtil.AnvilCost getCost() { public AnvilCost getCost() {
return cost; return cost;
} }
} }

View file

@ -6,8 +6,8 @@ import org.bukkit.event.inventory.PrepareAnvilEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import xyz.alexcrea.cuanvil.anvil.AnvilCost;
import xyz.alexcrea.cuanvil.anvil.AnvilUseType; import xyz.alexcrea.cuanvil.anvil.AnvilUseType;
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil.AnvilCost;
/** /**
* Called after custom anvil processed the click on the result on the anvil inventory. * Called after custom anvil processed the click on the result on the anvil inventory.
@ -108,8 +108,8 @@ public class CATreatAnvilResultEvent extends Event {
* <li>Item rename</li> * <li>Item rename</li>
* </ul> * </ul>
* *
* @deprecated use #{@link #getCost()} instead
* @return The current cost. * @return The current cost.
* @deprecated use #{@link #getCost()} instead
*/ */
@Deprecated(forRemoval = true, since = "1.17.0") @Deprecated(forRemoval = true, since = "1.17.0")
public int getLevelCost() { public int getLevelCost() {
@ -130,8 +130,8 @@ public class CATreatAnvilResultEvent extends Event {
* <li>Item rename</li> * <li>Item rename</li>
* </ul> * </ul>
* *
* @deprecated use #{@link #getCost()} and set value on this instead
* @param levelCost The new cost. * @param levelCost The new cost.
* @deprecated use #{@link #getCost()} and set value on this instead
*/ */
@Deprecated(forRemoval = true, since = "1.17.0") @Deprecated(forRemoval = true, since = "1.17.0")
public void setLevelCost(int levelCost) { public void setLevelCost(int levelCost) {

View file

@ -0,0 +1,55 @@
package xyz.alexcrea.cuanvil.anvil
import java.math.BigDecimal
import io.delilaheve.util.ConfigOptions.getMonetaryMultiplier as moneyMultiplier
open class AnvilCost {
private val isAlone: Boolean
var valid = true // Get set as invalid if cost can be satisfied
var isMonetary = false
var generic = 0
var enchantment = 0
var repair = 0
var rename = 0
var lore = 0
var illegalPenalty = 0
var workPenalty = 0
var recipe = 0
constructor(generic: Int) {
this.generic = generic
isAlone = true
}
constructor() {
isAlone = false
}
fun asXpCost(): Int {
return generic + enchantment + repair + rename + lore + illegalPenalty + workPenalty + recipe
}
open fun asMonetaryCost(): BigDecimal {
// multiply by per use type multipliers
return BigDecimal(generic)
.add(BigDecimal(enchantment).multiply(moneyMultiplier("enchantment")))
.add(BigDecimal(repair).multiply(moneyMultiplier("repair")))
.add(BigDecimal(rename).multiply(moneyMultiplier("rename")))
.add(BigDecimal(lore).multiply(moneyMultiplier("lore_edit")))
.add(BigDecimal(enchantment).multiply(moneyMultiplier("enchantment")))
.add(BigDecimal(illegalPenalty).multiply(moneyMultiplier("work_penalty")))
.add(BigDecimal(workPenalty).multiply(moneyMultiplier("work_penalty")))
.add(BigDecimal(recipe).multiply(moneyMultiplier("recipe")))
.multiply(moneyMultiplier("global"))
}
}
class CustomCraftCost(val rawCost: Int): AnvilCost() {
override fun asMonetaryCost(): BigDecimal {
return BigDecimal(rawCost)
.multiply(moneyMultiplier("global"))
}
}

View file

@ -29,8 +29,6 @@ import xyz.alexcrea.cuanvil.util.UnitRepairUtil.getRepair
import xyz.alexcrea.cuanvil.util.anvil.AnvilColorUtil 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.CustomCraftCost
import xyz.alexcrea.cuanvil.util.config.LoreEditType import xyz.alexcrea.cuanvil.util.config.LoreEditType
import xyz.alexcrea.cuanvil.util.dialog.AnvilRenameDialogUtil import xyz.alexcrea.cuanvil.util.dialog.AnvilRenameDialogUtil
@ -115,7 +113,8 @@ object AnvilMergeLogic {
} }
cost.workPenalty = AnvilXpUtil.calculatePenalty(first, null, resultItem, AnvilUseType.RENAME_ONLY) cost.workPenalty = AnvilXpUtil.calculatePenalty(first, null, resultItem, AnvilUseType.RENAME_ONLY)
val result = DependencyManager.tryTreatAnvilResult(view, inventory, player, resultItem, AnvilUseType.RENAME_ONLY, cost) val result =
DependencyManager.tryTreatAnvilResult(view, inventory, player, resultItem, AnvilUseType.RENAME_ONLY, cost)
return AnvilResult(result, cost) return AnvilResult(result, cost)
} }
@ -220,7 +219,8 @@ object AnvilMergeLogic {
// Calculate rename cost // Calculate rename cost
cost.rename = handleRename(resultItem, inventory, player) cost.rename = handleRename(resultItem, inventory, player)
val result = DependencyManager.tryTreatAnvilResult(view, inventory, player, resultItem, AnvilUseType.MERGE, cost) val result =
DependencyManager.tryTreatAnvilResult(view, inventory, player, resultItem, AnvilUseType.MERGE, cost)
return AnvilResult(result, cost) return AnvilResult(result, cost)
} }
@ -261,7 +261,8 @@ object AnvilMergeLogic {
cost.recipe = if (recipe.removeExactLinearXp) AnvilXpUtil.calculateMinimumLevelForXp(xpCost) cost.recipe = if (recipe.removeExactLinearXp) AnvilXpUtil.calculateMinimumLevelForXp(xpCost)
else AnvilXpUtil.calculateLevelForXp(xpCost) else AnvilXpUtil.calculateLevelForXp(xpCost)
val result = DependencyManager.tryTreatAnvilResult(view, inventory, player, resultItem, AnvilUseType.CUSTOM_CRAFT, cost) val result =
DependencyManager.tryTreatAnvilResult(view, inventory, player, resultItem, AnvilUseType.CUSTOM_CRAFT, cost)
return CustomCraftResult(result, cost, amount, recipe) return CustomCraftResult(result, cost, amount, recipe)
} }
@ -300,7 +301,8 @@ object AnvilMergeLogic {
return UnitRepairResult.EMPTY return UnitRepairResult.EMPTY
} }
val result = DependencyManager.tryTreatAnvilResult(view, inventory, player, resultItem, AnvilUseType.UNIT_REPAIR, cost) val result =
DependencyManager.tryTreatAnvilResult(view, inventory, player, resultItem, AnvilUseType.UNIT_REPAIR, cost)
return UnitRepairResult(result, cost, repairAmount) return UnitRepairResult(result, cost, repairAmount)
} }

View file

@ -14,6 +14,7 @@ import org.bukkit.inventory.AnvilInventory
import org.bukkit.inventory.Inventory import org.bukkit.inventory.Inventory
import org.bukkit.inventory.InventoryView import org.bukkit.inventory.InventoryView
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
import xyz.alexcrea.cuanvil.anvil.AnvilCost
import xyz.alexcrea.cuanvil.anvil.AnvilUseType import xyz.alexcrea.cuanvil.anvil.AnvilUseType
import xyz.alexcrea.cuanvil.api.event.listener.CAClickResultBypassEvent import xyz.alexcrea.cuanvil.api.event.listener.CAClickResultBypassEvent
import xyz.alexcrea.cuanvil.api.event.listener.CAEarlyPreAnvilBypassEvent import xyz.alexcrea.cuanvil.api.event.listener.CAEarlyPreAnvilBypassEvent
@ -33,7 +34,6 @@ import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil
import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil.componentLore import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil.componentLore
import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener.Companion.ANVIL_OUTPUT_SLOT import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener.Companion.ANVIL_OUTPUT_SLOT
import xyz.alexcrea.cuanvil.util.MetricsUtil.trackError import xyz.alexcrea.cuanvil.util.MetricsUtil.trackError
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil
import java.util.logging.Level import java.util.logging.Level
object DependencyManager { object DependencyManager {
@ -240,7 +240,7 @@ object DependencyManager {
player: HumanEntity, player: HumanEntity,
result: ItemStack, result: ItemStack,
useType: AnvilUseType, useType: AnvilUseType,
cost: AnvilXpUtil.AnvilCost cost: AnvilCost
): ItemStack? { ): ItemStack? {
val treatEvent = CATreatAnvilResult2Event(view, inventory, useType, result, cost) val treatEvent = CATreatAnvilResult2Event(view, inventory, useType, result, cost)
try { try {

View file

@ -14,10 +14,10 @@ import org.bukkit.event.inventory.InventoryClickEvent
import org.bukkit.event.inventory.PrepareAnvilEvent import org.bukkit.event.inventory.PrepareAnvilEvent
import org.bukkit.inventory.AnvilInventory import org.bukkit.inventory.AnvilInventory
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
import xyz.alexcrea.cuanvil.anvil.AnvilCost
import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener
import xyz.alexcrea.cuanvil.util.MetricsUtil.trackError import xyz.alexcrea.cuanvil.util.MetricsUtil.trackError
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil.AnvilCost
import java.util.logging.Level import java.util.logging.Level
import kotlin.reflect.KClass import kotlin.reflect.KClass

View file

@ -9,9 +9,9 @@ import org.bukkit.plugin.RegisteredListener
import valorless.havenbags.HavenBags import valorless.havenbags.HavenBags
import valorless.havenbags.features.BagSkin import valorless.havenbags.features.BagSkin
import valorless.havenbags.features.BagUpgrade import valorless.havenbags.features.BagUpgrade
import xyz.alexcrea.cuanvil.anvil.AnvilCost
import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil
import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil.AnvilCost
class HavenBagsDependency { class HavenBagsDependency {

View file

@ -15,6 +15,7 @@ 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.AnvilCost
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.AnvilResult import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.AnvilResult
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.CustomCraftResult import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.CustomCraftResult
@ -30,10 +31,8 @@ import xyz.alexcrea.cuanvil.util.CustomRecipeUtil
import xyz.alexcrea.cuanvil.util.MiniMessageUtil import xyz.alexcrea.cuanvil.util.MiniMessageUtil
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.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.math.BigDecimal
import java.util.* import java.util.*
import java.util.concurrent.atomic.AtomicReference import java.util.concurrent.atomic.AtomicReference
import kotlin.math.min import kotlin.math.min
@ -483,7 +482,6 @@ class AnvilResultListener : Listener {
val paperMeta = rightItem.itemMeta ?: return val paperMeta = rightItem.itemMeta ?: return
val paperCopy: ItemStack? val paperCopy: ItemStack?
if (LoreEditType.APPEND_PAPER.doConsume) { if (LoreEditType.APPEND_PAPER.doConsume) {
paperCopy = null paperCopy = null

View file

@ -15,6 +15,7 @@ import org.bukkit.inventory.InventoryView
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.AnvilCost
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.AnvilResult import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.AnvilResult
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.doMerge import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.doMerge
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.doRenaming import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.doRenaming
@ -24,7 +25,6 @@ import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.testUnitRepair
import xyz.alexcrea.cuanvil.dependency.DependencyManager import xyz.alexcrea.cuanvil.dependency.DependencyManager
import xyz.alexcrea.cuanvil.util.MaterialUtil.isAir import xyz.alexcrea.cuanvil.util.MaterialUtil.isAir
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.dialog.AnvilRenameDialogUtil import xyz.alexcrea.cuanvil.util.dialog.AnvilRenameDialogUtil
/** /**

View file

@ -5,12 +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.AnvilCost
import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.LoreEditResult 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.*
@ -44,8 +44,10 @@ object AnvilLoreEditUtil {
val page = book.pages[0] val page = book.pages[0]
val lines = ArrayList<String>(page.split("\n")) val lines = ArrayList<String>(page.split("\n"))
val outLines = ArrayList<Component>(lines.size) val outLines = ArrayList<Component>(lines.size)
val colorCost = colorLines(player, LoreEditType.APPEND_BOOK, val colorCost = colorLines(
lines, outLines) player, LoreEditType.APPEND_BOOK,
lines, outLines
)
lore.addAll(outLines) lore.addAll(outLines)
@ -81,7 +83,7 @@ object AnvilLoreEditUtil {
// Handle xp // Handle xp
cost.lore = uncolorCost cost.lore = uncolorCost
cost.lore+= currentLore.size * LoreEditType.REMOVE_BOOK.perLineCost cost.lore += currentLore.size * LoreEditType.REMOVE_BOOK.perLineCost
baseEditLoreXpCost(cost, first, result, LoreEditType.REMOVE_BOOK) baseEditLoreXpCost(cost, first, result, LoreEditType.REMOVE_BOOK)
return result return result
@ -120,7 +122,7 @@ object AnvilLoreEditUtil {
fun tryLoreEditByBook(player: HumanEntity, first: ItemStack, second: ItemStack): LoreEditResult { fun tryLoreEditByBook(player: HumanEntity, first: ItemStack, second: ItemStack): LoreEditResult {
val isAppend = bookLoreEditIsAppend(first, second) ?: return LoreEditResult.EMPTY val isAppend = bookLoreEditIsAppend(first, second) ?: return LoreEditResult.EMPTY
val type = if(isAppend) LoreEditType.APPEND_BOOK else LoreEditType.REMOVE_BOOK val type = if (isAppend) LoreEditType.APPEND_BOOK else LoreEditType.REMOVE_BOOK
val meta = second.itemMeta as BookMeta val meta = second.itemMeta as BookMeta
val cost = AnvilCost() val cost = AnvilCost()
@ -166,9 +168,11 @@ object AnvilLoreEditUtil {
// A bit overdone to color 1 line but hey // A bit overdone to color 1 line but hey
val outList = ArrayList<Component>(1) val outList = ArrayList<Component>(1)
val colorCost = colorLines(player, LoreEditType.APPEND_PAPER, val colorCost = colorLines(
player, LoreEditType.APPEND_PAPER,
Collections.singletonList(second.itemMeta!!.displayName), Collections.singletonList(second.itemMeta!!.displayName),
outList) outList
)
val line = outList[0] val line = outList[0]
if (appendEnd) if (appendEnd)
@ -232,7 +236,7 @@ object AnvilLoreEditUtil {
second: ItemStack second: ItemStack
): LoreEditResult { ): LoreEditResult {
val isAppend = paperLoreEditIsAppend(first, second) ?: return LoreEditResult.EMPTY val isAppend = paperLoreEditIsAppend(first, second) ?: return LoreEditResult.EMPTY
val type = if(isAppend) LoreEditType.APPEND_BOOK else LoreEditType.REMOVE_BOOK val type = if (isAppend) LoreEditType.APPEND_BOOK else LoreEditType.REMOVE_BOOK
val cost = AnvilCost() val cost = AnvilCost()
val item = if (isAppend) val item = if (isAppend)
@ -248,18 +252,20 @@ object AnvilLoreEditUtil {
result: ItemStack, result: ItemStack,
editType: LoreEditType editType: LoreEditType
) { ) {
cost.lore+= editType.fixedCost cost.lore += editType.fixedCost
cost.workPenalty = AnvilXpUtil.calculatePenalty(first, null, result, editType.useType) cost.workPenalty = AnvilXpUtil.calculatePenalty(first, null, result, editType.useType)
} }
fun colorPermission(player: Permissible, editType: LoreEditType): AnvilColorUtil.ColorPermissions { fun colorPermission(player: Permissible, editType: LoreEditType): AnvilColorUtil.ColorPermissions {
return AnvilColorUtil.calculatePermissions(player, return AnvilColorUtil.calculatePermissions(
player,
false, false,
editType.allowColorCode, editType.allowColorCode,
editType.allowHexColor, editType.allowHexColor,
editType.allowMinimessage, editType.allowMinimessage,
AnvilColorUtil.ColorUseType.LORE_EDIT) AnvilColorUtil.ColorUseType.LORE_EDIT
)
} }
private fun colorLine(line: String, permission: AnvilColorUtil.ColorPermissions): Component? { private fun colorLine(line: String, permission: AnvilColorUtil.ColorPermissions): Component? {
@ -269,8 +275,10 @@ object AnvilLoreEditUtil {
) )
} }
private fun colorLines(player: Permissible, editType: LoreEditType, private fun colorLines(
lines: List<String>, outLines: MutableList<Component>): Int { player: Permissible, editType: LoreEditType,
lines: List<String>, outLines: MutableList<Component>
): Int {
val permission = colorPermission(player, editType) val permission = colorPermission(player, editType)
val colorCost = editType.useColorCost val colorCost = editType.useColorCost
@ -297,7 +305,7 @@ object AnvilLoreEditUtil {
// Now handle color of each lines // Now handle color of each lines
var hasUndidColor = false var hasUndidColor = false
for ((index, line) in lines.withIndex()) { for ((index, line) in lines.withIndex()) {
if(line == null){ if (line == null) {
lines[index] = null lines[index] = null
continue continue
} }
@ -312,7 +320,7 @@ object AnvilLoreEditUtil {
hasUndidColor = true hasUndidColor = true
result = clearedLine result = clearedLine
} else { } else {
result = MiniMessageUtil.plain_text_mm.serialize(line) result = MiniMessageUtil.plain_text_mm.serialize(line)
} }
lines[index] = MiniMessageUtil.plain_text_mm.deserialize(result) lines[index] = MiniMessageUtil.plain_text_mm.deserialize(result)
@ -341,7 +349,7 @@ object AnvilLoreEditUtil {
var hasUndidColor = false var hasUndidColor = false
val result: String val result: String
if(clearedLine != null){ if (clearedLine != null) {
hasUndidColor = true hasUndidColor = true
result = clearedLine result = clearedLine
} else { } else {

View file

@ -14,6 +14,7 @@ import org.bukkit.inventory.InventoryView
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
import org.bukkit.inventory.meta.Repairable import org.bukkit.inventory.meta.Repairable
import org.bukkit.persistence.PersistentDataType import org.bukkit.persistence.PersistentDataType
import xyz.alexcrea.cuanvil.anvil.AnvilCost
import xyz.alexcrea.cuanvil.anvil.AnvilUseType import xyz.alexcrea.cuanvil.anvil.AnvilUseType
import xyz.alexcrea.cuanvil.config.ConfigHolder import xyz.alexcrea.cuanvil.config.ConfigHolder
import xyz.alexcrea.cuanvil.dependency.DependencyManager import xyz.alexcrea.cuanvil.dependency.DependencyManager
@ -21,65 +22,12 @@ import xyz.alexcrea.cuanvil.dependency.economy.EconomyManager
import xyz.alexcrea.cuanvil.group.ConflictType import xyz.alexcrea.cuanvil.group.ConflictType
import xyz.alexcrea.cuanvil.util.AnvilTitleUtil import xyz.alexcrea.cuanvil.util.AnvilTitleUtil
import xyz.alexcrea.cuanvil.util.dialog.AnvilRenameDialogUtil import xyz.alexcrea.cuanvil.util.dialog.AnvilRenameDialogUtil
import java.math.BigDecimal
import kotlin.math.min import kotlin.math.min
import io.delilaheve.util.ConfigOptions.getMonetaryMultiplier as moneyMultiplier
object AnvilXpUtil { object AnvilXpUtil {
const val EXCLUSIVE_PENALTY_PREFIX = "repair_cost" const val EXCLUSIVE_PENALTY_PREFIX = "repair_cost"
open class AnvilCost {
private val isAlone: Boolean
var valid = true // Get set as invalid if cost can be satisfied
var isMonetary = false
var generic = 0
var enchantment = 0
var repair = 0
var rename = 0
var lore = 0
var illegalPenalty = 0
var workPenalty = 0
var recipe = 0
constructor(generic: Int) {
this.generic = generic
isAlone = true
}
constructor() {
isAlone = false
}
fun asXpCost(): Int {
return generic + enchantment + repair + rename + lore + illegalPenalty + workPenalty + recipe
}
open fun asMonetaryCost(): BigDecimal {
// multiply by per use type multipliers
return BigDecimal(generic)
.add(BigDecimal(enchantment).multiply(moneyMultiplier("enchantment")))
.add(BigDecimal(repair).multiply(moneyMultiplier("repair")))
.add(BigDecimal(rename).multiply(moneyMultiplier("rename")))
.add(BigDecimal(lore).multiply(moneyMultiplier("lore_edit")))
.add(BigDecimal(enchantment).multiply(moneyMultiplier("enchantment")))
.add(BigDecimal(illegalPenalty).multiply(moneyMultiplier("work_penalty")))
.add(BigDecimal(workPenalty).multiply(moneyMultiplier("work_penalty")))
.add(BigDecimal(recipe).multiply(moneyMultiplier("recipe")))
.multiply(moneyMultiplier("global"))
}
}
class CustomCraftCost(val rawCost: Int): AnvilCost() {
override fun asMonetaryCost(): BigDecimal {
return BigDecimal(rawCost)
.multiply(moneyMultiplier("global"))
}
}
/** /**
* Display the required cost (either as xp or as ) * Display the required cost (either as xp or as )
*/ */