@Override public synchronized void closeChunkStore(World world, int x, int z) { mcMMOSimpleRegionFile rf = getSimpleRegionFile(world, x, z); if (rf != null) { rf.close(); } }
@Override public synchronized ChunkStore readChunkStore(World world, int x, int z) throws IOException { mcMMOSimpleRegionFile rf = getSimpleRegionFile(world, x, z); InputStream in = rf.getInputStream(x, z); if (in == null) { return null; } ObjectInputStream objectStream = new ObjectInputStream(in); try { Object o = objectStream.readObject(); if (o instanceof ChunkStore) { return (ChunkStore) o; } else { throw new RuntimeException("Wrong class type read for chunk meta data for " + x + ", " + z); } } catch (IOException e) { // Assume the format changed return null; // throw new RuntimeException("Unable to process chunk meta data for " + x + ", " + z, e); } catch (ClassNotFoundException e) { // Assume the format changed // System.out.println("[SpoutPlugin] is Unable to find serialized class for " + x + ", " + z + // ", " + e.getMessage()); return null; // throw new RuntimeException("Unable to find serialized class for " + x + ", " + z, e); } }
@Override public synchronized void closeAll() { for (UUID uid : regionFiles.keySet()) { HashMap<Long, mcMMOSimpleRegionFile> worldRegions = regionFiles.get(uid); Iterator<mcMMOSimpleRegionFile> itr = worldRegions.values().iterator(); while (itr.hasNext()) { mcMMOSimpleRegionFile rf = itr.next(); if (rf != null) { rf.close(); itr.remove(); } } } regionFiles.clear(); }
@Override public synchronized void writeChunkStore(World world, int x, int z, ChunkStore data) { if (!data.isDirty()) { return; } try { mcMMOSimpleRegionFile rf = getSimpleRegionFile(world, x, z); ObjectOutputStream objectStream = new ObjectOutputStream(rf.getOutputStream(x, z)); objectStream.writeObject(data); objectStream.flush(); objectStream.close(); data.setDirty(false); } catch (IOException e) { throw new RuntimeException("Unable to write chunk meta data for " + x + ", " + z, e); } }