Last active
March 19, 2019 18:25
-
-
Save DevSrSouza/0a6bd9066213fda46f9da4de293fcae9 to your computer and use it in GitHub Desktop.
Simple enchantment API using KotlinBukkitAPI / API simples de encantamento usando KotlinBukkitAPI
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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