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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1579 - (hide annotations) (download)
Sat Jul 16 11:16:09 2011 UTC (12 years, 10 months ago) by torben
File size: 3829 byte(s)
a little more redstone
1 torben 1530 package dk.thoerup.bukkit.hoeruputils.secretdoor;
2    
3    
4 torben 1533 import java.util.regex.Matcher;
5     import java.util.regex.Pattern;
6    
7 torben 1530 import org.bukkit.block.Block;
8 torben 1537 import org.bukkit.entity.Player;
9 torben 1530 import org.bukkit.event.block.BlockBreakEvent;
10     import org.bukkit.event.block.BlockListener;
11 torben 1578 import org.bukkit.event.block.BlockRedstoneEvent;
12 torben 1530 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 torben 1538 private DoorStorage store;
21 torben 1530 private DoorOpenListener handler;
22    
23 torben 1538 private Plugin plugin;
24 torben 1530
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 torben 1537 Player player = event.getPlayer();
44 torben 1538 if ( ! door.getOwner().equals( player.getName() )) {
45 torben 1537
46 torben 1538 Player owner = player.getServer().getPlayer( door.getOwner() );
47    
48 torben 1537 if (owner != null) {
49     owner.sendMessage("" + player.getName() + " broke one of your secret doors");
50     }
51     }
52     player.sendMessage("Secret door broken");
53 torben 1532 store.removeDoor(door);
54 torben 1530 }
55     }
56    
57 torben 1578 private Block[] getAdjacentBlocks(Block block) {
58 torben 1579 /*
59 torben 1578 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 torben 1579 */
70 torben 1578
71 torben 1579 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 torben 1578 return out;
83    
84     }
85    
86 torben 1530 @Override
87 torben 1578 public void onBlockRedstoneChange(BlockRedstoneEvent event) {
88     //System.out.println( event.getBlock().toString() );
89    
90     Block block = event.getBlock();
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     }
104     }
105    
106     }
107    
108     @Override
109 torben 1530 public void onSignChange(SignChangeEvent event) {
110    
111     Block sign = event.getBlock();
112    
113     if (sign.getTypeId() == 63) {
114     // don't react on floor signs
115     return;
116     }
117 torben 1533
118     String line0 = event.getLine(0).trim().toLowerCase();
119     String line1 = event.getLine(1).trim().toLowerCase();
120    
121     int width = 2;
122     int height = 2;
123 torben 1530
124 torben 1533 if (line0.equals("secretdoor") ) {
125     if ( ! line1.equals("")) {
126     Pattern p = Pattern.compile("^[0-9]x[0-9]$");
127     Matcher m = p.matcher(line1);
128    
129     if ( !m.matches() ) {
130     event.getPlayer().sendMessage("The second line must be of the format [width]x[height]");
131     return;
132     }
133    
134     String parts[] = line1.split("x");
135     width = Integer.parseInt( parts[0] );
136 torben 1541 height = Integer.parseInt( parts[1] );
137 torben 1533
138 torben 1541 if (width <1 || width>8) {
139     event.getPlayer().sendMessage("width must be between 1 and 8 (inclusive)");
140 torben 1533 return;
141     }
142     if (height <2 || height>5) {
143     event.getPlayer().sendMessage("height must be between 2 and 5 (inclusive)");
144     return;
145     }
146     }
147 torben 1534 try {
148 torben 1536 Door door = new Door(sign, width, height, store, event.getPlayer().getName() );
149 torben 1530
150 torben 1534 store.addDoor(door);
151 torben 1530
152 torben 1534 event.getPlayer().sendMessage("Secret door created");
153 torben 1530
154 torben 1534 sign.setTypeId(0);
155     } catch (ConflictingDoorException e) {
156     event.getPlayer().sendMessage("Door conflicts whith another secretdoor");
157     }
158 torben 1530
159    
160     }
161     }
162    
163     }

  ViewVC Help
Powered by ViewVC 1.1.20