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

Compare commits

...

15 Commits

Author SHA1 Message Date
Auxilor
e4a805c627 libreforge-updater 2024-01-04 17:25:24 +00:00
Auxilor
ce24ea4cf4 Updated to 10.0.0-b4 2024-01-03 16:45:47 +00:00
Auxilor
47e9ff13dc Improved top damager placeholders 2024-01-03 16:45:37 +00:00
Auxilor
93c5ce5b6c libreforge-updater 2024-01-01 20:02:25 +00:00
Auxilor
11acfed77c Fixed top damager placeholders 2024-01-01 18:05:27 +00:00
Auxilor
8cca1f7994 Fixed 'death' event, fixed top damagers 2024-01-01 17:59:02 +00:00
Will FP
f6a40d84f7 Updated to 10.0.0-b2 2023-12-30 13:34:28 +01:00
Will FP
9e663e89e8 Fixed model engine integration 2023-12-30 13:34:17 +01:00
Will FP
58b0ba6b81 Updated bStats ID 2023-12-28 16:45:23 +01:00
Will FP
a40164a03d Fixed tickers 2023-12-28 12:48:04 +01:00
Will FP
b946346020 Fix to lang.yml 2023-12-27 18:04:26 +01:00
Will FP
3753c93bf5 Improved error message 2023-12-27 17:53:04 +01:00
Will FP
9d407b9dea Fixed death animation not playing 2023-12-27 17:47:55 +01:00
Will FP
08f8b02d22 Fixed custom entity 2023-12-26 14:19:06 +01:00
Will FP
913120e791 oops 2023-12-24 14:56:21 +01:00
10 changed files with 46 additions and 26 deletions

View File

@@ -52,7 +52,8 @@ class EcoMobsPlugin : LibreforgePlugin() {
VanillaCompatibilityHandlers(), VanillaCompatibilityHandlers(),
DiscoverRecipeListener(this), DiscoverRecipeListener(this),
SpawnEggHandler(this), SpawnEggHandler(this),
SpawnTotemHandler() SpawnTotemHandler(),
topDamagerHandler
) )
} }

View File

@@ -21,7 +21,7 @@ class IntegrationModelEngine : Listener, Integration {
val modelled = ModelEngineBridge.instance.createModeledEntity(entity) val modelled = ModelEngineBridge.instance.createModeledEntity(entity)
modelled.addModel(model) modelled.addModel(model)
modelled.isBaseEntityVisible = true modelled.isBaseEntityVisible = false
} }
override fun getPluginName(): String { override fun getPluginName(): String {

View File

@@ -27,7 +27,7 @@ interface LivingMob {
/** /**
* Kill the mob. * Kill the mob.
*/ */
fun kill(player: Player?) fun kill(player: Player?, removeTracking: Boolean = true)
/** /**
* Despawn the mob. * Despawn the mob.

View File

@@ -1,9 +1,11 @@
package com.willfp.ecomobs.mob.damage package com.willfp.ecomobs.mob.damage
import com.willfp.eco.util.savedDisplayName import com.willfp.eco.util.savedDisplayName
import com.willfp.eco.util.toNiceString
import com.willfp.eco.util.tryAsPlayer import com.willfp.eco.util.tryAsPlayer
import com.willfp.ecomobs.EcoMobsPlugin import com.willfp.ecomobs.EcoMobsPlugin
import com.willfp.libreforge.NamedValue import com.willfp.libreforge.NamedValue
import com.willfp.libreforge.triggers.TriggerData
import org.bukkit.Bukkit import org.bukkit.Bukkit
import org.bukkit.entity.Mob import org.bukkit.entity.Mob
import org.bukkit.event.EventHandler import org.bukkit.event.EventHandler
@@ -49,10 +51,21 @@ class TopDamagerHandler(
fun generatePlaceholders(mob: Mob): List<NamedValue> { fun generatePlaceholders(mob: Mob): List<NamedValue> {
return mob.topDamagers return mob.topDamagers
.mapIndexed { index, damager -> .flatMapIndexed { index, damager ->
NamedValue("top_damager_${index + 1}_name", Bukkit.getOfflinePlayer(damager.uuid).name ?: "Unknown") listOf(
NamedValue("top_damager_${index + 1}_display", Bukkit.getOfflinePlayer(damager.uuid).savedDisplayName) NamedValue(
NamedValue("top_damager_${index + 1}_damage", damager.damage.toString()) "top_damager_${index + 1}_name",
Bukkit.getOfflinePlayer(damager.uuid).name ?: "Unknown"
),
NamedValue(
"top_damager_${index + 1}_display",
Bukkit.getOfflinePlayer(damager.uuid).savedDisplayName
),
NamedValue(
"top_damager_${index + 1}_damage",
damager.damage.toNiceString()
)
)
} }
} }
} }

View File

@@ -33,6 +33,12 @@ object MobEventKill : MobEvent("kill") {
Bukkit.getPluginManager().callEvent(EcoMobKillEvent(living, player)) Bukkit.getPluginManager().callEvent(EcoMobKillEvent(living, player))
living.handleEvent(this, data.dispatch(player.toDispatcher())) living.handleEvent(this, data.dispatch(player.toDispatcher()))
living.kill(player)
// Tracking isn't removed here because it's removed in MobEventDeath, which is called after this one.
// Otherwise, player kills wouldn't fire the death event.
living.kill(
player,
removeTracking = false
)
} }
} }

View File

@@ -309,7 +309,7 @@ internal class ConfigDrivenEcoMob(
{ (it as? Mob)?.ecoMob == this } { (it as? Mob)?.ecoMob == this }
) { ) {
this.spawn(it, SpawnReason.COMMAND)!!.entity this.spawn(it, SpawnReason.COMMAND)!!.entity
} }.apply { register() }
/* /*
---------- ----------
@@ -353,7 +353,6 @@ internal class ConfigDrivenEcoMob(
return trackedMobs[uuid] return trackedMobs[uuid]
} }
@Suppress("UNCHECKED_CAST")
override fun spawn(location: Location, reason: SpawnReason): LivingMob? { override fun spawn(location: Location, reason: SpawnReason): LivingMob? {
// Call bukkit event // Call bukkit event
val preSpawnEvent = EcoMobPreSpawnEvent(this, reason) val preSpawnEvent = EcoMobPreSpawnEvent(this, reason)
@@ -364,7 +363,7 @@ internal class ConfigDrivenEcoMob(
} }
// Spawn bukkit mob // Spawn bukkit mob
val entity = mob.spawn(location) as? Mob ?: throw IllegalStateException("Mob is not a mob") val entity = mob.spawn(location) as? Mob ?: throw IllegalStateException("Base entity must be a mob!")
// Mark as custom mob // Mark as custom mob
entity.ecoMob = this entity.ecoMob = this

View File

@@ -19,7 +19,7 @@ internal class LivingMobImpl(
private val plugin: EcoMobsPlugin, private val plugin: EcoMobsPlugin,
override val mob: EcoMob, override val mob: EcoMob,
override val entity: Mob, override val entity: Mob,
private val deathCallback: () -> Unit private val trackingRemovalCallback: () -> Unit
) : LivingMob { ) : LivingMob {
private val ticker = plugin.runnableFactory.create { private val ticker = plugin.runnableFactory.create {
tick(tick) tick(tick)
@@ -27,13 +27,13 @@ internal class LivingMobImpl(
if (!isAlive) { if (!isAlive) {
it.cancel() it.cancel()
remove() handleRemove()
} }
} }
private var isRunning = false private var isRunning = false
private var tick = 1 private var tick = 0
private val tickHandlers = mutableListOf<TickHandler>() private val tickHandlers = mutableListOf<TickHandler>()
@@ -77,25 +77,26 @@ internal class LivingMobImpl(
mob.handleEvent(event, trigger) mob.handleEvent(event, trigger)
} }
override fun kill(player: Player?) { override fun kill(player: Player?, removeTracking: Boolean) {
remove() handleRemove(removeTracking = removeTracking)
mob.spawnDrops(entity.location, player) mob.spawnDrops(entity.location, player)
} }
override fun despawn() { override fun despawn() {
remove() entity.remove()
handleRemove()
Bukkit.getPluginManager().callEvent( Bukkit.getPluginManager().callEvent(
EcoMobDespawnEvent(this) EcoMobDespawnEvent(this)
) )
} }
private fun remove() { private fun handleRemove(removeTracking: Boolean = true) {
ticker.cancel() ticker.cancel()
if (removeTracking) {
entity.remove() trackingRemovalCallback()
deathCallback() }
for (handler in this.tickHandlers) { for (handler in this.tickHandlers) {
handler.onRemove(this, tick) handler.onRemove(this, tick)

View File

@@ -4,6 +4,6 @@ environment:
options: options:
resource-id: 525 resource-id: 525
bstats-id: 10635 bstats-id: 20581
color: "&9" color: "&9"
proxy-package: "com.willfp.ecomobs.nms" proxy-package: "com.willfp.ecomobs.nms"

View File

@@ -1,5 +1,5 @@
messages: messages:
prefix: "&9&lEcoMobs &f» " prefix: "&9&lEcoMobs &8» &f"
no-permission: "&cYou don't have permission to do this!" no-permission: "&cYou don't have permission to do this!"
not-player: "&cThis command must be run by a player" not-player: "&cThis command must be run by a player"
invalid-command: "&cUnknown subcommand!" invalid-command: "&cUnknown subcommand!"

View File

@@ -1,5 +1,5 @@
#libreforge-updater #libreforge-updater
#Sun Dec 24 14:55:22 CET 2023 #Thu Jan 04 17:25:24 GMT 2024
kotlin.code.style=official kotlin.code.style=official
libreforge-version=4.51.0 libreforge-version=4.53.0
version=10.0.0-b2 version=10.0.0-b5