mirror of
https://github.com/GayPizzaSpecifications/foundation.git
synced 2025-08-03 13:31:32 +00:00
Add gameplay feature.
This commit is contained in:
@ -3,13 +3,13 @@ package cloud.kubelet.foundation.core
|
||||
import cloud.kubelet.foundation.core.abstraction.FoundationPlugin
|
||||
import cloud.kubelet.foundation.core.features.backup.BackupFeature
|
||||
import cloud.kubelet.foundation.core.features.dev.DevFeature
|
||||
import cloud.kubelet.foundation.core.features.endergrief.EndergriefFeature
|
||||
import cloud.kubelet.foundation.core.features.gameplay.GameplayFeature
|
||||
import cloud.kubelet.foundation.core.features.persist.PersistenceFeature
|
||||
import cloud.kubelet.foundation.core.features.player.PlayerFeature
|
||||
import cloud.kubelet.foundation.core.features.scheduler.SchedulerFeature
|
||||
import cloud.kubelet.foundation.core.features.stats.StatsFeature
|
||||
import cloud.kubelet.foundation.core.features.update.UpdateFeature
|
||||
import cloud.kubelet.foundation.core.features.world.WorldFeature
|
||||
import cloud.kubelet.foundation.core.features.persist.PersistenceFeature
|
||||
import cloud.kubelet.foundation.core.features.scheduler.SchedulerFeature
|
||||
import org.koin.dsl.module
|
||||
import java.nio.file.Path
|
||||
|
||||
@ -44,11 +44,11 @@ class FoundationCorePlugin : FoundationPlugin() {
|
||||
PersistenceFeature(),
|
||||
BackupFeature(),
|
||||
DevFeature(),
|
||||
GameplayFeature(),
|
||||
PlayerFeature(),
|
||||
StatsFeature(),
|
||||
UpdateFeature(),
|
||||
WorldFeature(),
|
||||
EndergriefFeature(),
|
||||
)
|
||||
|
||||
override fun createModule() = module {
|
||||
|
@ -1,21 +0,0 @@
|
||||
package cloud.kubelet.foundation.core.features.endergrief
|
||||
|
||||
import cloud.kubelet.foundation.core.abstraction.Feature
|
||||
import org.bukkit.entity.EntityType
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.EventPriority
|
||||
import org.bukkit.event.entity.EntityChangeBlockEvent
|
||||
|
||||
class EndergriefFeature : Feature() {
|
||||
override fun enable() {
|
||||
}
|
||||
|
||||
override fun disable() {}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
fun onEntityChangeBlock(event: EntityChangeBlockEvent) {
|
||||
if (event.entity.type == EntityType.ENDERMAN) {
|
||||
event.isCancelled = true
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package cloud.kubelet.foundation.core.features.gameplay
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class GameplayConfig(
|
||||
val mobs: MobsConfig,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class MobsConfig(
|
||||
val disableEndermanGriefing: Boolean,
|
||||
val disableFreezeDamage: Boolean,
|
||||
)
|
@ -0,0 +1,59 @@
|
||||
package cloud.kubelet.foundation.core.features.gameplay
|
||||
|
||||
import cloud.kubelet.foundation.core.FoundationCorePlugin
|
||||
import cloud.kubelet.foundation.core.Util
|
||||
import cloud.kubelet.foundation.core.abstraction.Feature
|
||||
import com.charleskorn.kaml.Yaml
|
||||
import org.bukkit.entity.EntityType
|
||||
import org.bukkit.entity.Mob
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.EventPriority
|
||||
import org.bukkit.event.entity.EntityChangeBlockEvent
|
||||
import org.bukkit.event.entity.EntityDamageEvent
|
||||
import org.koin.core.component.inject
|
||||
import org.koin.dsl.module
|
||||
import kotlin.io.path.inputStream
|
||||
|
||||
class GameplayFeature : Feature() {
|
||||
private val config by inject<GameplayConfig>()
|
||||
|
||||
override fun enable() {
|
||||
}
|
||||
|
||||
override fun disable() {
|
||||
}
|
||||
|
||||
override fun module() = module {
|
||||
single {
|
||||
val configPath = Util.copyDefaultConfig<FoundationCorePlugin>(
|
||||
plugin.slF4JLogger,
|
||||
plugin.pluginDataPath,
|
||||
"gameplay.yaml",
|
||||
)
|
||||
return@single Yaml.default.decodeFromStream(
|
||||
GameplayConfig.serializer(),
|
||||
configPath.inputStream()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
private fun onEntityDamage(e: EntityDamageEvent) {
|
||||
// If freeze damage is disabled, cancel the event.
|
||||
if (config.mobs.disableFreezeDamage) {
|
||||
if (e.entity is Mob && e.cause == EntityDamageEvent.DamageCause.FREEZE) {
|
||||
e.isCancelled = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
private fun onEntityChangeBlock(event: EntityChangeBlockEvent) {
|
||||
// If enderman griefing is disabled, cancel the event.
|
||||
if (config.mobs.disableEndermanGriefing) {
|
||||
if (event.entity.type == EntityType.ENDERMAN) {
|
||||
event.isCancelled = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
14
foundation-core/src/main/resources/gameplay.yaml
Normal file
14
foundation-core/src/main/resources/gameplay.yaml
Normal file
@ -0,0 +1,14 @@
|
||||
# Configuration that allows fine-tuning of various gameplay aspects.
|
||||
|
||||
# Settings which affect mob entities.
|
||||
mobs:
|
||||
# Disable the ability for an Enderman to pick up blocks.
|
||||
# When set to true, an Enderman cannot pick up or place blocks. :(
|
||||
# When set to false, an Enderman is allowed to pick up blocks.
|
||||
disableEndermanGriefing: false
|
||||
|
||||
# Disable freeze damage that occurs to all mobs.
|
||||
# Note: This does not impact players, that is still controlled with the freezeDamage game-rule.
|
||||
# When set to true, mobs will not take damage from freezing.
|
||||
# When set to false, mobs take damage from freezing.
|
||||
disableFreezeDamage: false
|
Reference in New Issue
Block a user