package net.minecraft.item; import java.util.List; import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityEnderCrystal; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.WorldProviderEnd; import net.minecraft.world.end.DragonFightManager; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public class ItemEndCrystal extends Item { public ItemEndCrystal() { this.setUnlocalizedName("end_crystal"); this.setCreativeTab(CreativeTabs.DECORATIONS); } /** * Called when a Block is right-clicked with this Item */ public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { IBlockState iblockstate = worldIn.getBlockState(pos); if (iblockstate.getBlock() != Blocks.OBSIDIAN && iblockstate.getBlock() != Blocks.BEDROCK) { return EnumActionResult.FAIL; } else { BlockPos blockpos = pos.up(); ItemStack itemstack = player.getHeldItem(hand); if (!player.canPlayerEdit(blockpos, facing, itemstack)) { return EnumActionResult.FAIL; } else { BlockPos blockpos1 = blockpos.up(); boolean flag = !worldIn.isAirBlock(blockpos) && !worldIn.getBlockState(blockpos).getBlock().isReplaceable(worldIn, blockpos); flag = flag | (!worldIn.isAirBlock(blockpos1) && !worldIn.getBlockState(blockpos1).getBlock().isReplaceable(worldIn, blockpos1)); if (flag) { return EnumActionResult.FAIL; } else { double d0 = (double)blockpos.getX(); double d1 = (double)blockpos.getY(); double d2 = (double)blockpos.getZ(); List list = worldIn.getEntitiesWithinAABBExcludingEntity((Entity)null, new AxisAlignedBB(d0, d1, d2, d0 + 1.0D, d1 + 2.0D, d2 + 1.0D)); if (!list.isEmpty()) { return EnumActionResult.FAIL; } else { if (!worldIn.isRemote) { EntityEnderCrystal entityendercrystal = new EntityEnderCrystal(worldIn, (double)((float)pos.getX() + 0.5F), (double)(pos.getY() + 1), (double)((float)pos.getZ() + 0.5F)); entityendercrystal.setShowBottom(false); worldIn.spawnEntity(entityendercrystal); if (worldIn.provider instanceof WorldProviderEnd) { DragonFightManager dragonfightmanager = ((WorldProviderEnd)worldIn.provider).getDragonFightManager(); dragonfightmanager.respawnDragon(); } } itemstack.shrink(1); return EnumActionResult.SUCCESS; } } } } } /** * Returns true if this item has an enchantment glint. By default, this returns * stack.isItemEnchanted(), but other items can override it (for instance, written books always return * true). * * Note that if you override this method, you generally want to also call the super version (on {@link Item}) to get * the glint for enchanted items. Of course, that is unnecessary if the overwritten version always returns true. */ @SideOnly(Side.CLIENT) public boolean hasEffect(ItemStack stack) { return true; } }