package net.kitecraft.tyrotoxism.propertycontrol.listeners;
import net.kitecraft.tyrotoxism.propertycontrol.PropertyControl;
import net.kitecraft.tyrotoxism.propertycontrol.Setting;
import net.kitecraft.tyrotoxism.propertycontrol.property.Creation;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockIgniteEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.painting.PaintingBreakByEntityEvent;
import org.bukkit.event.painting.PaintingBreakEvent;
import org.bukkit.event.painting.PaintingPlaceEvent;
import org.bukkit.event.player.PlayerBucketEmptyEvent;
import org.bukkit.event.player.PlayerBucketFillEvent;
import org.bukkit.event.player.PlayerInteractEvent;
public final class CreationListener implements Listener {
private PropertyControl plugin;
private boolean setTop;
private boolean setFirst;
public CreationListener(final PropertyControl plugin) {
this.plugin = plugin;
this.setTop = true;
this.setFirst = true;
}
@EventHandler(priority = EventPriority.HIGH)
public final void onBlockPlace(final BlockPlaceEvent event) {
if (event.isCancelled()) { return; } else if (check(event.getPlayer())) { event.setCancelled(true); }
}
@EventHandler(priority = EventPriority.HIGH)
public final void onBlockBreak(final BlockBreakEvent event) {
if (event.isCancelled()) { return; } else if (check(event.getPlayer())) { event.setCancelled(true); }
}
@EventHandler(priority = EventPriority.HIGH)
public final void onBlockIgnite(final BlockIgniteEvent event) {
if (event.isCancelled()) { return; } else if (check(event.getPlayer())) { event.setCancelled(true); }
}
@EventHandler(priority = EventPriority.HIGH)
public final void onPaintingBreak(final PaintingBreakEvent event) {
if (event.isCancelled() || !(event instanceof PaintingBreakByEntityEvent)) { return; }
Entity entity = ((PaintingBreakByEntityEvent) event).getRemover();
if (entity instanceof Player && check((Player) entity)) { event.setCancelled(true); }
}
@EventHandler(priority = EventPriority.HIGH)
public final void onPaintingPlace(final PaintingPlaceEvent event) {
if (event.isCancelled()) { return; } else if (check(event.getPlayer())) { event.setCancelled(true); }
}
@EventHandler(priority = EventPriority.HIGH)
public final void onPlayerBucketEmpty(final PlayerBucketEmptyEvent event) {
if (event.isCancelled()) { return; } else if (check(event.getPlayer())) { event.setCancelled(true); }
}
@EventHandler(priority = EventPriority.HIGH)
public final void onPlayerBucketFill(final PlayerBucketFillEvent event) {
if (event.isCancelled()) { return; } else if (check(event.getPlayer())) { event.setCancelled(true); }
}
@EventHandler(priority = EventPriority.HIGH)
public final void onPlayerInteract(final PlayerInteractEvent event) {
if (!event.getPlayer().hasPermission("propertycontrol.create") || !check(event.getPlayer())) { return; }
if (!(this.plugin.getSetting(null, event.getPlayer().getWorld().getName()) == null || this.plugin.getSetting(null, event.getPlayer().getWorld().getName()).getValue().equalsIgnoreCase("enable"))) { return; }
if (this.plugin.getCreation(event.getPlayer()) == null) { this.plugin.getCreations().add(new Creation(this.plugin, this.plugin.getProperties().get(this.plugin.getProperties().size()-1).getID()+1, event.getPlayer())); }
final Creation creation = this.plugin.getCreation(event.getPlayer());
final Action action = event.getAction();
final Location click = event.getClickedBlock().getLocation();
if (action.equals(Action.RIGHT_CLICK_AIR)) {
creation.remove();
this.setTop = true;
this.setFirst = true;
event.getPlayer().sendMessage("§eProperty creation has been reset.");
} else if (action.equals(Action.RIGHT_CLICK_BLOCK)) {
final boolean first = this.setFirst || creation.getPoint(true) == null;
creation.setPoint(click, first);
event.getPlayer().sendMessage("§ePoint "+((first)?1:2)+" set to §3"+click.getBlockX()+"§e, §3"+click.getBlockZ()+"§e.");
this.setFirst = !this.setFirst;
} else if (action.equals(Action.LEFT_CLICK_BLOCK)) {
final boolean top = (this.setTop && click.getBlockY() > creation.getHeight(false)) || click.getBlockY() > creation.getHeight(true);
creation.setHeight(click.getBlockY(), top);
event.getPlayer().sendMessage("§e"+((top)?"Top":"Bottom")+" set to §3"+click.getBlockY()+"§e.");
this.setTop = !top;
}
}
private final boolean check(final Player player) {
final Setting tool = this.plugin.getSetting(player.getName(), "tool");
if (player.hasPermission("propertycontrol.create") && player.getItemInHand().getType().equals((tool != null)?Material.getMaterial(tool.getValue()):Material.WOOD_SPADE)) { return true; }
return false;
}
}