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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1912 - (show annotations) (download)
Sun Jan 13 13:05:16 2013 UTC (11 years, 4 months ago) by torben
File size: 4043 byte(s)
First try at opening doors with passwords
1 package dk.thoerup.bukkit.hoeruputils.secretdoor;
2
3
4 import java.util.regex.Matcher;
5 import java.util.regex.Pattern;
6
7 import org.bukkit.block.Block;
8 import org.bukkit.entity.Player;
9 import org.bukkit.event.EventHandler;
10 import org.bukkit.event.Listener;
11 import org.bukkit.event.block.BlockBreakEvent;
12 import org.bukkit.event.block.BlockRedstoneEvent;
13 import org.bukkit.event.block.SignChangeEvent;
14 import org.bukkit.plugin.Plugin;
15
16
17
18 public class DoorBlockListener implements Listener {
19
20
21 private DoorStorage store;
22 private DoorOpenListener handler;
23
24 private Plugin plugin;
25
26 public DoorBlockListener(Plugin plugin) {
27 this.plugin = plugin;
28
29 store = new DoorStorage( plugin );
30
31 store.loadAll();
32
33 handler = new DoorOpenListener(store, plugin);
34 }
35
36 public Listener getPlayerListener() {
37 return handler;
38 }
39
40 @EventHandler
41 public void onBlockBreak(BlockBreakEvent event) {
42 Door door = store.findDoor(event.getBlock().getLocation() );
43 if (door != null) {
44
45 Player player = event.getPlayer();
46 if ( ! door.getOwner().equals( player.getName() )) {
47 player.sendMessage("Can not break secret door");
48 event.setCancelled(true);
49 } else {
50 player.sendMessage("Secret door broken");
51 store.removeDoor(door);
52 }
53 }
54 }
55
56 private Block[] getAdjacentBlocks(Block block) {
57 /*
58 Block out[] = new Block[6];
59
60 out[0] = block.getRelative(-1,0,0);
61 out[1] = block.getRelative(1,0,0);
62
63 out[2] = block.getRelative(0,-1,0);
64 out[3] = block.getRelative(0,1,0);
65
66 out[4] = block.getRelative(0,0,-1);
67 out[5] = block.getRelative(0,0,1);
68 */
69
70 Block out[] = new Block[27];
71 int count = 0;
72 for (int x=-1; x<=1; x++) {
73 for (int y=-1; y<=1; y++) {
74 for (int z=-1; z<=1; z++) {
75 out[count++] = block.getRelative(x,y,z);
76 }
77 }
78
79 }
80
81 return out;
82
83 }
84
85 @EventHandler
86 public void onBlockRedstoneChange(BlockRedstoneEvent event) {
87
88 Block block = event.getBlock();
89
90 //System.out.println( block.toString() + " / " + block.getTypeId() );
91
92
93 int x,y,z;
94 Block blocks[] = getAdjacentBlocks(block);
95
96 for (int i=0; i<blocks.length; i++) {
97 //System.out.println(" " + i + ">" + blocks[i].toString() );
98 Door d = store.findDoor( blocks[i].getLocation() );
99
100 if (d != null) {
101 //System.out.println(" found door");
102 d.powerChange(block.getWorld(), event.getOldCurrent(), event.getNewCurrent() );
103 return;
104 }
105 }
106
107 }
108
109 @EventHandler
110 public void onSignChange(SignChangeEvent event) {
111
112 Block sign = event.getBlock();
113
114 if (sign.getTypeId() == 63) {
115 // don't react on floor signs
116 return;
117 }
118
119 String line0 = event.getLine(0).trim().toLowerCase();
120 String line1 = event.getLine(1).trim().toLowerCase();
121 String line2 = event.getLine(2).trim().toLowerCase();
122 String line3 = event.getLine(3).trim();
123
124 int width = 2;
125 int height = 2;
126
127 boolean isPrivate = false;
128 String password = "";
129
130 String owner = event.getPlayer().getName();
131
132 if (line0.equals("secretdoor") ) {
133 if ( ! line1.equals("")) {
134 Pattern p = Pattern.compile("^[0-9]x[0-9]$");
135 Matcher m = p.matcher(line1);
136
137 if ( !m.matches() ) {
138 event.getPlayer().sendMessage("The second line must be of the format [width]x[height]");
139 return;
140 }
141
142 String parts[] = line1.split("x");
143 width = Integer.parseInt( parts[0] );
144 height = Integer.parseInt( parts[1] );
145
146 if (width <1 || width>8) {
147 event.getPlayer().sendMessage("width must be between 1 and 8 (inclusive)");
148 return;
149 }
150 if (height <2 || height>5) {
151 event.getPlayer().sendMessage("height must be between 2 and 5 (inclusive)");
152 return;
153 }
154 }
155
156 if( line2.equals("private") ) {
157 isPrivate = true;
158 }
159 password = line3;
160
161 try {
162 Door door = new Door(sign, width, height, store, owner, isPrivate, password);
163
164 store.addDoor(door);
165
166 event.getPlayer().sendMessage("Secret door created");
167
168 sign.setTypeId(0);
169 } catch (ConflictingDoorException e) {
170 event.getPlayer().sendMessage("Door conflicts whith another secretdoor");
171 }
172
173
174 }
175 }
176
177 }

  ViewVC Help
Powered by ViewVC 1.1.20