--- miscJava/bukkit-minecraft-plugins/HoerupUtils/src/main/java/dk/thoerup/bukkit/hoeruputils/secretdoor/DoorOpenListener.java 2013/01/09 21:09:10 1911 +++ miscJava/bukkit-minecraft-plugins/HoerupUtils/src/main/java/dk/thoerup/bukkit/hoeruputils/secretdoor/DoorOpenListener.java 2013/01/13 13:05:16 1912 @@ -4,10 +4,12 @@ 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.player.PlayerInteractEvent; -import org.bukkit.event.Listener; 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; @@ -47,8 +49,14 @@ return; } - final World world = player.getWorld(); - final Location loc = event.getClickedBlock().getLocation(); + 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(); @@ -61,7 +69,46 @@ } }; - player.getServer().getScheduler().scheduleSyncDelayedTask(plugin, doorCloser, 4*20); + 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); + } + } + } }