Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,64 +1,43 @@
package com.willfp.talismans.display

import com.willfp.eco.core.display.Display
import com.willfp.eco.core.display.DisplayContext
import com.willfp.eco.core.display.DisplayModule
import com.willfp.eco.core.display.DisplayPriority
import com.willfp.eco.core.placeholder.context.placeholderContext
import com.willfp.eco.core.fast.fast
import com.willfp.eco.util.formatEco
import com.willfp.eco.util.formatEcoRich
import com.willfp.libreforge.ItemProvidedHolder
import com.willfp.talismans.plugin
import com.willfp.talismans.talismans.util.TalismanChecks
import com.willfp.talismans.talismans.util.TalismanUtils
import org.bukkit.entity.Player
import org.bukkit.inventory.ItemStack
import net.kyori.adventure.text.Component

@Suppress("DEPRECATION")
object TalismanDisplay : DisplayModule(plugin, DisplayPriority.LOWEST) {
override fun display(
itemStack: ItemStack,
player: Player?,
vararg args: Any
) {
override fun display(context: DisplayContext) {
val itemStack = context.itemStack

if (!TalismanUtils.isTalismanMaterial(itemStack.type)) {
return
}

val meta = itemStack.itemMeta ?: return
val itemLore = meta.lore ?: mutableListOf()
if (!itemStack.hasItemMeta()) {
return
}

val talisman = TalismanChecks.getTalismanOnItem(itemStack) ?: return
val fis = itemStack.fast()

val placeholderContext = placeholderContext(
player = player,
item = itemStack
)

meta.setDisplayName(talisman.name.formatEco(placeholderContext))
fis.displayName = talisman.name.formatEco(context.placeholderContext)

if (talisman.itemStack.itemMeta?.hasCustomModelData() == true) {
meta.setCustomModelData(talisman.itemStack.itemMeta?.customModelData)
}

val lore = mutableListOf<String>()
talisman.itemStack.fast().customModelData?.let { fis.customModelData = it }

lore.addAll(
talisman.description
.map { Display.PREFIX + it.formatEco(placeholderContext) }
)
context.lore.prepend(talisman.description.formatEcoRich(context.placeholderContext))

lore.addAll(itemLore)
val player = context.player ?: return
val lines = ItemProvidedHolder(talisman, itemStack).getNotMetLineComponents(player)

if (player != null) {
val provided = ItemProvidedHolder(talisman, itemStack)
val lines = provided.getNotMetLines(player).map { Display.PREFIX + it }

if (lines.isNotEmpty()) {
lore.add(Display.PREFIX)
lore.addAll(lines)
}
if (lines.isNotEmpty()) {
context.lore.append(listOf(Component.empty()) + lines)
}

meta.lore = lore
itemStack.itemMeta = meta
}
}
}
4 changes: 4 additions & 0 deletions ecohub/talismans/how-to-make-a-custom-talisman.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,10 @@ description: # Lore lines shown on the item
- "&8Deal 10% more damage with bows"
```

:::tip
Lore supports MiniMessage, including sprites such as `<sprite:items:item/diamond>` on 1.21.9 and newer. See [Text Formatting](https://hub.auxilor.io/wiki/eco/text-formatting).
:::

### Leveling

Stack levels of the same talisman so only the strongest one a player holds counts.
Expand Down
Loading