diff --git a/src/main/java/de/bixilon/minosoft/config/config/game/graphics/GraphicsGameConfig.kt b/src/main/java/de/bixilon/minosoft/config/config/game/graphics/GraphicsGameConfig.kt
index fbe800c50..7812e50c7 100644
--- a/src/main/java/de/bixilon/minosoft/config/config/game/graphics/GraphicsGameConfig.kt
+++ b/src/main/java/de/bixilon/minosoft/config/config/game/graphics/GraphicsGameConfig.kt
@@ -14,8 +14,10 @@
package de.bixilon.minosoft.config.config.game.graphics
import com.squareup.moshi.Json
+import de.bixilon.minosoft.config.config.game.particles.ParticleConfig
data class GraphicsGameConfig(
var animations: AnimationsGameConfig = AnimationsGameConfig(),
+ var particles: ParticleConfig = ParticleConfig(),
@Json(name = "biome_blend_radius") var biomeBlendRadius: Int = 3,
)
diff --git a/src/main/java/de/bixilon/minosoft/config/config/game/particles/ParticleConfig.kt b/src/main/java/de/bixilon/minosoft/config/config/game/particles/ParticleConfig.kt
new file mode 100644
index 000000000..4ff101422
--- /dev/null
+++ b/src/main/java/de/bixilon/minosoft/config/config/game/particles/ParticleConfig.kt
@@ -0,0 +1,22 @@
+/*
+ * Minosoft
+ * Copyright (C) 2021 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.config.config.game.particles
+
+import com.squareup.moshi.Json
+
+data class ParticleConfig(
+ var enabled: Boolean = false,
+ @Json(name = "by_packet") var byPacket: Boolean = true,
+ var explosions: Boolean = true,
+)
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt
index 10d0becaa..42cb691b8 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt
@@ -13,6 +13,7 @@
package de.bixilon.minosoft.gui.rendering
+import de.bixilon.minosoft.Minosoft
import de.bixilon.minosoft.config.StaticConfiguration
import de.bixilon.minosoft.config.config.game.controls.KeyBindingsNames
import de.bixilon.minosoft.data.mappings.ResourceLocation
@@ -114,7 +115,9 @@ class RenderWindow(
registerRenderer(SkyRenderer)
registerRenderer(WorldRenderer)
registerRenderer(BlockOutlineRenderer)
- registerRenderer(ParticleRenderer)
+ if (Minosoft.config.config.game.graphics.particles.enabled) {
+ registerRenderer(ParticleRenderer)
+ }
registerRenderer(HUDRenderer)
}
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/DefaultParticleBehavior.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/DefaultParticleBehavior.kt
index cb98c21cf..4dbc3b0df 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/DefaultParticleBehavior.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/DefaultParticleBehavior.kt
@@ -13,10 +13,12 @@
package de.bixilon.minosoft.gui.rendering.particle
+import de.bixilon.minosoft.Minosoft
import de.bixilon.minosoft.gui.rendering.particle.types.norender.ExplosionEmitterParticle
import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.ExplosionParticle
import de.bixilon.minosoft.gui.rendering.util.VecUtil.times
import de.bixilon.minosoft.modding.event.CallbackEventInvoker
+import de.bixilon.minosoft.modding.event.EventInitiators
import de.bixilon.minosoft.modding.event.events.ExplosionEvent
import de.bixilon.minosoft.modding.event.events.ParticleSpawnEvent
import de.bixilon.minosoft.protocol.network.connection.PlayConnection
@@ -33,6 +35,9 @@ object DefaultParticleBehavior {
val explosionEmitterParticleType = connection.registries.particleTypeRegistry[ExplosionEmitterParticle]!!
val invokers = listOf(
CallbackEventInvoker.of {
+ if (!Minosoft.config.config.game.graphics.particles.explosions) {
+ return@of
+ }
if (it.power >= 2.0f) {
particleRenderer += ExplosionEmitterParticle(connection, it.position, explosionEmitterParticleType.default())
} else {
@@ -40,6 +45,9 @@ object DefaultParticleBehavior {
}
},
CallbackEventInvoker.of {
+ if (it.initiator == EventInitiators.SERVER && !Minosoft.config.config.game.graphics.particles.byPacket) {
+ return@of
+ }
fun spawn(position: Vec3, velocity: Vec3) {
val particle = it.data.type.factory?.build(connection, position, velocity, it.data) ?: let { _ ->
Log.log(LogMessageType.RENDERING_GENERAL, LogLevels.WARN) { "Can not spawn particle: ${it.data.type}" }