Add gameplay feature.

This commit is contained in:
Logan Gorence
2022-01-13 06:02:21 +00:00
parent 71f0b46728
commit 763b61ba04
5 changed files with 91 additions and 25 deletions

View File

@ -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 {

View File

@ -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
}
}
}

View File

@ -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,
)

View File

@ -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
}
}
}
}

View 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