package co.d3s.ylt.chestplate;
import org.bukkit.Effect;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Entity;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.Event.Result;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockCanBuildEvent;
import org.bukkit.event.block.BlockPhysicsEvent;
import org.bukkit.event.entity.EntityInteractEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.material.PressurePlate;
import org.bukkit.plugin.java.JavaPlugin;
import co.d3s.ylt.chestplate.plate.CP_Return;
import co.d3s.ylt.chestplate.plate.object.CP_Container;
import co.d3s.ylt.chestplate.plate.object.CP_Lift;
import co.d3s.ylt.chestplate.plate.object.CP_Object;
import co.d3s.ylt.chestplate.plate.object.CP_Sorter;
import co.d3s.ylt.chestplate.util.ItemMatcher;
public class ChestPlate extends JavaPlugin implements Listener {
public CP_Object[] objects = {
new CP_Sorter(this),
new CP_Lift(this),
new CP_Container(this)
};
public ItemMatcher itemmatch;
public void onEnable() {
getServer().getPluginManager().registerEvents(this, this);
itemmatch = new ItemMatcher(this);
}
public void onDisable() {
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerInteract(PlayerInteractEvent event) {
if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
if (event.getClickedBlock().getState() instanceof InventoryHolder) {
if (event.getMaterial() == Material.WOOD_PLATE && event.getBlockFace() == BlockFace.UP) {
event.setUseItemInHand(Result.ALLOW);
event.setUseInteractedBlock(Result.DENY);
}
/* Didn't work - couldn't edit text
* if ((event.getMaterial() == Material.WALL_SIGN || event.getMaterial() == Material.SIGN) &&
(event.getBlockFace() == BlockFace.NORTH |
event.getBlockFace() == BlockFace.EAST |
event.getBlockFace() == BlockFace.SOUTH |
event.getBlockFace() == BlockFace.WEST)) {
event.setUseItemInHand(Result.ALLOW);
event.setUseInteractedBlock(Result.DENY);
}*/
}
}
if (event.getAction() == Action.PHYSICAL && event.getClickedBlock() != null) {
onInteract(event.getPlayer(), event.getClickedBlock(), event);
}
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onEntityInteract(EntityInteractEvent event) {
onInteract(event.getEntity(), event.getBlock(), event);
}
public void onInteract(Entity entity, Block plate, Cancellable event) {
if (plate.getType() != Material.WOOD_PLATE)
return;
out:
for (CP_Object cpo : objects) {
CP_Return ret = cpo.interact(plate, entity);
switch(ret) {
case cancel:
event.setCancelled(true);
case done:
break out;
}
}
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onBlockCanBuild(BlockCanBuildEvent event) {
if (event.isBuildable() == false && event.getMaterial() == Material.WOOD_PLATE) {
if (event.getBlock().getRelative(BlockFace.DOWN).getState() instanceof InventoryHolder) {
event.setBuildable(true);
}
}
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onBlockPhysics(BlockPhysicsEvent event) {
if (event.isCancelled() == true) return;
Block block = event.getBlock();
if (block.getType() == Material.WOOD_PLATE) {
//if (event.getChangedType() == Material.WOOD_PLATE)
if (block.getRelative(BlockFace.DOWN).getState() instanceof InventoryHolder) {
event.setCancelled(true);
}
}
}
}