Skip to content

Commit

Permalink
Set Deck and Card display names and colours when generating deck shulker
Browse files Browse the repository at this point in the history
4Ply committed Dec 29, 2023

Verified

This commit was signed with the committer’s verified signature.
4Ply Pawel
1 parent 75f3587 commit 70b35b7
Showing 3 changed files with 29 additions and 21 deletions.
4 changes: 4 additions & 0 deletions src/main/kotlin/org/trackedout/citadel/PlayerExtensions.kt
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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<Card>): 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,26 +94,39 @@ 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
}

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}")
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 70b35b7

Please sign in to comment.