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

  ViewVC Help
Powered by ViewVC 1.1.20