mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 08:14:00 +02:00
move anvil cost to its own class
This commit is contained in:
parent
2efb6e55e2
commit
49b0054eca
11 changed files with 101 additions and 90 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
|||
* <li>Item rename</li>
|
||||
* </ul>
|
||||
*
|
||||
* @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 {
|
|||
* <li>Item rename</li>
|
||||
* </ul>
|
||||
*
|
||||
* @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) {
|
||||
|
|
|
|||
55
src/main/kotlin/xyz/alexcrea/cuanvil/anvil/AnvilCost.kt
Normal file
55
src/main/kotlin/xyz/alexcrea/cuanvil/anvil/AnvilCost.kt
Normal 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"))
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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<String>(page.split("\n"))
|
||||
val outLines = ArrayList<Component>(lines.size)
|
||||
val colorCost = colorLines(player, LoreEditType.APPEND_BOOK,
|
||||
lines, outLines)
|
||||
val colorCost = colorLines(
|
||||
player, LoreEditType.APPEND_BOOK,
|
||||
lines, outLines
|
||||
)
|
||||
|
||||
lore.addAll(outLines)
|
||||
|
||||
|
|
@ -166,9 +168,11 @@ object AnvilLoreEditUtil {
|
|||
|
||||
// A bit overdone to color 1 line but hey
|
||||
val outList = ArrayList<Component>(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)
|
||||
|
|
@ -254,12 +258,14 @@ object AnvilLoreEditUtil {
|
|||
}
|
||||
|
||||
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<String>, outLines: MutableList<Component>): Int {
|
||||
private fun colorLines(
|
||||
player: Permissible, editType: LoreEditType,
|
||||
lines: List<String>, outLines: MutableList<Component>
|
||||
): Int {
|
||||
val permission = colorPermission(player, editType)
|
||||
val colorCost = editType.useColorCost
|
||||
|
||||
|
|
|
|||
|
|
@ -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 )
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue