From 23e03f310f4be42a790f9764f16798a706232f0d Mon Sep 17 00:00:00 2001 From: Matt Date: Fri, 19 Feb 2016 18:12:20 -0500 Subject: [PATCH 1/8] Added code to BendingDamageEvent --- .../projectkorra/projectkorra/GeneralMethods.java | 13 ++++++++----- .../projectkorra/event/BendingDamageEvent.java | 12 +++++++++++- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/com/projectkorra/projectkorra/GeneralMethods.java b/src/com/projectkorra/projectkorra/GeneralMethods.java index 89fbe296..05cd13e9 100644 --- a/src/com/projectkorra/projectkorra/GeneralMethods.java +++ b/src/com/projectkorra/projectkorra/GeneralMethods.java @@ -372,12 +372,15 @@ public class GeneralMethods { EntityBendingDeathEvent event = new EntityBendingDeathEvent(entity, player, damage, ability); Bukkit.getServer().getPluginManager().callEvent(event); } - BendingDamageEvent event = new BendingDamageEvent(); + BendingDamageEvent event = new BendingDamageEvent(damage); Bukkit.getServer().getPluginManager().callEvent(event); - ((LivingEntity) entity).damage(damage, player); - entity.setLastDamageCause(new EntityDamageByEntityEvent(player, entity, DamageCause.CUSTOM, damage)); - if (Bukkit.getPluginManager().isPluginEnabled("NoCheatPlus")) { - NCPExemptionManager.unexempt(player); + + if(!event.isCancelled()) { + ((LivingEntity) entity).damage(damage, player); + entity.setLastDamageCause(new EntityDamageByEntityEvent(player, entity, DamageCause.CUSTOM, damage)); + if (Bukkit.getPluginManager().isPluginEnabled("NoCheatPlus")) { + NCPExemptionManager.unexempt(player); + } } } } diff --git a/src/com/projectkorra/projectkorra/event/BendingDamageEvent.java b/src/com/projectkorra/projectkorra/event/BendingDamageEvent.java index 8c4adf72..aed20743 100644 --- a/src/com/projectkorra/projectkorra/event/BendingDamageEvent.java +++ b/src/com/projectkorra/projectkorra/event/BendingDamageEvent.java @@ -8,9 +8,19 @@ public class BendingDamageEvent extends Event implements Cancellable { private static final HandlerList handlers = new HandlerList(); private boolean cancelled; + private double damage; - public BendingDamageEvent() { + public BendingDamageEvent(double damage) { this.cancelled = false; + this.damage = damage; + } + + public double getDamage() { + return damage; + } + + public void setDamage(double damage) { + this.damage = damage; } @Override From 97348c94247ab23c56843567edbac24121e8f65f Mon Sep 17 00:00:00 2001 From: Matt Date: Fri, 19 Feb 2016 18:24:03 -0500 Subject: [PATCH 2/8] Added ability to BendingDamageEvent --- .../projectkorra/event/BendingDamageEvent.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/com/projectkorra/projectkorra/event/BendingDamageEvent.java b/src/com/projectkorra/projectkorra/event/BendingDamageEvent.java index aed20743..432f282c 100644 --- a/src/com/projectkorra/projectkorra/event/BendingDamageEvent.java +++ b/src/com/projectkorra/projectkorra/event/BendingDamageEvent.java @@ -9,10 +9,20 @@ public class BendingDamageEvent extends Event implements Cancellable { private static final HandlerList handlers = new HandlerList(); private boolean cancelled; private double damage; + private String ability; - public BendingDamageEvent(double damage) { + public BendingDamageEvent(double damage, String ability) { this.cancelled = false; this.damage = damage; + this.ability = ability; + } + + public String getAbility() { + return ability; + } + + public void setAbility(String ability) { + this.ability = ability; } public double getDamage() { From eca0eca1f8743a2bf46152e09ed68a5ae6949897 Mon Sep 17 00:00:00 2001 From: Matt Date: Fri, 19 Feb 2016 18:28:17 -0500 Subject: [PATCH 3/8] Fixed & added new args --- .../projectkorra/GeneralMethods.java | 2 +- .../projectkorra/event/BendingDamageEvent.java | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/com/projectkorra/projectkorra/GeneralMethods.java b/src/com/projectkorra/projectkorra/GeneralMethods.java index 05cd13e9..93051815 100644 --- a/src/com/projectkorra/projectkorra/GeneralMethods.java +++ b/src/com/projectkorra/projectkorra/GeneralMethods.java @@ -372,7 +372,7 @@ public class GeneralMethods { EntityBendingDeathEvent event = new EntityBendingDeathEvent(entity, player, damage, ability); Bukkit.getServer().getPluginManager().callEvent(event); } - BendingDamageEvent event = new BendingDamageEvent(damage); + BendingDamageEvent event = new BendingDamageEvent(player, entity, damage, ability); Bukkit.getServer().getPluginManager().callEvent(event); if(!event.isCancelled()) { diff --git a/src/com/projectkorra/projectkorra/event/BendingDamageEvent.java b/src/com/projectkorra/projectkorra/event/BendingDamageEvent.java index 432f282c..5573dab3 100644 --- a/src/com/projectkorra/projectkorra/event/BendingDamageEvent.java +++ b/src/com/projectkorra/projectkorra/event/BendingDamageEvent.java @@ -1,5 +1,7 @@ package com.projectkorra.projectkorra.event; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; @@ -8,11 +10,15 @@ public class BendingDamageEvent extends Event implements Cancellable { private static final HandlerList handlers = new HandlerList(); private boolean cancelled; + private Player attacker; + private Entity damaged; private double damage; private String ability; - public BendingDamageEvent(double damage, String ability) { + public BendingDamageEvent(Player attacker, Entity damaged, double damage, String ability) { this.cancelled = false; + this.attacker = attacker; + this.damaged = damaged; this.damage = damage; this.ability = ability; } @@ -32,6 +38,14 @@ public class BendingDamageEvent extends Event implements Cancellable { public void setDamage(double damage) { this.damage = damage; } + + public Entity getDamaged() { + return damaged; + } + + public Player getAttacker() { + return attacker; + } @Override public HandlerList getHandlers() { From bddcd989a361fb2708227cd52b84087c0cd7e6cb Mon Sep 17 00:00:00 2001 From: Matt Date: Fri, 19 Feb 2016 18:54:48 -0500 Subject: [PATCH 4/8] Changed private handlers - public --- .../projectkorra/projectkorra/event/BendingDamageEvent.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/projectkorra/projectkorra/event/BendingDamageEvent.java b/src/com/projectkorra/projectkorra/event/BendingDamageEvent.java index 5573dab3..d6298380 100644 --- a/src/com/projectkorra/projectkorra/event/BendingDamageEvent.java +++ b/src/com/projectkorra/projectkorra/event/BendingDamageEvent.java @@ -8,7 +8,7 @@ import org.bukkit.event.HandlerList; public class BendingDamageEvent extends Event implements Cancellable { - private static final HandlerList handlers = new HandlerList(); + public static final HandlerList handlers = new HandlerList(); private boolean cancelled; private Player attacker; private Entity damaged; @@ -21,6 +21,7 @@ public class BendingDamageEvent extends Event implements Cancellable { this.damaged = damaged; this.damage = damage; this.ability = ability; + } public String getAbility() { From 8f552d225e9793203993a2c14893d05ae457b9d7 Mon Sep 17 00:00:00 2001 From: Matt Date: Fri, 19 Feb 2016 18:57:55 -0500 Subject: [PATCH 5/8] Added new method --- .../projectkorra/projectkorra/event/BendingDamageEvent.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/com/projectkorra/projectkorra/event/BendingDamageEvent.java b/src/com/projectkorra/projectkorra/event/BendingDamageEvent.java index d6298380..ebee7fb8 100644 --- a/src/com/projectkorra/projectkorra/event/BendingDamageEvent.java +++ b/src/com/projectkorra/projectkorra/event/BendingDamageEvent.java @@ -52,6 +52,10 @@ public class BendingDamageEvent extends Event implements Cancellable { public HandlerList getHandlers() { return handlers; } + + public static HandlerList getHandlerList() { + return handlers; + } @Override public boolean isCancelled() { From ae35e1423db0c615c4349b8fe9603683b76abbe2 Mon Sep 17 00:00:00 2001 From: Matt Date: Fri, 19 Feb 2016 19:20:41 -0500 Subject: [PATCH 6/8] Fixed whocommand --- src/com/projectkorra/projectkorra/command/WhoCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/projectkorra/projectkorra/command/WhoCommand.java b/src/com/projectkorra/projectkorra/command/WhoCommand.java index 4ed633ab..52afe3b2 100644 --- a/src/com/projectkorra/projectkorra/command/WhoCommand.java +++ b/src/com/projectkorra/projectkorra/command/WhoCommand.java @@ -149,7 +149,7 @@ public class WhoCommand extends PKCommand { //Player player = Bukkit.getPlayer(playerName); @SuppressWarnings("deprecation") final OfflinePlayer player = Bukkit.getOfflinePlayer(playerName); - if (player == null || !player.hasPlayedBefore()) { + if (player == null || !player.hasPlayedBefore() && !player.isOnline()) { sender.sendMessage(ChatColor.RED + "Player not found!"); return; } From 20ae458d5709e245ed64c4c5d289fc3fdad23c41 Mon Sep 17 00:00:00 2001 From: Philip Stephenson Date: Fri, 19 Feb 2016 19:56:50 -0500 Subject: [PATCH 7/8] Fix disabled abilities outputting multiple times --- src/com/projectkorra/projectkorra/ability/CoreAbility.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/com/projectkorra/projectkorra/ability/CoreAbility.java b/src/com/projectkorra/projectkorra/ability/CoreAbility.java index dac3482f..d4691198 100644 --- a/src/com/projectkorra/projectkorra/ability/CoreAbility.java +++ b/src/com/projectkorra/projectkorra/ability/CoreAbility.java @@ -346,6 +346,7 @@ public abstract class CoreAbility implements Ability { * @see #getAbility(String) */ public static void registerPluginAbilities(JavaPlugin plugin, String packagePrefix) { + List disabled = new ArrayList(); //this way multiple classes with the same name only show once if (plugin == null) { return; } @@ -373,8 +374,9 @@ public abstract class CoreAbility implements Ability { if (ability == null || ability.getName() == null) { continue; - } else if (!ability.isEnabled()) { + } else if (!ability.isEnabled() && !disabled.contains(ability.getName())) { plugin.getLogger().info(ability.getName() + " is disabled"); + disabled.add(ability.getName()); continue; } From 3ddc100ffc6a97d3c962e5beea7f72d32243f362 Mon Sep 17 00:00:00 2001 From: Philip Stephenson Date: Fri, 19 Feb 2016 22:24:51 -0500 Subject: [PATCH 8/8] Add AbilityDamageEntityEvent AbilityStartEvent and AbilityEndEvent - change GeneralMethods.damageEntity to use event - removed BendingDamageEvent - update CoreAbility to create and process the events --- .../projectkorra/GeneralMethods.java | 30 +++---- .../projectkorra/ability/CoreAbility.java | 10 ++- .../event/AbilityDamageEntityEvent.java | 85 +++++++++++++++++++ .../projectkorra/event/AbilityEndEvent.java | 22 +++++ .../projectkorra/event/AbilityStartEvent.java | 47 ++++++++++ .../event/BendingDamageEvent.java | 70 --------------- 6 files changed, 177 insertions(+), 87 deletions(-) create mode 100644 src/com/projectkorra/projectkorra/event/AbilityDamageEntityEvent.java create mode 100644 src/com/projectkorra/projectkorra/event/AbilityEndEvent.java create mode 100644 src/com/projectkorra/projectkorra/event/AbilityStartEvent.java delete mode 100644 src/com/projectkorra/projectkorra/event/BendingDamageEvent.java diff --git a/src/com/projectkorra/projectkorra/GeneralMethods.java b/src/com/projectkorra/projectkorra/GeneralMethods.java index 93051815..b7ae1bf8 100644 --- a/src/com/projectkorra/projectkorra/GeneralMethods.java +++ b/src/com/projectkorra/projectkorra/GeneralMethods.java @@ -93,7 +93,7 @@ import com.projectkorra.projectkorra.command.Commands; import com.projectkorra.projectkorra.configuration.ConfigManager; import com.projectkorra.projectkorra.earthbending.EarthBlast; import com.projectkorra.projectkorra.earthbending.EarthPassive; -import com.projectkorra.projectkorra.event.BendingDamageEvent; +import com.projectkorra.projectkorra.event.AbilityDamageEntityEvent; import com.projectkorra.projectkorra.event.BendingReloadEvent; import com.projectkorra.projectkorra.event.BindChangeEvent; import com.projectkorra.projectkorra.event.EntityBendingDeathEvent; @@ -359,23 +359,21 @@ public class GeneralMethods { * @param ability The ability that is used to damage the entity */ public static void damageEntity(Player player, Entity entity, double damage, String ability) { + AbilityDamageEntityEvent damageEvent = new AbilityDamageEntityEvent(entity, CoreAbility.getAbility(player, CoreAbility.getAbility(ability).getClass()), damage); + Bukkit.getServer().getPluginManager().callEvent(damageEvent); if (entity instanceof LivingEntity) { - if (entity instanceof Player) { - if (Commands.invincible.contains(entity.getName())) { - return; + if (entity instanceof Player && Commands.invincible.contains(entity.getName())) { + damageEvent.setCancelled(true); + } + if (!damageEvent.isCancelled()) { + damage = damageEvent.getDamage(); + if (Bukkit.getPluginManager().isPluginEnabled("NoCheatPlus")) { + NCPExemptionManager.exemptPermanently(player, CheckType.FIGHT_REACH); + } + if (((LivingEntity) entity).getHealth() - damage <= 0 && !entity.isDead()) { + EntityBendingDeathEvent deathEvent = new EntityBendingDeathEvent(entity, player, damage, ability); + Bukkit.getServer().getPluginManager().callEvent(deathEvent); } - } - if (Bukkit.getPluginManager().isPluginEnabled("NoCheatPlus")) { - NCPExemptionManager.exemptPermanently(player, CheckType.FIGHT_REACH); - } - if (((LivingEntity) entity).getHealth() - damage <= 0 && !entity.isDead()) { - EntityBendingDeathEvent event = new EntityBendingDeathEvent(entity, player, damage, ability); - Bukkit.getServer().getPluginManager().callEvent(event); - } - BendingDamageEvent event = new BendingDamageEvent(player, entity, damage, ability); - Bukkit.getServer().getPluginManager().callEvent(event); - - if(!event.isCancelled()) { ((LivingEntity) entity).damage(damage, player); entity.setLastDamageCause(new EntityDamageByEntityEvent(player, entity, DamageCause.CUSTOM, damage)); if (Bukkit.getPluginManager().isPluginEnabled("NoCheatPlus")) { diff --git a/src/com/projectkorra/projectkorra/ability/CoreAbility.java b/src/com/projectkorra/projectkorra/ability/CoreAbility.java index d4691198..36e59042 100644 --- a/src/com/projectkorra/projectkorra/ability/CoreAbility.java +++ b/src/com/projectkorra/projectkorra/ability/CoreAbility.java @@ -32,6 +32,8 @@ import com.projectkorra.projectkorra.ability.util.ComboManager; import com.projectkorra.projectkorra.ability.util.MultiAbilityManager; import com.projectkorra.projectkorra.ability.util.MultiAbilityManager.MultiAbilityInfo; import com.projectkorra.projectkorra.configuration.ConfigManager; +import com.projectkorra.projectkorra.event.AbilityEndEvent; +import com.projectkorra.projectkorra.event.AbilityStartEvent; import sun.reflect.ReflectionFactory; @@ -114,7 +116,12 @@ public abstract class CoreAbility implements Ability { if (player == null) { return; } - + AbilityStartEvent event = new AbilityStartEvent(this); + Bukkit.getServer().getPluginManager().callEvent(event); + if(event.isCancelled()) { + remove(); + return; + } this.started = true; this.startTime = System.currentTimeMillis(); Class clazz = getClass(); @@ -148,6 +155,7 @@ public abstract class CoreAbility implements Ability { return; } + Bukkit.getServer().getPluginManager().callEvent(new AbilityEndEvent(this)); removed = true; ConcurrentHashMap> classMap = INSTANCES.get(getClass()); diff --git a/src/com/projectkorra/projectkorra/event/AbilityDamageEntityEvent.java b/src/com/projectkorra/projectkorra/event/AbilityDamageEntityEvent.java new file mode 100644 index 00000000..8d514587 --- /dev/null +++ b/src/com/projectkorra/projectkorra/event/AbilityDamageEntityEvent.java @@ -0,0 +1,85 @@ +package com.projectkorra.projectkorra.event; + +import org.bukkit.entity.Entity; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +import com.projectkorra.projectkorra.ability.Ability; + +/** + * Called when an ability damages an {@link Entity} + * @author kingbirdy + * + */ +public class AbilityDamageEntityEvent extends Event implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + + private boolean cancelled = false; + private Entity entity; + private Ability ability; + double damage; + + /** + * Create a new AbilityDamageEntityEvent + * @param entity The entity that was damaged + * @param ability The damaging ability + * @param damage The amount of damage done + */ + public AbilityDamageEntityEvent(Entity entity, Ability ability, double damage) { + this.entity = entity; + this.ability = ability; + this.damage = damage; + } + + /** + * Returns the damage dealt to the entity + * @return the amount of damage done + */ + public double getDamage() { + return damage; + } + + /** + * Sets the damage dealt to the entity + * @param damage the amount of damage done + */ + public void setDamage(double damage) { + this.damage = damage; + } + + /** + * Gets the entity that was damaged + * @return the damaged entity + */ + public Entity getEntity() { + return entity; + } + + /** + * + * @return + */ + public Ability getAbility() { + return ability; + } + + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean cancelled) { + this.cancelled = cancelled; + } +} diff --git a/src/com/projectkorra/projectkorra/event/AbilityEndEvent.java b/src/com/projectkorra/projectkorra/event/AbilityEndEvent.java new file mode 100644 index 00000000..5d8c17dc --- /dev/null +++ b/src/com/projectkorra/projectkorra/event/AbilityEndEvent.java @@ -0,0 +1,22 @@ +package com.projectkorra.projectkorra.event; + +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +import com.projectkorra.projectkorra.ability.Ability; + +public class AbilityEndEvent extends Event { + private final HandlerList handlers = new HandlerList(); + + Ability ability; + + public AbilityEndEvent(Ability ability) { + this.ability = ability; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } + +} diff --git a/src/com/projectkorra/projectkorra/event/AbilityStartEvent.java b/src/com/projectkorra/projectkorra/event/AbilityStartEvent.java new file mode 100644 index 00000000..a42794f8 --- /dev/null +++ b/src/com/projectkorra/projectkorra/event/AbilityStartEvent.java @@ -0,0 +1,47 @@ +package com.projectkorra.projectkorra.event; + +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +import com.projectkorra.projectkorra.ability.Ability; + +/** + * Called when an ability starts + * @author Philip + * + */ +public class AbilityStartEvent extends Event implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + + boolean cancelled = false; + Ability ability; + + public AbilityStartEvent(Ability ability) { + this.ability = ability; + } + + public Ability getAbility() { + return ability; + } + + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean cancelled) { + this.cancelled = cancelled; + } + +} diff --git a/src/com/projectkorra/projectkorra/event/BendingDamageEvent.java b/src/com/projectkorra/projectkorra/event/BendingDamageEvent.java deleted file mode 100644 index ebee7fb8..00000000 --- a/src/com/projectkorra/projectkorra/event/BendingDamageEvent.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.projectkorra.projectkorra.event; - -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; - -public class BendingDamageEvent extends Event implements Cancellable { - - public static final HandlerList handlers = new HandlerList(); - private boolean cancelled; - private Player attacker; - private Entity damaged; - private double damage; - private String ability; - - public BendingDamageEvent(Player attacker, Entity damaged, double damage, String ability) { - this.cancelled = false; - this.attacker = attacker; - this.damaged = damaged; - this.damage = damage; - this.ability = ability; - - } - - public String getAbility() { - return ability; - } - - public void setAbility(String ability) { - this.ability = ability; - } - - public double getDamage() { - return damage; - } - - public void setDamage(double damage) { - this.damage = damage; - } - - public Entity getDamaged() { - return damaged; - } - - public Player getAttacker() { - return attacker; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - @Override - public boolean isCancelled() { - return cancelled; - } - - @Override - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } - -}