mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 16:16:17 +02:00
Attempt to switch from Enchantment to WrapperEnchantment
This commit is contained in:
parent
9f74c2cfff
commit
1eac81aef6
12 changed files with 63 additions and 104 deletions
|
|
@ -2,8 +2,8 @@ package io.delilaheve.util
|
|||
|
||||
import io.delilaheve.CustomAnvil
|
||||
import io.delilaheve.util.EnchantmentUtil.enchantmentName
|
||||
import org.bukkit.enchantments.Enchantment
|
||||
import xyz.alexcrea.cuanvil.config.ConfigHolder
|
||||
import xyz.alexcrea.cuanvil.enchant.WrappedEnchantment
|
||||
|
||||
/**
|
||||
* Config option accessors
|
||||
|
|
@ -239,7 +239,7 @@ object ConfigOptions {
|
|||
/**
|
||||
* Get the given [enchantment]'s limit
|
||||
*/
|
||||
fun enchantLimit(enchantment: Enchantment): Int {
|
||||
fun enchantLimit(enchantment: WrappedEnchantment): Int {
|
||||
return enchantLimit(enchantment.enchantmentName)
|
||||
}
|
||||
|
||||
|
|
@ -273,7 +273,7 @@ object ConfigOptions {
|
|||
* it's source [isFromBook]
|
||||
*/
|
||||
fun enchantmentValue(
|
||||
enchantment: Enchantment,
|
||||
enchantment: WrappedEnchantment,
|
||||
isFromBook: Boolean
|
||||
): Int {
|
||||
return enchantmentValue(enchantment.enchantmentName, isFromBook)
|
||||
|
|
@ -309,22 +309,4 @@ object ConfigOptions {
|
|||
return DEFAULT_ENCHANT_VALUE
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an array of key of basic config options
|
||||
*/
|
||||
fun getBasicConfigKeys(): Array<String> {
|
||||
return arrayOf(
|
||||
DEFAULT_LIMIT_PATH,
|
||||
CAP_ANVIL_COST,
|
||||
MAX_ANVIL_COST,
|
||||
REPLACE_TOO_EXPENSIVE,
|
||||
ITEM_REPAIR_COST,
|
||||
UNIT_REPAIR_COST,
|
||||
ITEM_RENAME_COST,
|
||||
SACRIFICE_ILLEGAL_COST,
|
||||
REMOVE_ANVIL_COST_LIMIT
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@ package io.delilaheve.util
|
|||
|
||||
import io.delilaheve.CustomAnvil
|
||||
import org.bukkit.Material
|
||||
import org.bukkit.enchantments.Enchantment
|
||||
import org.bukkit.entity.HumanEntity
|
||||
import xyz.alexcrea.cuanvil.config.ConfigHolder
|
||||
import xyz.alexcrea.cuanvil.enchant.WrappedEnchantment
|
||||
import xyz.alexcrea.cuanvil.group.ConflictType
|
||||
import kotlin.math.max
|
||||
import kotlin.math.min
|
||||
|
|
@ -17,17 +17,17 @@ object EnchantmentUtil {
|
|||
/**
|
||||
* Enchantment name without namespace
|
||||
*/
|
||||
val Enchantment.enchantmentName: String
|
||||
val WrappedEnchantment.enchantmentName: String
|
||||
get() = key.key
|
||||
|
||||
/**
|
||||
* Combine 2 sets of enchantments according to our configuration
|
||||
*/
|
||||
fun Map<Enchantment, Int>.combineWith(
|
||||
other: Map<Enchantment, Int>,
|
||||
fun Map<WrappedEnchantment, Int>.combineWith(
|
||||
other: Map<WrappedEnchantment, Int>,
|
||||
mat: Material,
|
||||
player: HumanEntity
|
||||
) = mutableMapOf<Enchantment, Int>().apply {
|
||||
) = mutableMapOf<WrappedEnchantment, Int>().apply {
|
||||
putAll(this@combineWith)
|
||||
other.forEach { (enchantment, level) ->
|
||||
// Get max level or 255 if player can bypass
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
package io.delilaheve.util
|
||||
|
||||
import io.delilaheve.CustomAnvil
|
||||
import org.bukkit.Material.ENCHANTED_BOOK
|
||||
import org.bukkit.enchantments.Enchantment
|
||||
import org.bukkit.inventory.ItemStack
|
||||
import org.bukkit.inventory.meta.Damageable
|
||||
import org.bukkit.inventory.meta.EnchantmentStorageMeta
|
||||
import xyz.alexcrea.cuanvil.enchant.WrappedEnchantment
|
||||
import kotlin.math.ceil
|
||||
import kotlin.math.max
|
||||
import kotlin.math.min
|
||||
|
|
@ -23,44 +21,21 @@ object ItemUtil {
|
|||
/**
|
||||
* Find the enchantment map for this [ItemStack] and return it as a [MutableMap]
|
||||
*/
|
||||
fun ItemStack.findEnchantments() = if (isEnchantedBook()) {
|
||||
(itemMeta as? EnchantmentStorageMeta)?.storedEnchants ?: emptyMap()
|
||||
} else {
|
||||
itemMeta?.enchants ?: emptyMap()
|
||||
}
|
||||
fun ItemStack.findEnchantments(): MutableMap<WrappedEnchantment, Int> = WrappedEnchantment.getEnchants(this)
|
||||
|
||||
/**
|
||||
* Apply an [enchantments] map to this [ItemStack]
|
||||
*/
|
||||
fun ItemStack.setEnchantmentsUnsafe(enchantments: Map<Enchantment, Int>) {
|
||||
if (isEnchantedBook()) {
|
||||
/* For some god-forsaken reason, item meta is not mutable
|
||||
* so, we have to get the instance, modify it, then set it
|
||||
* back to the item... #BecauseMinecraft */
|
||||
val bookMeta = (itemMeta as? EnchantmentStorageMeta)
|
||||
bookMeta?.replaceEnchants(enchantments)
|
||||
itemMeta = bookMeta
|
||||
} else {
|
||||
itemMeta?.enchants?.forEach { (enchant, _) ->
|
||||
removeEnchantment(enchant)
|
||||
}
|
||||
addUnsafeEnchantments(enchantments)
|
||||
}
|
||||
}
|
||||
fun ItemStack.setEnchantmentsUnsafe(enchantments: Map<WrappedEnchantment, Int>) {
|
||||
WrappedEnchantment.clearEnchants(this)
|
||||
|
||||
/**
|
||||
* Apply an [enchantments] map to this book
|
||||
*/
|
||||
private fun EnchantmentStorageMeta.replaceEnchants(
|
||||
enchantments: Map<Enchantment, Int>
|
||||
) {
|
||||
storedEnchants.forEach { (enchant, _) ->
|
||||
removeStoredEnchant(enchant)
|
||||
}
|
||||
enchantments.forEach { (enchant, level) ->
|
||||
val added = addStoredEnchant(enchant, level, true)
|
||||
CustomAnvil.log("${enchant.key} added to item? $added")
|
||||
val meta = this.itemMeta ?: return
|
||||
|
||||
enchantments.forEach { (enchantment, level) ->
|
||||
enchantment.addEnchantmentUnsafe(this, meta, level)
|
||||
}
|
||||
|
||||
this.itemMeta = meta
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue