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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.20