Add enhanced explosions support
This commit is contained in:
@@ -104,6 +104,7 @@ dependencies {
|
||||
modImplementation(libs.fabric.kotlin)
|
||||
modImplementation(libs.modmenu)
|
||||
modImplementation(libs.libgui)
|
||||
modCompileOnly(libs.explosiveenhancement)
|
||||
include(libs.libgui)
|
||||
|
||||
|
||||
|
||||
@@ -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",
|
||||
]
|
||||
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>()
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user