From 7553a3c8978ddebe8c0c0667be1a796e8215444b Mon Sep 17 00:00:00 2001 From: GZimmer Date: Sat, 29 Jul 2023 14:01:26 +0200 Subject: [PATCH] First draft of TreeDamageEvent implementation --- .../events/TreeDamageEvent.java | 67 +++++++++++++++++++ .../manager/TreeAnimationManager.java | 10 ++- 2 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/craftaro/ultimatetimber/events/TreeDamageEvent.java diff --git a/src/main/java/com/craftaro/ultimatetimber/events/TreeDamageEvent.java b/src/main/java/com/craftaro/ultimatetimber/events/TreeDamageEvent.java new file mode 100644 index 0000000..bd17ded --- /dev/null +++ b/src/main/java/com/craftaro/ultimatetimber/events/TreeDamageEvent.java @@ -0,0 +1,67 @@ +package com.craftaro.ultimatetimber.events; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.FallingBlock; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; + +public class TreeDamageEvent extends PlayerEvent implements Cancellable { + + private boolean cancelled = false; + private FallingBlock blockAttacker = null; + private Player playerAttacker = null; + private static final HandlerList handlers = new HandlerList(); + + /** + * Represents a TreeDamage event. + */ + public TreeDamageEvent(FallingBlock attacker, Player victim) { + super(victim); + this.blockAttacker = attacker; + } + + // Hoping this one is used whenever possible + /** + * Represents a TreeDamage event. + */ + public TreeDamageEvent(Player attacker, Player victim) { + super(victim); + this.playerAttacker = attacker; + } + + /** + * @return the attacker as either FallingBlock or Player + */ + public Entity getAttacker() { + if (this.playerAttacker != null) + return this.playerAttacker; + if (this.blockAttacker != null) + return this.blockAttacker; + + return null; + } + + /** + * Get Player damaged by this event. This method is only here for clarification + */ + public Player getVictim() { + return this.getPlayer(); + } + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() {return handlers;} + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean cancelState) {this.cancelled = cancelState;} +} diff --git a/src/main/java/com/craftaro/ultimatetimber/manager/TreeAnimationManager.java b/src/main/java/com/craftaro/ultimatetimber/manager/TreeAnimationManager.java index a084a26..46b34ab 100644 --- a/src/main/java/com/craftaro/ultimatetimber/manager/TreeAnimationManager.java +++ b/src/main/java/com/craftaro/ultimatetimber/manager/TreeAnimationManager.java @@ -9,6 +9,7 @@ import com.craftaro.ultimatetimber.animation.TreeAnimationDisintegrate; import com.craftaro.ultimatetimber.animation.TreeAnimationFancy; import com.craftaro.ultimatetimber.animation.TreeAnimationNone; import com.craftaro.ultimatetimber.animation.TreeAnimationType; +import com.craftaro.ultimatetimber.events.TreeDamageEvent; import com.craftaro.ultimatetimber.tree.DetectedTree; import com.craftaro.ultimatetimber.tree.ITreeBlock; import com.craftaro.ultimatetimber.tree.TreeDefinition; @@ -199,7 +200,14 @@ public class TreeAnimationManager extends Manager implements Listener, Runnable if (!(entity instanceof LivingEntity)) { continue; } - ((LivingEntity) entity).damage(damage, fallingBlock); + if (entity instanceof Player) { + Player p = ((Player) entity).getPlayer(); + TreeDamageEvent treeDamageEvent = new TreeDamageEvent(fallingBlock, p); + Bukkit.getServer().getPluginManager().callEvent(treeDamageEvent); + if (!treeDamageEvent.isCancelled()) + ((LivingEntity) entity).damage(damage, fallingBlock); + } else + ((LivingEntity) entity).damage(damage, fallingBlock); } }