/[projects]/miscJava/bukkit-minecraft-plugins/HoerupUtils/src/main/java/dk/thoerup/bukkit/hoeruputils/secretdoor/DoorOpenListener.java
ViewVC logotype

Contents of /miscJava/bukkit-minecraft-plugins/HoerupUtils/src/main/java/dk/thoerup/bukkit/hoeruputils/secretdoor/DoorOpenListener.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1913 - (show annotations) (download)
Sun Jan 13 15:39:59 2013 UTC (11 years, 4 months ago) by torben
File size: 2892 byte(s)
First version of password protected secret doors
1 package dk.thoerup.bukkit.hoeruputils.secretdoor;
2
3 import java.util.Set;
4
5 import org.bukkit.Effect;
6 import org.bukkit.Location;
7 import org.bukkit.Material;
8 import org.bukkit.World;
9 import org.bukkit.block.Block;
10 import org.bukkit.entity.Player;
11 import org.bukkit.event.EventHandler;
12 import org.bukkit.event.Listener;
13 import org.bukkit.event.player.AsyncPlayerChatEvent;
14 import org.bukkit.event.player.PlayerChatEvent;
15 import org.bukkit.event.player.PlayerInteractEvent;
16 import org.bukkit.plugin.Plugin;
17
18 import com.google.common.base.Ascii;
19
20
21
22 public class DoorOpenListener implements Listener{
23
24 private DoorStorage store;
25
26 private Plugin plugin;
27
28 public DoorOpenListener(DoorStorage store, Plugin plugin) {
29 super();
30 this.store = store;
31 this.plugin = plugin;
32 }
33
34 @EventHandler
35 public void onPlayerInteract(PlayerInteractEvent event) {
36
37 Player player = event.getPlayer();
38
39 if ( player.getItemInHand().getType() != Material.AIR ) {
40 return;
41 }
42
43 if ( event.hasBlock() == false ) {
44 return;
45 }
46
47 final Door door = store.findDoor( event.getClickedBlock().getLocation() );
48
49 if (door == null) {
50 return;
51 }
52
53 if (door.isPrivate() == true && !door.getOwner().equals(player.getName() ) ) {
54 return;
55 }
56
57 openDoor(door, player,false );
58
59 }
60
61 private void openDoor(final Door door, Player player, boolean longDelay ) {
62 final World world = player.getWorld();
63
64 //final Location loc = event.getClickedBlock().getLocation();
65 final Location loc = door.getLeftUpper();
66
67 door.open();
68
69 world.playEffect( loc, Effect.DOOR_TOGGLE, 0);
70
71 Runnable doorCloser = new Runnable() {
72 public void run() {
73 door.close( );
74 world.playEffect( loc, Effect.DOOR_TOGGLE, 0);
75 }
76 };
77
78 int delay = (longDelay == true) ? 8*20 : 4*20;
79
80 player.getServer().getScheduler().scheduleSyncDelayedTask(plugin, doorCloser, delay);
81
82 }
83
84
85 @EventHandler
86 public void onPlayerChat(AsyncPlayerChatEvent evt) {
87 if (evt.isCancelled())
88 return;
89
90 String parts[] = evt.getMessage().split(" ");
91 if (parts.length == 1) {
92 Runnable r = new DooOpenOnChat( evt );
93 r.run();
94 //plugin.getServer().getScheduler().runTask(plugin, r); //force sync handling of this
95 }
96
97 }
98
99 class DooOpenOnChat implements Runnable {
100 AsyncPlayerChatEvent evt;
101 public DooOpenOnChat(AsyncPlayerChatEvent evt) {
102 this.evt = evt;
103 }
104
105
106 @Override
107 public void run() {
108 Player p = evt.getPlayer();
109 Block target = p.getTargetBlock(null, 40);
110
111 if (target == null || target.getType() == Material.AIR) {
112 return;
113 }
114
115 final Door door = store.findDoor( target.getLocation() );
116
117 if (door == null) {
118 return;
119 }
120
121 if (door.isPrivate() == true && !door.getOwner().equals(p.getName() ) ) {
122 return;
123 }
124
125 if (door.getPassword().equals( evt.getMessage() )) {
126 openDoor(door, p, true);
127 evt.setCancelled(true);
128 }
129 }
130 }
131 }

  ViewVC Help
Powered by ViewVC 1.1.20