Make tree damage on players cancellable

This commit is contained in:
General Zimmer 2023-03-07 18:17:48 +01:00
parent 31a52ab071
commit b2dc97f057
2 changed files with 48 additions and 1 deletions

View File

@ -0,0 +1,39 @@
package com.songoda.ultimatetimber.events;
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 {
FallingBlock attacker;
public TreeDamageEvent(FallingBlock attacker, Player victim) {
super(victim);
this.attacker = attacker;
}
public FallingBlock getAttacker() {return this.attacker;}
private static final HandlerList handlers = new HandlerList();
@Override
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
@Override
public boolean isCancelled() {
return false;
}
@Override
public void setCancelled(boolean cancel) {
}
}

View File

@ -9,6 +9,7 @@ import com.songoda.ultimatetimber.animation.TreeAnimationDisintegrate;
import com.songoda.ultimatetimber.animation.TreeAnimationFancy;
import com.songoda.ultimatetimber.animation.TreeAnimationNone;
import com.songoda.ultimatetimber.animation.TreeAnimationType;
import com.songoda.ultimatetimber.events.TreeDamageEvent;
import com.songoda.ultimatetimber.tree.DetectedTree;
import com.songoda.ultimatetimber.tree.ITreeBlock;
import com.songoda.ultimatetimber.tree.TreeDefinition;
@ -183,7 +184,14 @@ public class TreeAnimationManager extends Manager implements Listener, Runnable
int damage = ConfigurationManager.Setting.FALLING_BLOCK_DAMAGE.getInt();
for (Entity entity : fallingBlock.getNearbyEntities(0.5, 0.5, 0.5)) {
if (!(entity instanceof LivingEntity)) continue;
((LivingEntity) entity).damage(damage, fallingBlock);
// Make tree damage on players cancellable
if (entity instanceof Player) {
Player p = ((Player) entity).getPlayer();
TreeDamageEvent treeDamageEvent = new TreeDamageEvent(fallingBlock, p);
if (!treeDamageEvent.isCancelled())
((LivingEntity) entity).damage(damage, fallingBlock);
} else
((LivingEntity) entity).damage(damage, fallingBlock);
}
}