aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornea <nea@nea.moe>2023-09-25 21:40:26 +0200
committernea <nea@nea.moe>2023-09-25 21:40:26 +0200
commiteaf91279b8f65b30f05a7be9a8ae1b6b18859ae4 (patch)
treeb00348853d7322bfaaa1121831b5ceeec130b649
parent139089d9beb134465737c4afff3b1303bf481aa1 (diff)
downloadfirmament-eaf91279b8f65b30f05a7be9a8ae1b6b18859ae4.tar.gz
firmament-eaf91279b8f65b30f05a7be9a8ae1b6b18859ae4.tar.bz2
firmament-eaf91279b8f65b30f05a7be9a8ae1b6b18859ae4.zip
Add enhanced explosions support
-rw-r--r--build.gradle.kts1
-rw-r--r--gradle/libs.versions.toml8
-rw-r--r--src/main/java/moe/nea/firmament/mixins/MixinClientPacketHandler.java15
-rw-r--r--src/main/kotlin/moe/nea/firmament/events/ParticleSpawnEvent.kt3
-rw-r--r--src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt2
-rw-r--r--src/main/kotlin/moe/nea/firmament/features/fixes/CompatibliltyFeatures.kt55
-rw-r--r--src/main/resources/assets/firmament/lang/en_us.json5
7 files changed, 77 insertions, 12 deletions
diff --git a/build.gradle.kts b/build.gradle.kts
index 104df5a..14a6900 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -104,6 +104,7 @@ dependencies {
modImplementation(libs.fabric.kotlin)
modImplementation(libs.modmenu)
modImplementation(libs.libgui)
+ modCompileOnly(libs.explosiveenhancement)
include(libs.libgui)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index ce8c9da..ee6d432 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -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",
]
diff --git a/src/main/java/moe/nea/firmament/mixins/MixinClientPacketHandler.java b/src/main/java/moe/nea/firmament/mixins/MixinClientPacketHandler.java
index dbf8c7f..220c76f 100644
--- a/src/main/java/moe/nea/firmament/mixins/MixinClientPacketHandler.java
+++ b/src/main/java/moe/nea/firmament/mixins/MixinClientPacketHandler.java
@@ -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();
}
}
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)
+ }
+ }
+ }
+}
diff --git a/src/main/resources/assets/firmament/lang/en_us.json b/src/main/resources/assets/firmament/lang/en_us.json
index 396e365..28ef1a8 100644
--- a/src/main/resources/assets/firmament/lang/en_us.json
+++ b/src/main/resources/assets/firmament/lang/en_us.json
@@ -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"
}