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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1534 - (show annotations) (download)
Mon Jun 27 19:43:33 2011 UTC (12 years, 10 months ago) by torben
File size: 2334 byte(s)
Add guards against overlapping secretdoors
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.event.block.BlockBreakEvent;
9 import org.bukkit.event.block.BlockListener;
10 import org.bukkit.event.block.SignChangeEvent;
11 import org.bukkit.event.player.PlayerListener;
12 import org.bukkit.plugin.Plugin;
13
14
15 public class DoorBlockListener extends BlockListener {
16
17
18 DoorStorage store;
19 private DoorOpenListener handler;
20
21 Plugin plugin;
22
23 public DoorBlockListener(Plugin plugin) {
24 this.plugin = plugin;
25
26 store = new DoorStorage( plugin );
27
28 store.loadAll();
29
30 handler = new DoorOpenListener(store, plugin);
31 }
32
33 public PlayerListener getPlayerListener() {
34 return handler;
35 }
36
37 @Override
38 public void onBlockBreak(BlockBreakEvent event) {
39 Door door = store.findDoor(event.getBlock().getLocation() );
40 if (door != null) {
41 event.getPlayer().sendMessage("Secret door broken");
42 store.removeDoor(door);
43 }
44 }
45
46 @Override
47 public void onSignChange(SignChangeEvent event) {
48
49 Block sign = event.getBlock();
50
51 if (sign.getTypeId() == 63) {
52 // don't react on floor signs
53 return;
54 }
55
56 String line0 = event.getLine(0).trim().toLowerCase();
57 String line1 = event.getLine(1).trim().toLowerCase();
58
59 int width = 2;
60 int height = 2;
61
62 if (line0.equals("secretdoor") ) {
63 if ( ! line1.equals("")) {
64 Pattern p = Pattern.compile("^[0-9]x[0-9]$");
65 Matcher m = p.matcher(line1);
66
67 if ( !m.matches() ) {
68 event.getPlayer().sendMessage("The second line must be of the format [width]x[height]");
69 return;
70 }
71
72 String parts[] = line1.split("x");
73 width = Integer.parseInt( parts[0] );
74 height = Integer.parseInt( parts[0] );
75
76 if (width <1 || width>5) {
77 event.getPlayer().sendMessage("width must be between 1 and 5 (inclusive)");
78 return;
79 }
80 if (height <2 || height>5) {
81 event.getPlayer().sendMessage("height must be between 2 and 5 (inclusive)");
82 return;
83 }
84 }
85 try {
86 Door door = new Door(sign, width, height, store);
87
88 store.addDoor(door);
89
90 event.getPlayer().sendMessage("Secret door created");
91
92 sign.setTypeId(0);
93 } catch (ConflictingDoorException e) {
94 event.getPlayer().sendMessage("Door conflicts whith another secretdoor");
95 }
96
97
98 }
99 }
100
101 }

  ViewVC Help
Powered by ViewVC 1.1.20