summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDico Karssiens <dico.karssiens@gmail.com>2018-07-30 16:02:23 +0100
committerDico Karssiens <dico.karssiens@gmail.com>2018-07-30 16:02:23 +0100
commit195b8db225b97f690b23bd38eafe26ae50c8779c (patch)
tree21ea785a9f1cc11e2c45b533d127918710f1c28a
parent72482a3547ef641e79f9aa3bdec49ada860716c3 (diff)
Add listener for BlockFormEvent
-rw-r--r--src/main/kotlin/io/dico/parcels2/Options.kt2
-rw-r--r--src/main/kotlin/io/dico/parcels2/ParcelsPlugin.kt4
-rw-r--r--src/main/kotlin/io/dico/parcels2/listener/ParcelListeners.kt34
3 files changed, 39 insertions, 1 deletions
diff --git a/src/main/kotlin/io/dico/parcels2/Options.kt b/src/main/kotlin/io/dico/parcels2/Options.kt
index 90a1594..c349d8b 100644
--- a/src/main/kotlin/io/dico/parcels2/Options.kt
+++ b/src/main/kotlin/io/dico/parcels2/Options.kt
@@ -34,6 +34,8 @@ class Options {
data class WorldOptions(var gameMode: GameMode? = GameMode.CREATIVE,
var dayTime: Boolean = true,
var noWeather: Boolean = true,
+ var preventWeatherBlockChanges: Boolean = true,
+ var preventBlockSpread: Boolean = true, // TODO
var dropEntityItems: Boolean = true,
var doTileDrops: Boolean = false,
var disableExplosions: Boolean = true,
diff --git a/src/main/kotlin/io/dico/parcels2/ParcelsPlugin.kt b/src/main/kotlin/io/dico/parcels2/ParcelsPlugin.kt
index 689a534..cc06f85 100644
--- a/src/main/kotlin/io/dico/parcels2/ParcelsPlugin.kt
+++ b/src/main/kotlin/io/dico/parcels2/ParcelsPlugin.kt
@@ -77,13 +77,15 @@ class ParcelsPlugin : JavaPlugin() {
if (optionsFile.exists()) {
yamlObjectMapper.readerForUpdating(options).readValue<Options>(optionsFile)
} else if (optionsFile.tryCreate()) {
- options.addWorld("plotworld", WorldOptions())
+ options.addWorld("parcels", WorldOptions())
try {
yamlObjectMapper.writeValue(optionsFile, options)
} catch (ex: Throwable) {
optionsFile.delete()
throw ex
}
+ plogger.warn("Created options file with a world template. Please review it before next start.")
+ return false
} else {
plogger.error("Failed to save options file ${optionsFile.canonicalPath}")
return false
diff --git a/src/main/kotlin/io/dico/parcels2/listener/ParcelListeners.kt b/src/main/kotlin/io/dico/parcels2/listener/ParcelListeners.kt
index d535d46..f5eb5ca 100644
--- a/src/main/kotlin/io/dico/parcels2/listener/ParcelListeners.kt
+++ b/src/main/kotlin/io/dico/parcels2/listener/ParcelListeners.kt
@@ -376,6 +376,40 @@ class ParcelListeners(val worlds: Worlds, val entityTracker: ParcelEntityTracker
w.setGameRuleValue("doTileDrops", world.options.doTileDrops.toString())
}
+ // TODO: BlockFormEvent, BlockSpreadEvent, BlockFadeEvent
+
+ /*
+ * Prevents natural blocks forming
+ */
+ @ListenerMarker(priority = NORMAL)
+ val onBlockFormEvent = RegistratorListener<BlockFormEvent> l@{ event ->
+ val block = event.block
+ val (wo, ppa) = getWoAndPPa(block) ?: return@l
+
+ // prevent any generation whatsoever on paths
+ if (ppa == null) {
+ event.isCancelled = true; return@l
+ }
+
+ val hasEntity = event is EntityBlockFormEvent
+ val player = (event as? EntityBlockFormEvent)?.entity as? Player
+
+ val cancel: Boolean = when (block.type) {
+
+ // prevent ice generation from Frost Walkers enchantment
+ ICE -> player != null && !ppa.canBuild(player)
+
+ // prevent snow generation from weather
+ SNOW -> !hasEntity && wo.options.preventWeatherBlockChanges
+
+ else -> false
+ }
+
+ if (cancel) {
+ event.isCancelled = true
+ }
+ }
+
/*
* Prevents mobs (living entities) from spawning if that is disabled for that world in the config.
*/