From ebc927440698189046cd2a4cca62ed5dea938dd1 Mon Sep 17 00:00:00 2001 From: Tomate0613 <69756782+Tomate0613@users.noreply.github.com> Date: Thu, 28 May 2026 19:53:18 +0200 Subject: [PATCH] add allow_trigger_explosions gamerule --- .../java/net/modfest/fireblanket/Fireblanket.java | 5 +++++ .../mixin/adventure_fix/MixinServerExplosion.java | 14 +++++++++++++- .../resources/assets/fireblanket/lang/en_us.json | 2 ++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/modfest/fireblanket/Fireblanket.java b/src/main/java/net/modfest/fireblanket/Fireblanket.java index b4efdc6..a1238e7 100644 --- a/src/main/java/net/modfest/fireblanket/Fireblanket.java +++ b/src/main/java/net/modfest/fireblanket/Fireblanket.java @@ -99,6 +99,11 @@ public class Fireblanket implements ModInitializer { .category(GameRuleCategory.PLAYER) .buildAndRegister(FireblanketConstants.id("adventure_wind_charge_interaction")); + public static final GameRule ALLOW_TRIGGER_EXPLOSIONS = + GameRuleBuilder.forBoolean(false) + .category(GameRuleCategory.MISC) + .buildAndRegister(FireblanketConstants.id("allow_trigger_explosions")); + public static final Logger LOGGER = LoggerFactory.getLogger("Fireblanket"); public record QueuedPacket(Connection conn, Packet packet, ChannelFutureListener listener) { diff --git a/src/main/java/net/modfest/fireblanket/mixin/adventure_fix/MixinServerExplosion.java b/src/main/java/net/modfest/fireblanket/mixin/adventure_fix/MixinServerExplosion.java index 0bef290..f143953 100644 --- a/src/main/java/net/modfest/fireblanket/mixin/adventure_fix/MixinServerExplosion.java +++ b/src/main/java/net/modfest/fireblanket/mixin/adventure_fix/MixinServerExplosion.java @@ -1,12 +1,15 @@ package net.modfest.fireblanket.mixin.adventure_fix; import com.llamalad7.mixinextras.injector.ModifyReturnValue; +import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.level.Explosion; import net.minecraft.world.level.GameType; import net.minecraft.world.level.ServerExplosion; import net.modfest.fireblanket.Fireblanket; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; /** @@ -14,12 +17,21 @@ **/ @Mixin(ServerExplosion.class) public abstract class MixinServerExplosion implements Explosion { + @Shadow + @Final + private ServerLevel level; + @ModifyReturnValue(method = "canTriggerBlocks", at = @At("RETURN")) private boolean modifyReturn(final boolean original) { + if (original && !this.level.getGameRules().get(Fireblanket.ALLOW_TRIGGER_EXPLOSIONS)) { + return false; + } + if (original && this.getIndirectSourceEntity() instanceof ServerPlayer player) { return player.gameMode() != GameType.ADVENTURE - || this.level().getGameRules().get(Fireblanket.ADVENTURE_WIND_CHARGE_INTERACTION); + || this.level.getGameRules().get(Fireblanket.ADVENTURE_WIND_CHARGE_INTERACTION); } + return original; } } diff --git a/src/main/resources/assets/fireblanket/lang/en_us.json b/src/main/resources/assets/fireblanket/lang/en_us.json index de557ac..8ec8b4a 100644 --- a/src/main/resources/assets/fireblanket/lang/en_us.json +++ b/src/main/resources/assets/fireblanket/lang/en_us.json @@ -7,6 +7,8 @@ "gamerule.fireblanket.lightning_broadcast_radius.description": "How far in blocks players will receive lightning strikes from in-game. Set to 0 to effectively disable broadcasting.", "gamerule.fireblanket.adventure_wind_charge_interaction": "Wind charges interaction in Adventure", "gamerule.fireblanket.adventure_wind_charge_interaction.description": "Whether wind charges interact with blocks in adventure.", + "gamerule.fireblanket.allow_trigger_explosions": "Allow trigger explosions", + "gamerule.fireblanket.allow_trigger_explosions.description": "Whether trigger explosions (such as those from wind charges) can happen", "commands.gamerule.locked": "You do not have permission to modify this gamerule", "commandsBlock.commandSetByPlayer": "%s set the command at (%s) to: %s", "fireblanket.fsc.broken": "[Fireblanket] Despite relevant mixins being disabled or broken, we're still requesting FSC?",