icbm/src/main/java/icbm/zhapin/zhapin/ex/ExEmpWave.java

126 lines
4.9 KiB
Java
Raw Normal View History

2022-11-09 22:15:45 +01:00
package icbm.zhapin.zhapin.ex;
import icbm.api.explosion.IEMPBlock;
import icbm.zhapin.zhapin.ZhaPin;
import mffs.api.IForceFieldBlock;
import mffs.api.fortron.IFortronStorage;
import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import universalelectricity.core.block.IElectricityStorage;
import universalelectricity.core.vector.Vector3;
import universalelectricity.prefab.implement.IDisableable;
import universalelectricity.prefab.tile.TileEntityElectricityRunnable;
public class ExEmpWave extends ZhaPin {
public ExEmpWave(final String name, final int ID, final int tier) {
super(name, ID, tier);
}
@Override
2022-11-09 22:16:55 +01:00
public boolean doBaoZha(
final World worldObj,
final Vector3 position,
final Entity explosionSource,
final int radius,
final int callCount
) {
2022-11-09 22:15:45 +01:00
for (int r = radius, x = -r; x < r; ++x) {
for (int y = -r; y < r; ++y) {
for (int z = -r; z < r; ++z) {
2022-11-09 22:16:55 +01:00
final double dist
= MathHelper.sqrt_double((double) (x * x + y * y + z * z));
final Vector3 searchPosition
= Vector3.add(position, new Vector3(x, y, z));
2022-11-09 22:15:45 +01:00
if (dist <= r) {
if (Math.round(position.x + y) == position.intY()) {
2022-11-09 22:16:55 +01:00
worldObj.spawnParticle(
"largesmoke",
searchPosition.x,
searchPosition.y,
searchPosition.z,
0.0,
0.0,
0.0
);
2022-11-09 22:15:45 +01:00
}
2022-11-09 22:16:55 +01:00
final Block block
= searchPosition.getBlock((IBlockAccess) worldObj);
final TileEntity tileEntity
= searchPosition.getTileEntity((IBlockAccess) worldObj);
2022-11-09 22:15:45 +01:00
if (block != null) {
if (block instanceof IForceFieldBlock) {
((IForceFieldBlock) block)
2022-11-09 22:16:55 +01:00
.weakenForceField(
worldObj,
searchPosition.intX(),
searchPosition.intY(),
searchPosition.intZ(),
1000
);
2022-11-09 22:15:45 +01:00
} else if (block instanceof IEMPBlock) {
((IEMPBlock) block)
2022-11-09 22:16:55 +01:00
.onEMP(worldObj, searchPosition, ZhaPin.emp);
2022-11-09 22:15:45 +01:00
} else if (tileEntity != null) {
if (tileEntity instanceof IElectricityStorage) {
((IElectricityStorage) tileEntity).setJoules(0.0);
}
2022-11-09 22:16:55 +01:00
2022-11-09 22:15:45 +01:00
if (tileEntity instanceof IDisableable) {
((IDisableable) tileEntity).onDisable(400);
}
2022-11-09 22:16:55 +01:00
2022-11-09 22:15:45 +01:00
if (tileEntity instanceof IFortronStorage) {
((IFortronStorage) tileEntity)
2022-11-09 22:16:55 +01:00
.provideFortron(
(int) worldObj.rand.nextFloat()
* ((IFortronStorage) tileEntity)
.getFortronCapacity(),
true
);
2022-11-09 22:15:45 +01:00
}
2022-11-09 22:16:55 +01:00
2022-11-09 22:15:45 +01:00
// TODO: WTF: IC2
// if (tileEntity instanceof IEnergyStorage) {
// ((IEnergyStorage) tileEntity).setStored(0);
// }
if (tileEntity instanceof TileEntityElectricityRunnable) {
2022-11-09 22:16:55 +01:00
((TileEntityElectricityRunnable) tileEntity)
.wattsReceived
= 0.0;
2022-11-09 22:15:45 +01:00
}
}
}
}
}
}
}
2022-11-09 22:16:55 +01:00
2022-11-09 22:15:45 +01:00
worldObj.playSoundEffect(
2022-11-09 22:16:55 +01:00
position.x,
position.y,
position.z,
2022-11-10 21:41:55 +01:00
"icbm:emp",
2022-11-09 22:16:55 +01:00
4.0f,
(1.0f + (worldObj.rand.nextFloat() - worldObj.rand.nextFloat()) * 0.2f) * 0.7f
);
2022-11-09 22:15:45 +01:00
return false;
}
@Override
public float getRadius() {
return 50.0f;
}
@Override
public double getEnergy() {
return 0.0;
}
}