package minestrapteam.mods.minestrappolation.item; import minestrapteam.mods.minestrappolation.Minestrappolation; import minestrapteam.mods.minestrappolation.lib.MAchievements; import minestrapteam.mods.minestrappolation.lib.MBlocks; import minestrapteam.mods.minestrappolation.util.Chance; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.world.World; import net.minecraftforge.common.util.FakePlayer; public class ItemSifter extends Item { public Boolean isReusable; public Item base; public ItemSifter(int durability, boolean reusable) { this.maxStackSize = 1; this.setMaxDamage(durability); this.isDamageable(); this.setCreativeTab(Minestrappolation.tabMTools); this.isReusable = reusable; } public ItemSifter(int durability, boolean reusable, Item base) { this.maxStackSize = 1; this.setMaxDamage(durability); this.isDamageable(); this.setCreativeTab(Minestrappolation.tabMTools); this.isReusable = reusable; this.base = base; } @Override public boolean onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ) { if (worldIn.getBlockState(pos) == Blocks.sand.getStateFromMeta(0)) { this.spawnDropFrom(stack, playerIn, worldIn, pos, "sifter_sand"); playerIn.addStat(MAchievements.sifter, 1); } else if (worldIn.getBlockState(pos) == Blocks.sand.getStateFromMeta(1)) { this.spawnDropFrom(stack, playerIn, worldIn, pos, "sifter_red_sand"); } else if (worldIn.getBlockState(pos).getBlock() == Blocks.clay) { this.spawnDropFrom(stack, playerIn, worldIn, pos, "sifter_clay"); } else if (worldIn.getBlockState(pos).getBlock() == MBlocks.mud) { this.spawnDropFrom(stack, playerIn, worldIn, pos, "sifter_mud"); } else if (worldIn.getBlockState(pos).getBlock() == MBlocks.rubble) { this.spawnDropFrom(stack, playerIn, worldIn, pos, "sifter_rubble"); } else if (worldIn.getBlockState(pos).getBlock() == Blocks.gravel) { this.spawnDropFrom(stack, playerIn, worldIn, pos, "sifter_gravel"); } else if (worldIn.getBlockState(pos) == Blocks.dirt.getStateFromMeta(0) || worldIn.getBlockState(pos) == Blocks.dirt.getStateFromMeta(1) || worldIn.getBlockState(pos).getBlock() == Blocks.grass) { this.spawnDropFrom(stack, playerIn, worldIn, pos, "sifter_dirt"); } else if (worldIn.getBlockState(pos) == Blocks.dirt.getStateFromMeta(2)) { this.spawnDropFrom(stack, playerIn, worldIn, pos, "sifter_podzol"); } else if (worldIn.getBlockState(pos).getBlock() == Blocks.mycelium) { this.spawnDropFrom(stack, playerIn, worldIn, pos, "sifter_mycelium"); } else if (worldIn.getBlockState(pos).getBlock() == MBlocks.dirt_permafrost || worldIn.getBlockState(pos).getBlock() == MBlocks.lichen_permafrost) { this.spawnDropFrom(stack, playerIn, worldIn, pos, "sifter_permafrost"); } else if (worldIn.getBlockState(pos).getBlock() == MBlocks.cold_sand) { this.spawnDropFrom(stack, playerIn, worldIn, pos, "sifter_cold_sand"); } else if (worldIn.getBlockState(pos).getBlock() == Blocks.soul_sand) { this.spawnDropFrom(stack, playerIn, worldIn, pos, "sifter_soul_sand"); } else if (worldIn.getBlockState(pos) == MBlocks.virtian_soil.getStateFromMeta(0) || worldIn.getBlockState(pos) == MBlocks.virtian_soil.getStateFromMeta(1) || worldIn.getBlockState(pos).getBlock() == MBlocks.virtian_grass) { this.spawnDropFrom(stack, playerIn, worldIn, pos, "sifter_virtian_soil"); } else if (worldIn.getBlockState(pos) == MBlocks.virtian_soil.getStateFromMeta(2)) { this.spawnDropFrom(stack, playerIn, worldIn, pos, "sifter_viartian_ash"); } return true; } private void spawnDropFrom(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, String table) { worldIn.destroyBlock(pos, false); ItemStack drop = (ItemStack) Chance.getRandomFromTable(table); if (drop != null) { drop.stackSize = 1; if (!worldIn.isRemote) { EntityItem ei = new EntityItem(worldIn, playerIn.posX, playerIn.posY, playerIn.posZ, drop); worldIn.spawnEntityInWorld(ei); if (playerIn instanceof FakePlayer) ei.onCollideWithPlayer(playerIn); } } if (this.isReusable == false) { stack.damageItem(1, playerIn); } else if (this.isReusable == true) { if (stack.getItemDamage() == stack.getMaxDamage()) { stack.setItem(this.base); stack.setItemDamage(0); } else { stack.damageItem(1, playerIn); } } } }