package dk.thoerup.bukkit.hoeruputils.secretdoor; import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.plugin.Plugin; public class DoorOpenListener implements Listener{ private DoorStorage store; private Plugin plugin; public DoorOpenListener(DoorStorage store, Plugin plugin) { super(); this.store = store; this.plugin = plugin; } @EventHandler public void onPlayerInteract(PlayerInteractEvent event) { Player player = event.getPlayer(); if ( player.getItemInHand().getType() != Material.AIR ) { return; } if ( event.hasBlock() == false ) { return; } final Door door = store.findDoor( event.getClickedBlock().getLocation() ); if (door == null) { return; } if (door.isPrivate() == true && !door.getOwner().equals(player.getName() ) ) { return; } openDoor(door, player); } private void openDoor(final Door door, Player player) { final World world = player.getWorld(); //final Location loc = event.getClickedBlock().getLocation(); final Location loc = door.getLeftUpper(); door.open(); world.playEffect( loc, Effect.DOOR_TOGGLE, 0); Runnable doorCloser = new Runnable() { public void run() { door.close( ); world.playEffect( loc, Effect.DOOR_TOGGLE, 0); } }; player.getServer().getScheduler().scheduleSyncDelayedTask(plugin, doorCloser, 4*20); } public void onPlayerChat(AsyncPlayerChatEvent evt) { if (evt.isCancelled()) return; Runnable r = new DooOpenOnChat( evt ); plugin.getServer().getScheduler().runTask(plugin, r); //force sync handling og this } class DooOpenOnChat implements Runnable { AsyncPlayerChatEvent evt; public DooOpenOnChat(AsyncPlayerChatEvent evt) { this.evt = evt; } @Override public void run() { Player p = evt.getPlayer(); Block target = p.getTargetBlock(null, 40); if (target == null || target.getType() == Material.AIR) { return; } final Door door = store.findDoor( target.getLocation() ); if (door == null) { return; } if (door.isPrivate() == true && !door.getOwner().equals(p.getName() ) ) { return; } if (door.getPassword().equals( evt.getMessage() )); { openDoor(door, p); evt.setCancelled(true); } } } }