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_INPUT_RIGHT
import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener.Companion.ANVIL_OUTPUT_SLOT import xyz.alexcrea.cuanvil.listener.PrepareAnvilListener.Companion.ANVIL_OUTPUT_SLOT
import xyz.alexcrea.cuanvil.recipe.AnvilCustomRecipe import xyz.alexcrea.cuanvil.recipe.AnvilCustomRecipe
import xyz.alexcrea.cuanvil.util.AnvilUseType
import xyz.alexcrea.cuanvil.util.AnvilXpUtil import xyz.alexcrea.cuanvil.util.AnvilXpUtil
import xyz.alexcrea.cuanvil.util.CustomRecipeUtil import xyz.alexcrea.cuanvil.util.CustomRecipeUtil
import xyz.alexcrea.cuanvil.util.UnitRepairUtil.getRepair 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 repairCost += resultAmount * ConfigOptions.unitRepairCost
if ( if (

View file

@ -19,6 +19,7 @@ import org.bukkit.inventory.AnvilInventory
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
import xyz.alexcrea.cuanvil.dependency.DependencyManager import xyz.alexcrea.cuanvil.dependency.DependencyManager
import xyz.alexcrea.cuanvil.util.AnvilColorUtil import xyz.alexcrea.cuanvil.util.AnvilColorUtil
import xyz.alexcrea.cuanvil.util.AnvilUseType
import xyz.alexcrea.cuanvil.util.AnvilXpUtil import xyz.alexcrea.cuanvil.util.AnvilXpUtil
import xyz.alexcrea.cuanvil.util.CustomRecipeUtil import xyz.alexcrea.cuanvil.util.CustomRecipeUtil
import xyz.alexcrea.cuanvil.util.UnitRepairUtil.getRepair import xyz.alexcrea.cuanvil.util.UnitRepairUtil.getRepair
@ -112,7 +113,7 @@ class PrepareAnvilListener : Listener {
event.result = resultItem event.result = resultItem
if(DependencyManager.tryTreatAnvilResult(event, resultItem)) return 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) AnvilXpUtil.setAnvilInvXp(inventory, event.view, player, anvilCost)
} }
@ -177,7 +178,7 @@ class PrepareAnvilListener : Listener {
return return
} }
// As calculatePenalty edit result, we need to calculate penalty after checking equality // 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 // Calculate rename cost
anvilCost += handleRename(resultItem, inventory, player) anvilCost += handleRename(resultItem, inventory, player)
@ -201,7 +202,7 @@ class PrepareAnvilListener : Listener {
anvilCost += repairAmount * ConfigOptions.unitRepairCost anvilCost += repairAmount * ConfigOptions.unitRepairCost
} }
// We do not care about right item penalty for unit repair // 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. // Test/stop if nothing changed.
if (first == resultItem) { 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 * Function to calculate work penalty of anvil work
* Also change result work penalty if right item is not null * 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 // Extracted From https://minecraft.fandom.com/wiki/Anvil_mechanics#Enchantment_equation
// Calculate work penalty // Calculate work penalty
val penaltyType = ConfigOptions.workPenaltyType; val penaltyType = ConfigOptions.workPenaltyType
val leftPenalty = (left.itemMeta as? Repairable)?.repairCost ?: 0 val leftPenalty = (left.itemMeta as? Repairable)?.repairCost ?: 0
val rightPenalty = val rightPenalty =
if (right == null) 0 if (right == null) 0
else (right.itemMeta as? Repairable)?.repairCost ?: 0 else (right.itemMeta as? Repairable)?.repairCost ?: 0
// Increase penalty on fusing or unit repair // 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 { result.itemMeta?.let {
(it as? Repairable)?.repairCost = leftPenalty * 2 + 1 (it as? Repairable)?.repairCost = leftPenalty * 2 + 1
result.itemMeta = it result.itemMeta = it