diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/listener/AnvilResultListener.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/listener/AnvilResultListener.kt index 1153248..5190c8c 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/listener/AnvilResultListener.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/listener/AnvilResultListener.kt @@ -20,6 +20,7 @@ import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener.Companion.ANVIL_INPUT_ import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener.Companion.ANVIL_INPUT_RIGHT import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener.Companion.ANVIL_OUTPUT_SLOT import xyz.alexcrea.cuanvil.recipe.AnvilCustomRecipe +import xyz.alexcrea.cuanvil.util.AnvilUseType import xyz.alexcrea.cuanvil.util.AnvilXpUtil import xyz.alexcrea.cuanvil.util.CustomRecipeUtil import xyz.alexcrea.cuanvil.util.UnitRepairUtil.getRepair @@ -239,7 +240,7 @@ class AnvilResultListener: Listener { } } - repairCost += AnvilXpUtil.calculatePenalty(leftItem, null, resultCopy) + repairCost += AnvilXpUtil.calculatePenalty(leftItem, null, resultCopy, AnvilUseType.UNIT_REPAIR) repairCost += resultAmount * ConfigOptions.unitRepairCost if ( diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/listener/PrepareAnvilListener.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/listener/PrepareAnvilListener.kt index f37a193..77cd6ac 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/listener/PrepareAnvilListener.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/listener/PrepareAnvilListener.kt @@ -19,6 +19,7 @@ import org.bukkit.inventory.AnvilInventory import org.bukkit.inventory.ItemStack import xyz.alexcrea.cuanvil.dependency.DependencyManager import xyz.alexcrea.cuanvil.util.AnvilColorUtil +import xyz.alexcrea.cuanvil.util.AnvilUseType import xyz.alexcrea.cuanvil.util.AnvilXpUtil import xyz.alexcrea.cuanvil.util.CustomRecipeUtil import xyz.alexcrea.cuanvil.util.UnitRepairUtil.getRepair @@ -112,7 +113,7 @@ class PrepareAnvilListener : Listener { event.result = resultItem if(DependencyManager.tryTreatAnvilResult(event, resultItem)) return - anvilCost += AnvilXpUtil.calculatePenalty(first, null, resultItem) + anvilCost += AnvilXpUtil.calculatePenalty(first, null, resultItem, AnvilUseType.RENAME_ONLY) AnvilXpUtil.setAnvilInvXp(inventory, event.view, player, anvilCost) } @@ -177,7 +178,7 @@ class PrepareAnvilListener : Listener { return } // As calculatePenalty edit result, we need to calculate penalty after checking equality - anvilCost += AnvilXpUtil.calculatePenalty(first, second, resultItem) + anvilCost += AnvilXpUtil.calculatePenalty(first, second, resultItem, AnvilUseType.MERGE) // Calculate rename cost anvilCost += handleRename(resultItem, inventory, player) @@ -201,7 +202,7 @@ class PrepareAnvilListener : Listener { anvilCost += repairAmount * ConfigOptions.unitRepairCost } // We do not care about right item penalty for unit repair - anvilCost += AnvilXpUtil.calculatePenalty(first, null, resultItem, true) + anvilCost += AnvilXpUtil.calculatePenalty(first, null, resultItem, AnvilUseType.UNIT_REPAIR) // Test/stop if nothing changed. if (first == resultItem) { diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/util/AnvilUseType.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/util/AnvilUseType.kt new file mode 100644 index 0000000..2e4a893 --- /dev/null +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/util/AnvilUseType.kt @@ -0,0 +1,9 @@ +package xyz.alexcrea.cuanvil.util + +enum class AnvilUseType { + + RENAME_ONLY, + MERGE, + UNIT_REPAIR + +} \ No newline at end of file diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/util/AnvilXpUtil.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/util/AnvilXpUtil.kt index 74e604c..5a03b9c 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/util/AnvilXpUtil.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/util/AnvilXpUtil.kt @@ -69,32 +69,24 @@ object AnvilXpUtil { } }) } - /** - * Function to calculate work penalty of anvil work - * Also change result work penalty if right item is not null - */ - fun calculatePenalty(left: ItemStack, right: ItemStack?, result: ItemStack): Int { - return calculatePenalty(left, right, result, false) - } /** * Function to calculate work penalty of anvil work * Also change result work penalty if right item is not null */ - fun calculatePenalty(left: ItemStack, right: ItemStack?, result: ItemStack, unitRepair: Boolean): Int { + fun calculatePenalty(left: ItemStack, right: ItemStack?, result: ItemStack, useType: AnvilUseType): Int { // Extracted From https://minecraft.fandom.com/wiki/Anvil_mechanics#Enchantment_equation // Calculate work penalty - val penaltyType = ConfigOptions.workPenaltyType; + val penaltyType = ConfigOptions.workPenaltyType val leftPenalty = (left.itemMeta as? Repairable)?.repairCost ?: 0 - val rightPenalty = if (right == null) 0 else (right.itemMeta as? Repairable)?.repairCost ?: 0 // Increase penalty on fusing or unit repair - if(penaltyType.isPenaltyIncreasing && (right != null || unitRepair)){ + if(penaltyType.isPenaltyIncreasing && (right != null || AnvilUseType.UNIT_REPAIR == useType)){ result.itemMeta?.let { (it as? Repairable)?.repairCost = leftPenalty * 2 + 1 result.itemMeta = it