Files
Explosion-Overhaul/build/decompiled/com/vinlanx/explosionoverhaul/mixin/ExplosionMixin.java
2026-05-04 10:03:58 +00:00

93 lines
3.3 KiB
Java

/*
* Decompiled with CFR 0.152.
*/
package com.vinlanx.explosionoverhaul.mixin;
import com.vinlanx.explosionoverhaul.ServerExplosionHandler;
import com.vinlanx.explosionoverhaul.api.IExplosionPower;
import com.vinlanx.explosionoverhaul.mixinhelper.ExplosionAccessor;
import java.util.List;
import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.Explosion;
import net.minecraft.world.level.ExplosionDamageCalculator;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.Vec3;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
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.callback.CallbackInfo;
@Mixin(value={Explosion.class})
public abstract class ExplosionMixin
implements IExplosionPower,
ExplosionAccessor {
@Shadow
@Final
private Level f_46012_;
@Shadow
@Final
@Nullable
private Entity f_46016_;
@Shadow
@Final
private double f_46013_;
@Shadow
@Final
private double f_46014_;
@Shadow
@Final
private double f_46015_;
@Unique
private float explosionPower;
@Shadow
public abstract List<BlockPos> m_46081_();
@Inject(method={"<init>(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/Entity;DDDFZLnet/minecraft/world/level/Explosion$BlockInteraction;)V"}, at={@At(value="RETURN")})
private void capturePowerSimple(Level level, Entity source, double x, double y, double z, float power, boolean fire, Explosion.BlockInteraction interaction, CallbackInfo ci) {
this.explosionPower = power;
}
@Inject(method={"<init>(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/damagesource/DamageSource;Lnet/minecraft/world/level/ExplosionDamageCalculator;DDDFZLnet/minecraft/world/level/Explosion$BlockInteraction;)V"}, at={@At(value="RETURN")})
private void capturePowerComplex(Level level, @Nullable Entity entity, @Nullable DamageSource damageSource, @Nullable ExplosionDamageCalculator damageCalculator, double x, double y, double z, float power, boolean fire, Explosion.BlockInteraction blockInteraction, CallbackInfo ci) {
this.explosionPower = power;
}
@Override
public float getPower() {
return this.explosionPower;
}
@Override
public void setPower(float power) {
this.explosionPower = power;
}
@Override
public Vec3 explosionoverhaul$getCenter() {
return new Vec3(this.f_46013_, this.f_46014_, this.f_46015_);
}
@Override
public Entity explosionoverhaul$getSource() {
return this.f_46016_;
}
@Inject(method={"finalizeExplosion(Z)V"}, at={@At(value="HEAD")})
private void onFinalizeExplosion(boolean spawnParticles, CallbackInfo ci) {
Level level = this.f_46012_;
if (level instanceof ServerLevel) {
ServerLevel serverLevel = (ServerLevel)level;
ServerExplosionHandler.handleExplosion(serverLevel, (Explosion)this, this.m_46081_());
}
}
}