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

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

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

revision 1532 by torben, Mon Jun 27 18:10:05 2011 UTC revision 1580 by torben, Sun Jul 17 19:28:22 2011 UTC
# Line 1  Line 1 
1  package dk.thoerup.bukkit.hoeruputils.secretdoor;  package dk.thoerup.bukkit.hoeruputils.secretdoor;
2    
3    
4    import java.util.regex.Matcher;
5    import java.util.regex.Pattern;
6    
7  import org.bukkit.block.Block;  import org.bukkit.block.Block;
8    import org.bukkit.entity.Player;
9  import org.bukkit.event.block.BlockBreakEvent;  import org.bukkit.event.block.BlockBreakEvent;
10  import org.bukkit.event.block.BlockListener;  import org.bukkit.event.block.BlockListener;
11    import org.bukkit.event.block.BlockRedstoneEvent;
12  import org.bukkit.event.block.SignChangeEvent;  import org.bukkit.event.block.SignChangeEvent;
13  import org.bukkit.event.player.PlayerListener;  import org.bukkit.event.player.PlayerListener;
14  import org.bukkit.plugin.Plugin;  import org.bukkit.plugin.Plugin;
# Line 12  import org.bukkit.plugin.Plugin; Line 17  import org.bukkit.plugin.Plugin;
17  public class DoorBlockListener extends BlockListener {  public class DoorBlockListener extends BlockListener {
18    
19    
20          DoorStorage store;          private DoorStorage store;
21          private DoorOpenListener handler;          private DoorOpenListener handler;
22    
23          Plugin plugin;          private Plugin plugin;
24    
25          public DoorBlockListener(Plugin plugin) {          public DoorBlockListener(Plugin plugin) {
26                  this.plugin = plugin;                  this.plugin = plugin;
# Line 35  public class DoorBlockListener extends B Line 40  public class DoorBlockListener extends B
40          public void onBlockBreak(BlockBreakEvent event) {          public void onBlockBreak(BlockBreakEvent event) {
41                  Door door = store.findDoor(event.getBlock().getLocation() );                  Door door = store.findDoor(event.getBlock().getLocation() );
42                  if (door != null) {                  if (door != null) {
43                          event.getPlayer().sendMessage("Secret door broken");                          Player player = event.getPlayer();
44                            if ( ! door.getOwner().equals( player.getName() )) {
45    
46                                    Player owner = player.getServer().getPlayer( door.getOwner() );
47    
48                                    if (owner != null) {
49                                            owner.sendMessage("" + player.getName() + " broke one of your secret doors");
50                                    }
51                            }
52                            player.sendMessage("Secret door broken");
53                          store.removeDoor(door);                          store.removeDoor(door);
54                  }                  }
55          }          }
56    
57            private Block[] getAdjacentBlocks(Block block) {
58    /*
59                    Block out[] = new Block[6];
60    
61                    out[0] = block.getRelative(-1,0,0);
62                    out[1] = block.getRelative(1,0,0);
63    
64                    out[2] = block.getRelative(0,-1,0);
65                    out[3] = block.getRelative(0,1,0);
66    
67                    out[4] = block.getRelative(0,0,-1);
68                    out[5] = block.getRelative(0,0,1);
69    */
70    
71                    Block out[] = new Block[27];
72                    int count = 0;
73                    for (int x=-1; x<=1; x++) {
74                            for (int y=-1; y<=1; y++) {
75                                    for (int z=-1; z<=1; z++) {
76                                            out[count++] = block.getRelative(x,y,z);                
77                                    }
78                            }
79                            
80                    }
81    
82                    return out;
83                    
84            }
85    
86            @Override
87            public void onBlockRedstoneChange(BlockRedstoneEvent event) {
88                    
89                    Block block = event.getBlock();        
90    
91                    //System.out.println( block.toString() + " / " + block.getTypeId() );
92    
93    
94                    int x,y,z;
95                    Block blocks[] = getAdjacentBlocks(block);
96    
97                    for (int i=0; i<blocks.length; i++) {
98                            //System.out.println(" " + i + ">" + blocks[i].toString() );
99                            Door d = store.findDoor( blocks[i].getLocation() );
100    
101                            if (d != null) {
102                                    //System.out.println("  found door");
103                                    d.powerChange(block.getWorld(), event.getOldCurrent(), event.getNewCurrent() );
104                                    return;
105                            }
106                    }
107    
108            }
109    
110          @Override          @Override
111          public void onSignChange(SignChangeEvent event) {          public void onSignChange(SignChangeEvent event) {
112    
# Line 49  public class DoorBlockListener extends B Line 116  public class DoorBlockListener extends B
116                          // don't react on floor signs                          // don't react on floor signs
117                          return;                          return;
118                  }                  }
119                    
120                    String line0 = event.getLine(0).trim().toLowerCase();
121                    String line1 = event.getLine(1).trim().toLowerCase();
122                    
123                    int width = 2;
124                    int height = 2;
125    
126                  if (event.getLine(0).toLowerCase().equals("secretdoor") ) {                  if (line0.equals("secretdoor") ) {
127                          Door door = new Door(sign);                          if ( ! line1.equals("")) {
128                                    Pattern p = Pattern.compile("^[0-9]x[0-9]$");
129                                    Matcher m = p.matcher(line1);
130                                    
131                                    if ( !m.matches() ) {
132                                            event.getPlayer().sendMessage("The second line must be of the format [width]x[height]");
133                                            return;
134                                    }
135                                    
136                                    String parts[] = line1.split("x");
137                                    width = Integer.parseInt( parts[0] );
138                                    height = Integer.parseInt( parts[1] );
139                                    
140                                    if (width <1 || width>8) {
141                                            event.getPlayer().sendMessage("width must be between 1 and 8 (inclusive)");
142                                            return;
143                                    }
144                                    if (height <2 || height>5) {
145                                            event.getPlayer().sendMessage("height must be between 2 and 5 (inclusive)");
146                                            return;
147                                    }
148                            }
149                            try {
150                                    Door door = new Door(sign, width, height, store, event.getPlayer().getName() );
151    
152                          store.addDoor(door);                                  store.addDoor(door);
153    
154                          event.getPlayer().sendMessage("Secret door created");                                  event.getPlayer().sendMessage("Secret door created");
155                                    
156                          sign.setTypeId(0);                                  sign.setTypeId(0);
157                            } catch (ConflictingDoorException e) {
158                                    event.getPlayer().sendMessage("Door conflicts whith another secretdoor");
159                            }
160    
161                                                    
162                  }                  }

Legend:
Removed from v.1532  
changed lines
  Added in v.1580

  ViewVC Help
Powered by ViewVC 1.1.20