diff options
author | nea <nea@nea.moe> | 2023-09-25 21:40:26 +0200 |
---|---|---|
committer | nea <nea@nea.moe> | 2023-09-25 21:40:26 +0200 |
commit | eaf91279b8f65b30f05a7be9a8ae1b6b18859ae4 (patch) | |
tree | b00348853d7322bfaaa1121831b5ceeec130b649 /src/main/kotlin/moe/nea | |
parent | 139089d9beb134465737c4afff3b1303bf481aa1 (diff) | |
download | Firmament-eaf91279b8f65b30f05a7be9a8ae1b6b18859ae4.tar.gz Firmament-eaf91279b8f65b30f05a7be9a8ae1b6b18859ae4.tar.bz2 Firmament-eaf91279b8f65b30f05a7be9a8ae1b6b18859ae4.zip |
Add enhanced explosions support
Diffstat (limited to 'src/main/kotlin/moe/nea')
3 files changed, 59 insertions, 1 deletions
diff --git a/src/main/kotlin/moe/nea/firmament/events/ParticleSpawnEvent.kt b/src/main/kotlin/moe/nea/firmament/events/ParticleSpawnEvent.kt index 5092fe2..e1b9ad3 100644 --- a/src/main/kotlin/moe/nea/firmament/events/ParticleSpawnEvent.kt +++ b/src/main/kotlin/moe/nea/firmament/events/ParticleSpawnEvent.kt @@ -14,6 +14,7 @@ data class ParticleSpawnEvent( val position: Vec3d, val offset: Vec3d, val longDistance: Boolean, -) : FirmamentEvent() { + val count: Int, +) : FirmamentEvent.Cancellable() { companion object : FirmamentEventBus<ParticleSpawnEvent>() } diff --git a/src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt b/src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt index ba665e4..48d7297 100644 --- a/src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt +++ b/src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt @@ -14,6 +14,7 @@ import moe.nea.firmament.features.debug.DebugView import moe.nea.firmament.features.debug.DeveloperFeatures import moe.nea.firmament.features.debug.MinorTrolling import moe.nea.firmament.features.debug.PowerUserTools +import moe.nea.firmament.features.fixes.CompatibliltyFeatures import moe.nea.firmament.features.fixes.Fixes import moe.nea.firmament.features.inventory.CraftingOverlay import moe.nea.firmament.features.inventory.PriceData @@ -51,6 +52,7 @@ object FeatureManager : DataHolder<FeatureManager.Config>(serializer(), "feature loadFeature(CraftingOverlay) loadFeature(PowerUserTools) loadFeature(ChatLinks) + loadFeature(CompatibliltyFeatures) loadFeature(SaveCursorPosition) loadFeature(CustomSkyBlockTextures) loadFeature(PriceData) diff --git a/src/main/kotlin/moe/nea/firmament/features/fixes/CompatibliltyFeatures.kt b/src/main/kotlin/moe/nea/firmament/features/fixes/CompatibliltyFeatures.kt new file mode 100644 index 0000000..d3029d8 --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/features/fixes/CompatibliltyFeatures.kt @@ -0,0 +1,55 @@ +/* + * SPDX-FileCopyrightText: 2023 Linnea Gräf <nea@nea.moe> + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package moe.nea.firmament.features.fixes + +import net.fabricmc.loader.api.FabricLoader +import net.superkat.explosiveenhancement.api.ExplosiveApi +import net.minecraft.particle.ParticleTypes +import net.minecraft.util.math.Vec3d +import moe.nea.firmament.events.ParticleSpawnEvent +import moe.nea.firmament.features.FirmamentFeature +import moe.nea.firmament.gui.config.ManagedConfig +import moe.nea.firmament.util.MC + +object CompatibliltyFeatures : FirmamentFeature { + override val identifier: String + get() = "compatibility" + + object TConfig : ManagedConfig(identifier) { + val enhancedExplosions by toggle("explosion-enabled") { false } + val explosionSize by integer("explosion-power", 10, 50) { 1 } + } + + override val config: ManagedConfig? + get() = TConfig + + interface ExplosiveApiWrapper { + fun spawnParticle(vec3d: Vec3d, power: Float) + } + + class ExplosiveApiWrapperImpl : ExplosiveApiWrapper { + override fun spawnParticle(vec3d: Vec3d, power: Float) { + ExplosiveApi.spawnParticles(MC.world, vec3d.x, vec3d.y, vec3d.z, TConfig.explosionSize / 10F) + } + } + + val explosiveApiWrapper = if (FabricLoader.getInstance().isModLoaded("explosiveenhancement")) { + ExplosiveApiWrapperImpl() + } else null + + override fun onLoad() { + ParticleSpawnEvent.subscribe { + if (TConfig.enhancedExplosions && + it.particleEffect.type == ParticleTypes.EXPLOSION_EMITTER && + explosiveApiWrapper != null + ) { + it.cancel() + explosiveApiWrapper.spawnParticle(it.position, 2F) + } + } + } +} |