generated from tilera/1710mod
126 lines
4.9 KiB
Java
126 lines
4.9 KiB
Java
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
|
|
public boolean doBaoZha(
|
|
final World worldObj,
|
|
final Vector3 position,
|
|
final Entity explosionSource,
|
|
final int radius,
|
|
final int callCount
|
|
) {
|
|
for (int r = radius, x = -r; x < r; ++x) {
|
|
for (int y = -r; y < r; ++y) {
|
|
for (int z = -r; z < r; ++z) {
|
|
final double dist
|
|
= MathHelper.sqrt_double((double) (x * x + y * y + z * z));
|
|
final Vector3 searchPosition
|
|
= Vector3.add(position, new Vector3(x, y, z));
|
|
|
|
if (dist <= r) {
|
|
if (Math.round(position.x + y) == position.intY()) {
|
|
worldObj.spawnParticle(
|
|
"largesmoke",
|
|
searchPosition.x,
|
|
searchPosition.y,
|
|
searchPosition.z,
|
|
0.0,
|
|
0.0,
|
|
0.0
|
|
);
|
|
}
|
|
|
|
final Block block
|
|
= searchPosition.getBlock((IBlockAccess) worldObj);
|
|
final TileEntity tileEntity
|
|
= searchPosition.getTileEntity((IBlockAccess) worldObj);
|
|
|
|
if (block != null) {
|
|
if (block instanceof IForceFieldBlock) {
|
|
((IForceFieldBlock) block)
|
|
.weakenForceField(
|
|
worldObj,
|
|
searchPosition.intX(),
|
|
searchPosition.intY(),
|
|
searchPosition.intZ(),
|
|
1000
|
|
);
|
|
} else if (block instanceof IEMPBlock) {
|
|
((IEMPBlock) block)
|
|
.onEMP(worldObj, searchPosition, ZhaPin.emp);
|
|
} else if (tileEntity != null) {
|
|
if (tileEntity instanceof IElectricityStorage) {
|
|
((IElectricityStorage) tileEntity).setJoules(0.0);
|
|
}
|
|
|
|
if (tileEntity instanceof IDisableable) {
|
|
((IDisableable) tileEntity).onDisable(400);
|
|
}
|
|
|
|
if (tileEntity instanceof IFortronStorage) {
|
|
((IFortronStorage) tileEntity)
|
|
.provideFortron(
|
|
(int) worldObj.rand.nextFloat()
|
|
* ((IFortronStorage) tileEntity)
|
|
.getFortronCapacity(),
|
|
true
|
|
);
|
|
}
|
|
|
|
// TODO: WTF: IC2
|
|
// if (tileEntity instanceof IEnergyStorage) {
|
|
// ((IEnergyStorage) tileEntity).setStored(0);
|
|
// }
|
|
if (tileEntity instanceof TileEntityElectricityRunnable) {
|
|
((TileEntityElectricityRunnable) tileEntity)
|
|
.wattsReceived
|
|
= 0.0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
worldObj.playSoundEffect(
|
|
position.x,
|
|
position.y,
|
|
position.z,
|
|
"icbm:emp",
|
|
4.0f,
|
|
(1.0f + (worldObj.rand.nextFloat() - worldObj.rand.nextFloat()) * 0.2f) * 0.7f
|
|
);
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public float getRadius() {
|
|
return 50.0f;
|
|
}
|
|
|
|
@Override
|
|
public double getEnergy() {
|
|
return 0.0;
|
|
}
|
|
}
|