clear particles and stop all sounds on respawn

This commit is contained in:
Bixilon 2022-05-01 15:58:48 +02:00
parent 05027c2c6d
commit f2926c061c
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
6 changed files with 19 additions and 16 deletions

View File

@ -23,5 +23,5 @@ interface AbstractParticleRenderer {
addParticle(particle ?: return)
}
fun removeAll()
fun removeAllParticles()
}

View File

@ -22,7 +22,7 @@ interface WorldParticleRenderer : AbstractParticleRenderer {
particleRenderer?.addParticle(particle)
}
override fun removeAll() {
particleRenderer?.removeAll()
override fun removeAllParticles() {
particleRenderer?.removeAllParticles()
}
}

View File

@ -38,6 +38,7 @@ import de.bixilon.minosoft.gui.rendering.system.base.phases.TransparentDrawable
import de.bixilon.minosoft.gui.rendering.system.base.shader.Shader
import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionStates
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionStates.Companion.disconnected
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
import de.bixilon.minosoft.util.chunk.ChunkUtil.isInViewDistance
@ -147,7 +148,7 @@ class ParticleRenderer(
connection.world.particleRenderer = this
particleTask = TimeWorkerTask(ProtocolDefinition.TICK_TIME, maxDelayTime = ProtocolDefinition.TICK_TIME / 2) {
if (renderWindow.renderingState == RenderingStates.PAUSED || renderWindow.renderingState == RenderingStates.STOPPED || !enabled) {
if (renderWindow.renderingState == RenderingStates.PAUSED || renderWindow.renderingState == RenderingStates.STOPPED || !enabled || connection.state != PlayConnectionStates.PLAYING) {
return@TimeWorkerTask
}
val cameraPosition = connection.player.positionInfo.chunkPosition
@ -257,7 +258,7 @@ class ParticleRenderer(
translucentMesh.draw()
}
override fun removeAll() {
override fun removeAllParticles() {
particlesLock.lock()
particles.clear()
particlesLock.unlock()

View File

@ -13,10 +13,12 @@
package de.bixilon.minosoft.protocol.network.connection.play
import de.bixilon.kotlinglm.vec3.Vec3d
import de.bixilon.minosoft.data.text.BaseComponent
import de.bixilon.minosoft.data.text.ChatColors
import de.bixilon.minosoft.data.text.ChatComponent
import de.bixilon.minosoft.gui.rendering.RenderConstants
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.EMPTY
import de.bixilon.minosoft.modding.event.events.ChatMessageSendEvent
import de.bixilon.minosoft.modding.event.events.InternalMessageReceiveEvent
import de.bixilon.minosoft.protocol.packets.c2s.play.chat.ChatMessageC2SP
@ -52,4 +54,11 @@ class ConnectionUtil(
Log.log(LogMessageType.CHAT_OUT) { toSend }
connection.sendPacket(ChatMessageC2SP(toSend))
}
fun prepareSpawn() {
connection.world.chunks.clear()
connection.player.velocity = Vec3d.EMPTY
connection.world.audioPlayer?.stopAllSounds()
connection.world.particleRenderer?.removeAllParticles()
}
}

View File

@ -150,6 +150,7 @@ class InitializeS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket {
}
override fun handle(connection: PlayConnection) {
connection.util.prepareSpawn()
val playerEntity = connection.player
val previousGamemode = playerEntity.tabListItem.gamemode

View File

@ -12,13 +12,11 @@
*/
package de.bixilon.minosoft.protocol.packets.s2c.play
import de.bixilon.kotlinglm.vec3.Vec3d
import de.bixilon.kutil.json.JsonUtil.asJsonObject
import de.bixilon.minosoft.data.Difficulties
import de.bixilon.minosoft.data.abilities.Gamemodes
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.dimension.DimensionProperties
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.EMPTY
import de.bixilon.minosoft.modding.event.events.RespawnEvent
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionStates
@ -92,16 +90,10 @@ class RespawnS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket {
}
override fun handle(connection: PlayConnection) {
// clear all chunks
connection.state = PlayConnectionStates.SPAWNING
connection.world.chunks.clear()
connection.world.dimension = dimension
connection.player.isSpawnConfirmed = false
connection.util.prepareSpawn()
connection.player.tabListItem.gamemode = gamemode
connection.player.velocity = Vec3d.EMPTY
// connection.world.view.serverViewDistance = 0
connection.world.dimension = dimension
connection.state = PlayConnectionStates.SPAWNING
connection.fireEvent(RespawnEvent(connection, this))
}