Fixing awkward Bukkit bug related to Flame arrows.

This commit is contained in:
GJ 2013-01-24 21:55:56 -05:00
parent 4639b8b939
commit f5179cdcea
4 changed files with 24 additions and 56 deletions

View File

@ -38,10 +38,10 @@ import com.gmail.nossr50.skills.swords.Swords;
import com.gmail.nossr50.skills.swords.SwordsManager; import com.gmail.nossr50.skills.swords.SwordsManager;
import com.gmail.nossr50.skills.taming.Taming; import com.gmail.nossr50.skills.taming.Taming;
import com.gmail.nossr50.skills.taming.TamingManager; import com.gmail.nossr50.skills.taming.TamingManager;
import com.gmail.nossr50.skills.unarmed.Unarmed;
import com.gmail.nossr50.skills.unarmed.UnarmedManager; import com.gmail.nossr50.skills.unarmed.UnarmedManager;
import com.gmail.nossr50.util.ItemChecks; import com.gmail.nossr50.util.ItemChecks;
import com.gmail.nossr50.util.Misc; import com.gmail.nossr50.util.Misc;
import com.gmail.nossr50.util.Permissions;
import com.gmail.nossr50.util.Users; import com.gmail.nossr50.util.Users;
public class Combat { public class Combat {
@ -58,7 +58,7 @@ public class Combat {
switch (damager.getType()) { switch (damager.getType()) {
case PLAYER: case PLAYER:
Player attacker = (Player) event.getDamager(); Player attacker = (Player) damager;
if (Misc.isNPCPlayer(attacker)) { if (Misc.isNPCPlayer(attacker)) {
return; return;
@ -184,33 +184,37 @@ public class Combat {
if (targetIsPlayer) { if (targetIsPlayer) {
Player player = (Player) target; Player player = (Player) target;
AcrobaticsManager acrobaticsManager = new AcrobaticsManager(player);
SwordsManager swordsManager = new SwordsManager(player);
if (damager instanceof Player) { if (damager instanceof Player) {
if (Swords.pvpEnabled) { if (Swords.pvpEnabled) {
SwordsManager swordsManager = new SwordsManager(player);
swordsManager.counterAttackChecks((LivingEntity) damager, event.getDamage()); swordsManager.counterAttackChecks((LivingEntity) damager, event.getDamage());
} }
if (Acrobatics.pvpEnabled) { if (Acrobatics.pvpEnabled) {
AcrobaticsManager acrobaticsManager = new AcrobaticsManager(player);
acrobaticsManager.dodgeCheck(event); acrobaticsManager.dodgeCheck(event);
} }
if (Unarmed.pvpEnabled && player.getItemInHand().getType() == Material.AIR) {
UnarmedManager unarmedManager = new UnarmedManager(player);
unarmedManager.deflectCheck(event);
}
} }
else { else {
if (Swords.pveEnabled && damager instanceof LivingEntity) { if (Swords.pveEnabled && damager instanceof LivingEntity) {
SwordsManager swordsManager = new SwordsManager(player);
swordsManager.counterAttackChecks((LivingEntity) damager, event.getDamage()); swordsManager.counterAttackChecks((LivingEntity) damager, event.getDamage());
} }
if (Acrobatics.pveEnabled) { if (Acrobatics.pveEnabled) {
if (damager instanceof LightningStrike && Acrobatics.dodgeLightningDisabled) { if (!(damager instanceof LightningStrike && Acrobatics.dodgeLightningDisabled)) {
return; AcrobaticsManager acrobaticsManager = new AcrobaticsManager(player);
}
acrobaticsManager.dodgeCheck(event); acrobaticsManager.dodgeCheck(event);
} }
} }
} }
} }
}
/** /**
* Process archery abilities. * Process archery abilities.
@ -220,19 +224,11 @@ public class Combat {
* @param event The event to run the archery checks on. * @param event The event to run the archery checks on.
*/ */
public static void archeryCheck(Player shooter, LivingEntity target, EntityDamageByEntityEvent event) { public static void archeryCheck(Player shooter, LivingEntity target, EntityDamageByEntityEvent event) {
if (target instanceof Player) { if (Misc.isNPCPlayer(shooter)) {
Player defender = (Player) target; return;
if (defender.getItemInHand().getType().equals(Material.AIR)) {
if (configInstance.getUnarmedPVP()) {
UnarmedManager unarmedManager = new UnarmedManager(defender);
unarmedManager.deflectCheck(event);
}
}
} }
ArcheryManager archeryManager = new ArcheryManager(shooter); ArcheryManager archeryManager = new ArcheryManager(shooter);
archeryManager.skillShot(event); archeryManager.skillShot(event);
if (target instanceof Player) { if (target instanceof Player) {
@ -244,8 +240,7 @@ public class Combat {
} }
if (target != shooter) { if (target != shooter) {
PlayerProfile profile = Users.getProfile(shooter); startGainXp(shooter, archeryManager.getProfile(), target, SkillType.ARCHERY);
startGainXp(shooter, profile, target, SkillType.ARCHERY);
} }
} }
@ -322,13 +317,7 @@ public class Combat {
} }
for (Entity entity : target.getNearbyEntities(2.5, 2.5, 2.5)) { for (Entity entity : target.getNearbyEntities(2.5, 2.5, 2.5)) {
if (entity instanceof Player) { if ((entity instanceof Player && Misc.isNPCPlayer((Player) entity)) || !(entity instanceof LivingEntity) || !shouldBeAffected(attacker, entity)) {
if (Misc.isNPCPlayer((Player) entity)) {
continue;
}
}
if (!(entity instanceof LivingEntity)) {
continue; continue;
} }
@ -336,10 +325,6 @@ public class Combat {
break; break;
} }
if (!shouldBeAffected(attacker, entity)) {
continue;
}
PlayerAnimationEvent armswing = new PlayerAnimationEvent(attacker); PlayerAnimationEvent armswing = new PlayerAnimationEvent(attacker);
mcMMO.p.getServer().getPluginManager().callEvent(armswing); mcMMO.p.getServer().getPluginManager().callEvent(armswing);
@ -503,19 +488,7 @@ public class Combat {
if (entity instanceof Player) { if (entity instanceof Player) {
Player defender = (Player) entity; Player defender = (Player) entity;
if (!defender.getWorld().getPVP()) { if (!defender.getWorld().getPVP() || defender == player || PartyManager.getInstance().inSameParty(player, defender) || Users.getProfile(defender).getGodMode()) {
return false;
}
if (defender == player) {
return false;
}
if (PartyManager.getInstance().inSameParty(player, defender)) {
return false;
}
if (Users.getProfile(defender).getGodMode()) {
return false; return false;
} }
@ -528,9 +501,7 @@ public class Combat {
} }
} }
else if (entity instanceof Tameable) { else if (entity instanceof Tameable) {
Tameable pet = (Tameable) entity; if (Misc.isFriendlyPet(player, (Tameable) entity)) {
if (Misc.isFriendlyPet(player, pet)) {
return false; return false;
} }
} }

View File

@ -60,11 +60,7 @@ public class ArcheryManager extends SkillManager {
* @param event The event to modify. * @param event The event to modify.
*/ */
public void skillShot(EntityDamageEvent event) { public void skillShot(EntityDamageEvent event) {
if (Misc.isNPCPlayer(player) || !Permissions.archeryBonus(player)) { if (skillLevel >= Archery.skillShotIncreaseLevel && Permissions.archeryBonus(player)) {
return;
}
if (skillLevel >= Archery.skillShotIncreaseLevel) {
SkillShotEventHandler eventHandler = new SkillShotEventHandler(this, event); SkillShotEventHandler eventHandler = new SkillShotEventHandler(this, event);
eventHandler.calculateDamageBonus(); eventHandler.calculateDamageBonus();

View File

@ -1,6 +1,7 @@
package com.gmail.nossr50.skills.unarmed; package com.gmail.nossr50.skills.unarmed;
import com.gmail.nossr50.config.AdvancedConfig; import com.gmail.nossr50.config.AdvancedConfig;
import com.gmail.nossr50.config.Config;
public class Unarmed { public class Unarmed {
public static int ironArmMaxBonusDamage = AdvancedConfig.getInstance().getIronArmMaxBonus(); public static int ironArmMaxBonusDamage = AdvancedConfig.getInstance().getIronArmMaxBonus();
@ -15,5 +16,8 @@ public class Unarmed {
public static double ironGripMaxChance = AdvancedConfig.getInstance().getIronGripChanceMax(); public static double ironGripMaxChance = AdvancedConfig.getInstance().getIronGripChanceMax();
public static int ironGripMaxBonusLevel = AdvancedConfig.getInstance().getIronGripMaxBonusLevel(); public static int ironGripMaxBonusLevel = AdvancedConfig.getInstance().getIronGripMaxBonusLevel();
public static boolean pvpEnabled = Config.getInstance().getUnarmedPVP();
public static boolean pveEnabled = Config.getInstance().getUnarmedPVE();
public static double berserkDamageModifier = 1.5; public static double berserkDamageModifier = 1.5;
} }

View File

@ -49,9 +49,6 @@ public class UnarmedManager extends SkillManager {
* @param event The event to modify * @param event The event to modify
*/ */
public void deflectCheck(EntityDamageEvent event) { public void deflectCheck(EntityDamageEvent event) {
if (player == null)
return;
if (!Permissions.deflect(player)) { if (!Permissions.deflect(player)) {
return; return;
} }