package fox.spiteful.forbidden.blocks; import java.util.Random; import fox.spiteful.forbidden.Forbidden; import fox.spiteful.forbidden.tiles.TileEntityWrathCage; import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagString; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; import fox.spiteful.forbidden.Config; import fox.spiteful.forbidden.items.ForbiddenItems; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class BlockWrathCage extends BlockContainer { protected BlockWrathCage() { super(Material.iron); this.setCreativeTab(Forbidden.tab); setHardness(5.0F); setResistance(2000.0F); setStepSound(Block.soundTypeMetal); setBlockTextureName("forbidden:spirit_box"); } @Override public TileEntity createNewTileEntity(World world, int meta) { return new TileEntityWrathCage(); } @Override public Item getItem(World world, int x, int y, int z) { return Item.getItemFromBlock(ForbiddenBlocks.wrathCage); } @Override public int quantityDropped(Random rand) { return 1; } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { ItemStack held = player.getCurrentEquippedItem(); if (held != null && held.getItem() == ForbiddenItems.mobCrystal) { NBTTagCompound nbttagcompound = held.getTagCompound(); if (nbttagcompound == null) return false; if(!nbttagcompound.hasKey("mob")) return false; String string = nbttagcompound.getString("mob"); if (string != null) { if (!world.isRemote) { TileEntityWrathCage spawner = (TileEntityWrathCage) world.getTileEntity(x, y, z); String mob = null; ItemStack crystal = null; if (spawner.getSpawnerLogic().isMobSet()) { mob = spawner.getSpawnerLogic().getEntityNameToSpawn(); crystal = new ItemStack(ForbiddenItems.mobCrystal, 1); NBTTagString mobTag = new NBTTagString(mob); crystal.setTagInfo("mob", mobTag); } spawner.getSpawnerLogic().setMobID(string); spawner.getSpawnerLogic().mobIsSet(true); spawner.checkAspect(); world.markBlockForUpdate(x, y, z); player.setCurrentItemOrArmor(0, crystal); } player.swingItem(); return true; } } else if (held != null && held.getItem() == ForbiddenItems.fork && Config.wrathCost > 0) { TileEntityWrathCage spawner = (TileEntityWrathCage) world.getTileEntity(x, y, z); if (++spawner.mode > 2) spawner.mode = 0; player.swingItem(); } return false; } @Override public void onBlockPreDestroy(World world, int x, int y, int z, int side) { TileEntityWrathCage spawner = (TileEntityWrathCage) world.getTileEntity(x, y, z); if (spawner != null && spawner.getSpawnerLogic().isMobSet()) { float f = world.rand.nextFloat() * 0.8F + 0.1F; float f1 = world.rand.nextFloat() * 0.8F + 0.1F; float f2 = world.rand.nextFloat() * 0.8F + 0.1F; ItemStack crystal = new ItemStack(ForbiddenItems.mobCrystal); crystal.setTagCompound(new NBTTagCompound()); String mob = spawner.getSpawnerLogic().getEntityNameToSpawn(); crystal.stackTagCompound.setString("mob", mob); EntityItem entityitem = new EntityItem(world, (double) ((float) x + f), (double) ((float) y + f1), (double) ((float) z + f2), crystal); entityitem.motionX = (double) ((float) world.rand.nextGaussian() * 0.05F); entityitem.motionY = (double) ((float) world.rand.nextGaussian() * 0.05F + 0.2F); entityitem.motionZ = (double) ((float) world.rand.nextGaussian() * 0.05F); world.spawnEntityInWorld(entityitem); } super.onBlockPreDestroy(world, x, y, z, side); } @Override public boolean isOpaqueCube() { return false; } @SideOnly(Side.CLIENT) @Override public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z) { return new ItemStack(getItem(null, x, y, z)); } }