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

Compare commits

...

32 Commits

Author SHA1 Message Date
Will FP
23039a73f9 libreforge-updater 2024-05-11 18:21:43 +01:00
Will FP
2e3324c405 libreforge-updater 2024-04-17 20:35:35 +01:00
Auxilor
c24d0876ca libreforge-updater 2024-04-15 18:19:34 +01:00
Auxilor
800ef7732a libreforge-updater 2024-04-11 13:17:32 +01:00
Auxilor
e6c82e6ac4 libreforge-updater 2024-03-29 16:08:40 +00:00
Will FP
7008794445 Fixed _example.yml 2024-03-28 11:25:56 +00:00
Will FP
c9aac17937 libreforge-updater 2024-03-11 17:38:41 +00:00
Will FP
3c2f2ba315 libreforge-updater 2024-03-10 20:10:14 +00:00
Will FP
d4a8665a6a Added chance option to replace 2024-03-04 18:36:38 +00:00
Will FP
eb0a5251d3 libreforge-updater 2024-03-02 15:21:29 +00:00
Will FP
782edf8da1 libreforge-updater 2024-02-22 13:18:55 +00:00
Will FP
ac3de8a0fb libreforge-updater 2024-02-15 13:03:11 +00:00
Will FP
d47b4b9567 libreforge-updater 2024-02-08 19:50:40 +00:00
Will FP
613632e7a9 libreforge-updater 2024-01-30 11:28:25 +00:00
Will FP
b8d8d4999f libreforge-updater 2024-01-18 17:03:56 +00:00
Will FP
aa7000b2aa libreforge-updater 2024-01-16 13:29:47 +00:00
Will FP
afe6b34c65 libreforge-updater 2024-01-13 14:24:37 +00:00
Will FP
c9173c06da libreforge-updater 2024-01-07 13:52:32 +00:00
Will FP
57a4f1a708 Improved _example.yml, added permanent mob effects 2024-01-06 12:06:29 +00:00
Will FP
f031fb51c6 Improved _example.yml, added permanent mob effects 2024-01-06 11:56:04 +00:00
Will FP
8745ee5425 Oops 2024-01-06 09:22:10 +00:00
Will FP
428f022d97 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	gradle.properties
2024-01-06 09:22:03 +00:00
Will FP
f17eb06b03 libreforge-updater 2024-01-06 09:20:57 +00:00
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
13 changed files with 101 additions and 19 deletions

View File

@@ -4,6 +4,7 @@ import com.willfp.eco.core.command.impl.PluginCommand
import com.willfp.eco.core.display.DisplayModule import com.willfp.eco.core.display.DisplayModule
import com.willfp.eco.core.entities.ai.EntityGoals import com.willfp.eco.core.entities.ai.EntityGoals
import com.willfp.eco.core.integrations.IntegrationLoader import com.willfp.eco.core.integrations.IntegrationLoader
import com.willfp.eco.util.toSingletonList
import com.willfp.ecomobs.category.MobCategories import com.willfp.ecomobs.category.MobCategories
import com.willfp.ecomobs.category.spawning.spawnpoints.SpawnPointGenerator import com.willfp.ecomobs.category.spawning.spawnpoints.SpawnPointGenerator
import com.willfp.ecomobs.commands.CommandEcoMobs import com.willfp.ecomobs.commands.CommandEcoMobs
@@ -19,8 +20,13 @@ import com.willfp.ecomobs.integrations.libsdisguises.IntegrationLibsDisguises
import com.willfp.ecomobs.integrations.modelengine.IntegrationModelEngine import com.willfp.ecomobs.integrations.modelengine.IntegrationModelEngine
import com.willfp.ecomobs.mob.EcoMobs import com.willfp.ecomobs.mob.EcoMobs
import com.willfp.ecomobs.mob.damage.TopDamagerHandler import com.willfp.ecomobs.mob.damage.TopDamagerHandler
import com.willfp.ecomobs.mob.impl.ecoMob
import com.willfp.libreforge.EmptyProvidedHolder.holder
import com.willfp.libreforge.EntityProvidedHolder
import com.willfp.libreforge.loader.LibreforgePlugin import com.willfp.libreforge.loader.LibreforgePlugin
import com.willfp.libreforge.loader.configs.ConfigCategory import com.willfp.libreforge.loader.configs.ConfigCategory
import com.willfp.libreforge.registerSpecificHolderProvider
import org.bukkit.entity.Mob
import org.bukkit.event.Listener import org.bukkit.event.Listener
internal lateinit var plugin: EcoMobsPlugin internal lateinit var plugin: EcoMobsPlugin
@@ -34,6 +40,14 @@ class EcoMobsPlugin : LibreforgePlugin() {
plugin = this plugin = this
} }
override fun handleEnable() {
registerSpecificHolderProvider<Mob> {
it.ecoMob?.entityHolder.toSingletonList().map { holder ->
EntityProvidedHolder(holder, it)
}
}
}
override fun handleLoad() { override fun handleLoad() {
EntityGoals.register(EntityGoalRandomTeleport.Deserializer) EntityGoals.register(EntityGoalRandomTeleport.Deserializer)
} }
@@ -52,7 +66,8 @@ class EcoMobsPlugin : LibreforgePlugin() {
VanillaCompatibilityHandlers(), VanillaCompatibilityHandlers(),
DiscoverRecipeListener(this), DiscoverRecipeListener(this),
SpawnEggHandler(this), SpawnEggHandler(this),
SpawnTotemHandler() SpawnTotemHandler(),
topDamagerHandler
) )
} }

View File

@@ -2,6 +2,7 @@ package com.willfp.ecomobs.category.spawning.impl
import com.willfp.eco.core.config.interfaces.Config import com.willfp.eco.core.config.interfaces.Config
import com.willfp.eco.core.entities.Entities import com.willfp.eco.core.entities.Entities
import com.willfp.eco.util.randDouble
import com.willfp.ecomobs.EcoMobsPlugin import com.willfp.ecomobs.EcoMobsPlugin
import com.willfp.ecomobs.category.MobCategory import com.willfp.ecomobs.category.MobCategory
import com.willfp.ecomobs.category.spawning.SpawnMethod import com.willfp.ecomobs.category.spawning.SpawnMethod
@@ -57,6 +58,10 @@ object SpawnMethodFactoryReplace : SpawnMethodFactory("replace") {
return return
} }
if (randDouble(0.0, 100.0) > config.getDouble("chance")) {
return
}
val mob = category.mobs.randomOrNull() ?: return val mob = category.mobs.randomOrNull() ?: return

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

@@ -7,6 +7,7 @@ import com.willfp.ecomobs.category.MobCategory
import com.willfp.ecomobs.integrations.MobIntegration import com.willfp.ecomobs.integrations.MobIntegration
import com.willfp.ecomobs.mob.event.MobEvent import com.willfp.ecomobs.mob.event.MobEvent
import com.willfp.ecomobs.mob.options.SpawnEgg import com.willfp.ecomobs.mob.options.SpawnEgg
import com.willfp.libreforge.Holder
import com.willfp.libreforge.triggers.DispatchedTrigger import com.willfp.libreforge.triggers.DispatchedTrigger
import org.bukkit.Location import org.bukkit.Location
import org.bukkit.entity.Mob import org.bukkit.entity.Mob
@@ -50,6 +51,11 @@ interface EcoMob : KRegistrable {
*/ */
val customEntity: CustomEntity val customEntity: CustomEntity
/**
* The entity holder.
*/
val entityHolder: Holder
/** /**
* Get a living mob from a bukkit mob. * Get a living mob from a bukkit mob.
*/ */

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

@@ -49,14 +49,19 @@ import com.willfp.ecomobs.tick.TickHandlerBossBar
import com.willfp.ecomobs.tick.TickHandlerDisplayName import com.willfp.ecomobs.tick.TickHandlerDisplayName
import com.willfp.ecomobs.tick.TickHandlerLifespan import com.willfp.ecomobs.tick.TickHandlerLifespan
import com.willfp.libreforge.ConfigViolation import com.willfp.libreforge.ConfigViolation
import com.willfp.libreforge.Holder
import com.willfp.libreforge.ViolationContext import com.willfp.libreforge.ViolationContext
import com.willfp.libreforge.conditions.ConditionList
import com.willfp.libreforge.conditions.Conditions import com.willfp.libreforge.conditions.Conditions
import com.willfp.libreforge.conditions.emptyConditionList
import com.willfp.libreforge.effects.EffectList
import com.willfp.libreforge.effects.Effects import com.willfp.libreforge.effects.Effects
import com.willfp.libreforge.enumValueOfOrNull import com.willfp.libreforge.enumValueOfOrNull
import com.willfp.libreforge.triggers.DispatchedTrigger import com.willfp.libreforge.triggers.DispatchedTrigger
import net.kyori.adventure.bossbar.BossBar import net.kyori.adventure.bossbar.BossBar
import org.bukkit.Bukkit import org.bukkit.Bukkit
import org.bukkit.Location import org.bukkit.Location
import org.bukkit.NamespacedKey
import org.bukkit.entity.Mob import org.bukkit.entity.Mob
import org.bukkit.entity.Player import org.bukkit.entity.Player
import org.bukkit.event.entity.CreatureSpawnEvent import org.bukkit.event.entity.CreatureSpawnEvent
@@ -311,6 +316,17 @@ internal class ConfigDrivenEcoMob(
this.spawn(it, SpawnReason.COMMAND)!!.entity this.spawn(it, SpawnReason.COMMAND)!!.entity
}.apply { register() } }.apply { register() }
override val entityHolder = object : Holder {
override val id = plugin.createNamespacedKey(getID())
override val effects: EffectList = Effects.compile(
config.getSubsections("effects.permanent-effects"),
context.with("effects").with("permanent effects")
)
override val conditions = emptyConditionList()
}
/* /*
---------- ----------
*/ */

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)
@@ -77,8 +77,8 @@ internal class LivingMobImpl(
mob.handleEvent(event, trigger) mob.handleEvent(event, trigger)
} }
override fun kill(player: Player?) { override fun kill(player: Player?, removeTracking: Boolean) {
handleRemove() handleRemove(removeTracking = removeTracking)
mob.spawnDrops(entity.location, player) mob.spawnDrops(entity.location, player)
} }
@@ -92,9 +92,11 @@ internal class LivingMobImpl(
) )
} }
private fun handleRemove() { private fun handleRemove(removeTracking: Boolean = true) {
ticker.cancel() ticker.cancel()
deathCallback() if (removeTracking) {
trackingRemovalCallback()
}
for (handler in this.tickHandlers) { for (handler in this.tickHandlers) {
handler.onRemove(this, tick) handler.onRemove(this, tick)

View File

@@ -26,6 +26,9 @@ spawning:
- zombie - zombie
- skeleton - skeleton
# The chance for the mob to override, as a percentage
chance: 100
# Options for custom spawning # Options for custom spawning
custom: custom:

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

@@ -52,43 +52,59 @@ custom-ai:
# How the mob should behave. # How the mob should behave.
entity-goals: [ ] entity-goals: [ ]
# Effects are done from the player's perspective: to treat the player as the victim, # Some effects are ran from the perspective of the entity, and others from the perspective
# either use self_as_victim in args, or use player_as_victim in mutators. # of the player - each section is marked with which perspective it is run from.
# You can use display name placeholders in effects # You can use display name placeholders in effects
# You can also use top damager placeholders: # You can also use top damager placeholders:
# %top_damager_<place>_name%, %top_damager_<place>_damage%, %top_damager_<place>_display% # %top_damager_<place>_name%, %top_damager_<place>_damage%, %top_damager_<place>_display%
effects: effects:
# Effects that are active all the time
# Ran from the perspective of the entity
permanent-effects: [ ]
# Effects ran when the mob spawns # Effects ran when the mob spawns
# Ran from the perspective of the entity
spawn: [ ] spawn: [ ]
# Effects ran when the mob despawns # Effects ran when the mob despawns
# Ran from the perspective of the entity
despawn: [ ] despawn: [ ]
# Effects ran when the player interacts with the mob # Effects ran when the player interacts with the mob
# Ran from the perspective of the player
interact: [ ] interact: [ ]
# Effects ran when the player melee attacks the mob # Effects ran when the player melee attacks the mob
# Ran from the perspective of the player
melee-attack: [ ] melee-attack: [ ]
# Effects ran when the player does a ranged attack on the mob # Effects ran when the player does a ranged attack on the mob
# Ran from the perspective of the player
ranged-attack: [ ] ranged-attack: [ ]
# Effects ran when the player attacks the mob # Effects ran when the player attacks the mob
# Ran from the perspective of the player
any-attack: [ ] any-attack: [ ]
# Effects ran when the mob takes damage # Effects ran when the mob takes damage
# Ran from the perspective of the entity
take-damage: [ ] take-damage: [ ]
# Effects ran when the player is damaged by the mob # Effects ran when the player is damaged by the mob
# Ran from the perspective of the player
damage-player: [ ] damage-player: [ ]
# Effects ran when the player is killed by the mob # Effects ran when the player is killed by the mob
# Ran from the perspective of the player
kill-player: [ ] kill-player: [ ]
# Effects ran when the mob dies # Effects ran when the mob dies
# Ran from the perspective of the entity
death: [ ] death: [ ]
# Effects ran when the mob is killed by the player # Effects ran when the mob is killed by the player
# Ran from the perspective of the player
kill: [ ] kill: [ ]
# The lifespan of the mob, in seconds. Set to -1 to disable. # The lifespan of the mob, in seconds. Set to -1 to disable.

View File

@@ -1,5 +1,5 @@
#libreforge-updater #libreforge-updater
#Sun Dec 24 14:55:22 CET 2023 #Sat May 11 18:21:43 BST 2024
kotlin.code.style=official kotlin.code.style=official
libreforge-version=4.51.0 libreforge-version=4.59.0
version=10.0.0-b1 version=10.4.0