From 47ee3d58df4a4114a3d31ec9c22fd5e797713314 Mon Sep 17 00:00:00 2001 From: Moritz Zwerger Date: Mon, 18 Dec 2023 17:43:54 +0100 Subject: [PATCH] remove WorldParticleRenderer --- .../entities/block/CampfireBlockEntity.kt | 3 +- .../entities/block/MobSpawnerBlockEntity.kt | 5 +-- .../entities/block/NoteBlockBlockEntity.kt | 3 +- .../data/entities/entities/item/PrimedTNT.kt | 2 +- .../types/pixlyzer/RedstoneTorchBlock.kt | 3 +- .../blocks/types/pixlyzer/TorchBlock.kt | 5 +-- .../types/pixlyzer/entity/CampfireBlock.kt | 14 ++++---- .../pixlyzer/portal/NetherPortalBlock.kt | 36 +++++++++---------- .../blocks/types/pixlyzer/wall/LeverBlock.kt | 5 +-- .../data/registries/fluid/fluids/LavaFluid.kt | 3 +- .../registries/fluid/fluids/WaterFluid.kt | 4 ++- .../de/bixilon/minosoft/data/world/World.kt | 7 ++-- .../world/particle/WorldParticleRenderer.kt | 29 --------------- .../rendering/particle/ParticleRenderer.kt | 12 ++----- .../norender/ExplosionEmitterParticle.kt | 5 +-- .../norender/emitter/EntityEmitterParticle.kt | 4 +-- .../texture/simple/lava/LavaParticle.kt | 3 +- .../input/interaction/AttackHandler.kt | 5 +-- 18 files changed, 60 insertions(+), 88 deletions(-) delete mode 100644 src/main/java/de/bixilon/minosoft/data/world/particle/WorldParticleRenderer.kt diff --git a/src/main/java/de/bixilon/minosoft/data/entities/block/CampfireBlockEntity.kt b/src/main/java/de/bixilon/minosoft/data/entities/block/CampfireBlockEntity.kt index 37566f93d..397fa2acd 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/block/CampfireBlockEntity.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/block/CampfireBlockEntity.kt @@ -64,6 +64,7 @@ class CampfireBlockEntity(connection: PlayConnection) : BlockEntity(connection) override fun tick(connection: PlayConnection, state: BlockState, position: Vec3i, random: Random) { + val particle = connection.world.particle ?: return if (state.block !is CampfireBlock || !state.isLit()) { return } @@ -90,7 +91,7 @@ class CampfireBlockEntity(connection: PlayConnection) : BlockEntity(connection) ) for (i in 0 until 4) { - connection.world.addParticle(SmokeParticle(connection, position, Vec3d(0.0, 5.0E-4, 0.0))) + particle += SmokeParticle(connection, position, Vec3d(0.0, 5.0E-4, 0.0)) } } } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/block/MobSpawnerBlockEntity.kt b/src/main/java/de/bixilon/minosoft/data/entities/block/MobSpawnerBlockEntity.kt index 9dd74cbbf..a3d1ba161 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/block/MobSpawnerBlockEntity.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/block/MobSpawnerBlockEntity.kt @@ -40,12 +40,13 @@ class MobSpawnerBlockEntity(connection: PlayConnection) : BlockEntity(connection } private fun spawnParticles(blockPosition: Vec3i, random: Random) { + val particle = connection.world.particle ?: return if (!isPlayerInRange(blockPosition)) { return } val particlePosition = blockPosition.toVec3d + { random.nextDouble() } - smokeParticleType?.let { connection.world += SmokeParticle(connection, Vec3d(particlePosition), Vec3d.EMPTY, it.default()) } - flameParticleType?.let { connection.world += FlameParticle(connection, Vec3d(particlePosition), Vec3d.EMPTY, it.default()) } + smokeParticleType?.let { particle += SmokeParticle(connection, Vec3d(particlePosition), Vec3d.EMPTY, it.default()) } + flameParticleType?.let { particle += FlameParticle(connection, Vec3d(particlePosition), Vec3d.EMPTY, it.default()) } } override fun setBlockActionData(type: Int, data: Int) { diff --git a/src/main/java/de/bixilon/minosoft/data/entities/block/NoteBlockBlockEntity.kt b/src/main/java/de/bixilon/minosoft/data/entities/block/NoteBlockBlockEntity.kt index 8e2348f4f..78858c7e5 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/block/NoteBlockBlockEntity.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/block/NoteBlockBlockEntity.kt @@ -61,11 +61,12 @@ class NoteBlockBlockEntity(connection: PlayConnection) : BlockEntity(connection) if (!showParticleNextTick) { return } + val particle = connection.world.particle ?: return showParticleNextTick = false noteParticleType?.let { - connection.world += NoteParticle(connection, position.toVec3d + Vec3d(0.5, 1.2, 0.5), state.getNote() / 24.0f, it.default()) + particle += NoteParticle(connection, position.toVec3d + Vec3d(0.5, 1.2, 0.5), state.getNote() / 24.0f, it.default()) } } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/item/PrimedTNT.kt b/src/main/java/de/bixilon/minosoft/data/entities/entities/item/PrimedTNT.kt index 84ff2b799..5ae695896 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/item/PrimedTNT.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/item/PrimedTNT.kt @@ -38,7 +38,7 @@ class PrimedTNT(connection: PlayConnection, entityType: EntityType, data: Entity super.tick() val position = physics.position - connection.world += SmokeParticle(connection, position + SMOKE_OFFSET, Vec3d.EMPTY) + connection.world.particle?.let { it += SmokeParticle(connection, position + SMOKE_OFFSET, Vec3d.EMPTY) } } override fun createPhysics() = PrimedTNTPhysics(this) diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/RedstoneTorchBlock.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/RedstoneTorchBlock.kt index e54ca6c90..ab50c0ea3 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/RedstoneTorchBlock.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/RedstoneTorchBlock.kt @@ -33,11 +33,12 @@ open class RedstoneTorchBlock(resourceLocation: ResourceLocation, registries: Re private val redstoneDustParticle = registries.particleType[DustParticle] override fun randomDisplayTick(connection: PlayConnection, state: BlockState, position: BlockPosition, random: Random) { + val particle = connection.world.particle ?: return if (!state.isLit()) { return } - (flameParticle ?: redstoneDustParticle)?.let { connection.world += it.factory?.build(connection, Vec3d(position) + Vec3d(0.5, 0.7, 0.5) + (Vec3d.of { random.nextDouble() - 0.5 } * 0.2), Vec3d.EMPTY, DustParticleData(Colors.TRUE_RED, 1.0f, it)) } + (flameParticle ?: redstoneDustParticle)?.let { particle += it.factory?.build(connection, Vec3d(position) + Vec3d(0.5, 0.7, 0.5) + (Vec3d.of { random.nextDouble() - 0.5 } * 0.2), Vec3d.EMPTY, DustParticleData(Colors.TRUE_RED, 1.0f, it)) } } companion object : PixLyzerBlockFactory { diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/TorchBlock.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/TorchBlock.kt index 725986d62..e9148cb42 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/TorchBlock.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/TorchBlock.kt @@ -32,9 +32,10 @@ open class TorchBlock(resourceLocation: ResourceLocation, registries: Registries private fun spawnSmokeParticles(connection: PlayConnection, blockPosition: Vec3i) { + val particle = connection.world.particle ?: return val particlePosition = Vec3d(0.5, 0.7, 0.5) + blockPosition - smokeParticle?.let { connection.world += SmokeParticle(connection, Vec3d(particlePosition), Vec3d.EMPTY) } - flameParticle?.let { connection.world += it.factory?.build(connection, Vec3d(particlePosition), Vec3d.EMPTY) } + smokeParticle?.let { particle += SmokeParticle(connection, Vec3d(particlePosition), Vec3d.EMPTY) } + flameParticle?.let { particle += it.factory?.build(connection, Vec3d(particlePosition), Vec3d.EMPTY) } } override fun randomDisplayTick(connection: PlayConnection, state: BlockState, position: BlockPosition, random: Random) { diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/entity/CampfireBlock.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/entity/CampfireBlock.kt index 6fbd806c4..c6fabd125 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/entity/CampfireBlock.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/entity/CampfireBlock.kt @@ -53,6 +53,7 @@ open class CampfireBlock(resourceLocation: ResourceLocation, registries: Registr } fun spawnSmokeParticles(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, extinguished: Boolean, random: Random) { + val particle = connection.world.particle ?: return val position = Vec3d(blockPosition).horizontalPlus( { 0.5 + 3.0.noised(random) }, random.nextDouble() + random.nextDouble() + 0.5 // ToDo: This +0.5f is a temporary fix for not making the particle stuck in ourself @@ -60,24 +61,21 @@ open class CampfireBlock(resourceLocation: ResourceLocation, registries: Registr val isSignal = isSignal(blockState) - val particleType = if (isSignal) { - signalSmokeParticle - } else { - cosySmokeParticle - } + val particleType = if (isSignal) signalSmokeParticle else cosySmokeParticle - connection.world += CampfireSmokeParticle(connection, position, SMOKE_VELOCITY, particleType.default(), isSignal) + particle += CampfireSmokeParticle(connection, position, SMOKE_VELOCITY, particleType.default(), isSignal) if (extinguished) { val position = Vec3d(blockPosition).horizontalPlus( { 0.5 + 4.0.noised(random) }, 0.5 ) - connection.world += SmokeParticle(connection, position, EXTINGUISHED_VELOCITY, smokeParticle.default()) + particle += SmokeParticle(connection, position, EXTINGUISHED_VELOCITY, smokeParticle.default()) } } override fun randomDisplayTick(connection: PlayConnection, state: BlockState, position: BlockPosition, random: Random) { + val particle = connection.world.particle ?: return if (!state.isLit()) { return } @@ -88,7 +86,7 @@ open class CampfireBlock(resourceLocation: ResourceLocation, registries: Registr if (lavaParticles && random.chance(20)) { val position = Vec3d(position) + 0.5 for (i in 0 until random.nextInt(1) + 1) { - connection.world += LavaParticle(connection, position, lavaParticle.default()) + particle += LavaParticle(connection, position, lavaParticle.default()) } } } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/portal/NetherPortalBlock.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/portal/NetherPortalBlock.kt index 9abd70c21..36e319ec5 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/portal/NetherPortalBlock.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/portal/NetherPortalBlock.kt @@ -32,27 +32,27 @@ open class NetherPortalBlock(resourceLocation: ResourceLocation, registries: Reg private val portalParticleType = registries.particleType[PortalParticle] override fun randomDisplayTick(connection: PlayConnection, state: BlockState, position: BlockPosition, random: Random) { - portalParticleType?.let { - for (i in 0 until 4) { - val particlePosition = Vec3d(position) + { random.nextDouble() } - val velocity = Vec3d.of { (random.nextDouble() - 0.5) * 0.5 } + val particle = connection.world.particle ?: return + if (portalParticleType == null) return + for (i in 0 until 4) { + val particlePosition = Vec3d(position) + { random.nextDouble() } + val velocity = Vec3d.of { (random.nextDouble() - 0.5) * 0.5 } - val factor = (random.nextInt(2) * 2 + 1).toDouble() + val factor = (random.nextInt(2) * 2 + 1).toDouble() - if (connection.world[position + Directions.WEST]?.block != this && connection.world[position + Directions.EAST]?.block != this) { - particlePosition.x = position.x + 0.5 + 0.25 * factor - velocity.x = random.nextDouble() * 2.0 * factor - } else { - particlePosition.z = position.z + 0.5 + 0.25 * factor - velocity.z = random.nextDouble() * 2.0 * factor - } - connection.world += PortalParticle( - connection, - particlePosition, - velocity, - it.default(), - ) + if (connection.world[position + Directions.WEST]?.block != this && connection.world[position + Directions.EAST]?.block != this) { + particlePosition.x = position.x + 0.5 + 0.25 * factor + velocity.x = random.nextDouble() * 2.0 * factor + } else { + particlePosition.z = position.z + 0.5 + 0.25 * factor + velocity.z = random.nextDouble() * 2.0 * factor } + particle += PortalParticle( + connection, + particlePosition, + velocity, + portalParticleType.default(), + ) } } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/wall/LeverBlock.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/wall/LeverBlock.kt index a502a9bd3..09b8204ef 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/wall/LeverBlock.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/pixlyzer/wall/LeverBlock.kt @@ -41,13 +41,14 @@ open class LeverBlock(resourceLocation: ResourceLocation, registries: Registries private val dustParticleType = registries.particleType[DustParticle] private fun spawnParticles(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, scale: Float) { - dustParticleType ?: return + val particle = connection.world.particle ?: return + if (dustParticleType == null) return val direction = blockState.getFacing().inverted val mountDirection = getRealFacing(blockState) val position = (Vec3d(blockPosition) + 0.5).plus((direction.vector * 0.1) + (mountDirection.vector * 0.2)) - connection.world += DustParticle(connection, position, Vec3d.EMPTY, DustParticleData(Colors.TRUE_RED, scale, dustParticleType)) + particle += DustParticle(connection, position, Vec3d.EMPTY, DustParticleData(Colors.TRUE_RED, scale, dustParticleType)) } override fun randomDisplayTick(connection: PlayConnection, state: BlockState, position: BlockPosition, random: Random) { diff --git a/src/main/java/de/bixilon/minosoft/data/registries/fluid/fluids/LavaFluid.kt b/src/main/java/de/bixilon/minosoft/data/registries/fluid/fluids/LavaFluid.kt index 212063536..89dacd96f 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/fluid/fluids/LavaFluid.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/fluid/fluids/LavaFluid.kt @@ -78,6 +78,7 @@ open class LavaFluid(identifier: ResourceLocation = Companion.identifier) : Flui override fun randomTick(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, random: Random) { super.randomTick(connection, blockState, blockPosition, random) + val particle = connection.world.particle ?: return val above = connection.world[blockPosition + Directions.UP] if (above != null) { // ToDo: Or is not a full block @@ -89,7 +90,7 @@ open class LavaFluid(identifier: ResourceLocation = Companion.identifier) : Flui 1.0 ) - connection.world += LavaParticle(connection, position, lavaParticleType.default()) + particle += LavaParticle(connection, position, lavaParticleType.default()) } } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/fluid/fluids/WaterFluid.kt b/src/main/java/de/bixilon/minosoft/data/registries/fluid/fluids/WaterFluid.kt index e09bc9306..41d07fbf5 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/fluid/fluids/WaterFluid.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/fluid/fluids/WaterFluid.kt @@ -79,9 +79,11 @@ class WaterFluid(resourceLocation: ResourceLocation = identifier) : Fluid(resour override fun randomTick(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, random: Random) { super.randomTick(connection, blockState, blockPosition, random) + val particle = connection.world.particle ?: return + // ToDo: if not sill and not falling if (random.chance(10)) { - connection.world += UnderwaterParticle(connection, blockPosition.toVec3d + { random.nextDouble() }) + particle += UnderwaterParticle(connection, blockPosition.toVec3d + { random.nextDouble() }) } } diff --git a/src/main/java/de/bixilon/minosoft/data/world/World.kt b/src/main/java/de/bixilon/minosoft/data/world/World.kt index f4ca85c43..65b98dd49 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/World.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/World.kt @@ -37,7 +37,6 @@ import de.bixilon.minosoft.data.world.difficulty.WorldDifficulty import de.bixilon.minosoft.data.world.entities.WorldEntities import de.bixilon.minosoft.data.world.iterator.WorldIterator import de.bixilon.minosoft.data.world.particle.AbstractParticleRenderer -import de.bixilon.minosoft.data.world.particle.WorldParticleRenderer import de.bixilon.minosoft.data.world.positions.BlockPosition import de.bixilon.minosoft.data.world.positions.ChunkPosition import de.bixilon.minosoft.data.world.positions.ChunkPositionUtil.chunkPosition @@ -55,9 +54,9 @@ import java.util.* */ class World( val connection: PlayConnection, -) : WorldAudioPlayer, WorldParticleRenderer { +) : WorldAudioPlayer { val lock = SimpleLock() - override val random = Random() + val random = Random() val biomes = WorldBiomes(this) val chunks = ChunkManager(this, 1000, 100) val entities = WorldEntities() @@ -73,7 +72,7 @@ class World( override var audio: AbstractAudioPlayer? = null - override var particle: AbstractParticleRenderer? = null + var particle: AbstractParticleRenderer? = null var occlusion by observed(0) diff --git a/src/main/java/de/bixilon/minosoft/data/world/particle/WorldParticleRenderer.kt b/src/main/java/de/bixilon/minosoft/data/world/particle/WorldParticleRenderer.kt deleted file mode 100644 index 3eb8d7dea..000000000 --- a/src/main/java/de/bixilon/minosoft/data/world/particle/WorldParticleRenderer.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Minosoft - * Copyright (C) 2020-2023 Moritz Zwerger - * - * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with this program. If not, see . - * - * This software is not affiliated with Mojang AB, the original developer of Minecraft. - */ - -package de.bixilon.minosoft.data.world.particle - -import de.bixilon.minosoft.gui.rendering.particle.types.Particle - -@Deprecated("use world.particle") -interface WorldParticleRenderer : AbstractParticleRenderer { - val particle: AbstractParticleRenderer? - - override fun addParticle(particle: Particle) { - this.particle?.addParticle(particle) - } - - override fun removeAllParticles() { - particle?.removeAllParticles() - } -} diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleRenderer.kt index c4446d43b..aae89b44c 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleRenderer.kt @@ -81,8 +81,8 @@ class ParticleRenderer( get() = particles.size override fun registerLayers() { - layers.register(OpaqueLayer, shader, this::drawTransparent) - layers.register(TranslucentLayer, shader, this::drawTranslucent) + layers.register(OpaqueLayer, shader, renderer = { mesh.draw() }) + layers.register(TranslucentLayer, shader, renderer = { translucentMesh.draw() }) } private fun loadTextures() { @@ -160,14 +160,6 @@ class ParticleRenderer( translucentMesh.load() } - private fun drawTransparent() { - mesh.draw() - } - - private fun drawTranslucent() { - translucentMesh.draw() - } - override fun removeAllParticles() { particles.clear() queue.clear() diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/norender/ExplosionEmitterParticle.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/norender/ExplosionEmitterParticle.kt index b4bf9a8f7..68a175bea 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/norender/ExplosionEmitterParticle.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/norender/ExplosionEmitterParticle.kt @@ -33,14 +33,15 @@ class ExplosionEmitterParticle(connection: PlayConnection, position: Vec3d, data override fun tick() { super.tick() - explosionParticleType ?: let { + val particle = connection.world.particle ?: return + if (explosionParticleType == null) { dead = true return } for (i in 0 until 6) { val position = position + { (random.nextDouble() - random.nextDouble()) * 4.0 } - connection.world += ExplosionParticle(connection, position, explosionParticleType.default(), floatAge / MAX_AGE) + particle += ExplosionParticle(connection, position, explosionParticleType.default(), floatAge / MAX_AGE) } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/norender/emitter/EntityEmitterParticle.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/norender/emitter/EntityEmitterParticle.kt index e7e275d92..534e17541 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/norender/emitter/EntityEmitterParticle.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/norender/emitter/EntityEmitterParticle.kt @@ -42,6 +42,7 @@ class EntityEmitterParticle( fun emitParticles() { + val particle = connection.world.particle ?: return val position = entity.physics.position for (i in 0 until 16) { val scale = Vec3(random.nextFloat(-1.0f, 1.0f), random.nextFloat(-1.0f, 1.0f), random.nextFloat(-1.0f, 1.0f)) @@ -55,8 +56,7 @@ class EntityEmitterParticle( position.y + (entity.type.height * (0.5f + scale.y / 4.0f)), position.z + (entity.type.width * (scale.z / 4.0f)), ) - val particle = particleFactory.build(connection, particlePosition, Vec3d(scale.x, scale.y, scale.z), particleData) // ToDo: Velocity.y is getting added with 0.2 - connection.world.addParticle(particle ?: continue) + particle += particleFactory.build(connection, particlePosition, Vec3d(scale.x, scale.y, scale.z), particleData) ?: continue// ToDo: Velocity.y is getting added with 0.2 } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/lava/LavaParticle.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/lava/LavaParticle.kt index 6e1a3b776..ea4f2173e 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/lava/LavaParticle.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/lava/LavaParticle.kt @@ -44,9 +44,10 @@ class LavaParticle(connection: PlayConnection, position: Vec3d, data: ParticleDa override fun tick() { super.tick() + val particle = connection.world.particle ?: return if (random.nextFloat() > (floatAge / maxAge)) { - connection.world += SmokeParticle(connection, Vec3d(position), Vec3d(velocity)) + particle += SmokeParticle(connection, Vec3d(position), Vec3d(velocity)) } } diff --git a/src/main/java/de/bixilon/minosoft/input/interaction/AttackHandler.kt b/src/main/java/de/bixilon/minosoft/input/interaction/AttackHandler.kt index b3a7ad3aa..7d54b11d3 100644 --- a/src/main/java/de/bixilon/minosoft/input/interaction/AttackHandler.kt +++ b/src/main/java/de/bixilon/minosoft/input/interaction/AttackHandler.kt @@ -74,14 +74,15 @@ class AttackHandler( val critical = (cooldown / COOLDOWN.toFloat()) > 0.9f && player.physics.fallDistance != 0.0f && !player.physics.onGround && !player.physics().isClimbing() && (player.physics.submersion[WaterFluid]) <= 0.0f && player.effects[VisionEffect.Blindness] == null && player.attachment.vehicle == null && entity is LivingEntity // TODO: use attack speed entity attribute + val particle = interactions.connection.world.particle ?: return if (critical) { - interactions.connection.world.addParticle(EntityEmitterParticle(interactions.connection, entity, CritParticle)) + particle += EntityEmitterParticle(interactions.connection, entity, CritParticle) } if (sharpnessLevel > 0) { // ToDo: Entity animations - interactions.connection.world.addParticle(EntityEmitterParticle(interactions.connection, entity, EnchantedHitParticle)) + particle += EntityEmitterParticle(interactions.connection, entity, EnchantedHitParticle) } }