BiomesOPlenty/common/biomesoplenty/items/ItemBOPScythe.java

408 lines
12 KiB
Java

package biomesoplenty.items;
import net.minecraft.block.Block;
import net.minecraft.block.BlockFlower;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.EnumToolMaterial;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import biomesoplenty.BiomesOPlenty;
import biomesoplenty.api.Blocks;
import biomesoplenty.api.Items;
import biomesoplenty.configuration.BOPItems;
public class ItemBOPScythe extends Item
{
public int textureID = 0;
public int damageVsEntity;
protected EnumToolMaterial toolMaterial;
public ItemBOPScythe(int id, int damage, EnumToolMaterial enumtoolmat, int texture)
{
super(id);
this.toolMaterial = enumtoolmat;
this.maxStackSize = 1;
this.setMaxDamage(enumtoolmat.getMaxUses());
textureID = texture;
this.damageVsEntity = (int) (damage + enumtoolmat.getDamageVsEntity());
setCreativeTab(BiomesOPlenty.tabBiomesOPlenty);
}
@Override
public boolean onBlockDestroyed(ItemStack itemstack, World world, int meta, int x, int y, int z, EntityLivingBase entity)
{
Block block = Block.blocksList[world.getBlockId(x, y, z)];
int radius = 1;
int height = 3;
if (toolMaterial == EnumToolMaterial.IRON || toolMaterial == EnumToolMaterial.GOLD)
{
if (block != null)
{
if (block.isLeaves(world, x, y, z))
height = 2;
}
radius = 2;
}
else if (toolMaterial == EnumToolMaterial.EMERALD)
{
if (block != null)
{
if (block.isLeaves(world, x, y, z))
height = 3;
}
radius = 3;
}
else if (toolMaterial == BOPItems.EnumToolMaterialAmethyst)
{
if (block != null)
{
if (block.isLeaves(world, x, y, z))
height = 4;
}
radius = 4;
}
else
{
if (block != null)
{
if (block.isLeaves(world, x, y, z))
height = 0;
}
}
if (block != null)
{
if (block.isLeaves(world, x, y, z))
{
if (height > 0)
{
trimLeaves(itemstack, entity, world, x, y, z, height, radius);
return true;
}
}
else
{
trimCutCorner(itemstack, entity, world, x, y, z, height, radius);
if (world.rand.nextInt(3) == 0)
{
trim(itemstack, entity, world, x, y, z, height, radius - 1);
return true;
}
}
}
return false;
}
public void trim(ItemStack stack, EntityLivingBase entity, World world, int x, int y, int z, int height, int radius)
{
for (int aX = -radius; aX <= radius; aX++)
{
for (int aY = 0; aY <= radius; aY++)
{
for (int aZ = -radius; aZ <= radius; aZ++)
{
Block block = Block.blocksList[world.getBlockId(x + aX, y + aY, z + aZ)];
int meta = world.getBlockMetadata(x + aX, y + aY, z + aZ);
if (block != null)
{
if (toolMaterial == EnumToolMaterial.IRON || toolMaterial == EnumToolMaterial.GOLD)
{
if (world.rand.nextInt(7) == 0)
{
stack.damageItem(1, entity);
}
}
else if (toolMaterial == EnumToolMaterial.EMERALD)
{
if (world.rand.nextInt(8) == 0)
{
stack.damageItem(1, entity);
}
}
else if (toolMaterial == BOPItems.EnumToolMaterialAmethyst)
{
if (world.rand.nextInt(9) == 0)
{
stack.damageItem(1, entity);
}
}
else if (world.rand.nextInt(5) == 0)
{
stack.damageItem(1, entity);
}
if (block.blockID == Blocks.foliage.get().blockID && (meta == 1 || meta == 2 || meta == 6))
{
if (meta == 1)
{
block.dropBlockAsItem(world, x + aX, y + aY, z + aZ, meta, 0);
world.setBlockToAir(x + aX, y + aY, z + aZ);
}
else if (meta == 2)
{
block.dropBlockAsItem(world, x + aX, y + aY, z + aZ, meta, 0);
world.setBlock(x + aX, y + aY, z + aZ, Blocks.foliage.get().blockID, 1, 2);
}
else if (meta == 6)
{
block.dropBlockAsItem(world, x + aX, y + aY, z + aZ, meta, 0);
world.setBlockToAir(x + aX, y + aY, z + aZ);
}
}
else if (block.blockID == Block.tallGrass.blockID)
{
block.dropBlockAsItem(world, x + aX, y + aY, z + aZ, meta, 0);
world.setBlock(x + aX, y + aY, z + aZ, Blocks.foliage.get().blockID, 2, 2);
}
else if (block.blockID != Block.waterlily.blockID && block instanceof BlockFlower)
{
System.out.println(block.getBlockDropped(world, x + aX, y + aY, z + aZ, meta, 1));
block.dropBlockAsItem(world, x + aX, y + aY, z + aZ, meta, 0);
world.setBlockToAir(x + aX, y + aY, z + aZ);
}
}
}
}
}
}
public void trimLeaves(ItemStack stack, EntityLivingBase entity, World world, int x, int y, int z, int height, int radius)
{
for (int aX = -radius; aX <= radius; aX++)
{
for (int aY = -radius; aY <= radius; aY++)
{
for (int aZ = -radius; aZ <= radius; aZ++)
{
Block block = Block.blocksList[world.getBlockId(x + aX, y + aY, z + aZ)];
int meta = world.getBlockMetadata(x + aX, y + aY, z + aZ);
if (block != null)
{
if (block.isLeaves(world, x + aX, y + aY, z + aZ))
{
if (toolMaterial == EnumToolMaterial.IRON || toolMaterial == EnumToolMaterial.GOLD)
{
if (world.rand.nextInt(6) == 0)
{
stack.damageItem(1, entity);
}
}
else if (toolMaterial == EnumToolMaterial.EMERALD)
{
if (world.rand.nextInt(7) == 0)
{
stack.damageItem(1, entity);
}
}
else if (toolMaterial == BOPItems.EnumToolMaterialAmethyst)
{
if (world.rand.nextInt(8) == 0)
{
stack.damageItem(1, entity);
}
}
else if (world.rand.nextInt(4) == 0)
{
stack.damageItem(1, entity);
}
block.dropBlockAsItem(world, x + aX, y + aY, z + aZ, meta, 0);
world.setBlockToAir(x + aX, y + aY, z + aZ);
}
}
}
}
}
}
public void trimCutCorner(ItemStack stack, EntityLivingBase entity, World world, int x, int y, int z, int height, int radius)
{
for (int aX = -radius; aX <= radius; aX++)
{
for (int aY = 0; aY <= radius; aY++)
{
for (int aZ = -radius; aZ <= radius; aZ++)
{
if ((aX + aZ < radius * 2) && (-aX + aZ < radius * 2) && (aX + -aZ < radius * 2) && (-aX + -aZ < radius * 2))
{
Block block = Block.blocksList[world.getBlockId(x + aX, y + aY, z + aZ)];
int meta = world.getBlockMetadata(x + aX, y + aY, z + aZ);
if (block != null)
{
if (toolMaterial == EnumToolMaterial.IRON || toolMaterial == EnumToolMaterial.GOLD)
{
if (world.rand.nextInt(8) == 0)
{
stack.damageItem(1, entity);
}
}
else if (toolMaterial == EnumToolMaterial.EMERALD)
{
if (world.rand.nextInt(9) == 0)
{
stack.damageItem(1, entity);
}
}
else if (toolMaterial == BOPItems.EnumToolMaterialAmethyst)
{
if (world.rand.nextInt(10) == 0)
{
stack.damageItem(1, entity);
}
}
else if (world.rand.nextInt(5) == 0)
{
stack.damageItem(1, entity);
}
if (block.blockID == Blocks.foliage.get().blockID && (meta == 1 || meta == 2 || meta == 6))
{
if (meta == 1)
{
block.dropBlockAsItem(world, x + aX, y + aY, z + aZ, meta, 0);
world.setBlockToAir(x + aX, y + aY, z + aZ);
}
else if (meta == 2)
{
block.dropBlockAsItem(world, x + aX, y + aY, z + aZ, meta, 0);
world.setBlock(x + aX, y + aY, z + aZ, Blocks.foliage.get().blockID, 1, 2);
}
else if (meta == 6)
{
block.dropBlockAsItem(world, x + aX, y + aY, z + aZ, meta, 0);
world.setBlockToAir(x + aX, y + aY, z + aZ);
}
}
else if (block.blockID == Block.tallGrass.blockID)
{
block.dropBlockAsItem(world, x + aX, y + aY, z + aZ, meta, 0);
world.setBlock(x + aX, y + aY, z + aZ, Blocks.foliage.get().blockID, 2, 2);
}
else if (block.blockID != Block.waterlily.blockID && block instanceof BlockFlower)
{
block.dropBlockAsItem(world, x + aX, y + aY, z + aZ, meta, 0);
world.setBlockToAir(x + aX, y + aY, z + aZ);
}
}
}
}
}
}
}
@Override
public float getStrVsBlock(ItemStack par1ItemStack, Block par2Block)
{
float strength = 0;
if (Blocks.shearBlockIds.get(par2Block.blockID) != null)
{
strength = Float.parseFloat(Blocks.shearBlockIds.get(par2Block.blockID).toString());
}
else
{
strength = super.getStrVsBlock(par1ItemStack, par2Block);
}
return strength;
}
@Override
public int getItemEnchantability()
{
return this.toolMaterial.getEnchantability();
}
@Override
public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack)
{
if (textureID == 0 && par2ItemStack.itemID == Block.wood.blockID)
{
return true;
}
if (textureID == 1 && par2ItemStack.itemID == Block.cobblestone.blockID)
{
return true;
}
if (textureID == 2 && par2ItemStack.itemID == Item.ingotIron.itemID)
{
return true;
}
if (textureID == 3 && par2ItemStack.itemID == Item.ingotGold.itemID)
{
return true;
}
if (textureID == 4 && par2ItemStack.itemID == Item.diamond.itemID)
{
return true;
}
if (textureID == 6 && par2ItemStack.itemID == Items.miscItems.get().itemID && par2ItemStack.getItemDamage() == 2)
{
return true;
}
else
{
return false;
}
}
@Override
public boolean isFull3D()
{
return true;
}
@Override
public void registerIcons(IconRegister iconRegister)
{
if (textureID == 0)
{
itemIcon = iconRegister.registerIcon("biomesoplenty:woodscythe");
}
else if (textureID == 1)
{
itemIcon = iconRegister.registerIcon("biomesoplenty:stonescythe");
}
else if (textureID == 2)
{
itemIcon = iconRegister.registerIcon("biomesoplenty:ironscythe");
}
else if (textureID == 3)
{
itemIcon = iconRegister.registerIcon("biomesoplenty:goldscythe");
}
else if (textureID == 4)
{
itemIcon = iconRegister.registerIcon("biomesoplenty:diamondscythe");
}
else if (textureID == 5)
{
itemIcon = iconRegister.registerIcon("biomesoplenty:mudscythe");
}
else if (textureID == 6)
{
itemIcon = iconRegister.registerIcon("biomesoplenty:amethystscythe");
}
else
{
itemIcon = iconRegister.registerIcon("biomesoplenty:mudball");
}
}
}