diff --git a/mcMMO/com/gmail/nossr50/mcCombat.java b/mcMMO/com/gmail/nossr50/mcCombat.java index d83d21d08..4944f0426 100644 --- a/mcMMO/com/gmail/nossr50/mcCombat.java +++ b/mcMMO/com/gmail/nossr50/mcCombat.java @@ -46,8 +46,6 @@ public class mcCombat { return; } } - if(defender != null) - mcUsers.getProfile(defender).setRecentlyHurt(30); /* * AXE CRITICAL CHECK */ @@ -498,6 +496,29 @@ public class mcCombat { public int calculateDamage(EntityDamageEvent event, int dmg){ return event.getDamage() + dmg; } + public void applyAoeDamage(Player attacker, EntityDamageByEntityEvent event, Entity x){ + for(Entity derp : x.getWorld().getEntities()){ + if(mcm.getInstance().getDistance(x.getLocation(), derp.getLocation()) < 5){ + if(derp instanceof Player){ + Player target = (Player)derp; + if(mcParty.getInstance().inSameParty(attacker, target)) + continue; + if(!target.getName().equals(attacker.getName())){ + target.damage(event.getDamage() / 2); + target.sendMessage(ChatColor.DARK_RED+"Struck by CLEAVE!"); + } + } + if(derp instanceof Monster){ + Monster target = (Monster)derp; + target.damage(event.getDamage() / 2); + } + if(derp instanceof Animals){ + Animals target = (Animals)derp; + target.damage(event.getDamage() / 2); + } + } + } + } public void axeCriticalCheck(Player attacker, EntityDamageByEntityEvent event, Entity x){ if(mcm.getInstance().isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){ if(mcUsers.getProfile(attacker).getAxesInt() >= 750){ diff --git a/mcMMO/com/gmail/nossr50/mcEntityListener.java b/mcMMO/com/gmail/nossr50/mcEntityListener.java index 93061c1e4..0282f9527 100644 --- a/mcMMO/com/gmail/nossr50/mcEntityListener.java +++ b/mcMMO/com/gmail/nossr50/mcEntityListener.java @@ -69,6 +69,11 @@ public class mcEntityListener extends EntityListener { EntityDamageByEntityEvent eventb = (EntityDamageByEntityEvent)event; Entity e = eventb.getEntity(); //Defender Entity f = eventb.getDamager(); //Attacker + /* + * CHECK FOR PVP INTERACTIONS + */ + if(f instanceof Player && e instanceof Player && !mcLoadProperties.pvp) + event.setCancelled(true); /* * IF DEFENDER IS PLAYER */ @@ -88,6 +93,8 @@ public class mcEntityListener extends EntityListener { //((Player) f).sendMessage("DEBUG: EntityDamageByEntity cast correctly!"); int typeid = ((Player) f).getItemInHand().getTypeId(); Player attacker = (Player)f; + if(mcUsers.getProfile(attacker).getAxePreparationMode()) + mcSkills.getInstance().skullSplitterCheck(attacker); /* * Player versus Monster checks, this handles all skill damage modifiers and any procs. */ @@ -105,12 +112,13 @@ public class mcEntityListener extends EntityListener { * Player versus Animals checks, these checks handle any skill modifiers or procs */ mcCombat.getInstance().playerVersusAnimalsChecks(e, attacker, eventb, typeid); + /* + * This will do AOE damage from the axes ability + */ + if(!event.isCancelled() && mcUsers.getProfile(attacker).getSkullSplitterMode()) + mcCombat.getInstance().applyAoeDamage(attacker, eventb, x); } - /* - * CHECK FOR PVP INTERACTIONS - */ - if(f instanceof Player && e instanceof Player && !mcLoadProperties.pvp) - event.setCancelled(true); + if(e instanceof Monster || e instanceof Animals){ if(e instanceof Monster){ Monster monster = (Monster)e; diff --git a/mcMMO/com/gmail/nossr50/mcMining.java b/mcMMO/com/gmail/nossr50/mcMining.java index 4b55fb956..83ea7e964 100644 --- a/mcMMO/com/gmail/nossr50/mcMining.java +++ b/mcMMO/com/gmail/nossr50/mcMining.java @@ -153,6 +153,7 @@ public class mcMining { } } public void SuperBreakerBlockCheck(Player player, Block block){ + player.getItemInHand().setDurability((short) (player.getItemInHand().getDurability() + 1)); Location loc = block.getLocation(); Material mat = Material.getMaterial(block.getTypeId()); byte damage = 0; diff --git a/mcMMO/com/gmail/nossr50/mcPermissions.java b/mcMMO/com/gmail/nossr50/mcPermissions.java index 43bb3bbd6..9f16d2d3a 100644 --- a/mcMMO/com/gmail/nossr50/mcPermissions.java +++ b/mcMMO/com/gmail/nossr50/mcPermissions.java @@ -37,6 +37,13 @@ public class mcPermissions { return true; } } + public boolean unarmedAbility(Player player){ + if (permissionsEnabled) { + return permission(player, "mcmmo.ability.unarmed"); + } else { + return true; + } + } public boolean chimaeraWing(Player player){ if (permissionsEnabled) { return permission(player, "mcmmo.item.chimaerawing"); diff --git a/mcMMO/com/gmail/nossr50/mcSkills.java b/mcMMO/com/gmail/nossr50/mcSkills.java index 7a2b1c31a..fad0bdfba 100644 --- a/mcMMO/com/gmail/nossr50/mcSkills.java +++ b/mcMMO/com/gmail/nossr50/mcSkills.java @@ -53,6 +53,12 @@ public class mcSkills { player.sendMessage(ChatColor.GREEN+"Your Serrated Strikes ability is refreshed!"); } } + if(mcUsers.getProfile(player).getSkullSplitterCooldown() >= 1){ + mcUsers.getProfile(player).decreaseSkullSplitterCooldown(); + if(mcUsers.getProfile(player).getSkullSplitterCooldown() == 0){ + player.sendMessage(ChatColor.GREEN+"Your Skull Splitter ability is refreshed!"); + } + } } public void axeActivationCheck(Player player, Block block){ if(mcPermissions.getInstance().axes(player) && mcPermissions.getInstance().woodcutting(player)){ @@ -65,7 +71,7 @@ public class mcSkills { mcWoodCutting.getInstance().treeFellerCheck(player, block); } else if (mcPermissions.getInstance().axes(player)){ /* - * PUT CODE RELATED TO ACTIVATING THE AXE MODE HERE + * */ } } @@ -73,6 +79,44 @@ public class mcSkills { if(mcPermissions.getInstance().miningability(player)){ mcMining.getInstance().superBreakerCheck(player, block); } + axeActivationCheck(player, block); + } + public void skullSplitterCheck(Player player){ + if(mcm.getInstance().isAxes(player.getItemInHand())){ + /* + * CHECK FOR AXE PREP MODE + */ + if(mcUsers.getProfile(player).getAxePreparationMode()){ + mcUsers.getProfile(player).setAxePreparationMode(false); + mcUsers.getProfile(player).setAxePreparationTicks(0); + } + int ticks = 3; + if(mcUsers.getProfile(player).getAxesInt() >= 50) + ticks++; + if(mcUsers.getProfile(player).getAxesInt() >= 150) + ticks++; + if(mcUsers.getProfile(player).getAxesInt() >= 250) + ticks++; + if(mcUsers.getProfile(player).getAxesInt() >= 350) + ticks++; + if(mcUsers.getProfile(player).getAxesInt() >= 450) + ticks++; + if(mcUsers.getProfile(player).getAxesInt() >= 550) + ticks++; + if(mcUsers.getProfile(player).getAxesInt() >= 650) + ticks++; + if(mcUsers.getProfile(player).getAxesInt() >= 750) + ticks++; + + if(!mcUsers.getProfile(player).getSkullSplitterMode() && mcUsers.getProfile(player).getSkullSplitterCooldown() == 0){ + player.sendMessage(ChatColor.GREEN+"**SKULL SPLITTER ACTIVATED**"); + mcUsers.getProfile(player).setSkullSplitterTicks(ticks); + mcUsers.getProfile(player).setSkullSplitterMode(true); + } + if(!mcUsers.getProfile(player).getSkullSplitterMode() && mcUsers.getProfile(player).getSkullSplitterCooldown() >= 1){ + player.sendMessage(ChatColor.RED+"You are too tired to use that ability again."); + } + } } public void monitorSkills(Player player){ /* @@ -88,6 +132,20 @@ public class mcSkills { } } } + /* + * AXES ABILITY + */ + if(mcPermissions.getInstance().axesAbility(player)){ + //Monitor the length of TreeFeller mode + if(mcUsers.getProfile(player).getSkullSplitterMode()){ + mcUsers.getProfile(player).decreaseSkullSplitterTicks(); + if(mcUsers.getProfile(player).getSkullSplitterTicks() <= 0){ + mcUsers.getProfile(player).setSkullSplitterMode(false); + mcUsers.getProfile(player).setSkullSplitterCooldown(120); + player.sendMessage(ChatColor.GRAY+"**You feel strength leaving you**"); + } + } + } /* * WOODCUTTING ABILITY */ diff --git a/mcMMO/com/gmail/nossr50/mcUsers.java b/mcMMO/com/gmail/nossr50/mcUsers.java index d0eb456bb..4204efd05 100644 --- a/mcMMO/com/gmail/nossr50/mcUsers.java +++ b/mcMMO/com/gmail/nossr50/mcUsers.java @@ -156,9 +156,9 @@ class PlayerList protected final Logger log = Logger.getLogger("Minecraft"); private String playerName, gather, wgather, woodcutting, repair, mining, party, myspawn, myspawnworld, unarmed, herbalism, excavation, archery, swords, axes, invite, acrobatics, repairgather, unarmedgather, herbalismgather, excavationgather, archerygather, swordsgather, axesgather, acrobaticsgather; - private boolean dead, treeFellerMode, superbreakermode, serratedStrikesMode, axePreparationMode; + private boolean dead, treeFellerMode, superbreakermode, serratedStrikesMode, axePreparationMode, skullSplitterMode; private int recentlyhurt = 0, bleedticks = 0, superbreakerticks = 0, superbreakercooldown = 0, - serratedStrikesTicks = 0, serratedStrikesCooldown = 0, treeFellerTicks = 0, treeFellerCooldown = 0, + serratedStrikesTicks = 0, skullSplitterTicks = 0, skullSplitterCooldown = 0, serratedStrikesCooldown = 0, treeFellerTicks = 0, treeFellerCooldown = 0, axePreparationTicks = 0; Player thisplayer; char defaultColor; @@ -462,6 +462,37 @@ class PlayerList axePreparationTicks--; } } + /* + * SKULL SPLITTER + */ + public boolean getSkullSplitterMode(){ + return skullSplitterMode; + } + public void setSkullSplitterMode(Boolean bool){ + skullSplitterMode = bool; + } + public Integer getSkullSplitterTicks(){ + return skullSplitterTicks; + } + public void setSkullSplitterTicks(Integer newvalue){ + skullSplitterTicks = newvalue; + } + public void decreaseSkullSplitterTicks(){ + if(skullSplitterTicks >= 1){ + skullSplitterTicks--; + } + } + public void setSkullSplitterCooldown(Integer newvalue){ + skullSplitterCooldown = newvalue; + } + public int getSkullSplitterCooldown(){ + return skullSplitterCooldown; + } + public void decreaseSkullSplitterCooldown(){ + if(skullSplitterCooldown >= 1){ + skullSplitterCooldown--; + } + } /* * SERRATED STRIKES */ diff --git a/mcMMO/com/gmail/nossr50/mcm.java b/mcMMO/com/gmail/nossr50/mcm.java index 9c4be6aa6..283ca773c 100644 --- a/mcMMO/com/gmail/nossr50/mcm.java +++ b/mcMMO/com/gmail/nossr50/mcm.java @@ -30,7 +30,7 @@ public class mcm { } return instance; } - public static double getDistance(Location loca, Location locb) + public double getDistance(Location loca, Location locb) { return Math.sqrt(Math.pow(loca.getX() - locb.getX(), 2) + Math.pow(loca.getY() - locb.getY(), 2) + Math.pow(loca.getZ() - locb.getZ(), 2)); @@ -137,70 +137,6 @@ public class mcm { } return true; } - public void simulateNaturalDrops(Entity entity){ - Location loc = entity.getLocation(); - if(entity instanceof Pig){ - if(Math.random() * 3 > 2){ - if(Math.random() * 2 > 1){ - mcDropItem(loc, 319); //BACON - } - mcDropItem(loc, 319); - } - } - if(entity instanceof Spider){ - if(Math.random() * 3 > 2){ - if(Math.random() * 2 > 1){ - mcDropItem(loc, 287); //SILK - } - mcDropItem(loc, 287); - } - } - if(entity instanceof Skeleton){ - if(Math.random() * 3 > 2){ - if(Math.random() * 2 > 1){ - mcDropItem(loc, 262); //ARROWS - } - mcDropItem(loc, 262); - } - if(Math.random() * 3 > 2){ - if(Math.random() * 2 > 1){ - mcDropItem(loc, 352); //BONES - } - mcDropItem(loc, 352); - } - } - if(entity instanceof Zombie){ - if(Math.random() * 3 > 2){ - if(Math.random() * 2 > 1){ - mcDropItem(loc, 288); //FEATHERS - } - mcDropItem(loc, 288); - } - } - if(entity instanceof Cow){ - if(Math.random() * 3 > 2){ - if(Math.random() * 2 > 1){ - mcDropItem(loc, 334); //LEATHER - } - if(Math.random() * 2 > 1){ - mcDropItem(loc, 334); - } - mcDropItem(loc, 334); - } - } - if(entity instanceof Squid){ - if(Math.random() * 3 > 2){ - if(Math.random() * 2 > 1){ - mcDropItem(loc, 351); //INK SACS - } - if(Math.random() * 2 > 1){ - mcDropItem(loc, 351); - } - mcDropItem(loc, 351); - } - } - mcSkills.getInstance().arrowRetrievalCheck(entity); - } public void mcDropItem(Location loc, int id){ if(loc != null){ Material mat = Material.getMaterial(id); @@ -256,6 +192,7 @@ public class mcm { player.sendMessage(ChatColor.RED+"-----[]"+ChatColor.GREEN+"WOODCUTTING"+ChatColor.RED+"[]-----"); player.sendMessage(ChatColor.DARK_GRAY+"XP GAIN: "+ChatColor.WHITE+"Chopping down trees"); player.sendMessage(ChatColor.RED+"---[]"+ChatColor.GREEN+"EFFECTS"+ChatColor.RED+"[]---"); + player.sendMessage(ChatColor.DARK_AQUA+"Tree Feller (ABILITY): "+ChatColor.GREEN+"Make trees explode"); player.sendMessage(ChatColor.DARK_AQUA+"Double Drops: "+ChatColor.YELLOW+ChatColor.GREEN+"Double the normal loot"); player.sendMessage(ChatColor.RED+"---[]"+ChatColor.GREEN+"YOUR STATS"+ChatColor.RED+"[]---"); player.sendMessage(ChatColor.RED+"Double Drop Chance: "+ChatColor.YELLOW+percentage+"%"); @@ -298,9 +235,27 @@ public class mcm { } else { percentage = "75"; } + int ticks = 3; + if(mcUsers.getProfile(player).getAxesInt() >= 50) + ticks++; + if(mcUsers.getProfile(player).getAxesInt() >= 150) + ticks++; + if(mcUsers.getProfile(player).getAxesInt() >= 250) + ticks++; + if(mcUsers.getProfile(player).getAxesInt() >= 350) + ticks++; + if(mcUsers.getProfile(player).getAxesInt() >= 450) + ticks++; + if(mcUsers.getProfile(player).getAxesInt() >= 550) + ticks++; + if(mcUsers.getProfile(player).getAxesInt() >= 650) + ticks++; + if(mcUsers.getProfile(player).getAxesInt() >= 750) + ticks++; player.sendMessage(ChatColor.RED+"-----[]"+ChatColor.GREEN+"AXES"+ChatColor.RED+"[]-----"); player.sendMessage(ChatColor.DARK_GRAY+"XP GAIN: "+ChatColor.WHITE+"Attacking Monsters"); player.sendMessage(ChatColor.RED+"---[]"+ChatColor.GREEN+"EFFECTS"+ChatColor.RED+"[]---"); + player.sendMessage(ChatColor.DARK_AQUA+"Skull Splitter (ABILITY): "+ChatColor.GREEN+"Deal AoE Damage"); player.sendMessage(ChatColor.DARK_AQUA+"Critical Strikes: "+ChatColor.GREEN+"Double Damage"); player.sendMessage(ChatColor.DARK_AQUA+"Axe Mastery (500 SKILL): "+ChatColor.GREEN+"Modifies Damage"); player.sendMessage(ChatColor.RED+"---[]"+ChatColor.GREEN+"YOUR STATS"+ChatColor.RED+"[]---"); @@ -310,6 +265,7 @@ public class mcm { } else { player.sendMessage(ChatColor.GREEN+"Axe Mastery - Bonus 4 damage"); } + player.sendMessage(ChatColor.RED+"Skull Splitter Length: "+ChatColor.YELLOW+(ticks * 2)+"s"); } if(split[0].equalsIgnoreCase("/swords")){ event.setCancelled(true);