/** * Check for Bleed effect. * * @param defender The defending entity */ public void bleedCheck(LivingEntity defender) { if (player == null) return; if (!Permissions.swordsBleed(player)) { return; } if (Combat.shouldBeAffected(player, defender)) { BleedEventHandler eventHandler = new BleedEventHandler(this, defender); int randomChance = 100; if (Permissions.luckySwords(player)) { randomChance = (int) (randomChance * 0.75); } float chance = (float) (((double) Swords.BLEED_CHANCE_MAX / (double) Swords.BLEED_MAX_BONUS_LEVEL) * skillLevel); if (chance > Swords.BLEED_CHANCE_MAX) chance = Swords.BLEED_CHANCE_MAX; if (chance > Misc.getRandom().nextInt(randomChance)) { eventHandler.addBleedTicks(); eventHandler.sendAbilityMessages(); } } }
/** * Check for Bleed effect. * * @param defender The defending entity */ public void bleedCheck(LivingEntity defender) { if (!permissionsInstance.swordsBleed(player)) { return; } if (Combat.shouldBeAffected(player, defender)) { BleedEventHandler eventHandler = new BleedEventHandler(this, defender); int randomChance = 1000; if (player.hasPermission("mcmmo.perks.lucky.swords")) { randomChance = (int) (randomChance * 0.75); } if (Swords.getRandom().nextInt(randomChance) < eventHandler.skillModifier) { eventHandler.addBleedTicks(); eventHandler.sendAbilityMessages(); } } }
/** * Handles removing & dropping the blocks from Tree Feller. * * @param toBeFelled List of Blocks to be removed from the tree * @param player The player using the ability * @param profile The PlayerProfile of the player */ private static void removeBlocks( ArrayList<Block> toBeFelled, Player player, PlayerProfile profile) { if (toBeFelled.size() >= Config.getInstance().getTreeFellerThreshold()) { player.sendMessage(LocaleLoader.getString("Woodcutting.Skills.TreeFellerThreshold")); return; } int xp = 0; ItemStack inHand = player.getItemInHand(); int level = 0; if (inHand.containsEnchantment(Enchantment.DURABILITY)) { level = inHand.getEnchantmentLevel(Enchantment.DURABILITY); } int durabilityLoss = durabilityLossCalulate(toBeFelled, level); /* This is to prevent using wood axes everytime you tree fell */ if (ModChecks.isCustomTool(inHand)) { if (inHand.getDurability() + durabilityLoss >= ModChecks.getToolFromItemStack(inHand).getDurability()) { player.sendMessage(LocaleLoader.getString("Woodcutting.Skills.TreeFeller.Splinter")); int health = player.getHealth(); if (health >= 2) { Combat.dealDamage(player, random.nextInt(health - 1)); } inHand.setDurability((short) (inHand.getType().getMaxDurability())); return; } } else if ((inHand.getDurability() + durabilityLoss >= inHand.getType().getMaxDurability()) || inHand.getType().equals(Material.AIR)) { player.sendMessage(LocaleLoader.getString("Woodcutting.Skills.TreeFeller.Splinter")); int health = player.getHealth(); if (health >= 2) { Combat.dealDamage(player, random.nextInt(health - 1)); } inHand.setDurability((short) (inHand.getType().getMaxDurability())); return; } /* Damage the tool */ inHand.setDurability((short) (inHand.getDurability() + durabilityLoss)); // Prepare ItemStacks ItemStack item = null; ItemStack oak = (new MaterialData(Material.LOG, TreeSpecies.GENERIC.getData())).toItemStack(1); ItemStack spruce = (new MaterialData(Material.LOG, TreeSpecies.REDWOOD.getData())).toItemStack(1); ItemStack birch = (new MaterialData(Material.LOG, TreeSpecies.BIRCH.getData())).toItemStack(1); ItemStack jungle = (new MaterialData(Material.LOG, TreeSpecies.JUNGLE.getData())).toItemStack(1); for (Block x : toBeFelled) { if (Misc.blockBreakSimulate(x, player, true)) { if (Config.getInstance().getBlockModsEnabled() && ModChecks.isCustomLogBlock(x)) { if (ModChecks.isCustomLogBlock(x)) { CustomBlock block = ModChecks.getCustomBlock(x); item = block.getItemDrop(); if (!mcMMO.placeStore.isTrue(x)) { WoodCutting.woodCuttingProcCheck(player, x); xp = block.getXpGain(); } /* Remove the block */ x.setData((byte) 0x0); x.setType(Material.AIR); int minimumDropAmount = block.getMinimumDropAmount(); int maximumDropAmount = block.getMaximumDropAmount(); item = block.getItemDrop(); if (minimumDropAmount != maximumDropAmount) { Misc.dropItems(x.getLocation(), item, minimumDropAmount); Misc.randomDropItems( x.getLocation(), item, 50, maximumDropAmount - minimumDropAmount); } else { Misc.dropItems(x.getLocation(), item, minimumDropAmount); } } else if (ModChecks.isCustomLeafBlock(x)) { CustomBlock block = ModChecks.getCustomBlock(x); item = block.getItemDrop(); final int SAPLING_DROP_CHANCE = 10; /* Remove the block */ x.setData((byte) 0x0); x.setType(Material.AIR); Misc.randomDropItem(x.getLocation(), item, SAPLING_DROP_CHANCE); } } else if (x.getType() == Material.LOG) { Tree tree = (Tree) x.getState().getData(); TreeSpecies species = tree.getSpecies(); switch (species) { case GENERIC: item = oak; break; case REDWOOD: item = spruce; break; case BIRCH: item = birch; break; case JUNGLE: item = jungle; break; default: break; } if (!mcMMO.placeStore.isTrue(x)) { WoodCutting.woodCuttingProcCheck(player, x); switch (species) { case GENERIC: xp += Config.getInstance().getWoodcuttingXPOak(); break; case REDWOOD: xp += Config.getInstance().getWoodcuttingXPSpruce(); break; case BIRCH: xp += Config.getInstance().getWoodcuttingXPBirch(); break; case JUNGLE: xp += Config.getInstance().getWoodcuttingXPJungle() / 2; // Nerf XP from Jungle Trees when using Tree Feller break; default: break; } } /* Remove the block */ x.setData((byte) 0x0); x.setType(Material.AIR); /* Drop the block */ Misc.dropItem(x.getLocation(), item); } else if (x.getType() == Material.LEAVES) { final int SAPLING_DROP_CHANCE = 10; // Drop the right type of sapling item = (new MaterialData(Material.SAPLING, (byte) (x.getData() & 3))).toItemStack(1); Misc.randomDropItem(x.getLocation(), item, SAPLING_DROP_CHANCE); // Remove the block x.setData((byte) 0); x.setType(Material.AIR); } } } if (Permissions.getInstance().woodcutting(player)) { Skills.xpProcessing(player, profile, SkillType.WOODCUTTING, xp); } }