package net.geforcemods.securitycraft.items; import java.util.HashSet; import com.google.common.collect.Sets; import net.geforcemods.securitycraft.api.IOwnable; import net.geforcemods.securitycraft.gui.GuiHandler; import net.geforcemods.securitycraft.main.mod_SecurityCraft; import net.minecraft.block.Block; import net.minecraft.block.BlockDirt; import net.minecraft.block.BlockGlass; import net.minecraft.block.BlockGrass; import net.minecraft.block.BlockPlanks; import net.minecraft.block.BlockSandStone; import net.minecraft.block.BlockStone; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemTool; import net.minecraft.util.BlockPos; import net.minecraft.world.World; public class ItemUniversalBlockReinforcer extends ItemTool { public ItemUniversalBlockReinforcer(int damage) { super(2.0F, ToolMaterial.GOLD, getBreakableBlocks()); setMaxDamage(damage); } @Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { if(!world.isRemote) player.openGui(mod_SecurityCraft.MODID, GuiHandler.BLOCK_REINFORCER, world, (int)player.posX, (int)player.posY, (int)player.posZ); return super.onItemRightClick(stack, world, player); } @Override public boolean onBlockStartBreak(ItemStack stack, BlockPos pos, EntityPlayer player) { if(!player.capabilities.isCreativeMode) { World world = player.getEntityWorld(); Block block = world.getBlockState(pos).getBlock(); if(block instanceof BlockDirt || block instanceof BlockGrass) world.setBlockState(pos, mod_SecurityCraft.reinforcedDirt.getDefaultState()); else if(block instanceof BlockStone) world.setBlockState(pos, mod_SecurityCraft.reinforcedStone.getDefaultState()); else if(block instanceof BlockPlanks) world.setBlockState(pos, mod_SecurityCraft.reinforcedWoodPlanks.getStateFromMeta(block.getDamageValue(world, pos)), 2); else if(block instanceof BlockGlass) world.setBlockState(pos, mod_SecurityCraft.reinforcedGlass.getDefaultState()); else if(block.getUnlocalizedName().equals(Blocks.glass_pane.getUnlocalizedName())) //glass panes and iron bars share the same class world.setBlockState(pos, mod_SecurityCraft.reinforcedGlassPane.getDefaultState()); else if(block.getUnlocalizedName().equals(Blocks.cobblestone.getUnlocalizedName())) //cobblestone doesn't have its own class world.setBlockState(pos, mod_SecurityCraft.reinforcedCobblestone.getDefaultState()); else if(block.getUnlocalizedName().equals(Blocks.iron_bars.getUnlocalizedName())) //glass panes and iron bars share the same class world.setBlockState(pos, mod_SecurityCraft.unbreakableIronBars.getDefaultState()); else if(block instanceof BlockSandStone) world.setBlockState(pos, mod_SecurityCraft.reinforcedSandstone.getStateFromMeta(block.getDamageValue(world, pos)), 2); else { world.destroyBlock(pos, true); //destroy the block without the ubr taking damage return true; } //the following only happens if a block has been changed, as the else statement terminates in itself ((IOwnable)world.getTileEntity(pos)).getOwner().set(player.getGameProfile().getId().toString(), player.getName()); stack.damageItem(1, player); return true; } return false; } private static HashSet<Block> getBreakableBlocks() { return Sets.newHashSet(new Block[]{ Blocks.dirt, Blocks.grass, Blocks.stone, Blocks.planks, Blocks.glass, Blocks.glass_pane, Blocks.cobblestone, Blocks.iron_bars, Blocks.sandstone }); } }