From fab0f7d7a4aa847169809ab9b41418bc4747839d Mon Sep 17 00:00:00 2001 From: Bixilon Date: Sat, 19 Jun 2021 12:05:12 +0200 Subject: [PATCH] fluids: lava particles --- .../data/registries/fluid/lava/LavaFluid.kt | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/main/java/de/bixilon/minosoft/data/registries/fluid/lava/LavaFluid.kt b/src/main/java/de/bixilon/minosoft/data/registries/fluid/lava/LavaFluid.kt index 341813521..d415e1c6a 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/fluid/lava/LavaFluid.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/fluid/lava/LavaFluid.kt @@ -14,21 +14,30 @@ package de.bixilon.minosoft.data.registries.fluid.lava import com.google.gson.JsonObject +import de.bixilon.minosoft.data.Directions import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.blocks.BlockState import de.bixilon.minosoft.data.registries.fluid.FlowableFluid import de.bixilon.minosoft.data.registries.fluid.Fluid import de.bixilon.minosoft.data.registries.versions.Registries +import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.lava.LavaParticle +import de.bixilon.minosoft.gui.rendering.util.VecUtil.horizontal +import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus +import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3d import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.util.KUtil.asResourceLocation +import de.bixilon.minosoft.util.KUtil.chance import de.bixilon.minosoft.util.KUtil.decide +import glm_.vec3.Vec3d import glm_.vec3.Vec3i +import kotlin.random.Random class LavaFluid( resourceLocation: ResourceLocation, registries: Registries, data: JsonObject, ) : FlowableFluid(resourceLocation, registries, data) { + private val lavaParticleType = registries.particleTypeRegistry[LavaParticle] override val stillTexture: ResourceLocation = "minecraft:block/lava_still".asResourceLocation() override val flowingTexture: ResourceLocation = "minecraft:block/lava_flow".asResourceLocation() @@ -40,4 +49,21 @@ class LavaFluid( return other::class.java.isAssignableFrom(LavaFluid::class.java) } + override fun randomTick(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, random: Random) { + super.randomTick(connection, blockState, blockPosition, random) + val above = connection.world[blockPosition + Directions.UP] + + if (above != null) { // ToDo: Or is not a full block + return + } + if (lavaParticleType != null && random.chance(1)) { + val position = blockPosition.toVec3d + Vec3d.horizontal( + { random.nextDouble() }, + 1.0 + ) + + connection.world += LavaParticle(connection, position, lavaParticleType.default()) + } + } + }