--- miscJava/bukkit-minecraft-plugins/HoerupUtils/src/dk/thoerup/bukkit/hoeruputils/SecretDoor.java 2011/06/26 14:26:58 1526 +++ miscJava/bukkit-minecraft-plugins/HoerupUtils/src/dk/thoerup/bukkit/hoeruputils/SecretDoor.java 2011/06/26 16:01:09 1527 @@ -1,11 +1,18 @@ package dk.thoerup.bukkit.hoeruputils; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.RandomAccessFile; + import java.util.HashMap; +import java.util.LinkedList; import java.util.Map; import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.Server; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.entity.Player; @@ -20,6 +27,7 @@ public class SecretDoor extends BlockListener { HashMap doormap = new HashMap(); + LinkedList doors = new LinkedList(); private PlayerHandler handler = new PlayerHandler(); @@ -27,6 +35,8 @@ public SecretDoor(Plugin plugin) { this.plugin = plugin; + + loadAll(); } public PlayerListener getPlayerListener() { @@ -39,6 +49,7 @@ if (door != null) { event.getPlayer().sendMessage("Secret door broken"); door.unregisterMap(doormap); + doors.remove(door); } } @@ -57,9 +68,55 @@ Door door = new Door(sign); door.registerMap(doormap); + doors.add(door); + event.getPlayer().sendMessage("Secret door created"); sign.setTypeId(0); + + saveAll(); + } + } + + private void saveAll() { + try { + + File f = new File( plugin.getDataFolder(), "secretdoors.csv"); + RandomAccessFile out = new RandomAccessFile( f, "rw" ); + out.setLength(0); + + for (Door door : doors) { + out.writeBytes( door.toCsv() ); + out.writeBytes( "\n"); + } + + out.close(); + } catch (IOException e) { + System.out.println(e.getMessage() ); + e.printStackTrace(); + } + } + + private void loadAll() { + try { + File f = new File( plugin.getDataFolder(), "secretdoors.csv"); + RandomAccessFile in = new RandomAccessFile( f, "r" ); + + String line; + while ( (line = in.readLine() ) != null ) { + Door door = new Door(line, plugin.getServer() ); + doors.add( door ); + door.registerMap( doormap ); + } + in.close(); + + } + catch (FileNotFoundException fnfe) { + return; + } + catch (IOException e) { + System.out.println(e.getMessage() ); + e.printStackTrace(); } } @@ -103,6 +160,7 @@ } } + class Door { Location leftUpper; Location rightUpper; @@ -147,6 +205,46 @@ rightLower.setY( rightLower.getY() - 1); } + public Door(String input, Server server) { + String parts[] = input.split(":"); + + World w = server.getWorld( parts[0] ); + + leftUpper = new Location(w, Integer.parseInt(parts[1]), Integer.parseInt(parts[2]), Integer.parseInt(parts[3]) ); + rightUpper = new Location(w, Integer.parseInt(parts[4]), Integer.parseInt(parts[5]), Integer.parseInt(parts[6]) ); + leftLower = new Location(w, Integer.parseInt(parts[7]), Integer.parseInt(parts[8]), Integer.parseInt(parts[9]) ); + rightLower = new Location(w, Integer.parseInt(parts[10]), Integer.parseInt(parts[11]), Integer.parseInt(parts[12]) ); + material = Integer.parseInt( parts[13] ); + } + + public String toCsv() { + StringBuilder sb = new StringBuilder(); + sb.append( leftUpper.getWorld().getName() ); + + sb.append( ":" + leftUpper.getBlockX() ); + sb.append( ":" + leftUpper.getBlockY() ); + sb.append( ":" + leftUpper.getBlockZ() ); + + sb.append( ":" + rightUpper.getBlockX() ); + 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() ); + + sb.append( ":" + material ); + + return sb.toString(); + } + + public void registerMap(Map map) { map.put(leftUpper, this ); map.put(rightUpper, this );