From 99e58039a2c98a247df4ad83eec69783e8a05479 Mon Sep 17 00:00:00 2001 From: GJ Date: Mon, 19 Mar 2012 22:05:17 -0400 Subject: [PATCH] MAJOR PERMISSIONS UPDATE. PLEASE CHECK PLUGIN.YML FOR DETAILS. --- Changelog.txt | 3 +- pom.xml | 2 +- src/main/java/com/gmail/nossr50/Combat.java | 84 +++-- .../gmail/nossr50/datatypes/AbilityType.java | 16 +- .../nossr50/listeners/mcBlockListener.java | 14 +- .../nossr50/listeners/mcEntityListener.java | 7 +- .../nossr50/listeners/mcPlayerListener.java | 4 +- .../java/com/gmail/nossr50/mcPermissions.java | 332 +++++++++++++++--- .../com/gmail/nossr50/skills/Acrobatics.java | 8 +- .../com/gmail/nossr50/skills/Archery.java | 3 +- .../com/gmail/nossr50/skills/BlastMining.java | 6 + .../com/gmail/nossr50/skills/Excavation.java | 75 ++-- .../com/gmail/nossr50/skills/Herbalism.java | 3 +- .../java/com/gmail/nossr50/skills/Mining.java | 3 +- .../java/com/gmail/nossr50/skills/Repair.java | 24 +- .../java/com/gmail/nossr50/skills/Swords.java | 2 +- .../java/com/gmail/nossr50/skills/Taming.java | 69 +++- .../com/gmail/nossr50/skills/Unarmed.java | 20 ++ .../com/gmail/nossr50/skills/WoodCutting.java | 3 +- src/main/resources/plugin.yml | 234 ++++++++++-- 20 files changed, 703 insertions(+), 209 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 91365a27c..7eee5a18a 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -12,8 +12,9 @@ Version 2.0.00-dev + Added ability to summon Ocelots with Call of the Wild + Added offline user functionality to mmoedit + Added bookshelves to list of blocks that don't trigger abilities. - + Added 'mcmmo.skills.repair.arcanebypass' permission node to bypass Arcane Repair and keep your enchantments + + Added 'mcmmo.repair.arcanebypass' permission node to bypass Arcane Repair and keep your enchantments + Added config option to disable Herbalism's instant wheat replanting + + Added LOTS of new permissions nodes. *CHECK PLUGIN.YML FOR UPDATES* = Fixed Green Terra not awarding Triple Drops = Fixed ClassCastException from Taming preventDamage checks = Fixed issue with Blast Mining not seeing TNT for detonation due to snow diff --git a/pom.xml b/pom.xml index dcd8ce265..92b38108f 100644 --- a/pom.xml +++ b/pom.xml @@ -110,7 +110,7 @@ fail spout-repo - http://nexus.getspout.org/content/groups/public/ + http://nexus.spout.org/content/groups/public/ diff --git a/src/main/java/com/gmail/nossr50/Combat.java b/src/main/java/com/gmail/nossr50/Combat.java index db86fc122..bbca8ae03 100644 --- a/src/main/java/com/gmail/nossr50/Combat.java +++ b/src/main/java/com/gmail/nossr50/Combat.java @@ -60,7 +60,7 @@ public class Combat { combatAbilityChecks(attacker); if (ItemChecks.isSword(itemInHand) && mcPermissions.getInstance().swords(attacker)) { - if (!mcBleedTimer.contains(target)) { + if (!mcBleedTimer.contains(target) && mcPermissions.getInstance().swordsBleed(attacker)) { Swords.bleedCheck(attacker, target, plugin); } @@ -71,9 +71,17 @@ public class Combat { startGainXp(attacker, PPa, target, SkillType.SWORDS, plugin); } else if (ItemChecks.isAxe(itemInHand) && mcPermissions.getInstance().axes(attacker)) { - Axes.axesBonus(attacker, event); - Axes.axeCriticalCheck(attacker, event); - Axes.impact(attacker, target, event); + if (mcPermissions.getInstance().axeBonus(attacker)) { + Axes.axesBonus(attacker, event); + } + + if (mcPermissions.getInstance().criticalHit(attacker)) { + Axes.axeCriticalCheck(attacker, event); + } + + if (mcPermissions.getInstance().impact(attacker)) { + Axes.impact(attacker, target, event); + } if (PPa.getSkullSplitterMode()) { applyAbilityAoE(attacker, target, damage, plugin, SkillType.AXES); @@ -82,33 +90,22 @@ public class Combat { startGainXp(attacker, PPa, target, SkillType.AXES, plugin); } else if (itemInHand.getType().equals(Material.AIR) && mcPermissions.getInstance().unarmed(attacker)) { - Unarmed.unarmedBonus(PPa, event); - - if (PPa.getBerserkMode()) { - event.setDamage(damage + (damage / 2)); + if (mcPermissions.getInstance().unarmedBonus(attacker)) { + Unarmed.unarmedBonus(PPa, event); } - if (targetType.equals(EntityType.PLAYER)) { + if (PPa.getBerserkMode() && mcPermissions.getInstance().berserk(attacker)) { + event.setDamage((int) (damage * 1.5)); + } + + if (targetType.equals(EntityType.PLAYER) && mcPermissions.getInstance().disarm(attacker)) { Unarmed.disarmProcCheck(PPa, (Player) target); } startGainXp(attacker, PPa, target, SkillType.UNARMED, plugin); } - else if (itemInHand.getType().equals(Material.BONE) && mcPermissions.getInstance().taming(attacker) && targetType.equals(EntityType.WOLF)) { - Wolf wolf = (Wolf) target; - String message = mcLocale.getString("Combat.BeastLore") + " "; - int health = wolf.getHealth(); - event.setCancelled(true); - - if (wolf.isTamed()) { - message = message.concat(mcLocale.getString("Combat.BeastLoreOwner", new Object[] {Taming.getOwnerName(wolf)}) + " "); - message = message.concat(mcLocale.getString("Combat.BeastLoreHealthWolfTamed", new Object[] {health})); - } - else { - message = message.concat(mcLocale.getString("Combat.BeastLoreHealthWolf", new Object[] {health})); - } - - attacker.sendMessage(message); + else if (itemInHand.getType().equals(Material.BONE) && mcPermissions.getInstance().beastLore(attacker)) { + Taming.beastLore(event, target, attacker); } break; @@ -120,9 +117,18 @@ public class Combat { PlayerProfile PPo = Users.getProfile(master); if (mcPermissions.getInstance().taming(master)) { - Taming.fastFoodService(PPo, wolf, event); - Taming.sharpenedClaws(PPo, event); - Taming.gore(PPo, event, master, plugin); + if (mcPermissions.getInstance().fastFoodService(master)) { + Taming.fastFoodService(PPo, wolf, event); + } + + if (mcPermissions.getInstance().sharpenedclaws(master)) { + Taming.sharpenedClaws(PPo, event); + } + + if (mcPermissions.getInstance().gore(master)) { + Taming.gore(PPo, event, master, plugin); + } + startGainXp(master, PPo, target, SkillType.TAMING, plugin); } } @@ -174,22 +180,9 @@ public class Combat { if (target instanceof Player) { Player defender = (Player) target; - PlayerProfile PPd = Users.getProfile(defender); - boolean deflect = false; if (mcPermissions.getInstance().unarmed(defender) && defender.getItemInHand().getType().equals(Material.AIR)) { - if (PPd.getSkillLevel(SkillType.UNARMED) >= 1000 && (Math.random() * 1000 <= 500)) { - deflect = true; - } - else if (Math.random() * 1000 <= (PPd.getSkillLevel(SkillType.UNARMED) / 2)) { - deflect = true; - } - - if (deflect) { - event.setCancelled(true); - defender.sendMessage(mcLocale.getString("Combat.ArrowDeflect")); - return; - } + Unarmed.deflectCheck(defender, event); } } @@ -199,8 +192,13 @@ public class Combat { int damage = event.getDamage(); if (mcPermissions.getInstance().archery(attacker) && damage > 0) { - Archery.trackArrows(pluginx, target, PPa); - Archery.ignitionCheck(target, attacker); + if (mcPermissions.getInstance().trackArrows(attacker)) { + Archery.trackArrows(pluginx, target, PPa); + } + + if (mcPermissions.getInstance().ignition(attacker)) { + Archery.ignitionCheck(target, attacker); + } startGainXp(attacker, PPa, target, SkillType.ARCHERY, pluginx); diff --git a/src/main/java/com/gmail/nossr50/datatypes/AbilityType.java b/src/main/java/com/gmail/nossr50/datatypes/AbilityType.java index 32e12d139..5c7073e5f 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/AbilityType.java +++ b/src/main/java/com/gmail/nossr50/datatypes/AbilityType.java @@ -227,31 +227,31 @@ public enum AbilityType { public boolean getPermissions(Player player) { switch (this) { case BERSERK: - return mcPermissions.getInstance().unarmedAbility(player); + return mcPermissions.getInstance().berserk(player); case BLAST_MINING: return mcPermissions.getInstance().blastMining(player); case GIGA_DRILL_BREAKER: - return mcPermissions.getInstance().excavationAbility(player); + return mcPermissions.getInstance().gigaDrillBreaker(player); case GREEN_TERRA: - return mcPermissions.getInstance().herbalismAbility(player); + return mcPermissions.getInstance().greenTerra(player); case LEAF_BLOWER: - return mcPermissions.getInstance().woodcutting(player); + return mcPermissions.getInstance().leafBlower(player); case SERRATED_STRIKES: - return mcPermissions.getInstance().swordsAbility(player); + return mcPermissions.getInstance().serratedStrikes(player); case SKULL_SPLIITER: - return mcPermissions.getInstance().axesAbility(player); + return mcPermissions.getInstance().skullSplitter(player); case SUPER_BREAKER: - return mcPermissions.getInstance().miningAbility(player); + return mcPermissions.getInstance().superBreaker(player); case TREE_FELLER: - return mcPermissions.getInstance().woodCuttingAbility(player); + return mcPermissions.getInstance().treeFeller(player); default: return false; diff --git a/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java b/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java index 73b5cb4e6..7d58a7243 100644 --- a/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java @@ -127,18 +127,18 @@ public class mcBlockListener implements Listener { * HERBALISM */ - //Green Terra - if (PP.getHoePreparationMode() && mcPermissions.getInstance().herbalismAbility(player) && ((mat.equals(Material.CROPS) && block.getData() == CropState.RIPE.getData()) || Herbalism.canBeGreenTerra(mat))) { + /* Green Terra */ + if (PP.getHoePreparationMode() && mcPermissions.getInstance().greenTerra(player) && ((mat.equals(Material.CROPS) && block.getData() == CropState.RIPE.getData()) || Herbalism.canBeGreenTerra(mat))) { Skills.abilityCheck(player, SkillType.HERBALISM); } - //Wheat && Triple drops + /* Triple drops */ if (PP.getGreenTerraMode() && Herbalism.canBeGreenTerra(mat)) { Herbalism.herbalismProcCheck(block, player, event, plugin); Herbalism.herbalismProcCheck(block, player, event, plugin); //Called twice for triple drop functionality } - if (mcPermissions.getInstance().herbalism(player) && Herbalism.canBeGreenTerra(mat)) { + if (mcPermissions.getInstance().herbalismDoubleDrops(player) && Herbalism.canBeGreenTerra(mat)) { Herbalism.herbalismProcCheck(block, player, event, plugin); } @@ -168,7 +168,7 @@ public class mcBlockListener implements Listener { } } - if (PP.getTreeFellerMode() && mcPermissions.getInstance().woodCuttingAbility(player)) { + if (PP.getTreeFellerMode() && mcPermissions.getInstance().treeFeller(player)) { WoodCutting.treeFeller(event); } @@ -213,7 +213,7 @@ public class mcBlockListener implements Listener { if (PP.getHoePreparationMode() && (Herbalism.canBeGreenTerra(mat) || Herbalism.makeMossy(mat))) { Skills.abilityCheck(player, SkillType.HERBALISM); } - else if (PP.getAxePreparationMode() && mat.equals(Material.LOG) && mcPermissions.getInstance().woodCuttingAbility(player)) { //Why are we checking the permissions here? + else if (PP.getAxePreparationMode() && mat.equals(Material.LOG) && mcPermissions.getInstance().treeFeller(player)) { //Why are we checking the permissions here? Skills.abilityCheck(player, SkillType.WOODCUTTING); } else if (PP.getPickaxePreparationMode() && Mining.canBeSuperBroken(mat)) { @@ -235,7 +235,7 @@ public class mcBlockListener implements Listener { /* * ABILITY TRIGGER CHECKS */ - if (PP.getGreenTerraMode() && mcPermissions.getInstance().herbalismAbility(player) && Herbalism.makeMossy(mat)) { + if (PP.getGreenTerraMode() && mcPermissions.getInstance().greenTerra(player) && Herbalism.makeMossy(mat)) { Herbalism.greenTerra(player, block); } else if (PP.getGigaDrillBreakerMode() && Skills.triggerCheck(player, block, AbilityType.GIGA_DRILL_BREAKER)) { diff --git a/src/main/java/com/gmail/nossr50/listeners/mcEntityListener.java b/src/main/java/com/gmail/nossr50/listeners/mcEntityListener.java index d0ed68da5..efa4f63b0 100644 --- a/src/main/java/com/gmail/nossr50/listeners/mcEntityListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/mcEntityListener.java @@ -113,7 +113,7 @@ public class mcEntityListener implements Listener { if (cause == DamageCause.FALL && mcPermissions.getInstance().acrobatics(player)) { Acrobatics.acrobaticsCheck(player, event); } - else if (cause == DamageCause.BLOCK_EXPLOSION && mcPermissions.getInstance().blastMining(player)) { + else if (cause == DamageCause.BLOCK_EXPLOSION && mcPermissions.getInstance().demolitionsExpertise(player)) { BlastMining.demolitionsExpertise(player, event); } @@ -182,7 +182,10 @@ public class mcEntityListener implements Listener { if (plugin.misc.tntTracker.containsKey(id)) { Player player = plugin.misc.tntTracker.get(id); - BlastMining.biggerBombs(player, event); + + if (mcPermissions.getInstance().biggerBombs(player)) { + BlastMining.biggerBombs(player, event); + } } } } diff --git a/src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java b/src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java index 56cf4e400..bc3a861fa 100644 --- a/src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java @@ -94,7 +94,7 @@ public class mcPlayerListener implements Listener { break; case CAUGHT_ENTITY: - if (Users.getProfile(player).getSkillLevel(SkillType.FISHING) >= 150) { + if (Users.getProfile(player).getSkillLevel(SkillType.FISHING) >= 150 && mcPermissions.getInstance().shakeMob(player)) { Fishing.shakeMob(event); } break; @@ -223,7 +223,7 @@ public class mcPlayerListener implements Listener { } /* GREEN THUMB CHECK */ - if (mcPermissions.getInstance().herbalism(player) && Herbalism.makeMossy(mat) && is.getType().equals(Material.SEEDS)) { + if (mcPermissions.getInstance().greenThumbBlocks(player) && Herbalism.makeMossy(mat) && is.getType().equals(Material.SEEDS)) { Herbalism.greenThumbBlocks(is, player, block); } diff --git a/src/main/java/com/gmail/nossr50/mcPermissions.java b/src/main/java/com/gmail/nossr50/mcPermissions.java index 7cc36a610..560797752 100644 --- a/src/main/java/com/gmail/nossr50/mcPermissions.java +++ b/src/main/java/com/gmail/nossr50/mcPermissions.java @@ -9,10 +9,34 @@ public class mcPermissions { return player.hasPermission(perm); } + public static mcPermissions getInstance() { + if (instance == null) { + instance = new mcPermissions(); + } + + return instance; + } + + /* + * GENERIC PERMISSIONS + */ + + public boolean motd(Player player) { + return player.hasPermission("mcmmo.motd"); + } + public boolean admin(Player player) { return player.hasPermission("mcmmo.admin"); } + public boolean arcaneBypass(Player player) { + return player.hasPermission(("mcmmo.repair.arcanebypass")); + } + + /* + * MCMMO.TOOLS.* + */ + public boolean mcrefresh(Player player) { return player.hasPermission("mcmmo.tools.mcrefresh"); } @@ -25,58 +49,266 @@ public class mcPermissions { return player.hasPermission("mcmmo.tools.mmoedit"); } - public boolean herbalismAbility(Player player) { - return player.hasPermission("mcmmo.ability.herbalism"); + public boolean mcgod(Player player) { + return player.hasPermission("mcmmo.tools.mcgod"); } - public boolean excavationAbility(Player player) { - return player.hasPermission("mcmmo.ability.excavation"); + /* + * MCMMO.ABILITY.TAMING.* + */ + + public boolean fastFoodService(Player player) { + return player.hasPermission("mcmmo.ability.taming.fastfoodservice"); } - public boolean unarmedAbility(Player player) { - return player.hasPermission("mcmmo.ability.unarmed"); + public boolean sharpenedclaws(Player player) { + return player.hasPermission("mcmmo.ability.taming.sharpenedclaws"); } + public boolean gore(Player player) { + return player.hasPermission("mcmmo.ability.taming.gore"); + } + + public boolean callOfTheWild(Player player) { + return player.hasPermission("mcmmo.ability.taming.callofthewild"); + } + + public boolean environmentallyAware(Player player) { + return player.hasPermission("mcmmo.ability.taming.environmentallyaware"); + } + + public boolean thickFur(Player player) { + return player.hasPermission("mcmmo.ability.taming.thickfur"); + } + + public boolean shockProof(Player player) { + return player.hasPermission("mcmmo.ability.taming.shockproof"); + } + + public boolean beastLore(Player player) { + return player.hasPermission("mcmmo.ability.taming.beastlore"); + } + + /* + * MCMMO.ABILITY.FISHING.* + */ + + public boolean shakeMob(Player player) { + return player.hasPermission("mcmmo.ability.fishing.shakemob"); + } + + /* + * MCMMO.ABILITY.MINING.* + */ + + public boolean superBreaker(Player player) { + return player.hasPermission("mcmmo.ability.mining.superbreaker"); + } + + public boolean miningDoubleDrops(Player player) { + return player.hasPermission("mcmmo.ability.mining.doubledrops"); + } + + /* + * MCMMO.ABILITY.WOODCUTTING.* + */ + + public boolean treeFeller(Player player) { + return player.hasPermission("mcmmo.ability.woodcutting.treefeller"); + } + + public boolean leafBlower(Player player) { + return player.hasPermission("mcmmo.ability.woodcutting.leafblower"); + } + + public boolean woodcuttingDoubleDrops(Player player) { + return player.hasPermission("mcmmo.ability.woodcutting.doubledrops"); + } + + /* + * MCMMO.ABILITY.REPAIR.* + */ + + public boolean repairBonus(Player player) { + return player.hasPermission("mcmmo.ability.repair.repairbonus"); + } + + public boolean arcaneForging(Player player) { + return player.hasPermission("mcmmo.ability.repair.arcaneforging"); + } + + public boolean stoneRepair(Player player) { + return player.hasPermission("mcmmo.ability.repair.stonerepair"); + } + + public boolean ironRepair(Player player) { + return player.hasPermission("mcmmo.ability.repair.ironrepair"); + } + + public boolean goldRepair(Player player) { + return player.hasPermission("mcmmo.ability.repair.goldrepair"); + } + + public boolean diamondRepair(Player player) { + return player.hasPermission("mcmmo.ability.repair.diamondrepair"); + } + + public boolean armorRepair(Player player) { + return player.hasPermission("mcmmo.ability.repair.armorrepair"); + } + + public boolean toolRepair(Player player) { + return player.hasPermission("mcmmo.ability.repair.toolrepair"); + } + + /* + * MCMMO.ABILITY.UNARMED.* + */ + + public boolean unarmedBonus(Player player) { + return player.hasPermission("mcmmo.ability.unarmed.bonusdamage"); + } + + public boolean disarm(Player player) { + return player.hasPermission("mcmmo.ability.unarmed.disarm"); + } + + public boolean berserk(Player player) { + return player.hasPermission("mcmmo.ability.unarmed.berserk"); + } + + public boolean deflect(Player player) { + return player.hasPermission("mcmmo.ability.unarmed.deflect"); + } + + /* + * MCMMO.ABILITY.ARCHERY.* + */ + + public boolean trackArrows(Player player) { + return player.hasPermission("mcmmo.ability.archery.trackarrows"); + } + + public boolean ignition(Player player) { + return player.hasPermission("mcmmo.ability.archery.ignition"); + } + + public boolean daze(Player player) { + return player.hasPermission("mcmmo.ability.archery.daze"); + } + + /* + * MCMMO.ABILITY.HERBALISM.* + */ + + public boolean herbalismDoubleDrops(Player player) { + return player.hasPermission("mcmmo.ability.herbalism.doubledrops"); + } + + public boolean greenTerra(Player player) { + return player.hasPermission("mcmmo.ability.herbalism.greenterra"); + } + + public boolean greenThumbBlocks(Player player) { + return player.hasPermission("mcmmo.ability.herbalism.greenthumbblocks"); + } + + public boolean greenThumbWheat(Player player) { + return player.hasPermission("mcmmo.ability.herbalism.greenthumbwheat"); + } + + /* + * MCMMO.ABILITY.EXCAVATION.* + */ + + public boolean gigaDrillBreaker(Player player) { + return player.hasPermission("mcmmo.ability.excavation.gigadrillbreaker"); + } + + public boolean excavationTreasures(Player player) { + return player.hasPermission("mcmmo.ability.excavation.treasures"); + } + + /* + * MCMMO.ABILITY.SWORDS.* + */ + + public boolean swordsBleed(Player player) { + return player.hasPermission("mcmmo.ability.swords.bleed"); + } + + public boolean serratedStrikes(Player player) { + return player.hasPermission("mcmmo.ability.swords.serratedstrikes"); + } + + public boolean counterAttack(Player player) { + return player.hasPermission("mcmmo.ability.swords.counterattack"); + } + + /* + * MCMMO.ABILITY.AXES.* + */ + + public boolean skullSplitter(Player player) { + return player.hasPermission("mcmmo.ability.axes.skullsplitter"); + } + + public boolean axeBonus(Player player) { + return player.hasPermission("mcmmo.ability.axes.bonusdamage"); + } + + public boolean criticalHit(Player player) { + return player.hasPermission("mcmmo.ability.axes.criticalhit"); + } + + public boolean impact(Player player) { + return player.hasPermission("mcmmo.ability.axes.impact"); + } + + /* + * MCMMO.ABILITY.ACROBATICS.* + */ + + public boolean roll(Player player) { + return player.hasPermission("mcmmo.ability.acrobatics.roll"); + } + + public boolean gracefulRoll(Player player) { + return player.hasPermission("mcmmo.ability.acrobatics.gracefulroll"); + } + + public boolean dodge(Player player) { + return player.hasPermission("mcmmo.ability.acrobatics.dodge"); + } + + /* + * MCMMO.ABILITY.BLASTMINING.* + */ + + public boolean biggerBombs(Player player) { + return player.hasPermission("mcmmo.ability.blastmining.biggerbombs"); + } + + public boolean demolitionsExpertise(Player player) { + return player.hasPermission("mcmmo.ability.blastmining.demolitionsexpertise"); + } + + /* + * MCMMO.ITEM.* + */ + public boolean chimaeraWing(Player player) { return player.hasPermission("mcmmo.item.chimaerawing"); } - public boolean miningAbility(Player player) { - return player.hasPermission("mcmmo.ability.mining"); - } - - public boolean axesAbility(Player player) { - return player.hasPermission("mcmmo.ability.axes"); - } - - public boolean swordsAbility(Player player) { - return player.hasPermission("mcmmo.ability.swords"); - } - - public boolean woodCuttingAbility(Player player) { - return player.hasPermission("mcmmo.ability.woodcutting"); - } - - public boolean mcgod(Player player) { - return player.hasPermission("mcmmo.tools.mcgod"); - } - - public boolean motd(Player player) { - return player.hasPermission("mcmmo.motd"); - } + /* + * MCMMO.COMMANDS.* + */ public boolean mcAbility(Player player) { return player.hasPermission("mcmmo.commands.ability"); } - public boolean partyChat(Player player) { - return player.hasPermission("mcmmo.chat.partychat"); - } - - public boolean partyLock(Player player) { - return player.hasPermission("mcmmo.chat.partylock"); - } - public boolean partyTeleport(Player player) { return player.hasPermission("mcmmo.commands.ptp"); } @@ -89,17 +321,25 @@ public class mcPermissions { return player.hasPermission("mcmmo.commands.party"); } + /* + * MCMMO.CHAT.* + */ + + public boolean partyChat(Player player) { + return player.hasPermission("mcmmo.chat.partychat"); + } + + public boolean partyLock(Player player) { + return player.hasPermission("mcmmo.chat.partylock"); + } + public boolean adminChat(Player player) { return player.hasPermission("mcmmo.chat.adminchat"); } - public static mcPermissions getInstance() { - if (instance == null) { - instance = new mcPermissions(); - } - - return instance; - } + /* + * MCMMO.SKILLS.* + */ public boolean taming(Player player) { return player.hasPermission("mcmmo.skills.taming"); @@ -124,10 +364,6 @@ public class mcPermissions { public boolean repair(Player player) { return player.hasPermission("mcmmo.skills.repair"); } - - public boolean repairArcaneBypass(Player player) { - return player.hasPermission(("mcmmo.skills.repair.arcanebypass")); - } public boolean unarmed(Player player) { return player.hasPermission("mcmmo.skills.unarmed"); diff --git a/src/main/java/com/gmail/nossr50/skills/Acrobatics.java b/src/main/java/com/gmail/nossr50/skills/Acrobatics.java index 0e1c81cc9..5e4638225 100644 --- a/src/main/java/com/gmail/nossr50/skills/Acrobatics.java +++ b/src/main/java/com/gmail/nossr50/skills/Acrobatics.java @@ -31,11 +31,15 @@ public class Acrobatics { int damage = event.getDamage(); int health = player.getHealth(); + if (!mcPermissions.getInstance().gracefulRoll(player)) { + gracefulRoll = false; + } + if (gracefulRoll) { acrovar = acrovar * 2; } - if (acrovar > MAX_BONUS_LEVEL || Math.random() * 1000 <= acrovar) { + if ((acrovar > MAX_BONUS_LEVEL || Math.random() * 1000 <= acrovar) && mcPermissions.getInstance().roll(player)) { int threshold = 7; if (gracefulRoll) { @@ -99,7 +103,7 @@ public class Acrobatics { int skillLevel = PPd.getSkillLevel(SkillType.ACROBATICS); int skillCheck = m.skillCheck(skillLevel, MAX_BONUS_LEVEL); - if (Math.random() * 4000 <= skillCheck) { + if (Math.random() * 4000 <= skillCheck && mcPermissions.getInstance().dodge(defender)) { defender.sendMessage(mcLocale.getString("Acrobatics.Dodge")); if (System.currentTimeMillis() >= (5000 + PPd.getRespawnATS()) && defender.getHealth() >= 1) { diff --git a/src/main/java/com/gmail/nossr50/skills/Archery.java b/src/main/java/com/gmail/nossr50/skills/Archery.java index 0fe21fcc2..4fb6a6998 100644 --- a/src/main/java/com/gmail/nossr50/skills/Archery.java +++ b/src/main/java/com/gmail/nossr50/skills/Archery.java @@ -9,6 +9,7 @@ import org.bukkit.inventory.ItemStack; import com.gmail.nossr50.Users; import com.gmail.nossr50.m; import com.gmail.nossr50.mcMMO; +import com.gmail.nossr50.mcPermissions; import com.gmail.nossr50.datatypes.PlayerProfile; import com.gmail.nossr50.datatypes.SkillType; import com.gmail.nossr50.locale.mcLocale; @@ -100,7 +101,7 @@ public class Archery { loc.setPitch(-90); } - if (Math.random() * 2000 <= skillCheck) { + if (Math.random() * 2000 <= skillCheck && mcPermissions.getInstance().daze(attacker)) { defender.teleport(loc); defender.sendMessage(mcLocale.getString("Combat.TouchedFuzzy")); attacker.sendMessage(mcLocale.getString("Combat.TargetDazed")); diff --git a/src/main/java/com/gmail/nossr50/skills/BlastMining.java b/src/main/java/com/gmail/nossr50/skills/BlastMining.java index 8713e79f5..98e11bb4a 100644 --- a/src/main/java/com/gmail/nossr50/skills/BlastMining.java +++ b/src/main/java/com/gmail/nossr50/skills/BlastMining.java @@ -233,6 +233,12 @@ public class BlastMining { event.setDamage(damage); } + /** + * Remotely detonate TNT for Blast Mining. + * + * @param player Player detonating the TNT + * @param plugin mcMMO plugin instance + */ public static void remoteDetonation(Player player, mcMMO plugin) { final byte SNOW = 78; final byte AIR = 0; diff --git a/src/main/java/com/gmail/nossr50/skills/Excavation.java b/src/main/java/com/gmail/nossr50/skills/Excavation.java index 346f310a3..115550009 100644 --- a/src/main/java/com/gmail/nossr50/skills/Excavation.java +++ b/src/main/java/com/gmail/nossr50/skills/Excavation.java @@ -14,6 +14,7 @@ import org.bukkit.event.player.PlayerAnimationEvent; import com.gmail.nossr50.spout.SpoutStuff; import com.gmail.nossr50.Users; import com.gmail.nossr50.m; +import com.gmail.nossr50.mcPermissions; import com.gmail.nossr50.config.LoadProperties; import com.gmail.nossr50.config.LoadTreasures; import com.gmail.nossr50.datatypes.PlayerProfile; @@ -61,55 +62,57 @@ public class Excavation { ArrayList is = new ArrayList(); List treasures = new ArrayList(); - + int xp = LoadProperties.mbase; - switch (type) { - case DIRT: - treasures = LoadTreasures.excavationFromDirt; - break; + if (mcPermissions.getInstance().excavationTreasures(player)) { + switch (type) { + case DIRT: + treasures = LoadTreasures.excavationFromDirt; + break; - case GRASS: - treasures = LoadTreasures.excavationFromGrass; - break; + case GRASS: + treasures = LoadTreasures.excavationFromGrass; + break; - case SAND: - treasures = LoadTreasures.excavationFromSand; - break; + case SAND: + treasures = LoadTreasures.excavationFromSand; + break; - case GRAVEL: - treasures = LoadTreasures.excavationFromGravel; - break; + case GRAVEL: + treasures = LoadTreasures.excavationFromGravel; + break; - case CLAY: - treasures = LoadTreasures.excavationFromClay; - break; + case CLAY: + treasures = LoadTreasures.excavationFromClay; + break; - case MYCEL: - treasures = LoadTreasures.excavationFromMycel; - break; + case MYCEL: + treasures = LoadTreasures.excavationFromMycel; + break; - case SOUL_SAND: - treasures = LoadTreasures.excavationFromSoulSand; - break; + case SOUL_SAND: + treasures = LoadTreasures.excavationFromSoulSand; + break; - default: - break; - } + default: + break; + } - for (ExcavationTreasure treasure : treasures) { - if (skillLevel >= treasure.getDropLevel()) { - if (Math.random() * 100 <= treasure.getDropChance()) { - xp += treasure.getXp(); - is.add(treasure.getDrop()); + for (ExcavationTreasure treasure : treasures) { + if (skillLevel >= treasure.getDropLevel()) { + if (Math.random() * 100 <= treasure.getDropChance()) { + xp += treasure.getXp(); + is.add(treasure.getDrop()); + } } } - } - //Drop items - for (ItemStack x : is) { - if (x != null) { - m.mcDropItem(loc, x); + //Drop items + for (ItemStack x : is) { + if (x != null) { + m.mcDropItem(loc, x); + } } } diff --git a/src/main/java/com/gmail/nossr50/skills/Herbalism.java b/src/main/java/com/gmail/nossr50/skills/Herbalism.java index b68c09306..4329b67a2 100644 --- a/src/main/java/com/gmail/nossr50/skills/Herbalism.java +++ b/src/main/java/com/gmail/nossr50/skills/Herbalism.java @@ -13,6 +13,7 @@ import org.bukkit.inventory.PlayerInventory; import com.gmail.nossr50.Users; import com.gmail.nossr50.m; import com.gmail.nossr50.mcMMO; +import com.gmail.nossr50.mcPermissions; import com.gmail.nossr50.config.LoadProperties; import com.gmail.nossr50.datatypes.PlayerProfile; import com.gmail.nossr50.datatypes.SkillType; @@ -150,7 +151,7 @@ public class Herbalism { mat = Material.WHEAT; xp = LoadProperties.mwheat; - if (LoadProperties.wheatRegrowth) { + if (LoadProperties.wheatRegrowth && mcPermissions.getInstance().greenThumbWheat(player)) { greenThumbWheat(block, player, event, plugin); } } diff --git a/src/main/java/com/gmail/nossr50/skills/Mining.java b/src/main/java/com/gmail/nossr50/skills/Mining.java index ff0432aa6..108e9c08a 100644 --- a/src/main/java/com/gmail/nossr50/skills/Mining.java +++ b/src/main/java/com/gmail/nossr50/skills/Mining.java @@ -13,6 +13,7 @@ import org.bukkit.event.player.PlayerAnimationEvent; import com.gmail.nossr50.Users; import com.gmail.nossr50.m; +import com.gmail.nossr50.mcPermissions; import com.gmail.nossr50.config.LoadProperties; import com.gmail.nossr50.spout.SpoutStuff; import com.gmail.nossr50.datatypes.PlayerProfile; @@ -164,7 +165,7 @@ public class Mining int skillLevel = Users.getProfile(player).getSkillLevel(SkillType.MINING); - if (MAX_BONUS_LEVEL > 1000 || (Math.random() * 1000 <= skillLevel)) { + if ((MAX_BONUS_LEVEL > 1000 || (Math.random() * 1000 <= skillLevel)) && mcPermissions.getInstance().miningDoubleDrops(player)) { if (player.getItemInHand().containsEnchantment(Enchantment.SILK_TOUCH)) { m.mcDropItem(block.getLocation(), new ItemStack(block.getType())); } diff --git a/src/main/java/com/gmail/nossr50/skills/Repair.java b/src/main/java/com/gmail/nossr50/skills/Repair.java index ed07eb8c2..d95129547 100644 --- a/src/main/java/com/gmail/nossr50/skills/Repair.java +++ b/src/main/java/com/gmail/nossr50/skills/Repair.java @@ -39,18 +39,18 @@ public class Repair { /* * REPAIR ARMOR */ - if (ItemChecks.isArmor(is) && LoadProperties.repairArmor) { - if (ItemChecks.isDiamondArmor(is) && inventory.contains(LoadProperties.rDiamond) && skillLevel >= LoadProperties.repairdiamondlevel) { + if (ItemChecks.isArmor(is) && LoadProperties.repairArmor && mcPermissions.getInstance().armorRepair(player)) { + if (ItemChecks.isDiamondArmor(is) && inventory.contains(LoadProperties.rDiamond) && skillLevel >= LoadProperties.repairdiamondlevel && mcPermissions.getInstance().diamondRepair(player)) { inventory.removeItem(new ItemStack(LoadProperties.rDiamond)); repairItem(player, is); xpHandler(player, PP, is, durabilityBefore, 6, true); } - else if (ItemChecks.isIronArmor(is) && inventory.contains(LoadProperties.rIron) && skillLevel >= LoadProperties.repairIronLevel) { + else if (ItemChecks.isIronArmor(is) && inventory.contains(LoadProperties.rIron) && skillLevel >= LoadProperties.repairIronLevel && mcPermissions.getInstance().ironRepair(player)) { inventory.removeItem(new ItemStack(LoadProperties.rIron)); repairItem(player, is); xpHandler(player, PP, is, durabilityBefore, 2, true); } - else if (ItemChecks.isGoldArmor(is) && inventory.contains(LoadProperties.rGold) && skillLevel >= LoadProperties.repairGoldLevel) { + else if (ItemChecks.isGoldArmor(is) && inventory.contains(LoadProperties.rGold) && skillLevel >= LoadProperties.repairGoldLevel && mcPermissions.getInstance().goldRepair(player)) { inventory.removeItem(new ItemStack(LoadProperties.rGold)); repairItem(player, is); xpHandler(player, PP, is, durabilityBefore, 4, true); @@ -68,8 +68,8 @@ public class Repair { /* * REPAIR TOOLS */ - else if (ItemChecks.isTool(is) && LoadProperties.repairTools) { - if (ItemChecks.isStoneTool(is) && inventory.contains(LoadProperties.rStone) && skillLevel >= LoadProperties.repairStoneLevel) { + else if (ItemChecks.isTool(is) && LoadProperties.repairTools && mcPermissions.getInstance().toolRepair(player)) { + if (ItemChecks.isStoneTool(is) && inventory.contains(LoadProperties.rStone) && skillLevel >= LoadProperties.repairStoneLevel && mcPermissions.getInstance().stoneRepair(player)) { inventory.removeItem(new ItemStack(LoadProperties.rStone)); repairItem(player, is); xpHandler(player, PP, is, durabilityBefore, 2, false); @@ -79,17 +79,17 @@ public class Repair { repairItem(player, is); xpHandler(player, PP, is, durabilityBefore, 2, false); } - else if (ItemChecks.isIronTool(is) && inventory.contains(LoadProperties.rIron) && skillLevel >= LoadProperties.repairIronLevel) { + else if (ItemChecks.isIronTool(is) && inventory.contains(LoadProperties.rIron) && skillLevel >= LoadProperties.repairIronLevel && mcPermissions.getInstance().ironRepair(player)) { inventory.removeItem(new ItemStack(LoadProperties.rIron)); repairItem(player, is); xpHandler(player, PP, is, durabilityBefore, 1, true); } - else if (ItemChecks.isDiamondTool(is) && inventory.contains(LoadProperties.rDiamond) && skillLevel >= LoadProperties.repairdiamondlevel) { + else if (ItemChecks.isDiamondTool(is) && inventory.contains(LoadProperties.rDiamond) && skillLevel >= LoadProperties.repairdiamondlevel && mcPermissions.getInstance().diamondRepair(player)) { inventory.removeItem(new ItemStack(LoadProperties.rDiamond)); repairItem(player, is); xpHandler(player, PP, is, durabilityBefore, 1, true); } - else if (ItemChecks.isGoldTool(is) && inventory.contains(LoadProperties.rGold) && skillLevel >= LoadProperties.repairGoldLevel) { + else if (ItemChecks.isGoldTool(is) && inventory.contains(LoadProperties.rGold) && skillLevel >= LoadProperties.repairGoldLevel && mcPermissions.getInstance().goldRepair(player)) { inventory.removeItem(new ItemStack(LoadProperties.rGold)); repairItem(player, is); xpHandler(player, PP, is, durabilityBefore, 8, true); @@ -188,7 +188,7 @@ public class Repair { int rank = getArcaneForgingRank(Users.getProfile(player).getSkillLevel(SkillType.REPAIR)); - if (rank == 0) { + if (rank == 0 || !mcPermissions.getInstance().arcaneForging(player)) { for (Enchantment x : enchants.keySet()) { is.removeEnchantment(x); } @@ -410,7 +410,7 @@ public class Repair { int skillLevel = Users.getProfile(player).getSkillLevel(SkillType.REPAIR); - if(skillLevel > MAX_BONUS_LEVEL || (Math.random() * 1000 <= skillLevel)) { + if ((skillLevel > MAX_BONUS_LEVEL || (Math.random() * 1000 <= skillLevel)) && mcPermissions.getInstance().repairBonus(player)) { player.sendMessage(mcLocale.getString("Skills.FeltEasy")); return true; } @@ -428,7 +428,7 @@ public class Repair { public static void repairItem(Player player, ItemStack is) { /* Handle the enchants */ - if (LoadProperties.mayLoseEnchants && !mcPermissions.getInstance().repairArcaneBypass(player)) { + if (LoadProperties.mayLoseEnchants && !mcPermissions.getInstance().arcaneBypass(player)) { addEnchants(player, is); } diff --git a/src/main/java/com/gmail/nossr50/skills/Swords.java b/src/main/java/com/gmail/nossr50/skills/Swords.java index 1621045fe..0f57089d8 100644 --- a/src/main/java/com/gmail/nossr50/skills/Swords.java +++ b/src/main/java/com/gmail/nossr50/skills/Swords.java @@ -91,7 +91,7 @@ public class Swords { Player defender = (Player) target; PlayerProfile PPd = Users.getProfile(defender); - if (ItemChecks.isSword(defender.getItemInHand()) && mcPermissions.getInstance().swords(defender)) { + if (ItemChecks.isSword(defender.getItemInHand()) && mcPermissions.getInstance().counterAttack(defender)) { final int MAX_BONUS_LEVEL = 600; final int COUNTER_ATTACK_MODIFIER = 2; diff --git a/src/main/java/com/gmail/nossr50/skills/Taming.java b/src/main/java/com/gmail/nossr50/skills/Taming.java index 707745808..b4e79dc81 100644 --- a/src/main/java/com/gmail/nossr50/skills/Taming.java +++ b/src/main/java/com/gmail/nossr50/skills/Taming.java @@ -9,6 +9,7 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.Tameable; import org.bukkit.entity.Wolf; +import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.inventory.ItemStack; @@ -17,6 +18,7 @@ import org.bukkit.metadata.FixedMetadataValue; import com.gmail.nossr50.Users; import com.gmail.nossr50.m; import com.gmail.nossr50.mcMMO; +import com.gmail.nossr50.mcPermissions; import com.gmail.nossr50.config.LoadProperties; import com.gmail.nossr50.datatypes.PlayerProfile; import com.gmail.nossr50.datatypes.SkillType; @@ -104,7 +106,7 @@ public class Taming { * @param theWolf The wolf whose owner's name to get * @return the name of the wolf's owner, or "Offline Master" if the owner is offline */ - public static String getOwnerName(Wolf theWolf) { + private static String getOwnerName(Wolf theWolf) { AnimalTamer tamer = theWolf.getOwner(); if (tamer instanceof Player) { @@ -140,41 +142,51 @@ public class Taming { case CONTACT: case LAVA: case FIRE: - if (skillLevel >= ENVIRONMENTALLY_AWARE_LEVEL) { - if (event.getDamage() >= wolf.getHealth()) { - return; - } + if (mcPermissions.getInstance().environmentallyAware(master)) { + if (skillLevel >= ENVIRONMENTALLY_AWARE_LEVEL) { + if (event.getDamage() >= wolf.getHealth()) { + return; + } - wolf.teleport(master.getLocation()); - master.sendMessage(mcLocale.getString("mcEntityListener.WolfComesBack")); + wolf.teleport(master.getLocation()); + master.sendMessage(mcLocale.getString("mcEntityListener.WolfComesBack")); + } } break; case FALL: - if (skillLevel >= ENVIRONMENTALLY_AWARE_LEVEL) { - event.setCancelled(true); + if (mcPermissions.getInstance().environmentallyAware(master)) { + if (skillLevel >= ENVIRONMENTALLY_AWARE_LEVEL) { + event.setCancelled(true); + } } break; /* Thick Fur */ case FIRE_TICK: - if(skillLevel >= THICK_FUR_LEVEL) { - wolf.setFireTicks(0); + if (mcPermissions.getInstance().thickFur(master)) { + if(skillLevel >= THICK_FUR_LEVEL) { + wolf.setFireTicks(0); + } } break; case ENTITY_ATTACK: case PROJECTILE: - if (skillLevel >= THICK_FUR_LEVEL) { - event.setDamage(event.getDamage() / THICK_FUR_MODIFIER); + if (mcPermissions.getInstance().thickFur(master)) { + if (skillLevel >= THICK_FUR_LEVEL) { + event.setDamage(event.getDamage() / THICK_FUR_MODIFIER); + } } break; /* Shock Proof */ case ENTITY_EXPLOSION: case BLOCK_EXPLOSION: - if (skillLevel >= SHOCK_PROOF_LEVEL) { - event.setDamage(event.getDamage() / SHOCK_PROOF_MODIFIER); + if (mcPermissions.getInstance().shockProof(master)) { + if (skillLevel >= SHOCK_PROOF_LEVEL) { + event.setDamage(event.getDamage() / SHOCK_PROOF_MODIFIER); + } } break; @@ -229,4 +241,31 @@ public class Taming { } } } + + /** + * Inspect a tamed animal for details. + * + * @param event + * @param target + */ + public static void beastLore(EntityDamageByEntityEvent event, LivingEntity target, Player attacker) { + + //TODO: Make this work for Ocelots + if (target.getType().equals(EntityType.WOLF)) { + Wolf wolf = (Wolf) target; + String message = mcLocale.getString("Combat.BeastLore") + " "; + int health = wolf.getHealth(); + event.setCancelled(true); + + if (wolf.isTamed()) { + message = message.concat(mcLocale.getString("Combat.BeastLoreOwner", new Object[] {getOwnerName(wolf)}) + " "); + message = message.concat(mcLocale.getString("Combat.BeastLoreHealthWolfTamed", new Object[] {health})); + } + else { + message = message.concat(mcLocale.getString("Combat.BeastLoreHealthWolf", new Object[] {health})); + } + + attacker.sendMessage(message); + } + } } diff --git a/src/main/java/com/gmail/nossr50/skills/Unarmed.java b/src/main/java/com/gmail/nossr50/skills/Unarmed.java index d4adbeb3b..beca47bbd 100644 --- a/src/main/java/com/gmail/nossr50/skills/Unarmed.java +++ b/src/main/java/com/gmail/nossr50/skills/Unarmed.java @@ -5,7 +5,9 @@ import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.inventory.ItemStack; +import com.gmail.nossr50.Users; import com.gmail.nossr50.m; +import com.gmail.nossr50.mcPermissions; import com.gmail.nossr50.datatypes.PlayerProfile; import com.gmail.nossr50.datatypes.SkillType; import com.gmail.nossr50.locale.mcLocale; @@ -54,4 +56,22 @@ public class Unarmed { } } } + + /** + * Check for arrow deflection. + * + * @param defender The defending player + * @param event The event to modify + */ + public static void deflectCheck(Player defender, EntityDamageByEntityEvent event) { + final int MAX_BONUS_LEVEL = 1000; + + int skillLevel = Users.getProfile(defender).getSkillLevel(SkillType.UNARMED); + int skillCheck = m.skillCheck(skillLevel, MAX_BONUS_LEVEL); + + if (Math.random() * 2000 <= skillCheck && mcPermissions.getInstance().deflect(defender)) { + event.setCancelled(true); + defender.sendMessage(mcLocale.getString("Combat.ArrowDeflect")); + } + } } diff --git a/src/main/java/com/gmail/nossr50/skills/WoodCutting.java b/src/main/java/com/gmail/nossr50/skills/WoodCutting.java index 5fdff27a3..f6f4a3f7f 100644 --- a/src/main/java/com/gmail/nossr50/skills/WoodCutting.java +++ b/src/main/java/com/gmail/nossr50/skills/WoodCutting.java @@ -15,6 +15,7 @@ import org.bukkit.Bukkit; import com.gmail.nossr50.Combat; import com.gmail.nossr50.Users; import com.gmail.nossr50.m; +import com.gmail.nossr50.mcPermissions; import com.gmail.nossr50.config.LoadProperties; import com.gmail.nossr50.datatypes.PlayerProfile; import com.gmail.nossr50.datatypes.SkillType; @@ -248,7 +249,7 @@ public class WoodCutting { byte type = block.getData(); Material mat = Material.getMaterial(block.getTypeId()); - if (skillLevel > MAX_SKILL_LEVEL || Math.random() * 1000 <= skillLevel) { + if ((skillLevel > MAX_SKILL_LEVEL || Math.random() * 1000 <= skillLevel) && mcPermissions.getInstance().woodcuttingDoubleDrops(player)) { ItemStack item = new ItemStack(mat, 1, (short) 0, type); m.mcDropItem(block.getLocation(), item); } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 0aec027f2..5a398309c 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -40,6 +40,7 @@ commands: description: Shows your mcMMO stats and xp mcremove: description: Remove a user from the database + permission: mcmmo.tools.mcremove mmoedit: description: Edit the skill values for a user permission: mcmmo.tools.mmoedit @@ -98,7 +99,8 @@ permissions: #Instead of containing mcmmo.defaultsop on its own, it should specify each of mcmmo.defaultsop mcmmo.admin: true mcmmo.tools.*: true - mcmmo.chat.adminchat: true + mcmmo.chat.adminchat: true + mcmmo.repair.arcanebypass: true mcmmo.defaults: default: true description: mcmmo permisions that default to true @@ -116,50 +118,228 @@ permissions: mcmmo.chat.adminchat: true mcmmo.admin: true mcmmo.tools.*: true + mcmmo.repair.arcanebypass: true mcmmo.admin: description: Allows access to mmoupdate and other sensitive commands + mcmmo.repair.arcanebypass: + description: Allows user to bypass Arcane Repair so he will never lose enchantments mcmmo.tools.*: description: Implies all mcmmo.tools permissions. children: mcmmo.tools.mcrefresh: true mcmmo.tools.mmoedit: true - mcmmo.tools.mcgod: true + mcmmo.tools.mcgod: true + mcmmo.tools.mcremove: true mcmmo.tools.mcrefresh: description: Allows access to mcrefresh command mcmmo.tools.mmoedit: description: Allows access to mmoedit command mcmmo.tools.mcgod: - description: Allows access to mcgod command + description: Allows access to mcgod command + mcmmo.tools.mcremove: + decription: Allows access to mcremove command mcmmo.ability.*: description: Implies all mcmmo.ability permissions. children: - mcmmo.ability.herbalism: true - mcmmo.ability.excavation: true - mcmmo.ability.unarmed: true - mcmmo.ability.mining: true - mcmmo.ability.axes: true - mcmmo.ability.swords: true - mcmmo.ability.woodcutting: true - mcmmo.ability.herbalism: - description: Allows access to Green Terra ability - mcmmo.ability.excavation: - description: Allows access to Giga Drill Breaker ability - mcmmo.ability.unarmed: - description: Allows access to Berserker ability - mcmmo.ability.mining: - description: Allows access to Super Breaker ability - mcmmo.ability.axes: - description: Allows access to Skull Splitter ability - mcmmo.ability.swords: - description: Allows access to Serrated Strikes ability - mcmmo.ability.woodcutting: - description: Allows access to Tree Feller ability + mcmmo.ability.taming.*: true + mcmmo.ability.fishing.*: true + mcmmo.ability.mining.*: true + mcmmo.ability.woodcutting.*: true + mcmmo.ability.repair.*: true + mcmmo.ability.unarmed.*: true + mcmmo.ability.archery.*: true + mcmmo.ability.herbalism.*: true + mcmmo.ability.excavation.*: true + mcmmo.ability.swords.*: true + mcmmo.ability.axes.*: true + mcmmo.ability.acrobatics.*: true + mcmmo.ability.blastmining.*: true + mcmmo.ability.taming.*: + description: Allows access to all Taming abilities + children: + mcmmo.ability.taming.fastfoodservice: true + mcmmo.ability.taming.sharpenedclaws: true + mcmmo.ability.taming.gore: true + mcmmo.ability.taming.callofthewild: true + mcmmo.ability.taming.environmentallyaware: true + mcmmo.ability.taming.thickfur: true + mcmmo.ability.taming.shockproof: true + mcmmo.ability.taming.beastlore: true + mcmmo.ability.taming.fastfoodservice: + description: Allows access to the Fast Food Service ability + mcmmo.ability.taming.sharpenedclaws: + description: Allows access to the Sharpened Claws ability + mcmmo.ability.taming.gore: + description: Allows access to the Gore ability + mcmmo.ability.taming.callofthewild: + description: Allows access to the Call of the Wild ability + mcmmo.ability.taming.environmentallyaware: + description: Allows access to the Environmentally Aware ability + mcmmo.ability.taming.thickfur: + description: Allows access to the Thick Fur ability + mcmmo.ability.taming.shockproof: + description: Allows access to the Shock Proof ability + mcmmo.ability.taming.beastlore: + description: Allows access to the Beast Lore ability + mcmmo.ability.fishing.*: + description: Allows access to all Fishing abilities + children: + mcmmo.ability.fishing.shakemob: true + mcmmo.ability.fishing.shakemob: + description: Allows access to the Shake Mob ability + mcmmo.ability.mining.*: + description: Allows access to all Mining abilities + children: + mcmmo.ability.mining.superbreaker: true + mcmmo.ability.mining.doubledrops: true + mcmmo.ability.mining.superbreaker: + description: Allows access to the Super Breaker ability + mcmmo.ability.mining.doubledrops: + description: Allows double drop chance when mining + mcmmo.ability.woodcutting.*: + description: Allows access to all Woodcutting abilities + children: + mcmmo.ability.woodcutting.treefeller: true + mcmmo.ability.woodcutting.leafblower: true + mcmmo.ability.woodcutting.doubledrops: true + mcmmo.ability.woodcutting.treefeller: + description: Allows access to Tree Feller ability + mcmmo.ability.woodcutting.leafblower: + description: Allows access to Leaf Blower ability + mcmmo.ability.woodcutting.doubledrops: + description: Allows double drop chance when woodcutting + mcmmo.ability.repair.*: + description: Allows access to all Repair abilities + children: + mcmmo.ability.repair.repairbonus: true + mcmmo.ability.repair.arcaneforging: true + mcmmo.ability.repair.stonerepair: true + mcmmo.ability.repair.ironrepair: true + mcmmo.ability.repair.goldrepair: true + mcmmo.ability.repair.diamondrepair: true + mcmmo.ability.repair.armorrepair: true + mcmmo.ability.repair.toolrepair: true + mcmmo.ability.repair.repairbonus: + description: Allows access to Super Repair bonus + mcmmo.ability.repair.arcaneforging: + description: Allows access to the Arcane Forging ability + mcmmo.ability.repair.stonerepair: + description: Allows ability to repair Stone tools + mcmmo.ability.repair.ironrepair: + description: Allows ability to repair Iron tools & armor + mcmmo.ability.repair.goldrepair: + description: Allows ability to repair Gold tools & armor + mcmmo.ability.repair.diamondrepair: + description: Allows ability to repair Diamond tools & armor + mcmmo.ability.repair.armorrepair: + description: Allows ability to repair armor + mcmmo.ability.repair.toolrepair: + description: Allows ability to repair tools + mcmmo.ability.unarmed.*: + description: Allows access to all Unarmed abilities + children: + mcmmo.ability.unarmed.bonusdamage: true + mcmmo.ability.unarmed.disarm: true + mcmmo.ability.unarmed.berserk: true + mcmmo.ability.unarmed.deflect: true + mcmmo.ability.unarmed.bonusdamage: + description: Allows bonus damage from Unarmed + mcmmo.ability.unarmed.disarm: + description: Allows access to the Disarm ability + mcmmo.ability.unarmed.berserk: + description: Allows access to the Berserker ability + mcmmo.ability.unarmed.deflect: + description: Allows access to the Deflect ability + mcmmo.ability.archery.*: + description: Allows access to all Archery abilities + children: + mcmmo.ability.archery.trackarrows: true + mcmmo.ability.archery.ignition: true + mcmmo.ability.archery.daze: true + mcmmo.ability.archery.trackarrows: + description: Allows tracking & retrieval of arrows + mcmmo.ability.archery.ignition: + description: Allows access to the Ignition ability + mcmmo.ability.archery.daze: + description: Allows access to the Daze ability + mcmmo.ability.herbalism.*: + description: Allows access to all Herbalism abilities + children: + mcmmo.ability.herbalism.doubledrops: true + mcmmo.ability.herbalism.greenterra: true + mcmmo.ability.herbalism.greenthumbblocks: true + mcmmo.ability.herbalism.greenthumbwheat: true + mcmmo.ability.herbalism.doubledrops: + description: Allows double drop chance from Herbalism + mcmmo.ability.herbalism.greenterra: + description: Allows access to the Green Terra ability + mcmmo.ability.herbalism.greenthumbblocks: + description: Allows access to the Green Thumb ability for blocks + mcmmo.ability.herbalism.greenthumbwheat: + description: Allows access to the Green Thumb ability for wheat + mcmmo.ability.excavation.*: + description: Allows access to all Excavation abilities + children: + mcmmo.ability.excavation.gigadrillbreaker: true + mcmmo.ability.excavation.treasures: true + mcmmo.ability.excavation.gigadrillbreaker: + description: Allows access to the Giga Drill Breaker ability + mcmmo.ability.excavation.treasures: + description: Allows treasure drops from Excavation + mcmmo.ability.swords.*: + description: Allows access to all Swords abilities + children: + mcmmo.ability.swords.bleed: true + mcmmo.ability.swords.serratedstrikes: true + mcmmo.ability.swords.counterattack: true + mcmmo.ability.swords.bleed: + description: Allows access to the Bleed ability + mcmmo.ability.swords.serratedstrikes: + description: Allows access to the Serrated Strikes ability + mcmmo.ability.swords.counterattack: + description: Allows access to the Counter Attack ability + mcmmo.ability.axes.*: + description: Allows access to all Axes abilities + children: + mcmmo.ability.axes.skullsplitter: true + mcmmo.ability.axes.bonusdamage: true + mcmmo.ability.axes.critalhit: true + mcmmo.ability.axes.impact: true + mcmmo.ability.axes.skullsplitter: + description: Allows access to the Skull Splitter ability + mcmmo.ability.axes.bonusdamage: + description: Allows bonus damage from Axes + mcmmo.ability.axes.criticalhit: + description: Allows access to the Critical Hit ability + mcmmo.ability.axes.skullsplitter: + description: Allows access to the Impact ability + mcmmo.ability.acrobatics.*: + description: Allows access to all Acrobatics abilities + children: + mcmmo.ability.acrobatics.roll: true + mcmmo.ability.acrobatics.gracefulroll: true + mcmmo.ability.acrobatics.dodge: true + mcmmo.ability.acrobatics.roll: + description: Allows access to the Roll ability + mcmmo.ability.acrobatics.gracefulroll: + description: Allows access to the Graceful Roll ability + mcmmo.ability.acrobatics.dodge: + description: Allows access to the Dodge ability + mcmmo.ability.blastmining.*: + description: Allows access to all Blast Mining abilities + children: + mcmmo.ability.blastmining.biggerbombs: true + mcmmo.ability.blastmining.demolitionsexpertise: true + mcmmo.ability.blastmining.biggerbombs: + description: Allows access to the Bigger Bombs ability + mcmmo.ability.blastmining.demolitionsexpertise: + description: Allows access to the Demolitions Expertise ability mcmmo.item.*: description: Implies all mcmmo.item permissions. children: mcmmo.item.chimaerawing: true mcmmo.item.chimaerawing: - description: Allows use of Chimaera Wing item + description: Allows use of Chimaera Wing item mcmmo.motd: description: Allows access to the motd mcmmo.commands.*: @@ -202,6 +382,8 @@ permissions: mcmmo.skills.axes: true mcmmo.skills.acrobatics: true mcmmo.skills.blastmining: true + mcmmo.skills.fishing: + description: Allows access to the Fishing skill mcmmo.skills.taming: description: Allows access to the Taming skill mcmmo.skills.mining: @@ -210,8 +392,6 @@ permissions: description: Allows access to the Woodcutting skill mcmmo.skills.repair: description: Allows access to the Repair skill - mcmmo.skills.repair.arcanebypass: - description: Allows user to bypass Arcane Repair so he will never lose enchantments mcmmo.skills.unarmed: description: Allows access to the Unarmed skill mcmmo.skills.archery: