public AoeToolCore(PartMaterialType... requiredComponents) { super(requiredComponents); addCategory(Category.AOE); }
@Override public void afterBlockBreak(ItemStack stack, World world, IBlockState state, BlockPos pos, EntityLivingBase player, int damage, boolean wasEffective) { // breaking leaves does not reduce durability if(state.getBlock().isLeaves(state, world, pos)) { damage = 0; } super.afterBlockBreak(stack, world, state, pos, player, damage, wasEffective); }
@Override public boolean dealDamage(ItemStack stack, EntityLivingBase player, Entity entity, float damage) { boolean hit = super.dealDamage(stack, player, entity, damage); if(hit && readyForSpecialAttack(player)) { TinkerTools.proxy.spawnAttackParticle(Particles.LUMBERAXE_ATTACK, player, 0.8d); } return hit; }
@Override public int getHarvestLevel(ItemStack stack, String toolClass, @Nullable EntityPlayer player, @Nullable IBlockState blockState) { if(StringUtils.isNullOrEmpty(toolClass)) { return -1; } // axe harvestlevel if(toolClass.equals("axe")) { return getAxeLevel(stack); } // shovel harvestlevel else if(toolClass.equals("shovel")) { return getShovelLevel(stack); } // none of them return super.getHarvestLevel(stack, toolClass, player, blockState); }
@Override public boolean onBlockStartBreak(ItemStack itemstack, BlockPos pos, EntityPlayer player) { if(!ToolHelper.isBroken(itemstack) && ToolHelper.isToolEffective2(itemstack, player.getEntityWorld().getBlockState(pos)) && detectTree(player.getEntityWorld(), pos)) { return fellTree(itemstack, pos, player); } return super.onBlockStartBreak(itemstack, pos, player); }
@Override public boolean dealDamage(ItemStack stack, EntityLivingBase player, Entity entity, float damage) { boolean hit = super.dealDamage(stack, player, entity, damage); if(hit && readyForSpecialAttack(player)) { TinkerTools.proxy.spawnAttackParticle(Particles.HATCHET_ATTACK, player, 0.8d); } // vanilla axe shieldbreak attack. See EntityPlayer#attackTargetEntityWithCurrentItem() if(hit && !ToolHelper.isBroken(stack) && !player.getEntityWorld().isRemote && entity instanceof EntityPlayer) { EntityPlayer entityplayer = (EntityPlayer) entity; ItemStack itemstack2 = player.getHeldItemMainhand(); ItemStack itemstack3 = entityplayer.isHandActive() ? entityplayer.getActiveItemStack() : ItemStack.EMPTY; // todo: possibly check for itemUseAction instead of is shield? if(itemstack2.getItem() == this && itemstack3.getItem() == Items.SHIELD) { float f3 = 0.25F + (float) EnchantmentHelper.getEfficiencyModifier(player) * 0.05F; if(player.isSprinting()) { f3 += 0.75F; } if(player.getRNG().nextFloat() < f3) { entityplayer.getCooldownTracker().setCooldown(Items.SHIELD, 100); player.getEntityWorld().setEntityState(entityplayer, (byte) 30); } } } return hit; }