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

  ViewVC Help
Powered by ViewVC 1.1.20