Add enhanced explosions support
This commit is contained in:
@@ -104,6 +104,7 @@ dependencies {
|
|||||||
modImplementation(libs.fabric.kotlin)
|
modImplementation(libs.fabric.kotlin)
|
||||||
modImplementation(libs.modmenu)
|
modImplementation(libs.modmenu)
|
||||||
modImplementation(libs.libgui)
|
modImplementation(libs.libgui)
|
||||||
|
modCompileOnly(libs.explosiveenhancement)
|
||||||
include(libs.libgui)
|
include(libs.libgui)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ ncr = "Fabric-1.20-v2.2.0"
|
|||||||
mixinextras = "0.2.0-rc.5"
|
mixinextras = "0.2.0-rc.5"
|
||||||
jarvis = "1.1.1"
|
jarvis = "1.1.1"
|
||||||
nealisp = "1.0.0"
|
nealisp = "1.0.0"
|
||||||
|
explosiveenhancement = "1.2.1-1.20.x"
|
||||||
|
|
||||||
|
|
||||||
[libraries]
|
[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_api = { module = "moe.nea.jarvis:jarvis-api", version.ref = "jarvis" }
|
||||||
jarvis_fabric = { module = "moe.nea.jarvis:jarvis-fabric", version.ref = "jarvis" }
|
jarvis_fabric = { module = "moe.nea.jarvis:jarvis-fabric", version.ref = "jarvis" }
|
||||||
nealisp = { module = "moe.nea:nealisp", version.ref = "nealisp" }
|
nealisp = { module = "moe.nea:nealisp", version.ref = "nealisp" }
|
||||||
|
explosiveenhancement = { module = "maven.modrinth:explosive-enhancement", version.ref = "explosiveenhancement" }
|
||||||
|
|
||||||
# Runtime:
|
# Runtime:
|
||||||
hotswap = { module = "virtual.github.hotswapagent:hotswap-agent", version.ref = "hotswap_agent" }
|
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_required = ["architectury_fabric", "rei_fabric"]
|
||||||
runtime_optional = [
|
runtime_optional = [
|
||||||
"devauth",
|
"devauth",
|
||||||
# "freecammod",
|
# "freecammod",
|
||||||
"sodium",
|
"sodium",
|
||||||
"qolify",
|
"qolify",
|
||||||
# "citresewn",
|
# "citresewn",
|
||||||
# "ncr",
|
# "ncr",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,11 +6,8 @@
|
|||||||
|
|
||||||
package moe.nea.firmament.mixins;
|
package moe.nea.firmament.mixins;
|
||||||
|
|
||||||
import moe.nea.firmament.events.OutgoingPacketEvent;
|
|
||||||
import moe.nea.firmament.events.ParticleSpawnEvent;
|
import moe.nea.firmament.events.ParticleSpawnEvent;
|
||||||
import net.minecraft.client.network.ClientPlayNetworkHandler;
|
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.network.packet.s2c.play.ParticleS2CPacket;
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
@@ -20,13 +17,17 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|||||||
|
|
||||||
@Mixin(ClientPlayNetworkHandler.class)
|
@Mixin(ClientPlayNetworkHandler.class)
|
||||||
public class MixinClientPacketHandler {
|
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) {
|
public void onParticleSpawn(ParticleS2CPacket packet, CallbackInfo ci) {
|
||||||
ParticleSpawnEvent.Companion.publish(new ParticleSpawnEvent(
|
var event = new ParticleSpawnEvent(
|
||||||
packet.getParameters(),
|
packet.getParameters(),
|
||||||
new Vec3d(packet.getX(), packet.getY(), packet.getZ()),
|
new Vec3d(packet.getX(), packet.getY(), packet.getZ()),
|
||||||
new Vec3d(packet.getOffsetX(), packet.getOffsetY(), packet.getOffsetZ()),
|
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 position: Vec3d,
|
||||||
val offset: Vec3d,
|
val offset: Vec3d,
|
||||||
val longDistance: Boolean,
|
val longDistance: Boolean,
|
||||||
) : FirmamentEvent() {
|
val count: Int,
|
||||||
|
) : FirmamentEvent.Cancellable() {
|
||||||
companion object : FirmamentEventBus<ParticleSpawnEvent>()
|
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.DeveloperFeatures
|
||||||
import moe.nea.firmament.features.debug.MinorTrolling
|
import moe.nea.firmament.features.debug.MinorTrolling
|
||||||
import moe.nea.firmament.features.debug.PowerUserTools
|
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.fixes.Fixes
|
||||||
import moe.nea.firmament.features.inventory.CraftingOverlay
|
import moe.nea.firmament.features.inventory.CraftingOverlay
|
||||||
import moe.nea.firmament.features.inventory.PriceData
|
import moe.nea.firmament.features.inventory.PriceData
|
||||||
@@ -51,6 +52,7 @@ object FeatureManager : DataHolder<FeatureManager.Config>(serializer(), "feature
|
|||||||
loadFeature(CraftingOverlay)
|
loadFeature(CraftingOverlay)
|
||||||
loadFeature(PowerUserTools)
|
loadFeature(PowerUserTools)
|
||||||
loadFeature(ChatLinks)
|
loadFeature(ChatLinks)
|
||||||
|
loadFeature(CompatibliltyFeatures)
|
||||||
loadFeature(SaveCursorPosition)
|
loadFeature(SaveCursorPosition)
|
||||||
loadFeature(CustomSkyBlockTextures)
|
loadFeature(CustomSkyBlockTextures)
|
||||||
loadFeature(PriceData)
|
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.modelid": "Copied Texture Id: %s",
|
||||||
"firmament.tooltip.copied.skull": "Copied Skull Id: %s",
|
"firmament.tooltip.copied.skull": "Copied Skull Id: %s",
|
||||||
"firmament.tooltip.copied.skull.fail": "Failed to copy skull id.",
|
"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