Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ allprojects {
maven("https://repo.auxilor.io/repository/maven-public/")
maven("https://mvn.lib.co.nz/public")
maven("https://mvn.lumine.io/repository/maven-public/")
maven("https://maven.playpro.com")
}

dependencies {
Expand Down
1 change: 1 addition & 0 deletions eco-core/core-plugin/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ dependencies {
compileOnly("io.papermc.paper:paper-api:1.21.8-R0.1-SNAPSHOT")
compileOnly("io.github.arcaneplugins:levelledmobs-plugin:4.0.2")
compileOnly("me.libraryaddict.disguises:libsdisguises:11.0.14")
compileOnly("net.coreprotect:coreprotect:24.0")
implementation("com.willfp:ModelEngineBridge:1.4.0")
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.willfp.eco.core.command.impl.PluginCommand
import com.willfp.eco.core.display.DisplayModule
import com.willfp.eco.core.entities.ai.EntityGoals
import com.willfp.eco.core.integrations.IntegrationLoader
import com.willfp.eco.core.items.Items
import com.willfp.eco.util.toSingletonList
import com.willfp.ecomobs.category.MobCategories
import com.willfp.ecomobs.category.spawning.spawnpoints.SpawnPointGenerator
Expand All @@ -23,6 +24,7 @@ import com.willfp.ecomobs.handler.SpawnerStackHandler
import com.willfp.ecomobs.handler.StackHandler
import com.willfp.ecomobs.handler.VanillaCompatibilityHandlers
import com.willfp.ecomobs.integrations.bettermodel.IntegrationBetterModel
import com.willfp.ecomobs.integrations.coreprotect.IntegrationCoreProtect
import com.willfp.ecomobs.integrations.levelledmobs.IntegrationLevelledMobs
import com.willfp.ecomobs.integrations.libsdisguises.IntegrationLibsDisguises
import com.willfp.ecomobs.integrations.modelengine.IntegrationModelEngine
Expand All @@ -33,11 +35,13 @@ import com.willfp.ecomobs.spawner.PlacedSpawners
import com.willfp.ecomobs.spawner.SpawnerAnimations
import com.willfp.ecomobs.spawner.SpawnerDisplay
import com.willfp.ecomobs.spawner.SpawnerHolograms
import com.willfp.ecomobs.spawner.SpawnerItems
import com.willfp.ecomobs.spawner.SpawnerStackSettings
import com.willfp.ecomobs.spawner.SpawnerSettings
import com.willfp.ecomobs.spawner.SpawnerSpawnLoop
import com.willfp.ecomobs.stacking.MobStackTicker
import com.willfp.ecomobs.stacking.StackSettings
import com.willfp.ecomobs.trigger.EcoMobsTriggers
import com.willfp.ecomobs.spawner.particle.SpawnerParticleAnimations
import com.willfp.libreforge.EntityProvidedHolder
import com.willfp.libreforge.loader.LibreforgePlugin
Expand Down Expand Up @@ -67,6 +71,8 @@ class EcoMobsPlugin : LibreforgePlugin() {

override fun handleLoad() {
EntityGoals.register(EntityGoalRandomTeleport.Deserializer)
Items.registerItemProvider(SpawnerItems)
EcoMobsTriggers.registerAll()
}

override fun loadConfigCategories(): List<ConfigCategory> {
Expand Down Expand Up @@ -125,6 +131,7 @@ class EcoMobsPlugin : LibreforgePlugin() {
IntegrationLoader("ModelEngine") { this.eventManager.registerListener(IntegrationModelEngine) },
IntegrationLoader("BetterModel") { this.eventManager.registerListener(IntegrationBetterModel) },
IntegrationLoader("LibsDisguises") { this.eventManager.registerListener(IntegrationLibsDisguises) },
IntegrationLoader("CoreProtect") { this.eventManager.registerListener(IntegrationCoreProtect) },
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package com.willfp.ecomobs.commands
import com.willfp.eco.core.command.impl.Subcommand
import com.willfp.eco.core.fast.fast
import com.willfp.ecomobs.plugin
import com.willfp.ecomobs.spawner.PlacedSpawner
import com.willfp.ecomobs.spawner.PlacedSpawners
import com.willfp.ecomobs.spawner.SpawnerAttributes
import com.willfp.ecomobs.spawner.applyVanillaSettings
Expand Down Expand Up @@ -80,7 +79,7 @@ object CommandSpawnerModify : Subcommand(
}
state.update()

PlacedSpawners.set(block.location, PlacedSpawner(block.location, state.spawner.particleAnim))
PlacedSpawners.sync(state)
}

sender.sendMessage(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import com.willfp.eco.core.placeholder.context.placeholderContext
import com.willfp.eco.util.formatEco
import com.willfp.eco.util.titlecase
import com.willfp.ecomobs.plugin
import com.willfp.ecomobs.spawner.SpawnerStackSettings
import com.willfp.ecomobs.spawner.spawner
import org.bukkit.entity.Player
import org.bukkit.inventory.ItemStack
Expand All @@ -28,7 +29,9 @@ private fun FastItemStack.applySpawnerPlaceholders(text: String): String {
.replace("%pickup%", data.pickup)
.replace("%particle%", data.particleAnim ?: "none")
.replace("%explosion_proof%", data.explosionProof.toString())
.replace("%no_ai%", data.noAI.toString())
.replace("%size%", data.stackSize.toString())
.replace("%max_stack_size%", SpawnerStackSettings.maxSize.toString())
}

object SpawnerItemDisplay : DisplayModule(plugin, DisplayPriority.LOW) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.willfp.ecomobs.event

import com.willfp.ecomobs.mob.LivingMob
import org.bukkit.entity.Player
import org.bukkit.event.Cancellable
import org.bukkit.event.Event
import org.bukkit.event.HandlerList
import org.bukkit.event.entity.EntityDamageEvent.DamageCause

/**
* Called when an EcoMob takes damage, after the mob's own damage modifiers have been
* applied and before its damage stages see the hit.
*
* Cancelling cancels the underlying [org.bukkit.event.entity.EntityDamageEvent].
*/
class EcoMobDamageEvent(
override val mob: LivingMob,
/**
* The player who dealt the damage, or null if it came from elsewhere.
*/
val player: Player?,
val cause: DamageCause,
/**
* The damage dealt. Writing to it writes back to the bukkit event.
*/
var damage: Double
) : Event(), MobEvent, Cancellable {
private var isCancelled: Boolean = false

override fun isCancelled(): Boolean {
return isCancelled
}

override fun setCancelled(cancelled: Boolean) {
isCancelled = cancelled
}

override fun getHandlers(): HandlerList {
return HANDLERS
}

companion object {
private val HANDLERS = HandlerList()

@JvmStatic
fun getHandlerList(): HandlerList {
return HANDLERS
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.willfp.ecomobs.event

import com.willfp.ecomobs.mob.EcoMob
import org.bukkit.Location
import org.bukkit.entity.Player
import org.bukkit.event.Cancellable
import org.bukkit.event.Event
import org.bukkit.event.HandlerList
import org.bukkit.inventory.ItemStack

/**
* Called once the mob's drop table has been rolled, before anything is given out.
* Cancelling drops nothing at all.
*
* Fired once per mob of a stack, as each one rolls the table separately.
*/
class EcoMobDropsEvent(
val ecoMob: EcoMob,
val location: Location,
/**
* The player the drops go to, or null if they fall on the ground.
*/
val player: Player?,
/**
* The items rolled, which can be edited in place.
*/
val drops: MutableList<ItemStack>,
var experience: Int
) : Event(), Cancellable {
private var isCancelled: Boolean = false

override fun isCancelled(): Boolean {
return isCancelled
}

override fun setCancelled(cancelled: Boolean) {
isCancelled = cancelled
}

override fun getHandlers(): HandlerList {
return HANDLERS
}

companion object {
private val HANDLERS = HandlerList()

@JvmStatic
fun getHandlerList(): HandlerList {
return HANDLERS
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package com.willfp.ecomobs.event

import com.willfp.ecomobs.mob.EcoMob
import org.bukkit.Location
import org.bukkit.entity.Player
import org.bukkit.event.Cancellable
import org.bukkit.event.Event
import org.bukkit.event.HandlerList

/**
* Called when a spawn egg is about to spawn its mob, before the egg's conditions are
* tested. Cancelling stops the spawn and leaves the egg in the inventory.
*/
class EcoMobEggUseEvent(
val mob: EcoMob,
val location: Location,
val player: Player?,
val source: Source
) : Event(), Cancellable {
private var isCancelled: Boolean = false

/**
* What used the egg.
*/
enum class Source {
/**
* A player right-clicked a block with the egg.
*/
PLAYER,

/**
* A dispenser or dropper fired the egg.
*/
DISPENSER
}

override fun isCancelled(): Boolean {
return isCancelled
}

override fun setCancelled(cancelled: Boolean) {
isCancelled = cancelled
}

override fun getHandlers(): HandlerList {
return HANDLERS
}

companion object {
private val HANDLERS = HandlerList()

@JvmStatic
fun getHandlerList(): HandlerList {
return HANDLERS
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.willfp.ecomobs.event

import com.willfp.ecomobs.mob.LivingMob
import org.bukkit.entity.Player
import org.bukkit.event.HandlerList
import org.bukkit.event.player.PlayerEvent

/**
* Called when an EcoMob kills a player.
*/
class EcoMobKillPlayerEvent(
override val mob: LivingMob,
player: Player
) : PlayerEvent(player), MobEvent {
override fun getHandlers(): HandlerList {
return HANDLERS
}

companion object {
private val HANDLERS = HandlerList()

@JvmStatic
fun getHandlerList(): HandlerList {
return HANDLERS
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.willfp.ecomobs.event

import com.willfp.ecomobs.mob.LivingMob
import org.bukkit.event.Cancellable
import org.bukkit.event.Event
import org.bukkit.event.HandlerList

/**
* Called when a mob has run out its lifespan and is about to despawn, which is what
* separates it from the despawns [EcoMobDespawnEvent] covers.
*
* Cancelling keeps the mob alive for now. Its lifespan is still spent, so the event is
* called again on the next tick unless something else steps in.
*/
class EcoMobLifespanExpireEvent(
override val mob: LivingMob
) : Event(), MobEvent, Cancellable {
private var isCancelled: Boolean = false

override fun isCancelled(): Boolean {
return isCancelled
}

override fun setCancelled(cancelled: Boolean) {
isCancelled = cancelled
}

override fun getHandlers(): HandlerList {
return HANDLERS
}

companion object {
private val HANDLERS = HandlerList()

@JvmStatic
fun getHandlerList(): HandlerList {
return HANDLERS
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.willfp.ecomobs.event

import org.bukkit.Location
import org.bukkit.entity.Player
import org.bukkit.event.Cancellable
import org.bukkit.event.HandlerList
import org.bukkit.event.player.PlayerEvent

/**
* Called when a player breaks a custom spawner and the whole thing comes up, after the
* pickup rules have been applied. A stacked spawner that only loses one of its spawners
* fires [EcoMobSpawnerUnstackEvent] instead.
*
* Cancelling also cancels the block break.
*/
class EcoMobSpawnerBreakEvent(
player: Player,
override val location: Location,
override val mobId: String?,
val stackSize: Int,
/**
* Whether the spawner drops as an item. Starts as what the spawner's pickup setting
* and the player's permissions allow.
*/
var dropsItem: Boolean
) : PlayerEvent(player), SpawnerEvent, Cancellable {
private var isCancelled: Boolean = false

override fun isCancelled(): Boolean {
return isCancelled
}

override fun setCancelled(cancelled: Boolean) {
isCancelled = cancelled
}

override fun getHandlers(): HandlerList {
return HANDLERS
}

companion object {
private val HANDLERS = HandlerList()

@JvmStatic
fun getHandlerList(): HandlerList {
return HANDLERS
}
}
}
Loading
Loading