mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-19 04:15:14 -04:00
clear particles and stop all sounds on respawn
This commit is contained in:
parent
05027c2c6d
commit
f2926c061c
@ -23,5 +23,5 @@ interface AbstractParticleRenderer {
|
|||||||
addParticle(particle ?: return)
|
addParticle(particle ?: return)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun removeAll()
|
fun removeAllParticles()
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ interface WorldParticleRenderer : AbstractParticleRenderer {
|
|||||||
particleRenderer?.addParticle(particle)
|
particleRenderer?.addParticle(particle)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun removeAll() {
|
override fun removeAllParticles() {
|
||||||
particleRenderer?.removeAll()
|
particleRenderer?.removeAllParticles()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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.gui.rendering.system.base.shader.Shader
|
||||||
import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker
|
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.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.network.connection.play.PlayConnectionStates.Companion.disconnected
|
||||||
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
||||||
import de.bixilon.minosoft.util.chunk.ChunkUtil.isInViewDistance
|
import de.bixilon.minosoft.util.chunk.ChunkUtil.isInViewDistance
|
||||||
@ -147,7 +148,7 @@ class ParticleRenderer(
|
|||||||
connection.world.particleRenderer = this
|
connection.world.particleRenderer = this
|
||||||
|
|
||||||
particleTask = TimeWorkerTask(ProtocolDefinition.TICK_TIME, maxDelayTime = ProtocolDefinition.TICK_TIME / 2) {
|
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
|
return@TimeWorkerTask
|
||||||
}
|
}
|
||||||
val cameraPosition = connection.player.positionInfo.chunkPosition
|
val cameraPosition = connection.player.positionInfo.chunkPosition
|
||||||
@ -257,7 +258,7 @@ class ParticleRenderer(
|
|||||||
translucentMesh.draw()
|
translucentMesh.draw()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun removeAll() {
|
override fun removeAllParticles() {
|
||||||
particlesLock.lock()
|
particlesLock.lock()
|
||||||
particles.clear()
|
particles.clear()
|
||||||
particlesLock.unlock()
|
particlesLock.unlock()
|
||||||
|
@ -13,10 +13,12 @@
|
|||||||
|
|
||||||
package de.bixilon.minosoft.protocol.network.connection.play
|
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.BaseComponent
|
||||||
import de.bixilon.minosoft.data.text.ChatColors
|
import de.bixilon.minosoft.data.text.ChatColors
|
||||||
import de.bixilon.minosoft.data.text.ChatComponent
|
import de.bixilon.minosoft.data.text.ChatComponent
|
||||||
import de.bixilon.minosoft.gui.rendering.RenderConstants
|
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.ChatMessageSendEvent
|
||||||
import de.bixilon.minosoft.modding.event.events.InternalMessageReceiveEvent
|
import de.bixilon.minosoft.modding.event.events.InternalMessageReceiveEvent
|
||||||
import de.bixilon.minosoft.protocol.packets.c2s.play.chat.ChatMessageC2SP
|
import de.bixilon.minosoft.protocol.packets.c2s.play.chat.ChatMessageC2SP
|
||||||
@ -52,4 +54,11 @@ class ConnectionUtil(
|
|||||||
Log.log(LogMessageType.CHAT_OUT) { toSend }
|
Log.log(LogMessageType.CHAT_OUT) { toSend }
|
||||||
connection.sendPacket(ChatMessageC2SP(toSend))
|
connection.sendPacket(ChatMessageC2SP(toSend))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun prepareSpawn() {
|
||||||
|
connection.world.chunks.clear()
|
||||||
|
connection.player.velocity = Vec3d.EMPTY
|
||||||
|
connection.world.audioPlayer?.stopAllSounds()
|
||||||
|
connection.world.particleRenderer?.removeAllParticles()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -150,6 +150,7 @@ class InitializeS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun handle(connection: PlayConnection) {
|
override fun handle(connection: PlayConnection) {
|
||||||
|
connection.util.prepareSpawn()
|
||||||
val playerEntity = connection.player
|
val playerEntity = connection.player
|
||||||
val previousGamemode = playerEntity.tabListItem.gamemode
|
val previousGamemode = playerEntity.tabListItem.gamemode
|
||||||
|
|
||||||
|
@ -12,13 +12,11 @@
|
|||||||
*/
|
*/
|
||||||
package de.bixilon.minosoft.protocol.packets.s2c.play
|
package de.bixilon.minosoft.protocol.packets.s2c.play
|
||||||
|
|
||||||
import de.bixilon.kotlinglm.vec3.Vec3d
|
|
||||||
import de.bixilon.kutil.json.JsonUtil.asJsonObject
|
import de.bixilon.kutil.json.JsonUtil.asJsonObject
|
||||||
import de.bixilon.minosoft.data.Difficulties
|
import de.bixilon.minosoft.data.Difficulties
|
||||||
import de.bixilon.minosoft.data.abilities.Gamemodes
|
import de.bixilon.minosoft.data.abilities.Gamemodes
|
||||||
import de.bixilon.minosoft.data.registries.ResourceLocation
|
import de.bixilon.minosoft.data.registries.ResourceLocation
|
||||||
import de.bixilon.minosoft.data.registries.dimension.DimensionProperties
|
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.modding.event.events.RespawnEvent
|
||||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
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
|
||||||
@ -92,16 +90,10 @@ class RespawnS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun handle(connection: PlayConnection) {
|
override fun handle(connection: PlayConnection) {
|
||||||
// clear all chunks
|
connection.util.prepareSpawn()
|
||||||
connection.state = PlayConnectionStates.SPAWNING
|
|
||||||
connection.world.chunks.clear()
|
|
||||||
connection.world.dimension = dimension
|
|
||||||
connection.player.isSpawnConfirmed = false
|
|
||||||
connection.player.tabListItem.gamemode = gamemode
|
connection.player.tabListItem.gamemode = gamemode
|
||||||
connection.player.velocity = Vec3d.EMPTY
|
connection.world.dimension = dimension
|
||||||
|
connection.state = PlayConnectionStates.SPAWNING
|
||||||
// connection.world.view.serverViewDistance = 0
|
|
||||||
|
|
||||||
connection.fireEvent(RespawnEvent(connection, this))
|
connection.fireEvent(RespawnEvent(connection, this))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user