/[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 1578 - (show annotations) (download)
Sat Jul 16 11:01:02 2011 UTC (12 years, 10 months ago) by torben
File size: 3614 byte(s)
get started on redstone controlled doors
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.block.BlockBreakEvent;
10 import org.bukkit.event.block.BlockListener;
11 import org.bukkit.event.block.BlockRedstoneEvent;
12 import org.bukkit.event.block.SignChangeEvent;
13 import org.bukkit.event.player.PlayerListener;
14 import org.bukkit.plugin.Plugin;
15
16
17 public class DoorBlockListener extends BlockListener {
18
19
20 private DoorStorage store;
21 private DoorOpenListener handler;
22
23 private Plugin plugin;
24
25 public DoorBlockListener(Plugin plugin) {
26 this.plugin = plugin;
27
28 store = new DoorStorage( plugin );
29
30 store.loadAll();
31
32 handler = new DoorOpenListener(store, plugin);
33 }
34
35 public PlayerListener getPlayerListener() {
36 return handler;
37 }
38
39 @Override
40 public void onBlockBreak(BlockBreakEvent event) {
41 Door door = store.findDoor(event.getBlock().getLocation() );
42 if (door != null) {
43 Player player = event.getPlayer();
44 if ( ! door.getOwner().equals( player.getName() )) {
45
46 Player owner = player.getServer().getPlayer( door.getOwner() );
47
48 if (owner != null) {
49 owner.sendMessage("" + player.getName() + " broke one of your secret doors");
50 }
51 }
52 player.sendMessage("Secret door broken");
53 store.removeDoor(door);
54 }
55 }
56
57 private Block[] getAdjacentBlocks(Block block) {
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 return out;
70
71 }
72
73 @Override
74 public void onBlockRedstoneChange(BlockRedstoneEvent event) {
75 //System.out.println( event.getBlock().toString() );
76
77 Block block = event.getBlock();
78
79
80 int x,y,z;
81 Block blocks[] = getAdjacentBlocks(block);
82
83 for (int i=0; i<blocks.length; i++) {
84 //System.out.println(" " + i + ">" + blocks[i].toString() );
85 Door d = store.findDoor( blocks[i].getLocation() );
86
87 if (d != null) {
88 //System.out.println(" found door");
89 d.powerChange(block.getWorld(), event.getOldCurrent(), event.getNewCurrent() );
90 }
91 }
92
93 }
94
95 @Override
96 public void onSignChange(SignChangeEvent event) {
97
98 Block sign = event.getBlock();
99
100 if (sign.getTypeId() == 63) {
101 // don't react on floor signs
102 return;
103 }
104
105 String line0 = event.getLine(0).trim().toLowerCase();
106 String line1 = event.getLine(1).trim().toLowerCase();
107
108 int width = 2;
109 int height = 2;
110
111 if (line0.equals("secretdoor") ) {
112 if ( ! line1.equals("")) {
113 Pattern p = Pattern.compile("^[0-9]x[0-9]$");
114 Matcher m = p.matcher(line1);
115
116 if ( !m.matches() ) {
117 event.getPlayer().sendMessage("The second line must be of the format [width]x[height]");
118 return;
119 }
120
121 String parts[] = line1.split("x");
122 width = Integer.parseInt( parts[0] );
123 height = Integer.parseInt( parts[1] );
124
125 if (width <1 || width>8) {
126 event.getPlayer().sendMessage("width must be between 1 and 8 (inclusive)");
127 return;
128 }
129 if (height <2 || height>5) {
130 event.getPlayer().sendMessage("height must be between 2 and 5 (inclusive)");
131 return;
132 }
133 }
134 try {
135 Door door = new Door(sign, width, height, store, event.getPlayer().getName() );
136
137 store.addDoor(door);
138
139 event.getPlayer().sendMessage("Secret door created");
140
141 sign.setTypeId(0);
142 } catch (ConflictingDoorException e) {
143 event.getPlayer().sendMessage("Door conflicts whith another secretdoor");
144 }
145
146
147 }
148 }
149
150 }

  ViewVC Help
Powered by ViewVC 1.1.20