From 70b35b717dead5a42bb771a1cc0e267c5daa5357 Mon Sep 17 00:00:00 2001 From: Pawel Date: Fri, 29 Dec 2023 19:56:01 +0200 Subject: [PATCH] Set Deck and Card display names and colours when generating deck shulker --- .../trackedout/citadel/PlayerExtensions.kt | 4 +++ .../citadel/commands/GiveShulkerCommand.kt | 35 ++++++++++++------- .../citadel/commands/TakeShulkerCommand.kt | 11 ++---- 3 files changed, 29 insertions(+), 21 deletions(-) diff --git a/src/main/kotlin/org/trackedout/citadel/PlayerExtensions.kt b/src/main/kotlin/org/trackedout/citadel/PlayerExtensions.kt index bc6bea3..90d8a94 100644 --- a/src/main/kotlin/org/trackedout/citadel/PlayerExtensions.kt +++ b/src/main/kotlin/org/trackedout/citadel/PlayerExtensions.kt @@ -2,7 +2,9 @@ package org.trackedout.citadel import net.kyori.adventure.text.Component import net.kyori.adventure.text.format.NamedTextColor +import org.bukkit.Material import org.bukkit.entity.Player +import org.bukkit.inventory.ItemStack fun Player.sendGreenMessage(message: String) { this.sendMessage(Component.text().color(NamedTextColor.GREEN).content(message).build()) @@ -15,3 +17,5 @@ fun Player.sendRedMessage(message: String) { fun Player.sendGreyMessage(message: String) { this.sendMessage(Component.text().color(NamedTextColor.GRAY).content(message).build()) } + +fun ItemStack.isDeckedOutShulker() = this.type == Material.CYAN_SHULKER_BOX // TODO: Validate using NBT data; validate that this player owns it diff --git a/src/main/kotlin/org/trackedout/citadel/commands/GiveShulkerCommand.kt b/src/main/kotlin/org/trackedout/citadel/commands/GiveShulkerCommand.kt index f7a165b..834d5dd 100644 --- a/src/main/kotlin/org/trackedout/citadel/commands/GiveShulkerCommand.kt +++ b/src/main/kotlin/org/trackedout/citadel/commands/GiveShulkerCommand.kt @@ -22,8 +22,6 @@ class GiveShulkerCommand( @Dependency private lateinit var plugin: Citadel - private fun isDeckedOutShulker(it: ItemStack) = it.type == Material.SHULKER_BOX - @Default @CommandPermission("decked-out.inventory.get-shulker") @Description("Add Decked Out 2 shulker into player's inventory") @@ -56,7 +54,7 @@ class GiveShulkerCommand( private fun playerMayReceiveShulker(player: Player): Boolean { val deckedOutShulker = player.inventory.find { itemStack -> - if (itemStack != null && isDeckedOutShulker(itemStack)) { + if (itemStack != null && itemStack.isDeckedOutShulker()) { return@find true } else { false @@ -79,7 +77,7 @@ class GiveShulkerCommand( } private fun createDeckedOutShulker(player: Player, playerCards: List): ItemStack { - var shulker = ItemStack(Material.SHULKER_BOX, 1) + var shulker = ItemStack(Material.CYAN_SHULKER_BOX, 1) val blockStateMeta = shulker.itemMeta as BlockStateMeta val shulkerBoxState = blockStateMeta.blockState as ShulkerBox @@ -96,13 +94,14 @@ class GiveShulkerCommand( blockStateMeta.blockState = shulkerBoxState shulker.itemMeta = blockStateMeta - shulker = RtagItem.edit(shulker) { tag -> - tag.set("Custom Text", "display", "Name") + shulker = RtagItem.edit(shulker, fun(tag: RtagItem): ItemStack { + val nameJson = "{\"text\":\"❄☠ Frozen Assets ☠❄\"}" + tag.set(nameJson, "display", "Name") tag.set(player.name, "owner") tag.set(player.identity().uuid().toString(), "owner-id") - tag.loadCopy(); - } + return tag.loadCopy(); + }) return shulker } @@ -110,12 +109,24 @@ class GiveShulkerCommand( private fun createCard(player: Player, cardName: String, count: Int): ItemStack? { try { val nugget = ItemStack(Material.IRON_NUGGET, count) - val cardModelData = Cards.cardModelData(cardName) - val card = RtagItem.edit(nugget) { tag -> - tag.setCustomModelData(cardModelData) + val card = Cards.findCard(cardName)?.let { + return@let RtagItem.edit(nugget, fun(tag: RtagItem): ItemStack { + tag.setCustomModelData(it.modelData) + val nameJson = "{\"color\":\"${it.colour}\",\"text\":\"${it.displayName}\"}" + tag.set(nameJson, "display", "Name") + tag.set("{\"color\":\"${it.colour}\",\"OriginalName\":\"${nameJson}\"}", "display", "NameFormat"); + // NameFormat: {color: "gray", OriginalName: '{"color":"gray","text":"✲ Moment of Clarity ✲"}', + // ModifiedName: '{"color":"gray","text":"✲ Moment of Clarity ✲"}'} + + return tag.loadCopy() + }) + } - tag.loadCopy() + if (card == null) { + player.sendRedMessage("Failed to add $cardName to your shulker as it's metadata is missing") + plugin.logger.warning("Failed to add $cardName to your shulker as card data for this card was not found") } + return card } catch (e: Exception) { player.sendRedMessage("Failed to add $cardName to your shulker, error: ${e.message}") diff --git a/src/main/kotlin/org/trackedout/citadel/commands/TakeShulkerCommand.kt b/src/main/kotlin/org/trackedout/citadel/commands/TakeShulkerCommand.kt index 1cecffd..4214281 100644 --- a/src/main/kotlin/org/trackedout/citadel/commands/TakeShulkerCommand.kt +++ b/src/main/kotlin/org/trackedout/citadel/commands/TakeShulkerCommand.kt @@ -2,27 +2,20 @@ package org.trackedout.citadel.commands import co.aikar.commands.BaseCommand import co.aikar.commands.annotation.* -import org.bukkit.Material import org.bukkit.entity.Player -import org.bukkit.inventory.ItemStack -import org.trackedout.citadel.Citadel -import org.trackedout.citadel.sendGreenMessage -import org.trackedout.citadel.sendGreyMessage -import org.trackedout.citadel.sendRedMessage +import org.trackedout.citadel.* @CommandAlias("take-shulker") class TakeShulkerCommand : BaseCommand() { @Dependency private lateinit var plugin: Citadel - private fun isDeckedOutShulker(it: ItemStack) = it.type == Material.SHULKER_BOX // TODO: Validate using NBT data; validate that this player owns it - @Default @CommandPermission("decked-out.inventory.return-shulker") @Description("Take Decked Out 2 shulker from player's inventory") fun takeShulker(player: Player) { val deckedOutShulker = player.inventory.storageContents.find { itemStack -> - if (itemStack != null && isDeckedOutShulker(itemStack)) { + if (itemStack != null && itemStack.isDeckedOutShulker()) { return@find true } else { false