create AnvilUseType enum

This commit is contained in:
alexcrea 2025-02-11 11:31:39 +01:00
parent 33474c379a
commit ea19ffc4a1
No known key found for this signature in database
GPG key ID: 43FD265DB0DBF91F
4 changed files with 18 additions and 15 deletions

View file

@ -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 (

View file

@ -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) {

View file

@ -0,0 +1,9 @@
package xyz.alexcrea.cuanvil.util
enum class AnvilUseType {
RENAME_ONLY,
MERGE,
UNIT_REPAIR
}

View file

@ -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