From 299f440f637b05e243d2e72810475d8f9d488a65 Mon Sep 17 00:00:00 2001 From: NuclearW Date: Sat, 28 Jan 2012 01:24:29 -0500 Subject: [PATCH] Change damage to use events system Should provide a fix for issue #39 Also update pom and removed an unused import. --- pom.xml | 2 +- src/main/java/com/gmail/nossr50/Combat.java | 46 +++++++++++++++---- .../com/gmail/nossr50/runnables/mcTimer.java | 3 +- .../java/com/gmail/nossr50/skills/Axes.java | 5 +- .../com/gmail/nossr50/skills/Fishing.java | 3 +- .../java/com/gmail/nossr50/skills/Swords.java | 10 ++-- .../java/com/gmail/nossr50/skills/Taming.java | 1 - 7 files changed, 49 insertions(+), 21 deletions(-) diff --git a/pom.xml b/pom.xml index b645a2101..1ad8b4594 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.gmail.nossr50.mcMMO mcMMO - 1.2.08 + 1.2.09-dev mcMMO https://github.com/TheYeti/mcMMO diff --git a/src/main/java/com/gmail/nossr50/Combat.java b/src/main/java/com/gmail/nossr50/Combat.java index f41f7da0a..38e182d08 100644 --- a/src/main/java/com/gmail/nossr50/Combat.java +++ b/src/main/java/com/gmail/nossr50/Combat.java @@ -16,6 +16,7 @@ */ package com.gmail.nossr50; +import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.entity.*; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -352,17 +353,42 @@ public class Combat Skills.XpCheckSkill(SkillType.ARCHERY, attacker); } } - public static void dealDamage(Entity target, int dmg){ - if(target instanceof Player){ - ((Player) target).damage(dmg); - } - if(target instanceof Animals){ - ((Animals) target).damage(dmg); - } - if(target instanceof Monster){ - ((Monster) target).damage(dmg); - } + + /** + * Attempt to damage target for value dmg with reason CUSTOM + * + * @param target LivingEntity which to attempt to damage + * @param dmg Amount of damage to attempt to do + */ + public static void dealDamage(LivingEntity target, int dmg){ + EntityDamageEvent ede = new EntityDamageEvent(target, EntityDamageEvent.DamageCause.CUSTOM, dmg); + Bukkit.getPluginManager().callEvent(ede); } + + /** + * Attempt to damage target for value dmg with reason cause + * + * @param target LivingEntity which to attempt to damage + * @param dmg Amount of damage to attempt to do + * @param cause DamageCause to pass to damage event + */ + public static void dealDamage(LivingEntity target, int dmg, DamageCause cause) { + EntityDamageEvent ede = new EntityDamageEvent(target, cause, dmg); + Bukkit.getPluginManager().callEvent(ede); + } + + /** + * Attempt to damage target for value dmg with reason ENTITY_ATTACK with damager attacker + * + * @param target LivingEntity which to attempt to damage + * @param dmg Amount of damage to attempt to do + * @param attacker Player to pass to event as damager + */ + public static void dealDamage(LivingEntity target, int dmg, Player attacker) { + EntityDamageEvent ede = new EntityDamageByEntityEvent(attacker, target, EntityDamageEvent.DamageCause.ENTITY_ATTACK, dmg); + Bukkit.getPluginManager().callEvent(ede); + } + public static boolean pvpAllowed(EntityDamageByEntityEvent event, World world) { if(!event.getEntity().getWorld().getPVP()) diff --git a/src/main/java/com/gmail/nossr50/runnables/mcTimer.java b/src/main/java/com/gmail/nossr50/runnables/mcTimer.java index 6b41db742..78572c228 100644 --- a/src/main/java/com/gmail/nossr50/runnables/mcTimer.java +++ b/src/main/java/com/gmail/nossr50/runnables/mcTimer.java @@ -17,6 +17,7 @@ package com.gmail.nossr50.runnables; import org.bukkit.entity.*; +import com.gmail.nossr50.Combat; import com.gmail.nossr50.Users; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.datatypes.PlayerProfile; @@ -60,7 +61,7 @@ public class mcTimer implements Runnable */ if(thecount % 2 == 0 && PP.getBleedTicks() >= 1) { - player.damage(2); + Combat.dealDamage(player, 2); PP.decreaseBleedTicks(); } diff --git a/src/main/java/com/gmail/nossr50/skills/Axes.java b/src/main/java/com/gmail/nossr50/skills/Axes.java index 3561cb178..4c0e0e601 100644 --- a/src/main/java/com/gmail/nossr50/skills/Axes.java +++ b/src/main/java/com/gmail/nossr50/skills/Axes.java @@ -25,6 +25,7 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.plugin.Plugin; import com.gmail.nossr50.locale.mcLocale; +import com.gmail.nossr50.Combat; import com.gmail.nossr50.Users; import com.gmail.nossr50.m; import com.gmail.nossr50.mcPermissions; @@ -152,7 +153,7 @@ public class Axes { continue; if(targets >= 1 && derp.getWorld().getPVP()) { - target.damage(event.getDamage() / 2); + Combat.dealDamage(target, event.getDamage() / 2, attacker); target.sendMessage(ChatColor.DARK_RED+"Struck by CLEAVE!"); targets--; continue; @@ -161,7 +162,7 @@ public class Axes { else { LivingEntity target = (LivingEntity)derp; - target.damage(event.getDamage() / 2); + Combat.dealDamage(target, event.getDamage() / 2, attacker); targets--; } } diff --git a/src/main/java/com/gmail/nossr50/skills/Fishing.java b/src/main/java/com/gmail/nossr50/skills/Fishing.java index 9249e0617..46c5adff1 100644 --- a/src/main/java/com/gmail/nossr50/skills/Fishing.java +++ b/src/main/java/com/gmail/nossr50/skills/Fishing.java @@ -9,6 +9,7 @@ import org.bukkit.event.player.PlayerFishEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.material.Wool; +import com.gmail.nossr50.Combat; import com.gmail.nossr50.Users; import com.gmail.nossr50.config.LoadProperties; import com.gmail.nossr50.datatypes.PlayerProfile; @@ -671,7 +672,7 @@ public class Fishing { if(le instanceof Player) return; - le.damage(1); + Combat.dealDamage(le, 1, event.getPlayer()); World world = le.getWorld(); /* Neutral Mobs */ diff --git a/src/main/java/com/gmail/nossr50/skills/Swords.java b/src/main/java/com/gmail/nossr50/skills/Swords.java index 204f98363..dec6ab17c 100644 --- a/src/main/java/com/gmail/nossr50/skills/Swords.java +++ b/src/main/java/com/gmail/nossr50/skills/Swords.java @@ -151,7 +151,7 @@ public class Swords continue; if(targets >= 1 && derp.getWorld().getPVP()) { - target.damage(event.getDamage() / 4); + Combat.dealDamage(target, event.getDamage() / 4, attacker); target.sendMessage(ChatColor.DARK_RED+"Struck by Serrated Strikes!"); Users.getProfile(target).addBleedTicks(5); targets--; @@ -164,7 +164,7 @@ public class Swords pluginx.misc.addToBleedQue((LivingEntity)derp); LivingEntity target = (LivingEntity)derp; - target.damage(event.getDamage() / 4); + Combat.dealDamage(target, event.getDamage() / 4, attacker); targets--; } } @@ -193,7 +193,7 @@ public class Swords { if(Math.random() * 2000 <= 600) { - Combat.dealDamage(f, event.getDamage() / 2); + Combat.dealDamage((LivingEntity) f, event.getDamage() / 2); defender.sendMessage(ChatColor.GREEN+"**COUNTER-ATTACKED**"); if(f instanceof Player) ((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!"); @@ -201,7 +201,7 @@ public class Swords } else if (Math.random() * 2000 <= PPd.getSkillLevel(SkillType.SWORDS)) { - Combat.dealDamage(f, event.getDamage() / 2); + Combat.dealDamage((LivingEntity) f, event.getDamage() / 2); defender.sendMessage(ChatColor.GREEN+"**COUNTER-ATTACKED**"); if(f instanceof Player) ((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!"); @@ -245,7 +245,7 @@ public class Swords } else { - x.damage(2); + Combat.dealDamage(x, 2); } } } diff --git a/src/main/java/com/gmail/nossr50/skills/Taming.java b/src/main/java/com/gmail/nossr50/skills/Taming.java index 66b976709..cdafab982 100644 --- a/src/main/java/com/gmail/nossr50/skills/Taming.java +++ b/src/main/java/com/gmail/nossr50/skills/Taming.java @@ -16,7 +16,6 @@ */ package com.gmail.nossr50.skills; -import org.bukkit.craftbukkit.CraftOfflinePlayer; import org.bukkit.entity.AnimalTamer; import org.bukkit.entity.Entity; import org.bukkit.entity.Player;