generated from tilera/1710mod
145 lines
5.4 KiB
Java
145 lines
5.4 KiB
Java
package atomicscience.api;
|
|
|
|
import atomicscience.api.poison.PoisonRadiation;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import java.util.List;
|
|
import java.util.Random;
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.block.material.Material;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.particle.EntitySmokeFX;
|
|
import net.minecraft.client.renderer.texture.IIconRegister;
|
|
import net.minecraft.entity.Entity;
|
|
import net.minecraft.entity.EntityLiving;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.init.Blocks;
|
|
import net.minecraft.util.AxisAlignedBB;
|
|
import net.minecraft.util.IIcon;
|
|
import net.minecraft.world.World;
|
|
import universalelectricity.core.vector.Vector3;
|
|
|
|
public class BlockRadioactive extends Block {
|
|
public boolean canSpread;
|
|
public float radius;
|
|
public int amplifier;
|
|
public boolean canWalkPoison;
|
|
public boolean isRandomlyRadioactive;
|
|
private IIcon iconTop;
|
|
private IIcon iconBottom;
|
|
|
|
public BlockRadioactive(Material material) {
|
|
super(material);
|
|
this.canSpread = true;
|
|
this.radius = 5.0F;
|
|
this.amplifier = 2;
|
|
this.canWalkPoison = true;
|
|
this.isRandomlyRadioactive = true;
|
|
this.setTickRandomly(true);
|
|
this.setHardness(0.2F);
|
|
this.setLightLevel(0.1F);
|
|
}
|
|
|
|
public BlockRadioactive() {
|
|
this(Material.rock);
|
|
}
|
|
|
|
@Override
|
|
public IIcon getIcon(int side, int metadata) {
|
|
return side == 1 ? this.iconTop
|
|
: (side == 0 ? this.iconBottom : this.blockIcon);
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public void registerBlockIcons(IIconRegister iconRegister) {
|
|
super.registerBlockIcons(iconRegister);
|
|
this.blockIcon = iconRegister.registerIcon(
|
|
this.getUnlocalizedName().replace("tile.", ""));
|
|
this.iconTop = iconRegister.registerIcon(
|
|
this.getUnlocalizedName().replace("tile.", "") + "_top");
|
|
this.iconBottom = iconRegister.registerIcon(
|
|
this.getUnlocalizedName().replace("tile.", "") + "_bottom");
|
|
}
|
|
|
|
@Override
|
|
public void onBlockClicked(World world, int x, int y, int z,
|
|
EntityPlayer par5EntityPlayer) {
|
|
if ((double) world.rand.nextFloat() > 0.8D) {
|
|
this.updateTick(world, x, y, z, world.rand);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void updateTick(World world, int x, int y, int z, Random rand) {
|
|
if (!world.isRemote) {
|
|
if (this.isRandomlyRadioactive) {
|
|
AxisAlignedBB i = AxisAlignedBB.getBoundingBox(
|
|
(double) ((float) x - this.radius), (double) ((float) y - this.radius),
|
|
(double) ((float) z - this.radius), (double) ((float) x + this.radius),
|
|
(double) ((float) y + this.radius), (double) ((float) z + this.radius));
|
|
List<EntityLiving> newX = world.getEntitiesWithinAABB(EntityLiving.class, i);
|
|
|
|
for (EntityLiving newZ : newX) {
|
|
PoisonRadiation.INSTANCE.poisonEntity(
|
|
new Vector3((double) x, (double) y, (double) z), newZ,
|
|
this.amplifier);
|
|
}
|
|
}
|
|
|
|
if (this.canSpread) {
|
|
for (int var11 = 0; var11 < 4; ++var11) {
|
|
int xOffset = x + rand.nextInt(3) - 1;
|
|
int yOffset = y + rand.nextInt(5) - 3;
|
|
int zOffset = z + rand.nextInt(3) - 1;
|
|
Block block = world.getBlock(xOffset, yOffset, zOffset);
|
|
if ((double) rand.nextFloat() > 0.4D &&
|
|
(block == Blocks.farmland || block == Blocks.grass)) {
|
|
world.setBlock(xOffset, yOffset, zOffset, this);
|
|
}
|
|
}
|
|
|
|
if ((double) rand.nextFloat() > 0.85D) {
|
|
world.setBlock(x, y, z, Blocks.mycelium);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onEntityWalking(World par1World, int x, int y, int z,
|
|
Entity par5Entity) {
|
|
if (par5Entity instanceof EntityLiving && this.canWalkPoison) {
|
|
PoisonRadiation.INSTANCE.poisonEntity(
|
|
new Vector3((double) x, (double) y, (double) z),
|
|
(EntityLiving) par5Entity);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public int quantityDropped(Random par1Random) {
|
|
return 0;
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public void randomDisplayTick(World world, int x, int y, int z,
|
|
Random par5Random) {
|
|
if (Minecraft.getMinecraft().gameSettings.particleSetting == 0) {
|
|
byte radius = 3;
|
|
|
|
for (int i = 0; i < 2; ++i) {
|
|
Vector3 diDian = new Vector3((double) x, (double) y, (double) z);
|
|
diDian.x += Math.random() * (double) radius - (double) (radius / 2);
|
|
diDian.y += Math.random() * (double) radius - (double) (radius / 2);
|
|
diDian.z += Math.random() * (double) radius - (double) (radius / 2);
|
|
EntitySmokeFX fx = new EntitySmokeFX(
|
|
world, diDian.x, diDian.y, diDian.z, (Math.random() - 0.5D) / 2.0D,
|
|
(Math.random() - 0.5D) / 2.0D, (Math.random() - 0.5D) / 2.0D);
|
|
fx.setRBGColorF(0.2F, 0.8F, 0.0F);
|
|
Minecraft.getMinecraft().effectRenderer.addEffect(fx);
|
|
}
|
|
}
|
|
}
|
|
}
|