mirror of
https://github.com/Auxilor/EcoMobs.git
synced 2025-12-20 15:39:31 +00:00
Improved spawn egg
This commit is contained in:
@@ -57,7 +57,7 @@ class CommandGive(plugin: EcoMobsPlugin) : Subcommand(
|
|||||||
)
|
)
|
||||||
|
|
||||||
DropQueue(recipient)
|
DropQueue(recipient)
|
||||||
.addItem(egg.getItem(recipient).apply {
|
.addItem(egg.item.item.apply {
|
||||||
setAmount(amount)
|
setAmount(amount)
|
||||||
})
|
})
|
||||||
.forceTelekinesis()
|
.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
|
package com.willfp.ecomobs.display
|
||||||
|
|
||||||
import com.willfp.eco.core.EcoPlugin
|
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.DisplayModule
|
||||||
import com.willfp.eco.core.display.DisplayPriority
|
import com.willfp.eco.core.display.DisplayPriority
|
||||||
import com.willfp.eco.core.fast.fast
|
import com.willfp.eco.core.fast.fast
|
||||||
@@ -26,10 +25,6 @@ class SpawnEggDisplay(
|
|||||||
|
|
||||||
val egg = fis.ecoMobEgg?.spawnEgg ?: return
|
val egg = fis.ecoMobEgg?.spawnEgg ?: return
|
||||||
|
|
||||||
val notMetLines = egg.conditions
|
egg.item.display(itemStack, player, ItemProvidedHolder(BlankHolder, itemStack))
|
||||||
.getNotMetLines(player, ItemProvidedHolder(BlankHolder, itemStack))
|
|
||||||
.map { Display.PREFIX + it }
|
|
||||||
|
|
||||||
fis.lore = fis.lore + notMetLines
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import com.willfp.ecomobs.config.ifTrue
|
|||||||
import com.willfp.ecomobs.config.toConfigKey
|
import com.willfp.ecomobs.config.toConfigKey
|
||||||
import com.willfp.ecomobs.config.validate
|
import com.willfp.ecomobs.config.validate
|
||||||
import com.willfp.ecomobs.config.validateNotNull
|
import com.willfp.ecomobs.config.validateNotNull
|
||||||
|
import com.willfp.ecomobs.display.BaseItem
|
||||||
import com.willfp.ecomobs.event.EcoMobPreSpawnEvent
|
import com.willfp.ecomobs.event.EcoMobPreSpawnEvent
|
||||||
import com.willfp.ecomobs.event.EcoMobSpawnEvent
|
import com.willfp.ecomobs.event.EcoMobSpawnEvent
|
||||||
import com.willfp.ecomobs.integrations.MobIntegration
|
import com.willfp.ecomobs.integrations.MobIntegration
|
||||||
@@ -275,10 +276,12 @@ internal class ConfigDrivenEcoMob(
|
|||||||
SpawnEgg(
|
SpawnEgg(
|
||||||
this,
|
this,
|
||||||
conditions,
|
conditions,
|
||||||
|
BaseItem(
|
||||||
item,
|
item,
|
||||||
name,
|
name,
|
||||||
lore
|
lore
|
||||||
)
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override val totemOptions = config.getBool("spawn.totem.enabled").ifTrue {
|
override val totemOptions = config.getBool("spawn.totem.enabled").ifTrue {
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import com.willfp.eco.core.fast.fast
|
|||||||
import com.willfp.eco.core.items.builder.modify
|
import com.willfp.eco.core.items.builder.modify
|
||||||
import com.willfp.eco.util.formatEco
|
import com.willfp.eco.util.formatEco
|
||||||
import com.willfp.eco.util.namespacedKeyOf
|
import com.willfp.eco.util.namespacedKeyOf
|
||||||
|
import com.willfp.ecomobs.display.BaseItem
|
||||||
import com.willfp.ecomobs.mob.EcoMob
|
import com.willfp.ecomobs.mob.EcoMob
|
||||||
import com.willfp.ecomobs.mob.EcoMobs
|
import com.willfp.ecomobs.mob.EcoMobs
|
||||||
import com.willfp.ecomobs.mob.LivingMob
|
import com.willfp.ecomobs.mob.LivingMob
|
||||||
@@ -19,17 +20,8 @@ import org.bukkit.persistence.PersistentDataType
|
|||||||
class SpawnEgg internal constructor(
|
class SpawnEgg internal constructor(
|
||||||
val mob: EcoMob,
|
val mob: EcoMob,
|
||||||
val conditions: ConditionList,
|
val conditions: ConditionList,
|
||||||
private val backingItem: ItemStack,
|
val item: BaseItem
|
||||||
private val rawDisplayName: String,
|
|
||||||
private val rawLore: List<String>
|
|
||||||
) {
|
) {
|
||||||
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? {
|
fun trySpawn(location: Location, player: Player?): LivingMob? {
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
val canSpawn = conditions.areMetAndTrigger(
|
val canSpawn = conditions.areMetAndTrigger(
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
kotlin.code.style=official
|
kotlin.code.style=official
|
||||||
libreforge-version=4.41.0
|
libreforge-version=4.42.0
|
||||||
version=10.0.0-b1
|
version=10.0.0-b1
|
||||||
|
|||||||
Reference in New Issue
Block a user