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:
@@ -57,7 +57,7 @@ class CommandGive(plugin: EcoMobsPlugin) : Subcommand(
|
||||
)
|
||||
|
||||
DropQueue(recipient)
|
||||
.addItem(egg.getItem(recipient).apply {
|
||||
.addItem(egg.item.item.apply {
|
||||
setAmount(amount)
|
||||
})
|
||||
.forceTelekinesis()
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
@@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,9 +276,11 @@ internal class ConfigDrivenEcoMob(
|
||||
SpawnEgg(
|
||||
this,
|
||||
conditions,
|
||||
item,
|
||||
name,
|
||||
lore
|
||||
BaseItem(
|
||||
item,
|
||||
name,
|
||||
lore
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
kotlin.code.style=official
|
||||
libreforge-version=4.41.0
|
||||
libreforge-version=4.42.0
|
||||
version=10.0.0-b1
|
||||
|
||||
Reference in New Issue
Block a user