fun replaceItem(config: FileConfiguration, player: Player, originalMessage: String) { val itemStack = player.inventory.itemInMainHand if (itemStack.type != Material.AIR) { val craftItemStack = CraftItemStack.asNMSCopy(itemStack) val nbtTagCompound = NBTTagCompound() craftItemStack.save(nbtTagCompound) val chatComponentText: ChatComponentText? val item = "${craftItemStack.name} ${craftItemStack.count}" originalMessage.replaceFirst(Pattern.quote("[item]").toRegex(), item) chatComponentText = ChatComponentText(originalMessage) val chatModifier = chatComponentText.chatModifier chatModifier.setChatHoverable(ChatHoverable(ChatHoverable.EnumHoverAction.SHOW_ITEM, ChatComponentText(nbtTagCompound.toString()))) chatComponentText.chatModifier = chatModifier Bukkit.getOnlinePlayers().parallelStream().forEach { (it as CraftPlayer).handle.sendMessage(chatComponentText) } return } player.sendMessage(config.getString("not-a-item")!!.color()!!) }