/[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 1605 - (hide annotations) (download)
Sat Oct 1 15:21:07 2011 UTC (12 years, 8 months ago) by torben
File size: 3963 byte(s)
add concept of a private secretdoor which only the owner can open
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 torben 1605
18 torben 1530 public class DoorBlockListener extends BlockListener {
19    
20    
21 torben 1538 private DoorStorage store;
22 torben 1530 private DoorOpenListener handler;
23    
24 torben 1538 private Plugin plugin;
25 torben 1530
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 PlayerListener getPlayerListener() {
37     return handler;
38     }
39    
40     @Override
41     public void onBlockBreak(BlockBreakEvent event) {
42     Door door = store.findDoor(event.getBlock().getLocation() );
43     if (door != null) {
44 torben 1605
45 torben 1537 Player player = event.getPlayer();
46 torben 1538 if ( ! door.getOwner().equals( player.getName() )) {
47 torben 1605 player.sendMessage("Can not break secret door");
48     event.setCancelled(true);
49     } else {
50     player.sendMessage("Secret door broken");
51     store.removeDoor(door);
52 torben 1537 }
53 torben 1530 }
54     }
55    
56 torben 1578 private Block[] getAdjacentBlocks(Block block) {
57 torben 1579 /*
58 torben 1578 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 torben 1579 */
69 torben 1578
70 torben 1579 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 torben 1578 return out;
82    
83     }
84    
85 torben 1530 @Override
86 torben 1578 public void onBlockRedstoneChange(BlockRedstoneEvent event) {
87    
88     Block block = event.getBlock();
89    
90 torben 1580 //System.out.println( block.toString() + " / " + block.getTypeId() );
91 torben 1578
92 torben 1580
93 torben 1578 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 torben 1580 return;
104 torben 1578 }
105     }
106    
107     }
108    
109     @Override
110 torben 1530 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 torben 1533
119     String line0 = event.getLine(0).trim().toLowerCase();
120     String line1 = event.getLine(1).trim().toLowerCase();
121 torben 1605 String line2 = event.getLine(2).trim().toLowerCase();
122 torben 1533
123     int width = 2;
124     int height = 2;
125 torben 1530
126 torben 1605 boolean isPrivate = false;
127    
128     String owner = event.getPlayer().getName();
129    
130 torben 1533 if (line0.equals("secretdoor") ) {
131     if ( ! line1.equals("")) {
132     Pattern p = Pattern.compile("^[0-9]x[0-9]$");
133     Matcher m = p.matcher(line1);
134    
135     if ( !m.matches() ) {
136     event.getPlayer().sendMessage("The second line must be of the format [width]x[height]");
137     return;
138     }
139    
140     String parts[] = line1.split("x");
141     width = Integer.parseInt( parts[0] );
142 torben 1541 height = Integer.parseInt( parts[1] );
143 torben 1533
144 torben 1541 if (width <1 || width>8) {
145     event.getPlayer().sendMessage("width must be between 1 and 8 (inclusive)");
146 torben 1533 return;
147     }
148     if (height <2 || height>5) {
149     event.getPlayer().sendMessage("height must be between 2 and 5 (inclusive)");
150     return;
151     }
152     }
153 torben 1605
154     if( line2.equals("private") ) {
155     isPrivate = true;
156     }
157    
158 torben 1534 try {
159 torben 1605 Door door = new Door(sign, width, height, store, owner, isPrivate );
160 torben 1530
161 torben 1534 store.addDoor(door);
162 torben 1530
163 torben 1534 event.getPlayer().sendMessage("Secret door created");
164 torben 1530
165 torben 1534 sign.setTypeId(0);
166     } catch (ConflictingDoorException e) {
167     event.getPlayer().sendMessage("Door conflicts whith another secretdoor");
168     }
169 torben 1530
170    
171     }
172     }
173    
174     }

  ViewVC Help
Powered by ViewVC 1.1.20