Add enhanced explosions support

This commit is contained in:
nea
2023-09-25 21:40:26 +02:00
parent 139089d9be
commit eaf91279b8
7 changed files with 77 additions and 12 deletions

View File

@@ -104,6 +104,7 @@ dependencies {
modImplementation(libs.fabric.kotlin)
modImplementation(libs.modmenu)
modImplementation(libs.libgui)
modCompileOnly(libs.explosiveenhancement)
include(libs.libgui)

View File

@@ -25,6 +25,7 @@ ncr = "Fabric-1.20-v2.2.0"
mixinextras = "0.2.0-rc.5"
jarvis = "1.1.1"
nealisp = "1.0.0"
explosiveenhancement = "1.2.1-1.20.x"
[libraries]
@@ -42,6 +43,7 @@ mixinextras = { module = "io.github.llamalad7:mixinextras-fabric", version.ref =
jarvis_api = { module = "moe.nea.jarvis:jarvis-api", version.ref = "jarvis" }
jarvis_fabric = { module = "moe.nea.jarvis:jarvis-fabric", version.ref = "jarvis" }
nealisp = { module = "moe.nea:nealisp", version.ref = "nealisp" }
explosiveenhancement = { module = "maven.modrinth:explosive-enhancement", version.ref = "explosiveenhancement" }
# Runtime:
hotswap = { module = "virtual.github.hotswapagent:hotswap-agent", version.ref = "hotswap_agent" }
@@ -60,11 +62,11 @@ dbus = ["dbus_java_core", "dbus_java_unixsocket"]
runtime_required = ["architectury_fabric", "rei_fabric"]
runtime_optional = [
"devauth",
# "freecammod",
# "freecammod",
"sodium",
"qolify",
# "citresewn",
# "ncr",
# "citresewn",
# "ncr",
]

View File

@@ -6,11 +6,8 @@
package moe.nea.firmament.mixins;
import moe.nea.firmament.events.OutgoingPacketEvent;
import moe.nea.firmament.events.ParticleSpawnEvent;
import net.minecraft.client.network.ClientPlayNetworkHandler;
import net.minecraft.network.packet.Packet;
import net.minecraft.network.packet.s2c.play.EntityPositionS2CPacket;
import net.minecraft.network.packet.s2c.play.ParticleS2CPacket;
import net.minecraft.util.math.Vec3d;
import org.spongepowered.asm.mixin.Mixin;
@@ -20,13 +17,17 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(ClientPlayNetworkHandler.class)
public class MixinClientPacketHandler {
@Inject(method = "onParticle", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/NetworkThreadUtils;forceMainThread(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/listener/PacketListener;Lnet/minecraft/util/thread/ThreadExecutor;)V", shift = At.Shift.AFTER))
@Inject(method = "onParticle", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/NetworkThreadUtils;forceMainThread(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/listener/PacketListener;Lnet/minecraft/util/thread/ThreadExecutor;)V", shift = At.Shift.AFTER), cancellable = true)
public void onParticleSpawn(ParticleS2CPacket packet, CallbackInfo ci) {
ParticleSpawnEvent.Companion.publish(new ParticleSpawnEvent(
var event = new ParticleSpawnEvent(
packet.getParameters(),
new Vec3d(packet.getX(), packet.getY(), packet.getZ()),
new Vec3d(packet.getOffsetX(), packet.getOffsetY(), packet.getOffsetZ()),
packet.isLongDistance()
));
packet.isLongDistance(),
packet.getCount()
);
ParticleSpawnEvent.Companion.publish(event);
if (event.getCancelled())
ci.cancel();
}
}

View File

@@ -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>()
}

View File

@@ -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)

View File

@@ -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)
}
}
}
}

View File

@@ -123,5 +123,8 @@
"firmament.tooltip.copied.modelid": "Copied Texture Id: %s",
"firmament.tooltip.copied.skull": "Copied Skull Id: %s",
"firmament.tooltip.copied.skull.fail": "Failed to copy skull id.",
"firmament.tooltip.copied.nbt": "Copied NBT data"
"firmament.tooltip.copied.nbt": "Copied NBT data",
"firmament.config.compatibility": "Intermod Features",
"firmament.config.compatibility.explosion-enabled": "Redirect Enhanced Explosions",
"firmament.config.compatibility.explosion-power": "Enhanced Explosion Power"
}