package minefantasy.mf2.block.crafting; import java.util.Random; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import minefantasy.mf2.MineFantasyII; import minefantasy.mf2.api.helpers.CustomToolHelper; import minefantasy.mf2.block.tileentity.TileEntityAnvilMF; import minefantasy.mf2.item.list.CreativeTabMF; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.world.World; public class BlockRepairKit extends Block { protected float repairLevel; protected float successRate; protected float breakChance; protected IIcon top, side, bottom; private String type; protected boolean isOrnate = false; protected float repairLevelEnchant = 0.0F; public BlockRepairKit(String name, float repairLevel, float rate, float breakChance) { super(Material.cloth); this.repairLevel = repairLevel; this.successRate = rate; this.breakChance = breakChance; this.type=name; setBlockBounds(1F/16F, 0F, 1F/16F, 15F/16F, 6F/16F, 15F/16F); this.setBlockTextureName("minefantasy2:processor/"+"repair_"+name+"+top"); name = "repair_"+name; GameRegistry.registerBlock(this, ItemBlockRepairKit.class, name); setBlockName(name); this.setStepSound(Block.soundTypeCloth); this.setHardness(1F); this.setResistance(0F); this.setLightOpacity(0); this.setCreativeTab(CreativeTabMF.tabGadget); } public BlockRepairKit setOrnate(float enc) { repairLevelEnchant = enc; isOrnate = true; return this; } @SideOnly(Side.CLIENT) @Override public IIcon getIcon(int side, int meta) { return side == 1 ? this.top : (side == 0 ? this.bottom : this.side); } @SideOnly(Side.CLIENT) @Override public void registerBlockIcons(IIconRegister reg) { this.side = reg.registerIcon("minefantasy2:processor/repair_"+ type + "_side"); this.top = reg.registerIcon("minefantasy2:processor/repair_"+ type + "_top"); this.bottom = reg.registerIcon("minefantasy2:processor/repair_"+ type + "_base"); } @Override public boolean renderAsNormalBlock() { return false; } @Override public boolean isOpaqueCube() { return false; } private Random rand = new Random(); @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer user, int side, float xOffset, float yOffset, float zOffset) { if(world.isRemote) { return true; } ItemStack held = user.getHeldItem(); //held.getItem().isRepairable() Was used but new MF tools disable this to avoid vanilla repairs if(held != null && canRepair(held) && (!held.isItemEnchanted() || isOrnate)) { if(rand.nextFloat() < successRate) { boolean broken = rand.nextFloat() < breakChance; float lvl = held.isItemEnchanted() ? repairLevelEnchant : repairLevel; int repairAmount = (int)((float)held.getMaxDamage()*lvl); held.setItemDamage(Math.max(0, held.getItemDamage() - repairAmount)); world.playAuxSFX(broken ? 1020 : 1021, x, y, z, 0); if(broken) { world.playSoundEffect(x+0.5D, y+0.3D, z+0.5D, "random.break", 1.0F, 1.0F); world.setBlockToAir(x, y, z); } return true; } else { world.playSoundEffect(x+0.5D, y+0.3D, z+0.5D, "step.cloth", 0.5F, 0.5F); } return true; } return false; } private boolean canRepair(ItemStack held) { if(held == null)return false; if(held.getItem().isDamageable() && CustomToolHelper.getCustomMetalMaterial(held) != null)//Custom Tool { return held.isItemDamaged(); } return held.getItem().isRepairable(); } }