106 lines
4.2 KiB
Java
106 lines
4.2 KiB
Java
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<Entity> 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
|
|
* <code>stack.isItemEnchanted()</code>, 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;
|
|
}
|
|
} |