Bläddra i källkod

Hooks for getting radius for explosion

shedaniel 4 år sedan
förälder
incheckning
5c059cc647

+ 6 - 0
common/src/main/java/me/shedaniel/architectury/hooks/ExplosionHooks.java

@@ -41,10 +41,16 @@ public final class ExplosionHooks {
         return IMPL.getSource(explosion);
     }
     
+    public static float getRadius(Explosion explosion) {
+        return IMPL.getRadius(explosion);
+    }
+    
     public interface Impl {
         Vec3 getPosition(Explosion explosion);
         
         Entity getSource(Explosion explosion);
+        
+        float getRadius(Explosion explosion);
     }
     
     static {

+ 7 - 0
fabric/src/main/java/me/shedaniel/architectury/hooks/fabric/ExplosionHooksImpl.java

@@ -32,9 +32,16 @@ public class ExplosionHooksImpl implements ExplosionHooks.Impl {
         return ((ExplosionExtensions) explosion).architectury_getSource();
     }
     
+    @Override
+    public float getRadius(Explosion explosion) {
+        return ((ExplosionExtensions) explosion).architectury_getRadius();
+    }
+    
     public interface ExplosionExtensions {
         Vec3 architectury_getPosition();
         
         Entity architectury_getSource();
+        
+        float architectury_getRadius();
     }
 }

+ 6 - 0
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinExplosion.java

@@ -43,6 +43,7 @@ public class MixinExplosion implements ExplosionHooksImpl.ExplosionExtensions {
     @Shadow @Final private double y;
     @Shadow @Final private double z;
     @Shadow @Final @Nullable private Entity source;
+    @Shadow @Final private float radius;
     @Unique Vec3 position;
     
     @Inject(method = "explode", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/phys/Vec3;<init>(DDD)V", ordinal = 0),
@@ -63,4 +64,9 @@ public class MixinExplosion implements ExplosionHooksImpl.ExplosionExtensions {
     public Entity architectury_getSource() {
         return source;
     }
+    
+    @Override
+    public float architectury_getRadius() {
+        return radius;
+    }
 }

+ 10 - 0
forge/src/main/java/me/shedaniel/architectury/hooks/forge/ExplosionHooksImpl.java

@@ -20,6 +20,7 @@ import me.shedaniel.architectury.hooks.ExplosionHooks;
 import net.minecraft.entity.Entity;
 import net.minecraft.util.math.vector.Vector3d;
 import net.minecraft.world.Explosion;
+import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
 
 public class ExplosionHooksImpl implements ExplosionHooks.Impl {
     @Override
@@ -31,4 +32,13 @@ public class ExplosionHooksImpl implements ExplosionHooks.Impl {
     public Entity getSource(Explosion explosion) {
         return explosion.getExploder();
     }
+    
+    @Override
+    public float getRadius(Explosion explosion) {
+        try {
+            return (float) ObfuscationReflectionHelper.findField(Explosion.class, "field_77280_f").get(explosion);
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
+    }
 }