From f869cda4f0b62b7c780d131cb5c25be8ab040c24 Mon Sep 17 00:00:00 2001 From: HaHaWTH <102713261+HaHaWTH@users.noreply.github.com> Date: Sat, 15 Nov 2025 21:24:48 +1400 Subject: [PATCH] carpet compatibility How this works: Carpet's noBlockDamage mixin is searching for ExplosionDamageCalculator#getBlockExplosionResistance as injection point, moonrise completely overwrites the `calculateExplodedPositions` method, causing conflict. Using inject and cancel at head will silently disable this injector, but there's another injection point for the noBlockDamage feature (https://github.com/gnembon/fabric-carpet/blob/master/src/main/java/carpet/mixins/Explosion_optimizedTntMixin.java#L55), this will clear the affectedBlocks list. So Carpet's feature still works fine. --- .../mixin/collisions/ServerExplosionMixin.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/ca/spottedleaf/moonrise/mixin/collisions/ServerExplosionMixin.java b/src/main/java/ca/spottedleaf/moonrise/mixin/collisions/ServerExplosionMixin.java index 6f2782f..b7c62e3 100644 --- a/src/main/java/ca/spottedleaf/moonrise/mixin/collisions/ServerExplosionMixin.java +++ b/src/main/java/ca/spottedleaf/moonrise/mixin/collisions/ServerExplosionMixin.java @@ -24,13 +24,11 @@ import net.minecraft.world.phys.shapes.VoxelShape; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import java.util.Arrays; import java.util.List; @@ -348,8 +346,14 @@ private void initCacheFields(final CallbackInfoReturnable cir) { * @reason Rewrite ray casting for performance * @author Spottedleaf */ - @Overwrite - public List calculateExplodedPositions() { + @Inject( + method = "calculateExplodedPositions", + at = @At( + value = "HEAD" + ), + cancellable = true + ) + public void calculateExplodedPositions(CallbackInfoReturnable> cir) { final ObjectArrayList ret = new ObjectArrayList<>(); final Vec3 center = this.center; @@ -432,7 +436,7 @@ public List calculateExplodedPositions() { } while (power > 0.0f); } - return ret; + cir.setReturnValue(ret); } /**