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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

miscJava/bukkit-minecraft-plugins/HoerupUtils/src/dk/thoerup/bukkit/hoeruputils/secretdoor/Door.java revision 1530 by torben, Mon Jun 27 16:14:34 2011 UTC miscJava/bukkit-minecraft-plugins/HoerupUtils/src/main/java/dk/thoerup/bukkit/hoeruputils/secretdoor/Door.java revision 1912 by torben, Sun Jan 13 13:05:16 2013 UTC
# Line 2  package dk.thoerup.bukkit.hoeruputils.se Line 2  package dk.thoerup.bukkit.hoeruputils.se
2    
3  import java.util.Map;  import java.util.Map;
4    
5    import org.bukkit.Material;
6  import org.bukkit.Location;  import org.bukkit.Location;
7  import org.bukkit.Server;  import org.bukkit.Server;
8  import org.bukkit.World;  import org.bukkit.World;
9  import org.bukkit.block.Block;  import org.bukkit.block.Block;
10    
11    
   
12  class Door {  class Door {
13          Location leftUpper;          final static int EAST = 0;
14          Location rightUpper;          final static int WEST = 1;
15          Location leftLower;          final static int NORTH = 2;
16          Location rightLower;          final static int SOUTH = 3;
17            
18          int material;          private Location leftUpper;
19    
20            
21            private Location blocks[][]; // [width][height] - [0][0] == leftUpper
22            private int material[][];
23            private byte data[][];
24            
25            private int direction;
26            
27            private int width;
28            private int height;
29    
30            private String owner;
31    
32            private boolean isPrivate;
33            
34            private String password;
35            
36    
37          public Door(Block sign) {          public Door(Block sign, int width, int height, DoorStorage store, String owner, boolean isPrivate, String password) throws ConflictingDoorException{
38                  leftUpper = sign.getLocation().clone();                  leftUpper = sign.getLocation().clone();
39                  rightUpper = sign.getLocation().clone();                  
40                    this.width = width;
41                    this.height = height;
42    
43                    this.owner = owner;
44    
45                    this.isPrivate = isPrivate;
46                    this.password = password;
47                    
48    
49                    direction = sign.getData() - 2;
50                    
51                  switch ( sign.getData() ) {                  switch ( sign.getData() ) {
52                  case 2: //facing east                  case 2: //facing east
53                          leftUpper.setZ( leftUpper.getZ() + 1 );                          leftUpper.setZ( leftUpper.getZ() + 1 );
                         rightUpper.setZ( rightUpper.getZ() + 1 );  
                         rightUpper.setX( rightUpper.getX() - 1 );  
54                          break;                            break;  
55                  case 3: //facing west                  case 3: //facing west
56                          leftUpper.setZ( leftUpper.getZ() - 1 );                          leftUpper.setZ( leftUpper.getZ() - 1 );
                         rightUpper.setZ( rightUpper.getZ() - 1 );  
                         rightUpper.setX( rightUpper.getX() + 1 );                                
57                          break;                          break;
58                  case 4: //facing north                  case 4: //facing north
59                          leftUpper.setX( leftUpper.getX() + 1);                          leftUpper.setX( leftUpper.getX() + 1);
                         rightUpper.setX( rightUpper.getX() + 1);  
                         rightUpper.setZ( rightUpper.getZ() + 1);  
60                          break;                          break;
61                  case 5: //facing south                  case 5: //facing south
62                          leftUpper.setX( leftUpper.getX() - 1);                          leftUpper.setX( leftUpper.getX() - 1);
                         rightUpper.setX( rightUpper.getX() - 1);  
                         rightUpper.setZ( rightUpper.getZ() - 1);  
63                          break;                          break;
64                  }                  }
65    
66                  material = sign.getWorld().getBlockAt( leftUpper ).getTypeId();                  
67                    
68                  leftLower = leftUpper.clone();                  //material = leftUpper.getBlock().getTypeId();
69                  rightLower = rightUpper.clone();                  
70                    loadBlocks();
71                    
72            
73                    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    
                 leftLower.setY( leftLower.getY() - 1);  
                 rightLower.setY( rightLower.getY() - 1);  
82          }          }
83    
84    /*
85            @Deprecated
86          public Door(String input, Server server) {          public Door(String input, Server server) {
87                  String parts[] = input.split(":");                  String parts[] = input.split(":");
88    
89                  World w = server.getWorld( parts[0] );                  World w = server.getWorld( parts[0] );
90    
91                  leftUpper  = new Location(w, Integer.parseInt(parts[1]),  Integer.parseInt(parts[2]),  Integer.parseInt(parts[3]) );                  leftUpper  = new Location(w, Integer.parseInt(parts[1]),  Integer.parseInt(parts[2]),  Integer.parseInt(parts[3]) );
92                  rightUpper = new Location(w, Integer.parseInt(parts[4]),  Integer.parseInt(parts[5]),  Integer.parseInt(parts[6]) );                  direction = Integer.parseInt( parts[4] );
93                  leftLower  = new Location(w, Integer.parseInt(parts[7]),  Integer.parseInt(parts[8]),  Integer.parseInt(parts[9]) );                  //material = Integer.parseInt( parts[5] );
94                  rightLower = new Location(w, Integer.parseInt(parts[10]), Integer.parseInt(parts[11]), Integer.parseInt(parts[12]) );                  
95                  material = Integer.parseInt( parts[13] );                  width = Integer.parseInt( parts[6] );
96                    height = Integer.parseInt( parts[7] );
97                    owner = parts[8];
98    
99                    
100                    loadBlocks();
101            }*/
102    
103            public Door(Location loc, int direction, int width, int height, String owner, boolean isPrivate, String password) {
104                    leftUpper = loc;
105                    this.direction = direction;
106                    this.width = width;
107                    this.height = height;
108                    this.owner = owner;
109                    this.isPrivate = isPrivate;
110                    this.password = password;
111    
112                    loadBlocks();
113          }          }
114    
115          public String toCsv() {          
116    
117            public void powerChange(World world, int oldCurrent, int newCurrent ) {
118                    if (isPowered() == true) {
119                            open();
120                    } else {
121                            close();
122                    }      
123            }
124    
125            public boolean isPowered() {
126                    for (int w=0; w<width; w++) {
127                            for (int h=0; h<height; h++) {
128                                    Block b = blocks[w][h].getBlock();
129    
130                                    if ( b.isBlockPowered() ||  b.isBlockIndirectlyPowered() )
131                                            return true;
132                            }
133                    }
134                            
135                    return false;
136            }
137            
138            private void loadBlocks() {
139                    blocks = new Location[width][height];          
140                    material = new int[width][height];              
141                    data = new byte[width][height];        
142                    
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    
170                                    material[w][h] = blocks[w][h].getBlock().getTypeId();
171                                    data[w][h] = blocks[w][h].getBlock().getData();
172                                    
173                            }
174                    }
175                    
176            }
177    
178    /*      public String toCsv() {
179                  StringBuilder sb = new StringBuilder();                  StringBuilder sb = new StringBuilder();
180                  sb.append( leftUpper.getWorld().getName() );                  sb.append( leftUpper.getWorld().getName() );
181    
182                  sb.append( ":" + leftUpper.getBlockX() );                  sb.append( ":" + leftUpper.getBlockX() );
183                  sb.append( ":" + leftUpper.getBlockY() );                  sb.append( ":" + leftUpper.getBlockY() );
184                  sb.append( ":" + leftUpper.getBlockZ() );                  sb.append( ":" + leftUpper.getBlockZ() );
185                    
186                    sb.append( ":" + direction );
187    
188                  sb.append( ":" + rightUpper.getBlockX() );                  sb.append( ":" + material[0][0] );
189                  sb.append( ":" + rightUpper.getBlockY() );                  
190                  sb.append( ":" + rightUpper.getBlockZ() );                  sb.append( ":" + width );
191                    sb.append( ":" + height );
192                    sb.append( ":" + owner);
193    
194                    return sb.toString();
195            }*/
196    
                 sb.append( ":" + leftLower.getBlockX() );  
                 sb.append( ":" + leftLower.getBlockY() );  
                 sb.append( ":" + leftLower.getBlockZ() );  
197    
198            public void registerMap(Map<Location,Door> map) {
199                    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            }
205    
206                  sb.append( ":" + rightLower.getBlockX() );          public void unregisterMap(Map<Location,Door> map) {
207                  sb.append( ":" + rightLower.getBlockY() );                  for (int w=0; w<width; w++) {
208                  sb.append( ":" + rightLower.getBlockZ() );                          for (int h=0; h<height; h++) {
209                                    map.remove( blocks[w][h] );
210                            }
211                    }
212    
213                  sb.append( ":" + material );          }
214    
215                  return sb.toString();          public void open() {
216                    for (int w=0; w<width; w++) {
217                            for (int h=0; h<height; h++) {                          
218                                    //blocks[w][h].getBlock().setTypeId( 0, false);
219                                    blocks[w][h].getBlock().setType( Material.AIR );
220                            }
221                    }
222    
223            }
224    
225            public void close() {
226                    for (int w=0; w<width; w++) {
227                            for (int h=0; h<height; h++) {                          
228                                    blocks[w][h].getBlock().setTypeIdAndData( material[w][h], data[w][h], true );
229                            }
230                    }
231          }          }
232    
233    
234          public void registerMap(Map<Location,Door> map) {          /////// setters and getters
235                  map.put(leftUpper, this );          public String getOwner() {
236                  map.put(rightUpper, this );                  return owner;
                 map.put(leftLower, this );  
                 map.put(rightLower, this );  
237          }          }
238    
239          public void unregisterMap(Map<Location,Door> map) {          public Location getLeftUpper() {
240                  map.remove(leftUpper);                  return leftUpper;
241                  map.remove(rightUpper);          }
242                  map.remove(leftLower);  
243                  map.remove(rightLower);          public int getWidth() {
244                    return width;
245            }
246    
247            public int getHeight() {
248                    return height;
249          }          }
250    
251          public void open(World world) {          public int getDirection() {
252                  world.getBlockAt( leftUpper ).setTypeId( 0 );                  return direction;
                 world.getBlockAt( rightUpper ).setTypeId( 0 );  
                 world.getBlockAt( leftLower ).setTypeId( 0 );  
                 world.getBlockAt( rightLower ).setTypeId( 0 );  
253          }          }
254    
255          public void close(World world) {          public boolean isPrivate() {
256                  world.getBlockAt( leftUpper ).setTypeId( material );                  return isPrivate;
257                  world.getBlockAt( rightUpper ).setTypeId( material );          }
258                  world.getBlockAt( leftLower ).setTypeId( material );          
259                  world.getBlockAt( rightLower ).setTypeId( material );          public String getPassword() {
260                    return password;
261          }          }
262    
 }  
263    }

Legend:
Removed from v.1530  
changed lines
  Added in v.1912

  ViewVC Help
Powered by ViewVC 1.1.20