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

Annotation 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 - (hide 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 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 2429 import org.bukkit.Material;
8 torben 1530 import org.bukkit.block.Block;
9 torben 1537 import org.bukkit.entity.Player;
10 torben 1680 import org.bukkit.event.EventHandler;
11     import org.bukkit.event.Listener;
12 torben 1530 import org.bukkit.event.block.BlockBreakEvent;
13 torben 1578 import org.bukkit.event.block.BlockRedstoneEvent;
14 torben 1530 import org.bukkit.event.block.SignChangeEvent;
15     import org.bukkit.plugin.Plugin;
16    
17    
18 torben 1605
19 torben 1680 public class DoorBlockListener implements Listener {
20 torben 1530
21    
22 torben 1538 private DoorStorage store;
23 torben 1530 private DoorOpenListener handler;
24    
25 torben 1538 private Plugin plugin;
26 torben 1530
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 torben 1680 public Listener getPlayerListener() {
38 torben 1530 return handler;
39     }
40    
41 torben 1680 @EventHandler
42 torben 1530 public void onBlockBreak(BlockBreakEvent event) {
43     Door door = store.findDoor(event.getBlock().getLocation() );
44     if (door != null) {
45 torben 1605
46 torben 1537 Player player = event.getPlayer();
47 torben 1538 if ( ! door.getOwner().equals( player.getName() )) {
48 torben 1605 player.sendMessage("Can not break secret door");
49     event.setCancelled(true);
50     } else {
51     player.sendMessage("Secret door broken");
52     store.removeDoor(door);
53 torben 1537 }
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 1680 @EventHandler
87 torben 1578 public void onBlockRedstoneChange(BlockRedstoneEvent event) {
88    
89     Block block = event.getBlock();
90    
91 torben 1580 //System.out.println( block.toString() + " / " + block.getTypeId() );
92 torben 1578
93 torben 1580
94 torben 1578 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 torben 1580 return;
105 torben 1578 }
106     }
107    
108     }
109    
110 torben 1680 @EventHandler
111 torben 1530 public void onSignChange(SignChangeEvent event) {
112    
113     Block sign = event.getBlock();
114    
115 torben 2429 if ( sign.getType().equals( Material.SIGN) ) {
116 torben 1530 // don't react on floor signs
117     return;
118     }
119 torben 1533
120     String line0 = event.getLine(0).trim().toLowerCase();
121     String line1 = event.getLine(1).trim().toLowerCase();
122 torben 1605 String line2 = event.getLine(2).trim().toLowerCase();
123 torben 1912 String line3 = event.getLine(3).trim();
124 torben 1533
125     int width = 2;
126     int height = 2;
127 torben 1530
128 torben 1605 boolean isPrivate = false;
129 torben 1912 String password = "";
130 torben 1605
131     String owner = event.getPlayer().getName();
132    
133 torben 1533 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 torben 1541 height = Integer.parseInt( parts[1] );
146 torben 1533
147 torben 1541 if (width <1 || width>8) {
148     event.getPlayer().sendMessage("width must be between 1 and 8 (inclusive)");
149 torben 1533 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 torben 1605
157     if( line2.equals("private") ) {
158     isPrivate = true;
159     }
160 torben 1912 password = line3;
161 torben 1605
162 torben 1534 try {
163 torben 1912 Door door = new Door(sign, width, height, store, owner, isPrivate, password);
164 torben 1530
165 torben 1534 store.addDoor(door);
166 torben 1530
167 torben 1534 event.getPlayer().sendMessage("Secret door created");
168 torben 1530
169 torben 1534 sign.setTypeId(0);
170     } catch (ConflictingDoorException e) {
171     event.getPlayer().sendMessage("Door conflicts whith another secretdoor");
172     }
173 torben 1530
174    
175     }
176     }
177    
178     }

  ViewVC Help
Powered by ViewVC 1.1.20