package biomesoplenty.blocks; import java.util.List; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.boss.EntityDragon; import net.minecraft.entity.effect.EntityLightningBolt; import net.minecraft.entity.item.EntityTNTPrimed; import net.minecraft.entity.passive.EntityVillager; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Icon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import biomesoplenty.BiomesOPlenty; import biomesoplenty.api.Blocks; import biomesoplenty.api.Items; import biomesoplenty.configuration.BOPAchievements; import biomesoplenty.tileentities.TileEntityAltar; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class BlockBOPGlass extends Block { private static final String[] glassTypes = new String[] {"celestiallens", "sacrificialfocus_empty", "sacrificialfocus_active", "sacrificialfocus_villager"}; private Icon[] textures; public BlockBOPGlass(int blockID) { super(blockID, Material.glass); this.setCreativeTab(BiomesOPlenty.tabBiomesOPlenty); this.blockHardness = 0.37F; } @Override public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { if (world.getBlockMetadata(x, y, z) == 2) { float var5 = 0.01F; return AxisAlignedBB.getAABBPool().getAABB(x, y, z, x + 1, y + 1 - var5, z + 1); } else return AxisAlignedBB.getAABBPool().getAABB(x, y, z, x + 1, y + 1, z + 1); } @Override public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity) { if (world.getBlockMetadata(x, y, z) == 2) { if (checkAltarStructreIntegrity(world, x, y, z)) { if (entity instanceof EntityVillager) { world.setBlockMetadataWithNotify(x, y, z, 3, 2); world.spawnEntityInWorld(new EntityLightningBolt(world, x + 1, y + 2, z)); world.spawnEntityInWorld(new EntityLightningBolt(world, x -1, y + 2, z)); world.spawnEntityInWorld(new EntityLightningBolt(world, x, y + 2, z + 1)); world.spawnEntityInWorld(new EntityLightningBolt(world, x, y + 2, z - 1)); entity.setDead(); } } } } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int meta, float par7, float par8, float par9) { ItemStack equippedItem = player.getCurrentEquippedItem(); Random rand = new Random(); if (equippedItem != null) { if (equippedItem.itemID == Items.soulManipulator.get().itemID) { if (equippedItem.getItemDamage() == 0) { if (world.getBlockMetadata(x, y, z) == 2) { if (checkAltarStructreIntegrity(world, x, y, z)) { if (!player.capabilities.isCreativeMode) { player.setCurrentItemOrArmor(0, new ItemStack(Items.soulManipulator.get(), 1, 1)); } world.setBlockMetadataWithNotify(x, y, z, 1, 2); return true; } } else if (world.getBlockMetadata(x, y, z) == 3) { if (checkAltarStructreIntegrity(world, x, y, z)) { if (!player.capabilities.isCreativeMode) { player.setCurrentItemOrArmor(0, new ItemStack(Items.soulManipulator.get(), 1, 2)); } FMLClientHandler.instance().getClient().sndManager.playSound("mob.villager.idle", (float) x + 0.5F, (float) y + 0.5F, (float) z + 0.5F, 1.0F, 1.0F); world.setBlockMetadataWithNotify(x, y, z, 1, 2); return true; } } } else if (equippedItem.getItemDamage() == 1) { if (world.getBlockMetadata(x, y, z) == 1) { if (checkAltarStructreIntegrity(world, x, y, z)) { if (!player.capabilities.isCreativeMode) { player.setCurrentItemOrArmor(0, new ItemStack(Items.soulManipulator.get(), 1, 0)); } world.spawnEntityInWorld(new EntityLightningBolt(world, x + 1, y + 2, z)); world.spawnEntityInWorld(new EntityLightningBolt(world, x -1, y + 2, z)); world.spawnEntityInWorld(new EntityLightningBolt(world, x, y + 2, z + 1)); world.spawnEntityInWorld(new EntityLightningBolt(world, x, y + 2, z - 1)); world.setBlockMetadataWithNotify(x, y, z, 2, 2); return true; } } if (world.getBlockMetadata(x, y, z) == 3) { if (player.dimension == 1) { if (checkAltarStructreIntegrity(world, x, y, z)) { if (!player.capabilities.isCreativeMode) { player.setCurrentItemOrArmor(0, new ItemStack(Items.soulManipulator.get(), 1, 0)); } world.spawnEntityInWorld(new EntityLightningBolt(world, x, y + 1, z)); if (world.isRemote) { FMLClientHandler.instance().getClient().sndManager.playSound("mob.wither.death", (float) x + 0.5F, (float) y + 0.5F, (float) z + 0.5F, 5.0F, 10.0F); FMLClientHandler.instance().getClient().sndManager.playSound("mob.enderdragon.growl", (float) x + 0.5F, (float) y + 0.5F, (float) z + 0.5F, 5.0F, 1.0F); } player.addStat(BOPAchievements.achSacrifice, 1); if (!world.isRemote) { world.spawnEntityInWorld(new EntityDragon(world)); world.setBlockMetadataWithNotify(x, y, z, 1, 2); Entity entitytnt = new EntityTNTPrimed(world); world.createExplosion(entitytnt, (double)x, (double)y, (double)z, 10.0F, true); } return true; } } } } if (equippedItem.getItemDamage() == 2) { if (world.getBlockMetadata(x, y, z) == 2) { if (checkAltarStructreIntegrity(world, x, y, z)) { if (player.dimension != 1) { world.spawnEntityInWorld(new EntityLightningBolt(world, x + 1, y + 2, z)); world.spawnEntityInWorld(new EntityLightningBolt(world, x -1, y + 2, z)); world.spawnEntityInWorld(new EntityLightningBolt(world, x, y + 2, z + 1)); world.spawnEntityInWorld(new EntityLightningBolt(world, x, y + 2, z - 1)); if (!player.capabilities.isCreativeMode) { player.setCurrentItemOrArmor(0, new ItemStack(Items.soulManipulator.get(), 1, 0)); } world.setBlockMetadataWithNotify(x, y, z, 3, 2); return true; } } } } } } return false; } public static boolean checkAltarStructreIntegrity(World world, int x, int y, int z) { TileEntityAltar tileentityaltar0 = (TileEntityAltar) world.getBlockTileEntity(x + 1, y, z); TileEntityAltar tileentityaltar1 = (TileEntityAltar) world.getBlockTileEntity(x - 1, y, z); TileEntityAltar tileentityaltar2 = (TileEntityAltar) world.getBlockTileEntity(x, y, z + 1); TileEntityAltar tileentityaltar3 = (TileEntityAltar) world.getBlockTileEntity(x, y, z - 1); if (tileentityaltar0 != null && tileentityaltar1 != null && tileentityaltar2 != null && tileentityaltar3 != null) if (tileentityaltar0.getAllPresent() && tileentityaltar1.getAllPresent() && tileentityaltar2.getAllPresent() && tileentityaltar3.getAllPresent()) { if (world.getBlockId(x + 1, y + 1, z) == Blocks.bones.get().blockID && world.getBlockId(x - 1, y + 1, z) == Blocks.bones.get().blockID && world.getBlockId(x, y + 1, z + 1) == Blocks.bones.get().blockID && world.getBlockId(x, y + 1, z - 1) == Blocks.bones.get().blockID) { if (world.getBlockMetadata(x + 1, y + 1, z) == 1 && world.getBlockMetadata(x - 1, y + 1, z) == 1 && world.getBlockMetadata(x, y + 1, z + 1) == 1 && world.getBlockMetadata(x, y + 1, z - 1) == 1) { if (world.getBlockId(x + 1, y + 2, z) == Blocks.bones.get().blockID && world.getBlockId(x - 1, y + 2, z) == Blocks.bones.get().blockID && world.getBlockId(x, y + 2, z + 1) == Blocks.bones.get().blockID && world.getBlockId(x, y + 2, z - 1) == Blocks.bones.get().blockID) { if (world.getBlockMetadata(x + 1, y + 2, z) == 0 && world.getBlockMetadata(x - 1, y + 2, z) == 0 && world.getBlockMetadata(x, y + 2, z + 1) == 0 && world.getBlockMetadata(x, y + 2, z - 1) == 0) { return true; } } } } } return false; } @Override public int getDamageValue(World world, int x, int y, int z) { int meta = world.getBlockMetadata(x, y, z); if (meta == 2 || meta == 3) { meta = 1; } return meta; } @Override public int quantityDropped(Random par1Random) { return 0; } @Override @SideOnly(Side.CLIENT) public int getRenderBlockPass() { return 1; } @Override public boolean shouldSideBeRendered(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5) { return super.shouldSideBeRendered(par1IBlockAccess, par2, par3, par4, 1 - par5); } @Override public boolean isOpaqueCube() { return false; } @Override protected boolean canSilkHarvest() { return true; } @Override public void registerIcons(IconRegister iconRegister) { textures = new Icon[glassTypes.length]; for (int i = 0; i < glassTypes.length; ++i) { textures[i] = iconRegister.registerIcon("biomesoplenty:"+glassTypes[i]); } } @Override public Icon getIcon(int side, int meta) { if (meta < 0 || meta >= textures.length) { meta = 0; } return textures[meta]; } @Override @SuppressWarnings({ "rawtypes", "unchecked" }) public void getSubBlocks(int blockID, CreativeTabs creativeTabs, List list) { for (int i = 0; i < glassTypes.length; ++i) { if (i != 2 && i != 3) list.add(new ItemStack(blockID, 1, i)); } } @Override public int damageDropped(int meta) { return meta; } }