9
0
mirror of https://github.com/Auxilor/EcoMobs.git synced 2025-12-19 15:09:17 +00:00

Improved spawn egg

This commit is contained in:
Auxilor
2023-11-12 13:36:27 +00:00
parent e15366e1b2
commit a6dbebbb66
6 changed files with 65 additions and 21 deletions

View File

@@ -57,7 +57,7 @@ class CommandGive(plugin: EcoMobsPlugin) : Subcommand(
)
DropQueue(recipient)
.addItem(egg.getItem(recipient).apply {
.addItem(egg.item.item.apply {
setAmount(amount)
})
.forceTelekinesis()

View File

@@ -0,0 +1,54 @@
package com.willfp.ecomobs.display
import com.willfp.eco.core.display.Display
import com.willfp.eco.core.fast.fast
import com.willfp.eco.core.placeholder.context.placeholderContext
import com.willfp.eco.util.formatEco
import com.willfp.libreforge.BlankHolder
import com.willfp.libreforge.EmptyProvidedHolder
import com.willfp.libreforge.ProvidedHolder
import org.bukkit.entity.Player
import org.bukkit.inventory.ItemStack
class BaseItem(
private val baseItem: ItemStack,
private val rawDisplayName: String,
private val rawLore: List<String>
) {
private val itemFlags = baseItem.fast().itemFlags
val item: ItemStack
get() = display(baseItem.clone(), null, EmptyProvidedHolder)
fun display(itemStack: ItemStack, player: Player?, holder: ProvidedHolder): ItemStack {
val fis = itemStack.fast()
val context = placeholderContext(
player = player,
item = itemStack
)
// Handle lore
val lore = rawLore.map { "${Display.PREFIX}${it.formatEco(context)}" }.toMutableList()
if (player != null) {
val lines = holder.getNotMetLines(player).map { Display.PREFIX + it }
if (lines.isNotEmpty()) {
lore.add(Display.PREFIX)
lore.addAll(lines)
}
}
lore.addAll(fis.lore)
fis.lore = lore
// Handle display name
fis.displayName = rawDisplayName.formatEco(context)
// Handle flags
fis.addItemFlags(*itemFlags.toTypedArray())
return fis.unwrap()
}
}

View File

@@ -1,7 +1,6 @@
package com.willfp.ecomobs.display
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.display.Display
import com.willfp.eco.core.display.DisplayModule
import com.willfp.eco.core.display.DisplayPriority
import com.willfp.eco.core.fast.fast
@@ -26,10 +25,6 @@ class SpawnEggDisplay(
val egg = fis.ecoMobEgg?.spawnEgg ?: return
val notMetLines = egg.conditions
.getNotMetLines(player, ItemProvidedHolder(BlankHolder, itemStack))
.map { Display.PREFIX + it }
fis.lore = fis.lore + notMetLines
egg.item.display(itemStack, player, ItemProvidedHolder(BlankHolder, itemStack))
}
}

View File

@@ -26,6 +26,7 @@ import com.willfp.ecomobs.config.ifTrue
import com.willfp.ecomobs.config.toConfigKey
import com.willfp.ecomobs.config.validate
import com.willfp.ecomobs.config.validateNotNull
import com.willfp.ecomobs.display.BaseItem
import com.willfp.ecomobs.event.EcoMobPreSpawnEvent
import com.willfp.ecomobs.event.EcoMobSpawnEvent
import com.willfp.ecomobs.integrations.MobIntegration
@@ -275,10 +276,12 @@ internal class ConfigDrivenEcoMob(
SpawnEgg(
this,
conditions,
BaseItem(
item,
name,
lore
)
)
}
override val totemOptions = config.getBool("spawn.totem.enabled").ifTrue {

View File

@@ -5,6 +5,7 @@ import com.willfp.eco.core.fast.fast
import com.willfp.eco.core.items.builder.modify
import com.willfp.eco.util.formatEco
import com.willfp.eco.util.namespacedKeyOf
import com.willfp.ecomobs.display.BaseItem
import com.willfp.ecomobs.mob.EcoMob
import com.willfp.ecomobs.mob.EcoMobs
import com.willfp.ecomobs.mob.LivingMob
@@ -19,17 +20,8 @@ import org.bukkit.persistence.PersistentDataType
class SpawnEgg internal constructor(
val mob: EcoMob,
val conditions: ConditionList,
private val backingItem: ItemStack,
private val rawDisplayName: String,
private val rawLore: List<String>
val item: BaseItem
) {
fun getItem(player: Player?): ItemStack {
return backingItem.clone().modify {
this.setDisplayName(rawDisplayName.formatEco(player))
this.addLoreLines(rawLore.formatEco(player))
}
}
fun trySpawn(location: Location, player: Player?): LivingMob? {
if (player != null) {
val canSpawn = conditions.areMetAndTrigger(

View File

@@ -1,3 +1,3 @@
kotlin.code.style=official
libreforge-version=4.41.0
libreforge-version=4.42.0
version=10.0.0-b1