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

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

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

revision 1530 by torben, Mon Jun 27 16:14:34 2011 UTC revision 1535 by torben, Wed Jun 29 14:57:08 2011 UTC
# Line 8  import org.bukkit.World; Line 8  import org.bukkit.World;
8  import org.bukkit.block.Block;  import org.bukkit.block.Block;
9    
10    
   
11  class Door {  class Door {
12            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          Location leftUpper;          Location leftUpper;
18          Location rightUpper;  
19          Location leftLower;          
20          Location rightLower;          Location blocks[][]; // [width][height] - [0][0] == leftUpper
21    
22          int material;          int material;
23            
24            int direction;
25            
26            int width;
27            int height;
28            
29    
30          public Door(Block sign) {          public Door(Block sign, int width, int height, DoorStorage store) throws ConflictingDoorException{
31                  leftUpper = sign.getLocation().clone();                  leftUpper = sign.getLocation().clone();
32                  rightUpper = sign.getLocation().clone();                  
33                    this.width = width;
34                    this.height = height;
35                    
36                    blocks = new Location[width][height];          
37    
38                    direction = sign.getData() - 2;
39                    
40                  switch ( sign.getData() ) {                  switch ( sign.getData() ) {
41                  case 2: //facing east                  case 2: //facing east
42                          leftUpper.setZ( leftUpper.getZ() + 1 );                          leftUpper.setZ( leftUpper.getZ() + 1 );
                         rightUpper.setZ( rightUpper.getZ() + 1 );  
                         rightUpper.setX( rightUpper.getX() - 1 );  
43                          break;                            break;  
44                  case 3: //facing west                  case 3: //facing west
45                          leftUpper.setZ( leftUpper.getZ() - 1 );                          leftUpper.setZ( leftUpper.getZ() - 1 );
                         rightUpper.setZ( rightUpper.getZ() - 1 );  
                         rightUpper.setX( rightUpper.getX() + 1 );                                
46                          break;                          break;
47                  case 4: //facing north                  case 4: //facing north
48                          leftUpper.setX( leftUpper.getX() + 1);                          leftUpper.setX( leftUpper.getX() + 1);
                         rightUpper.setX( rightUpper.getX() + 1);  
                         rightUpper.setZ( rightUpper.getZ() + 1);  
49                          break;                          break;
50                  case 5: //facing south                  case 5: //facing south
51                          leftUpper.setX( leftUpper.getX() - 1);                          leftUpper.setX( leftUpper.getX() - 1);
                         rightUpper.setX( rightUpper.getX() - 1);  
                         rightUpper.setZ( rightUpper.getZ() - 1);  
52                          break;                          break;
53                  }                  }
54    
55                  material = sign.getWorld().getBlockAt( leftUpper ).getTypeId();                  
56                    
57                  leftLower = leftUpper.clone();                  material = leftUpper.getBlock().getTypeId();
58                  rightLower = rightUpper.clone();                  
59                    loadBlocks();
60                    
61                    
62                    for (int w=0; w<width; w++) {
63                            for (int h=0; h<height; h++) {
64                                    Door d = store.findDoor( blocks[w][h] );
65                                    if (d != null) {
66                                            throw new ConflictingDoorException();
67                                    }
68                            }
69                    }
70    
                 leftLower.setY( leftLower.getY() - 1);  
                 rightLower.setY( rightLower.getY() - 1);  
71          }          }
72    
73          public Door(String input, Server server) {          public Door(String input, Server server) {
# Line 59  class Door { Line 76  class Door {
76                  World w = server.getWorld( parts[0] );                  World w = server.getWorld( parts[0] );
77    
78                  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]) );
79                  rightUpper = new Location(w, Integer.parseInt(parts[4]),  Integer.parseInt(parts[5]),  Integer.parseInt(parts[6]) );                  direction = Integer.parseInt( parts[4] );
80                  leftLower  = new Location(w, Integer.parseInt(parts[7]),  Integer.parseInt(parts[8]),  Integer.parseInt(parts[9]) );                  material = Integer.parseInt( parts[5] );
81                  rightLower = new Location(w, Integer.parseInt(parts[10]), Integer.parseInt(parts[11]), Integer.parseInt(parts[12]) );                  
82                  material = Integer.parseInt( parts[13] );                  width = Integer.parseInt( parts[6] );
83                    height = Integer.parseInt( parts[7] );
84    
85    
86                    blocks = new Location[width][height];          
87                    
88                    loadBlocks();
89            }
90            
91            private void loadBlocks() {
92                    
93                    for (int w=0; w<width; w++) {
94                            for (int h=0; h<height; h++) {
95                                    int x = leftUpper.getBlockX();
96                                    int y = leftUpper.getBlockY();
97                                    int z = leftUpper.getBlockZ();
98                                    switch(direction) {
99                                    case EAST:
100                                            x -= w;
101                                            break;
102                                    case WEST:
103                                            x += w;
104                                            break;                                  
105                                    case NORTH:
106                                            z += w;
107                                            break;
108                                    case SOUTH:
109                                            z -= w;
110                                            break;
111                                    default:
112                                            System.out.println("[SecretDoor] this should never happen");                            
113                                    }
114                                    y -= h;
115                                    
116                                    //System.out.println("Add block: " + x + ":" + y + ":" + z);
117                                    
118                                    blocks[w][h] = new Location( leftUpper.getWorld(), x, y, z);
119                                    
120                            }
121                    }
122                    
123          }          }
124    
125          public String toCsv() {          public String toCsv() {
# Line 72  class Door { Line 129  class Door {
129                  sb.append( ":" + leftUpper.getBlockX() );                  sb.append( ":" + leftUpper.getBlockX() );
130                  sb.append( ":" + leftUpper.getBlockY() );                  sb.append( ":" + leftUpper.getBlockY() );
131                  sb.append( ":" + leftUpper.getBlockZ() );                  sb.append( ":" + leftUpper.getBlockZ() );
132                    
133                  sb.append( ":" + rightUpper.getBlockX() );                  sb.append( ":" + direction );
                 sb.append( ":" + rightUpper.getBlockY() );  
                 sb.append( ":" + rightUpper.getBlockZ() );  
   
   
                 sb.append( ":" + leftLower.getBlockX() );  
                 sb.append( ":" + leftLower.getBlockY() );  
                 sb.append( ":" + leftLower.getBlockZ() );  
   
   
                 sb.append( ":" + rightLower.getBlockX() );  
                 sb.append( ":" + rightLower.getBlockY() );  
                 sb.append( ":" + rightLower.getBlockZ() );  
134    
135                  sb.append( ":" + material );                  sb.append( ":" + material );
136                    
137                    sb.append( ":" + width );
138                    sb.append( ":" + height );
139    
140                  return sb.toString();                  return sb.toString();
141          }          }
142    
143    
144          public void registerMap(Map<Location,Door> map) {          public void registerMap(Map<Location,Door> map) {
145                  map.put(leftUpper, this );                  for (int w=0; w<width; w++) {
146                  map.put(rightUpper, this );                          for (int h=0; h<height; h++) {
147                  map.put(leftLower, this );                                  map.put(blocks[w][h], this);
148                  map.put(rightLower, this );                          }
149                    }
150          }          }
151    
152          public void unregisterMap(Map<Location,Door> map) {          public void unregisterMap(Map<Location,Door> map) {
153                  map.remove(leftUpper);                  for (int w=0; w<width; w++) {
154                  map.remove(rightUpper);                          for (int h=0; h<height; h++) {
155                  map.remove(leftLower);                                  map.remove( blocks[w][h] );
156                  map.remove(rightLower);                          }
157                    }
158    
159          }          }
160    
161          public void open(World world) {          public void open(World world) {
162                  world.getBlockAt( leftUpper ).setTypeId( 0 );                  for (int w=0; w<width; w++) {
163                  world.getBlockAt( rightUpper ).setTypeId( 0 );                          for (int h=0; h<height; h++) {                          
164                  world.getBlockAt( leftLower ).setTypeId( 0 );                                  blocks[w][h].getBlock().setTypeId(0);
165                  world.getBlockAt( rightLower ).setTypeId( 0 );                          }
166                    }
167    
168          }          }
169    
170          public void close(World world) {          public void close(World world) {
171                  world.getBlockAt( leftUpper ).setTypeId( material );                  for (int w=0; w<width; w++) {
172                  world.getBlockAt( rightUpper ).setTypeId( material );                          for (int h=0; h<height; h++) {                          
173                  world.getBlockAt( leftLower ).setTypeId( material );                                  blocks[w][h].getBlock().setTypeId( material );
174                  world.getBlockAt( rightLower ).setTypeId( material );                          }
175                    }
176          }          }
177    
 }  
178    }

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

  ViewVC Help
Powered by ViewVC 1.1.20