Skip to content

Instantly share code, notes, and snippets.

@DevSrSouza
Last active March 19, 2019 18:25
Show Gist options
  • Save DevSrSouza/0a6bd9066213fda46f9da4de293fcae9 to your computer and use it in GitHub Desktop.
Save DevSrSouza/0a6bd9066213fda46f9da4de293fcae9 to your computer and use it in GitHub Desktop.
Simple enchantment API using KotlinBukkitAPI / API simples de encantamento usando KotlinBukkitAPI
import br.com.devsrsouza.kotlinbukkitapi.attributestorage.setStorageData
import br.com.devsrsouza.kotlinbukkitapi.dsl.item.meta
import org.bukkit.inventory.ItemStack
import org.bukkit.inventory.meta.ItemMeta
import java.util.*
class EnchantmentCustom(
val uuid: UUID,
val name: String,
val maxLevel: Int
)
class ItemEnchantment(val enchantment: EnchantmentCustom, val level: Int)
fun ItemStack.addCustomEnchantment(itemEnchant: ItemEnchantment) {
if(itemEnchant.level > itemEnchant.enchantment.maxLevel) return
meta<ItemMeta> {
lore = (lore ?: LinkedList()).apply {
add(0, itemEnchant.enchantment.name + " " + itemEnchant.level.toRoman())
}
}
setStorageData(itemEnchant.level.toString(), itemEnchant.enchantment.uuid)
}
fun ItemStack.addCustomEnchantment(enchantment: EnchantmentCustom, level: Int) {
addCustomEnchantment(ItemEnchantment(enchantment, level))
}
fun ItemStack.hasCustomEnchantment(enchantment: EnchantmentCustom): Boolean {
val enchant = itemMeta.lore?.find { it.startsWith(enchantment.name) }
return enchant != null
}
inline fun ItemStack.ifHasCustomEnchantment(
enchantment: EnchantmentCustom,
block: (level: Int) -> Unit
) = getCustomEnchantment(enchantment)?.let { block(it.level) }
fun ItemStack.getCustomEnchantment(enchantment: EnchantmentCustom): ItemEnchantment? {
val enchant = itemMeta.lore?.find { it.startsWith(enchantment.name) }
if(enchant != null) {
val level = enchant.split(" ").getOrNull(1)
if(level != null) {
return ItemEnchantment(enchantment, level.fromRoman())
} else return null
} else return null
}
import java.util.*
private val map: TreeMap<Int, String> = TreeMap<Int, String>().apply {
put(1000, "M")
put(900, "CM")
put(500, "D")
put(400, "CD")
put(100, "C")
put(90, "KC")
put(50, "L")
put(40, "XL")
put(10, "X")
put(9, "IX")
put(5, "V")
put(4, "IV")
put(1, "I")
}
fun Int.toRoman(): String {
val l = map.floorKey(this)
if (this == l) {
return map[this]!!
}
return "${map[l]}${(this-l).toRoman()}"
}
fun String.fromRoman(): Int {
if(isBlank()) return 0
val roman = map.entries.first { startsWith(it.value) }
return roman.key + removePrefix(roman.value).fromRoman()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment