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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1912 - (hide annotations) (download)
Sun Jan 13 13:05:16 2013 UTC (11 years, 4 months ago) by torben
File size: 5323 byte(s)
First try at opening doors with passwords
1 torben 1530 package dk.thoerup.bukkit.hoeruputils.secretdoor;
2    
3     import java.util.Map;
4    
5 torben 1708 import org.bukkit.Material;
6 torben 1530 import org.bukkit.Location;
7     import org.bukkit.Server;
8     import org.bukkit.World;
9     import org.bukkit.block.Block;
10    
11    
12     class Door {
13 torben 1532 final static int EAST = 0;
14     final static int WEST = 1;
15     final static int NORTH = 2;
16     final static int SOUTH = 3;
17    
18 torben 1538 private Location leftUpper;
19 torben 1530
20 torben 1532
21 torben 1538 private Location blocks[][]; // [width][height] - [0][0] == leftUpper
22 torben 1581 private int material[][];
23     private byte data[][];
24 torben 1532
25 torben 1538 private int direction;
26 torben 1532
27 torben 1538 private int width;
28     private int height;
29 torben 1536
30 torben 1538 private String owner;
31 torben 1605
32     private boolean isPrivate;
33 torben 1532
34 torben 1912 private String password;
35    
36 torben 1530
37 torben 1912 public Door(Block sign, int width, int height, DoorStorage store, String owner, boolean isPrivate, String password) throws ConflictingDoorException{
38 torben 1530 leftUpper = sign.getLocation().clone();
39 torben 1532
40 torben 1533 this.width = width;
41     this.height = height;
42 torben 1536
43     this.owner = owner;
44 torben 1605
45     this.isPrivate = isPrivate;
46 torben 1912 this.password = password;
47 torben 1533
48 torben 1530
49 torben 1532 direction = sign.getData() - 2;
50    
51 torben 1530 switch ( sign.getData() ) {
52     case 2: //facing east
53     leftUpper.setZ( leftUpper.getZ() + 1 );
54     break;
55     case 3: //facing west
56     leftUpper.setZ( leftUpper.getZ() - 1 );
57     break;
58     case 4: //facing north
59     leftUpper.setX( leftUpper.getX() + 1);
60     break;
61     case 5: //facing south
62     leftUpper.setX( leftUpper.getX() - 1);
63     break;
64     }
65    
66 torben 1532
67    
68 torben 1581 //material = leftUpper.getBlock().getTypeId();
69 torben 1532
70     loadBlocks();
71 torben 1534
72 torben 1578
73 torben 1534 for (int w=0; w<width; w++) {
74     for (int h=0; h<height; h++) {
75     Door d = store.findDoor( blocks[w][h] );
76     if (d != null) {
77     throw new ConflictingDoorException();
78     }
79     }
80     }
81 torben 1530
82     }
83    
84 torben 1604 /*
85     @Deprecated
86 torben 1530 public Door(String input, Server server) {
87     String parts[] = input.split(":");
88    
89     World w = server.getWorld( parts[0] );
90    
91     leftUpper = new Location(w, Integer.parseInt(parts[1]), Integer.parseInt(parts[2]), Integer.parseInt(parts[3]) );
92 torben 1532 direction = Integer.parseInt( parts[4] );
93 torben 1581 //material = Integer.parseInt( parts[5] );
94 torben 1533
95     width = Integer.parseInt( parts[6] );
96     height = Integer.parseInt( parts[7] );
97 torben 1536 owner = parts[8];
98 torben 1535
99 torben 1533
100 torben 1532 loadBlocks();
101 torben 1604 }*/
102    
103 torben 1912 public Door(Location loc, int direction, int width, int height, String owner, boolean isPrivate, String password) {
104 torben 1604 leftUpper = loc;
105     this.direction = direction;
106     this.width = width;
107     this.height = height;
108     this.owner = owner;
109 torben 1605 this.isPrivate = isPrivate;
110 torben 1912 this.password = password;
111 torben 1604
112     loadBlocks();
113 torben 1530 }
114 torben 1578
115 torben 1604
116    
117 torben 1578 public void powerChange(World world, int oldCurrent, int newCurrent ) {
118 torben 1580 if (isPowered() == true) {
119 torben 1579 open();
120 torben 1578 } else {
121 torben 1579 close();
122 torben 1578 }
123     }
124 torben 1579
125     public boolean isPowered() {
126     for (int w=0; w<width; w++) {
127     for (int h=0; h<height; h++) {
128 torben 1580 Block b = blocks[w][h].getBlock();
129    
130     if ( b.isBlockPowered() || b.isBlockIndirectlyPowered() )
131 torben 1579 return true;
132     }
133     }
134    
135     return false;
136     }
137 torben 1532
138     private void loadBlocks() {
139 torben 1581 blocks = new Location[width][height];
140     material = new int[width][height];
141     data = new byte[width][height];
142 torben 1532
143     for (int w=0; w<width; w++) {
144     for (int h=0; h<height; h++) {
145     int x = leftUpper.getBlockX();
146     int y = leftUpper.getBlockY();
147     int z = leftUpper.getBlockZ();
148     switch(direction) {
149     case EAST:
150     x -= w;
151     break;
152     case WEST:
153     x += w;
154     break;
155     case NORTH:
156     z += w;
157     break;
158     case SOUTH:
159     z -= w;
160     break;
161     default:
162     System.out.println("[SecretDoor] this should never happen");
163     }
164     y -= h;
165    
166     //System.out.println("Add block: " + x + ":" + y + ":" + z);
167    
168     blocks[w][h] = new Location( leftUpper.getWorld(), x, y, z);
169 torben 1581
170     material[w][h] = blocks[w][h].getBlock().getTypeId();
171     data[w][h] = blocks[w][h].getBlock().getData();
172 torben 1532
173     }
174     }
175    
176     }
177 torben 1530
178 torben 1604 /* public String toCsv() {
179 torben 1530 StringBuilder sb = new StringBuilder();
180     sb.append( leftUpper.getWorld().getName() );
181    
182     sb.append( ":" + leftUpper.getBlockX() );
183     sb.append( ":" + leftUpper.getBlockY() );
184     sb.append( ":" + leftUpper.getBlockZ() );
185 torben 1532
186     sb.append( ":" + direction );
187 torben 1530
188 torben 1581 sb.append( ":" + material[0][0] );
189 torben 1533
190     sb.append( ":" + width );
191     sb.append( ":" + height );
192 torben 1536 sb.append( ":" + owner);
193 torben 1530
194     return sb.toString();
195 torben 1604 }*/
196 torben 1530
197    
198     public void registerMap(Map<Location,Door> map) {
199 torben 1532 for (int w=0; w<width; w++) {
200     for (int h=0; h<height; h++) {
201     map.put(blocks[w][h], this);
202     }
203     }
204 torben 1530 }
205    
206     public void unregisterMap(Map<Location,Door> map) {
207 torben 1532 for (int w=0; w<width; w++) {
208     for (int h=0; h<height; h++) {
209     map.remove( blocks[w][h] );
210     }
211     }
212    
213 torben 1530 }
214    
215 torben 1579 public void open() {
216 torben 1532 for (int w=0; w<width; w++) {
217     for (int h=0; h<height; h++) {
218 torben 1708 //blocks[w][h].getBlock().setTypeId( 0, false);
219     blocks[w][h].getBlock().setType( Material.AIR );
220 torben 1532 }
221     }
222    
223 torben 1530 }
224    
225 torben 1579 public void close() {
226 torben 1532 for (int w=0; w<width; w++) {
227     for (int h=0; h<height; h++) {
228 torben 1581 blocks[w][h].getBlock().setTypeIdAndData( material[w][h], data[w][h], true );
229 torben 1532 }
230     }
231 torben 1530 }
232    
233 torben 1538
234     /////// setters and getters
235     public String getOwner() {
236     return owner;
237     }
238    
239 torben 1604 public Location getLeftUpper() {
240     return leftUpper;
241     }
242    
243     public int getWidth() {
244     return width;
245     }
246    
247     public int getHeight() {
248     return height;
249     }
250    
251     public int getDirection() {
252     return direction;
253     }
254    
255 torben 1605 public boolean isPrivate() {
256     return isPrivate;
257     }
258 torben 1912
259     public String getPassword() {
260     return password;
261     }
262 torben 1605
263 torben 1535 }

  ViewVC Help
Powered by ViewVC 1.1.20