From 195b8db225b97f690b23bd38eafe26ae50c8779c Mon Sep 17 00:00:00 2001 From: Dico Karssiens Date: Mon, 30 Jul 2018 16:02:23 +0100 Subject: Add listener for BlockFormEvent --- src/main/kotlin/io/dico/parcels2/Options.kt | 2 ++ src/main/kotlin/io/dico/parcels2/ParcelsPlugin.kt | 4 ++- .../io/dico/parcels2/listener/ParcelListeners.kt | 34 ++++++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) 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(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 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. */ -- cgit v1.2.3