--- miscJava/bukkit-minecraft-plugins/HoerupUtils/src/main/java/dk/thoerup/bukkit/hoeruputils/secretdoor/DoorOpenListener.java 2012/01/27 12:21:27 1684 +++ miscJava/bukkit-minecraft-plugins/HoerupUtils/src/main/java/dk/thoerup/bukkit/hoeruputils/secretdoor/DoorOpenListener.java 2013/03/21 19:09:02 1945 @@ -1,17 +1,21 @@ 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.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; + public class DoorOpenListener implements Listener{ private DoorStorage store; @@ -47,8 +51,15 @@ return; } - final World world = player.getWorld(); - final Location loc = event.getClickedBlock().getLocation(); + openDoor(door, player,false ); + + } + + private void openDoor(final Door door, Player player, boolean longDelay ) { + final World world = player.getWorld(); + + //final Location loc = event.getClickedBlock().getLocation(); + final Location loc = door.getLeftUpper(); door.open(); @@ -60,8 +71,58 @@ world.playEffect( loc, Effect.DOOR_TOGGLE, 0); } }; + + int delay = (longDelay == true) ? 8*20 : 4*20; + + player.getServer().getScheduler().scheduleSyncDelayedTask(plugin, doorCloser, delay); + + } + + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent evt) { + if (evt.isCancelled()) + return; - player.getServer().getScheduler().scheduleSyncDelayedTask(plugin, doorCloser, 4*20); + String parts[] = evt.getMessage().split(" "); + if (parts.length == 1) { + Runnable r = new DooOpenOnChat( evt ); + r.run(); + //plugin.getServer().getScheduler().runTask(plugin, r); //force sync handling of 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, true); + evt.setCancelled(true); + } + } } }