From 49b0054ecaec04170230f4d8bbae589171c79ec2 Mon Sep 17 00:00:00 2001 From: alexcrea Date: Wed, 10 Jun 2026 14:59:28 +0200 Subject: [PATCH] move anvil cost to its own class --- .../listener/CATreatAnvilResult2Event.java | 8 +-- .../listener/CATreatAnvilResultEvent.java | 6 +- .../xyz/alexcrea/cuanvil/anvil/AnvilCost.kt | 55 +++++++++++++++++++ .../alexcrea/cuanvil/anvil/AnvilMergeLogic.kt | 14 +++-- .../cuanvil/dependency/DependencyManager.kt | 4 +- .../plugins/DisenchantmentDependency.kt | 2 +- .../dependency/plugins/HavenBagsDependency.kt | 2 +- .../cuanvil/listener/AnvilResultListener.kt | 4 +- .../cuanvil/listener/PrepareAnvilListener.kt | 2 +- .../cuanvil/util/anvil/AnvilLoreEditUtil.kt | 40 ++++++++------ .../cuanvil/util/anvil/AnvilXpUtil.kt | 54 +----------------- 11 files changed, 101 insertions(+), 90 deletions(-) create mode 100644 src/main/kotlin/xyz/alexcrea/cuanvil/anvil/AnvilCost.kt diff --git a/src/main/java/xyz/alexcrea/cuanvil/api/event/listener/CATreatAnvilResult2Event.java b/src/main/java/xyz/alexcrea/cuanvil/api/event/listener/CATreatAnvilResult2Event.java index aa8f8e1..30c5380 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/api/event/listener/CATreatAnvilResult2Event.java +++ b/src/main/java/xyz/alexcrea/cuanvil/api/event/listener/CATreatAnvilResult2Event.java @@ -8,8 +8,8 @@ import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import xyz.alexcrea.cuanvil.anvil.AnvilCost; 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. @@ -48,7 +48,7 @@ public class CATreatAnvilResult2Event extends Event { @Nullable private ItemStack result; - private final AnvilXpUtil.AnvilCost cost; + private final AnvilCost cost; @ApiStatus.Internal public CATreatAnvilResult2Event( @@ -56,7 +56,7 @@ public class CATreatAnvilResult2Event extends Event { Inventory inv, AnvilUseType useType, @Nullable ItemStack result, - AnvilXpUtil.AnvilCost cost) { + AnvilCost cost) { this.view = view; this.useType = useType; @@ -190,7 +190,7 @@ public class CATreatAnvilResult2Event extends Event { * * @return the current anvil cost */ - public AnvilXpUtil.AnvilCost getCost() { + public AnvilCost getCost() { return cost; } } diff --git a/src/main/java/xyz/alexcrea/cuanvil/api/event/listener/CATreatAnvilResultEvent.java b/src/main/java/xyz/alexcrea/cuanvil/api/event/listener/CATreatAnvilResultEvent.java index 6e6358d..80965b5 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/api/event/listener/CATreatAnvilResultEvent.java +++ b/src/main/java/xyz/alexcrea/cuanvil/api/event/listener/CATreatAnvilResultEvent.java @@ -6,8 +6,8 @@ import org.bukkit.event.inventory.PrepareAnvilEvent; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import xyz.alexcrea.cuanvil.anvil.AnvilCost; 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. @@ -108,8 +108,8 @@ public class CATreatAnvilResultEvent extends Event { *
  • Item rename
  • * * - * @deprecated use #{@link #getCost()} instead * @return The current cost. + * @deprecated use #{@link #getCost()} instead */ @Deprecated(forRemoval = true, since = "1.17.0") public int getLevelCost() { @@ -130,8 +130,8 @@ public class CATreatAnvilResultEvent extends Event { *
  • Item rename
  • * * - * @deprecated use #{@link #getCost()} and set value on this instead * @param levelCost The new cost. + * @deprecated use #{@link #getCost()} and set value on this instead */ @Deprecated(forRemoval = true, since = "1.17.0") public void setLevelCost(int levelCost) { diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/anvil/AnvilCost.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/anvil/AnvilCost.kt new file mode 100644 index 0000000..f8ff89c --- /dev/null +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/anvil/AnvilCost.kt @@ -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")) + } + +} \ No newline at end of file diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/anvil/AnvilMergeLogic.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/anvil/AnvilMergeLogic.kt index 67b9b7d..6b106fc 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/anvil/AnvilMergeLogic.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/anvil/AnvilMergeLogic.kt @@ -29,8 +29,6 @@ import xyz.alexcrea.cuanvil.util.UnitRepairUtil.getRepair import xyz.alexcrea.cuanvil.util.anvil.AnvilColorUtil import xyz.alexcrea.cuanvil.util.anvil.AnvilLoreEditUtil 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.dialog.AnvilRenameDialogUtil @@ -115,7 +113,8 @@ object AnvilMergeLogic { } 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) } @@ -220,7 +219,8 @@ object AnvilMergeLogic { // Calculate rename cost 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) } @@ -261,7 +261,8 @@ object AnvilMergeLogic { cost.recipe = if (recipe.removeExactLinearXp) AnvilXpUtil.calculateMinimumLevelForXp(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) } @@ -300,7 +301,8 @@ object AnvilMergeLogic { 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) } diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt index 0da6b30..cb24eaa 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt @@ -14,6 +14,7 @@ import org.bukkit.inventory.AnvilInventory import org.bukkit.inventory.Inventory import org.bukkit.inventory.InventoryView import org.bukkit.inventory.ItemStack +import xyz.alexcrea.cuanvil.anvil.AnvilCost import xyz.alexcrea.cuanvil.anvil.AnvilUseType import xyz.alexcrea.cuanvil.api.event.listener.CAClickResultBypassEvent 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.listener.PrepareAnvilListener.Companion.ANVIL_OUTPUT_SLOT import xyz.alexcrea.cuanvil.util.MetricsUtil.trackError -import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil import java.util.logging.Level object DependencyManager { @@ -240,7 +240,7 @@ object DependencyManager { player: HumanEntity, result: ItemStack, useType: AnvilUseType, - cost: AnvilXpUtil.AnvilCost + cost: AnvilCost ): ItemStack? { val treatEvent = CATreatAnvilResult2Event(view, inventory, useType, result, cost) try { diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/DisenchantmentDependency.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/DisenchantmentDependency.kt index 32ca99d..690b384 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/DisenchantmentDependency.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/DisenchantmentDependency.kt @@ -14,10 +14,10 @@ import org.bukkit.event.inventory.InventoryClickEvent import org.bukkit.event.inventory.PrepareAnvilEvent import org.bukkit.inventory.AnvilInventory import org.bukkit.inventory.ItemStack +import xyz.alexcrea.cuanvil.anvil.AnvilCost import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener import xyz.alexcrea.cuanvil.util.MetricsUtil.trackError import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil -import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil.AnvilCost import java.util.logging.Level import kotlin.reflect.KClass diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/HavenBagsDependency.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/HavenBagsDependency.kt index 62d9e4e..6f30497 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/HavenBagsDependency.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/HavenBagsDependency.kt @@ -9,9 +9,9 @@ import org.bukkit.plugin.RegisteredListener import valorless.havenbags.HavenBags import valorless.havenbags.features.BagSkin import valorless.havenbags.features.BagUpgrade +import xyz.alexcrea.cuanvil.anvil.AnvilCost import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil -import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil.AnvilCost class HavenBagsDependency { diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/listener/AnvilResultListener.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/listener/AnvilResultListener.kt index 775a685..feee833 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/listener/AnvilResultListener.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/listener/AnvilResultListener.kt @@ -15,6 +15,7 @@ import org.bukkit.inventory.AnvilInventory import org.bukkit.inventory.InventoryView import org.bukkit.inventory.ItemStack import org.bukkit.inventory.meta.BookMeta +import xyz.alexcrea.cuanvil.anvil.AnvilCost import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.AnvilResult 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.anvil.AnvilLoreEditUtil 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.LoreEditType -import java.math.BigDecimal import java.util.* import java.util.concurrent.atomic.AtomicReference import kotlin.math.min @@ -483,7 +482,6 @@ class AnvilResultListener : Listener { val paperMeta = rightItem.itemMeta ?: return - val paperCopy: ItemStack? if (LoreEditType.APPEND_PAPER.doConsume) { paperCopy = null diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/listener/PrepareAnvilListener.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/listener/PrepareAnvilListener.kt index b2f6785..0217983 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/listener/PrepareAnvilListener.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/listener/PrepareAnvilListener.kt @@ -15,6 +15,7 @@ import org.bukkit.inventory.InventoryView import org.bukkit.inventory.ItemStack import org.bukkit.inventory.meta.EnchantmentStorageMeta 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.doMerge 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.util.MaterialUtil.isAir import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil -import xyz.alexcrea.cuanvil.util.anvil.AnvilXpUtil.AnvilCost import xyz.alexcrea.cuanvil.util.dialog.AnvilRenameDialogUtil /** diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/util/anvil/AnvilLoreEditUtil.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/util/anvil/AnvilLoreEditUtil.kt index e9bb633..a021b46 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/util/anvil/AnvilLoreEditUtil.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/util/anvil/AnvilLoreEditUtil.kt @@ -5,12 +5,12 @@ import org.bukkit.entity.HumanEntity import org.bukkit.inventory.ItemStack import org.bukkit.inventory.meta.BookMeta import org.bukkit.permissions.Permissible +import xyz.alexcrea.cuanvil.anvil.AnvilCost import xyz.alexcrea.cuanvil.anvil.AnvilMergeLogic.LoreEditResult import xyz.alexcrea.cuanvil.dependency.DependencyManager import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil.componentLore import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil.setComponentLore 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.LoreEditType import java.util.* @@ -44,8 +44,10 @@ object AnvilLoreEditUtil { val page = book.pages[0] val lines = ArrayList(page.split("\n")) val outLines = ArrayList(lines.size) - val colorCost = colorLines(player, LoreEditType.APPEND_BOOK, - lines, outLines) + val colorCost = colorLines( + player, LoreEditType.APPEND_BOOK, + lines, outLines + ) lore.addAll(outLines) @@ -81,7 +83,7 @@ object AnvilLoreEditUtil { // Handle xp 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) return result @@ -120,7 +122,7 @@ object AnvilLoreEditUtil { fun tryLoreEditByBook(player: HumanEntity, first: ItemStack, second: ItemStack): LoreEditResult { 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 cost = AnvilCost() @@ -166,9 +168,11 @@ object AnvilLoreEditUtil { // A bit overdone to color 1 line but hey val outList = ArrayList(1) - val colorCost = colorLines(player, LoreEditType.APPEND_PAPER, + val colorCost = colorLines( + player, LoreEditType.APPEND_PAPER, Collections.singletonList(second.itemMeta!!.displayName), - outList) + outList + ) val line = outList[0] if (appendEnd) @@ -232,7 +236,7 @@ object AnvilLoreEditUtil { second: ItemStack ): LoreEditResult { 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 item = if (isAppend) @@ -248,18 +252,20 @@ object AnvilLoreEditUtil { result: ItemStack, editType: LoreEditType ) { - cost.lore+= editType.fixedCost + cost.lore += editType.fixedCost cost.workPenalty = AnvilXpUtil.calculatePenalty(first, null, result, editType.useType) } fun colorPermission(player: Permissible, editType: LoreEditType): AnvilColorUtil.ColorPermissions { - return AnvilColorUtil.calculatePermissions(player, + return AnvilColorUtil.calculatePermissions( + player, false, editType.allowColorCode, editType.allowHexColor, editType.allowMinimessage, - AnvilColorUtil.ColorUseType.LORE_EDIT) + AnvilColorUtil.ColorUseType.LORE_EDIT + ) } private fun colorLine(line: String, permission: AnvilColorUtil.ColorPermissions): Component? { @@ -269,8 +275,10 @@ object AnvilLoreEditUtil { ) } - private fun colorLines(player: Permissible, editType: LoreEditType, - lines: List, outLines: MutableList): Int { + private fun colorLines( + player: Permissible, editType: LoreEditType, + lines: List, outLines: MutableList + ): Int { val permission = colorPermission(player, editType) val colorCost = editType.useColorCost @@ -297,7 +305,7 @@ object AnvilLoreEditUtil { // Now handle color of each lines var hasUndidColor = false for ((index, line) in lines.withIndex()) { - if(line == null){ + if (line == null) { lines[index] = null continue } @@ -312,7 +320,7 @@ object AnvilLoreEditUtil { hasUndidColor = true result = clearedLine } else { - result = MiniMessageUtil.plain_text_mm.serialize(line) + result = MiniMessageUtil.plain_text_mm.serialize(line) } lines[index] = MiniMessageUtil.plain_text_mm.deserialize(result) @@ -341,7 +349,7 @@ object AnvilLoreEditUtil { var hasUndidColor = false val result: String - if(clearedLine != null){ + if (clearedLine != null) { hasUndidColor = true result = clearedLine } else { diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/util/anvil/AnvilXpUtil.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/util/anvil/AnvilXpUtil.kt index 8c39a0a..f6ee12f 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/util/anvil/AnvilXpUtil.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/util/anvil/AnvilXpUtil.kt @@ -14,6 +14,7 @@ import org.bukkit.inventory.InventoryView import org.bukkit.inventory.ItemStack import org.bukkit.inventory.meta.Repairable import org.bukkit.persistence.PersistentDataType +import xyz.alexcrea.cuanvil.anvil.AnvilCost import xyz.alexcrea.cuanvil.anvil.AnvilUseType import xyz.alexcrea.cuanvil.config.ConfigHolder 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.util.AnvilTitleUtil import xyz.alexcrea.cuanvil.util.dialog.AnvilRenameDialogUtil -import java.math.BigDecimal import kotlin.math.min -import io.delilaheve.util.ConfigOptions.getMonetaryMultiplier as moneyMultiplier object AnvilXpUtil { 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 ) */