--- miscJava/bukkit-minecraft-plugins/HoerupUtils/src/dk/thoerup/bukkit/hoeruputils/secretdoor/DoorBlockListener.java 2011/06/29 17:19:38 1536 +++ miscJava/bukkit-minecraft-plugins/HoerupUtils/src/dk/thoerup/bukkit/hoeruputils/secretdoor/DoorBlockListener.java 2011/07/16 11:16:09 1579 @@ -5,8 +5,10 @@ import java.util.regex.Pattern; import org.bukkit.block.Block; +import org.bukkit.entity.Player; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockListener; +import org.bukkit.event.block.BlockRedstoneEvent; import org.bukkit.event.block.SignChangeEvent; import org.bukkit.event.player.PlayerListener; import org.bukkit.plugin.Plugin; @@ -15,10 +17,10 @@ public class DoorBlockListener extends BlockListener { - DoorStorage store; + private DoorStorage store; private DoorOpenListener handler; - Plugin plugin; + private Plugin plugin; public DoorBlockListener(Plugin plugin) { this.plugin = plugin; @@ -38,11 +40,71 @@ public void onBlockBreak(BlockBreakEvent event) { Door door = store.findDoor(event.getBlock().getLocation() ); if (door != null) { - event.getPlayer().sendMessage("Secret door broken"); + Player player = event.getPlayer(); + if ( ! door.getOwner().equals( player.getName() )) { + + Player owner = player.getServer().getPlayer( door.getOwner() ); + + if (owner != null) { + owner.sendMessage("" + player.getName() + " broke one of your secret doors"); + } + } + player.sendMessage("Secret door broken"); store.removeDoor(door); } } + private Block[] getAdjacentBlocks(Block block) { +/* + Block out[] = new Block[6]; + + out[0] = block.getRelative(-1,0,0); + out[1] = block.getRelative(1,0,0); + + out[2] = block.getRelative(0,-1,0); + out[3] = block.getRelative(0,1,0); + + out[4] = block.getRelative(0,0,-1); + out[5] = block.getRelative(0,0,1); +*/ + + Block out[] = new Block[27]; + int count = 0; + for (int x=-1; x<=1; x++) { + for (int y=-1; y<=1; y++) { + for (int z=-1; z<=1; z++) { + out[count++] = block.getRelative(x,y,z); + } + } + + } + + return out; + + } + + @Override + public void onBlockRedstoneChange(BlockRedstoneEvent event) { + //System.out.println( event.getBlock().toString() ); + + Block block = event.getBlock(); + + + int x,y,z; + Block blocks[] = getAdjacentBlocks(block); + + for (int i=0; i" + blocks[i].toString() ); + Door d = store.findDoor( blocks[i].getLocation() ); + + if (d != null) { + //System.out.println(" found door"); + d.powerChange(block.getWorld(), event.getOldCurrent(), event.getNewCurrent() ); + } + } + + } + @Override public void onSignChange(SignChangeEvent event) { @@ -71,10 +133,10 @@ String parts[] = line1.split("x"); width = Integer.parseInt( parts[0] ); - height = Integer.parseInt( parts[0] ); + height = Integer.parseInt( parts[1] ); - if (width <1 || width>5) { - event.getPlayer().sendMessage("width must be between 1 and 5 (inclusive)"); + if (width <1 || width>8) { + event.getPlayer().sendMessage("width must be between 1 and 8 (inclusive)"); return; } if (height <2 || height>5) {