package tv.mineinthebox.essentials.events.entity;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.FallingBlock;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.LeavesDecayEvent;
import org.bukkit.event.entity.EntityChangeBlockEvent;
import org.bukkit.metadata.FixedMetadataValue;
import tv.mineinthebox.essentials.xEssentials;
import tv.mineinthebox.essentials.instances.SlowUpdateBlock;
public class RealisticTreeEvent implements Listener {
private final xEssentials pl;
public RealisticTreeEvent(xEssentials pl) {
this.pl = pl;
}
@SuppressWarnings("deprecation")
@EventHandler
public void onLeaveDecay(LeavesDecayEvent e) {
if(e.isCancelled()) {
return;
}
byte sub = e.getBlock().getData();
Material mat = e.getBlock().getType();
FallingBlock fall = e.getBlock().getWorld().spawnFallingBlock(e.getBlock().getLocation(), mat.getId(), sub);
fall.setMetadata("tree", new FixedMetadataValue(pl, "a tree"));
e.getBlock().setType(Material.AIR);
}
@SuppressWarnings("deprecation")
@EventHandler
public void onLand(EntityChangeBlockEvent e) {
if(e.getEntity() instanceof FallingBlock) {
FallingBlock fall = (FallingBlock) e.getEntity();
if(fall.hasMetadata("tree")) {
final Location loc = fall.getLocation().add(0,-1,0);
for(Entity entity : fall.getNearbyEntities(10, 180, 10)) {
if(entity instanceof Player) {
Player p = (Player) entity;
p.sendBlockChange(loc, fall.getBlockId(), fall.getBlockData());
p.playEffect(loc.add(0, 1, 0), Effect.STEP_SOUND, Material.LEAVES.getId());
}
}
SlowUpdateBlock slow = new SlowUpdateBlock(loc, 400L, pl);
slow.startUpdate();
e.setCancelled(true);
}
}
}
}