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

Annotation 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 - (hide 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 torben 1530 package dk.thoerup.bukkit.hoeruputils.secretdoor;
2    
3 torben 1913 import java.util.Set;
4    
5 torben 1530 import org.bukkit.Effect;
6     import org.bukkit.Location;
7 torben 1532 import org.bukkit.Material;
8 torben 1530 import org.bukkit.World;
9 torben 1912 import org.bukkit.block.Block;
10 torben 1530 import org.bukkit.entity.Player;
11 torben 1912 import org.bukkit.event.EventHandler;
12     import org.bukkit.event.Listener;
13     import org.bukkit.event.player.AsyncPlayerChatEvent;
14 torben 1913 import org.bukkit.event.player.PlayerChatEvent;
15 torben 1530 import org.bukkit.event.player.PlayerInteractEvent;
16     import org.bukkit.plugin.Plugin;
17    
18 torben 1913 import com.google.common.base.Ascii;
19 torben 1530
20    
21 torben 1913
22 torben 1680 public class DoorOpenListener implements Listener{
23 torben 1530
24 torben 1538 private DoorStorage store;
25 torben 1530
26 torben 1538 private Plugin plugin;
27 torben 1530
28     public DoorOpenListener(DoorStorage store, Plugin plugin) {
29     super();
30     this.store = store;
31     this.plugin = plugin;
32     }
33    
34 torben 1680 @EventHandler
35 torben 1530 public void onPlayerInteract(PlayerInteractEvent event) {
36    
37     Player player = event.getPlayer();
38    
39 torben 1532 if ( player.getItemInHand().getType() != Material.AIR ) {
40 torben 1530 return;
41 torben 1532 }
42 torben 1530
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 torben 1605 if (door.isPrivate() == true && !door.getOwner().equals(player.getName() ) ) {
54     return;
55     }
56    
57 torben 1913 openDoor(door, player,false );
58 torben 1530
59 torben 1912 }
60    
61 torben 1913 private void openDoor(final Door door, Player player, boolean longDelay ) {
62 torben 1912 final World world = player.getWorld();
63 torben 1913
64 torben 1912 //final Location loc = event.getClickedBlock().getLocation();
65     final Location loc = door.getLeftUpper();
66    
67 torben 1579 door.open();
68 torben 1530
69     world.playEffect( loc, Effect.DOOR_TOGGLE, 0);
70    
71     Runnable doorCloser = new Runnable() {
72     public void run() {
73 torben 1579 door.close( );
74 torben 1530 world.playEffect( loc, Effect.DOOR_TOGGLE, 0);
75     }
76     };
77 torben 1913
78     int delay = (longDelay == true) ? 8*20 : 4*20;
79 torben 1530
80 torben 1913 player.getServer().getScheduler().scheduleSyncDelayedTask(plugin, doorCloser, delay);
81    
82 torben 1912 }
83    
84 torben 1913
85     @EventHandler
86 torben 1912 public void onPlayerChat(AsyncPlayerChatEvent evt) {
87     if (evt.isCancelled())
88     return;
89 torben 1913
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 torben 1912 }
98    
99     class DooOpenOnChat implements Runnable {
100     AsyncPlayerChatEvent evt;
101     public DooOpenOnChat(AsyncPlayerChatEvent evt) {
102     this.evt = evt;
103     }
104 torben 1913
105 torben 1530
106 torben 1912 @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 torben 1913 if (door.getPassword().equals( evt.getMessage() )) {
126     openDoor(door, p, true);
127 torben 1912 evt.setCancelled(true);
128     }
129 torben 1913 }
130 torben 1530 }
131     }

  ViewVC Help
Powered by ViewVC 1.1.20