aboutsummaryrefslogtreecommitdiff
path: root/src
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 /src
parent139089d9beb134465737c4afff3b1303bf481aa1 (diff)
downloadFirmament-eaf91279b8f65b30f05a7be9a8ae1b6b18859ae4.tar.gz
Firmament-eaf91279b8f65b30f05a7be9a8ae1b6b18859ae4.tar.bz2
Firmament-eaf91279b8f65b30f05a7be9a8ae1b6b18859ae4.zip
Add enhanced explosions support
Diffstat (limited to 'src')
-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
5 files changed, 71 insertions, 9 deletions
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"
}