class ItemParser(private val plugin: Plugin) { fun parseItemFile(path: String): ParsedItem? { val fileContents = File(path).readText(Charsets.UTF_8) return try { val parsedItemData = Json.decodeFromString(fileContents) plugin.logger.info("Parsing item file ${parsedItemData.id}") getParsedItem(parsedItemData) } catch (e: Exception) { throw ItemFileParseException(path) } } private fun getParsedItem(itemData: ItemData): ParsedItem { val itemStack = ItemStack(Material.valueOf(itemData.material)) val itemMeta = plugin.itemManager.itemUtils.getItemMeta(itemStack) itemMeta.isUnbreakable = itemData.unbreakable; itemMeta.lore = itemData.lore.stream() .map { ChatColor.translateAlternateColorCodes('&', it) } .collect(Collectors.toList()) itemMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', itemData.name)) itemData.enchants.forEach { Enchantment.getByKey(NamespacedKey.minecraft(it.id.lowercase()))?.let { it1 -> itemMeta.addEnchant( it1, it.level, true ) } } itemMeta .persistentDataContainer .set(plugin.itemManager.itemUtils.getNamespacedKey("ITEM_ID"), PersistentDataType.STRING, itemData.id) itemStack.itemMeta = itemMeta plugin.logger.info("Successfully loaded item ${itemData.id}") return ParsedItem(itemStack, itemData) } }