ソースを参照

General cleanup for pull request.

Glitchfinder 12 年 前
コミット
3129acfc19

+ 1 - 1
src/main/java/com/gmail/nossr50/config/HiddenConfig.java

@@ -28,7 +28,7 @@ public class HiddenConfig {
         if (mcMMO.p.getResource(fileName) != null) {
             config = YamlConfiguration.loadConfiguration(mcMMO.p.getResource(fileName));
             chunkletsEnabled = config.getBoolean("Options.Chunklets", true);
-            conversionRate = config.getInt("Options.ConversionRate", 1);
+            conversionRate = config.getInt("Options.ConversionRate", 3);
         }
     }
 

+ 3 - 91
src/main/java/com/gmail/nossr50/listeners/WorldListener.java

@@ -13,13 +13,8 @@ import org.bukkit.event.world.WorldUnloadEvent;
 import org.bukkit.World;
 
 import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.runnables.BlockStoreConversionMain;
-import com.gmail.nossr50.util.blockmeta.ChunkletStore;
-import com.gmail.nossr50.util.blockmeta.PrimitiveChunkletStore;
-import com.gmail.nossr50.util.blockmeta.PrimitiveExChunkletStore;
-import com.gmail.nossr50.util.blockmeta.PrimitiveChunkStore;
-import com.gmail.nossr50.util.blockmeta.HashChunkletManager;
-import com.gmail.nossr50.util.blockmeta.HashChunkManager;
+import com.gmail.nossr50.runnables.blockstoreconversion.BlockStoreConversionMain;
+import com.gmail.nossr50.util.blockmeta.chunkmeta.HashChunkManager;
 
 public class WorldListener implements Listener {
     ArrayList<BlockStoreConversionMain> converters = new ArrayList<BlockStoreConversionMain>();
@@ -66,90 +61,7 @@ public class WorldListener implements Listener {
         World world = event.getChunk().getWorld();
         int cx = event.getChunk().getX();
         int cz = event.getChunk().getZ();
-        HashChunkletManager manager = new HashChunkletManager();
-        HashChunkManager newManager = (HashChunkManager) mcMMO.p.placeStore;
 
-        manager.loadChunk(cx, cz, world);
-
-        for(int y = 0; y < (world.getMaxHeight() / 64); y++) {
-            String chunkletName = world.getName() + "," + cx + "," + cz + "," + y;
-	    ChunkletStore tempChunklet = manager.store.get(chunkletName);
-            PrimitiveChunkletStore primitiveChunklet = null;
-            PrimitiveExChunkletStore primitiveExChunklet = null;
-            if(tempChunklet instanceof PrimitiveChunkletStore)
-                primitiveChunklet = (PrimitiveChunkletStore) tempChunklet;
-            else if(tempChunklet instanceof PrimitiveExChunkletStore)
-                primitiveExChunklet = (PrimitiveExChunkletStore) tempChunklet;
-            if(tempChunklet == null) {
-                continue;
-            } else {
-                String chunkName = world.getName() + "," + cx + "," + cz;
-                PrimitiveChunkStore cChunk = (PrimitiveChunkStore) newManager.store.get(chunkName);
-
-                if(cChunk != null) {
-                    int xPos = cx * 16;
-                    int zPos = cz * 16;
-
-                    for(int x = 0; x < 16; x++) {
-                        for(int z = 0; z < 16; z++) {
-                            int cxPos = xPos + x;
-                            int czPos = zPos + z;
-
-                            for(int y2 = (64 * y); y2 < (64 * y + 64); y2++) {
-                                if(!manager.isTrue(cxPos, y2, czPos, world))
-                                    continue;
-
-                                newManager.setTrue(cxPos, y2, czPos, world);
-                            }
-                        }
-                    }
-                    continue;
-                }
-
-                newManager.setTrue(cx * 16, 0, cz * 16, world);
-		newManager.setFalse(cx * 16, 0, cz * 16, world);
-                cChunk = (PrimitiveChunkStore) newManager.store.get(chunkName);
-
-                for(int x = 0; x < 16; x++) {
-                    for(int z = 0; z < 16; z++) {
-                        boolean[] oldArray;
-                        if(primitiveChunklet != null)
-                            oldArray = primitiveChunklet.store[x][z];
-                        if(primitiveExChunklet != null)
-                            oldArray = primitiveExChunklet.store[x][z];
-                        else
-                            return;
-                        boolean[] newArray = cChunk.store[x][z];
-                        if(oldArray.length < 64)
-                            return;
-                        else if(newArray.length < ((y * 64) + 64))
-                            return;
-                        System.arraycopy(oldArray, 0, newArray, (y * 64), 64);
-                    }
-                }
-            }
-        }
-
-        manager.unloadChunk(cx, cz, world);
-        newManager.unloadChunk(cx, cz, world);
-
-        File cxDir = new File(dataDir, "" + cx);
-        if(!cxDir.exists()) return;
-        File czDir = new File(cxDir, "" + cz);
-        if(!czDir.exists()) return;
-
-        for(File yFile : czDir.listFiles()) {
-            if(!yFile.exists())
-                continue;
-
-            yFile.delete();
-        }
-
-        if(czDir.listFiles().length <= 0)
-            czDir.delete();
-        if(cxDir.listFiles().length <= 0)
-            cxDir.delete();
-        if(dataDir.listFiles().length <= 0)
-            dataDir.delete();
+        ((HashChunkManager) mcMMO.p.placeStore).convertChunk(dataDir, cx, cz, world);
     }
 }

+ 2 - 2
src/main/java/com/gmail/nossr50/mcMMO.java

@@ -79,8 +79,8 @@ import com.gmail.nossr50.util.Leaderboard;
 import com.gmail.nossr50.util.Metrics;
 import com.gmail.nossr50.util.Metrics.Graph;
 import com.gmail.nossr50.util.Users;
-import com.gmail.nossr50.util.blockmeta.ChunkManager;
-import com.gmail.nossr50.util.blockmeta.ChunkManagerFactory;
+import com.gmail.nossr50.util.blockmeta.chunkmeta.ChunkManager;
+import com.gmail.nossr50.util.blockmeta.chunkmeta.ChunkManagerFactory;
 
 
 public class mcMMO extends JavaPlugin {

+ 1 - 1
src/main/java/com/gmail/nossr50/runnables/BlockStoreConversionMain.java → src/main/java/com/gmail/nossr50/runnables/blockstoreconversion/BlockStoreConversionMain.java

@@ -1,4 +1,4 @@
-package com.gmail.nossr50.runnables;
+package com.gmail.nossr50.runnables.blockstoreconversion;
 
 import java.io.File;
 import java.lang.Runnable;

+ 1 - 1
src/main/java/com/gmail/nossr50/runnables/BlockStoreConversionXDirectory.java → src/main/java/com/gmail/nossr50/runnables/blockstoreconversion/BlockStoreConversionXDirectory.java

@@ -1,4 +1,4 @@
-package com.gmail.nossr50.runnables;
+package com.gmail.nossr50.runnables.blockstoreconversion;
 
 import java.io.File;
 import java.lang.Runnable;

+ 3 - 3
src/main/java/com/gmail/nossr50/runnables/BlockStoreConversionZDirectory.java → src/main/java/com/gmail/nossr50/runnables/blockstoreconversion/BlockStoreConversionZDirectory.java

@@ -1,4 +1,4 @@
-package com.gmail.nossr50.runnables;
+package com.gmail.nossr50.runnables.blockstoreconversion;
 
 import java.io.File;
 import java.lang.Runnable;
@@ -10,9 +10,9 @@ import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.util.blockmeta.ChunkletStore;
 import com.gmail.nossr50.util.blockmeta.PrimitiveChunkletStore;
 import com.gmail.nossr50.util.blockmeta.PrimitiveExChunkletStore;
-import com.gmail.nossr50.util.blockmeta.PrimitiveChunkStore;
+import com.gmail.nossr50.util.blockmeta.chunkmeta.PrimitiveChunkStore;
 import com.gmail.nossr50.util.blockmeta.HashChunkletManager;
-import com.gmail.nossr50.util.blockmeta.HashChunkManager;
+import com.gmail.nossr50.util.blockmeta.chunkmeta.HashChunkManager;
 
 public class BlockStoreConversionZDirectory implements Runnable {
     private int taskID, cx, cz, x, y, z, y2, xPos, zPos, cxPos, czPos;

+ 1 - 1
src/main/java/com/gmail/nossr50/util/blockmeta/ChunkManager.java → src/main/java/com/gmail/nossr50/util/blockmeta/chunkmeta/ChunkManager.java

@@ -1,4 +1,4 @@
-package com.gmail.nossr50.util.blockmeta;
+package com.gmail.nossr50.util.blockmeta.chunkmeta;
 
 import java.io.IOException;
 

+ 1 - 1
src/main/java/com/gmail/nossr50/util/blockmeta/ChunkManagerFactory.java → src/main/java/com/gmail/nossr50/util/blockmeta/chunkmeta/ChunkManagerFactory.java

@@ -1,4 +1,4 @@
-package com.gmail.nossr50.util.blockmeta;
+package com.gmail.nossr50.util.blockmeta.chunkmeta;
 
 import com.gmail.nossr50.config.HiddenConfig;
 

+ 3 - 1
src/main/java/com/gmail/nossr50/util/blockmeta/ChunkStore.java → src/main/java/com/gmail/nossr50/util/blockmeta/chunkmeta/ChunkStore.java

@@ -1,7 +1,9 @@
-package com.gmail.nossr50.util.blockmeta;
+package com.gmail.nossr50.util.blockmeta.chunkmeta;
 
 import java.io.Serializable;
 
+import com.gmail.nossr50.util.blockmeta.ChunkletStore;
+
 /**
  * A ChunkStore should be responsible for a 16x16xWorldHeight area of data
  */

+ 1 - 1
src/main/java/com/gmail/nossr50/util/blockmeta/ChunkStoreFactory.java → src/main/java/com/gmail/nossr50/util/blockmeta/chunkmeta/ChunkStoreFactory.java

@@ -1,4 +1,4 @@
-package com.gmail.nossr50.util.blockmeta;
+package com.gmail.nossr50.util.blockmeta.chunkmeta;
 
 import org.bukkit.World;
 

+ 104 - 14
src/main/java/com/gmail/nossr50/util/blockmeta/HashChunkManager.java → src/main/java/com/gmail/nossr50/util/blockmeta/chunkmeta/HashChunkManager.java

@@ -1,4 +1,4 @@
-package com.gmail.nossr50.util.blockmeta;
+package com.gmail.nossr50.util.blockmeta.chunkmeta;
 
 import java.io.File;
 import java.io.InputStream;
@@ -17,20 +17,24 @@ import org.bukkit.block.Block;
 
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.runnables.ChunkletUnloader;
+import com.gmail.nossr50.util.blockmeta.ChunkletStore;
+import com.gmail.nossr50.util.blockmeta.PrimitiveChunkletStore;
+import com.gmail.nossr50.util.blockmeta.PrimitiveExChunkletStore;
+import com.gmail.nossr50.util.blockmeta.HashChunkletManager;
 
-import org.getspout.spoutapi.chunkstore.SimpleRegionFile;
+import org.getspout.spoutapi.chunkstore.mcMMOSimpleRegionFile;
 
 public class HashChunkManager implements ChunkManager {
-    private HashMap<UUID, HashMap<Long, SimpleRegionFile>> regionFiles = new HashMap<UUID, HashMap<Long, SimpleRegionFile>>();
+    private HashMap<UUID, HashMap<Long, mcMMOSimpleRegionFile>> regionFiles = new HashMap<UUID, HashMap<Long, mcMMOSimpleRegionFile>>();
     public HashMap<String, ChunkStore> store = new HashMap<String, ChunkStore>();
 
     @Override
     public void closeAll() {
         for (UUID uid : regionFiles.keySet()) {
-            HashMap<Long, SimpleRegionFile> worldRegions = regionFiles.get(uid);
-            Iterator<SimpleRegionFile> itr = worldRegions.values().iterator();
+            HashMap<Long, mcMMOSimpleRegionFile> worldRegions = regionFiles.get(uid);
+            Iterator<mcMMOSimpleRegionFile> itr = worldRegions.values().iterator();
             while (itr.hasNext()) {
-                SimpleRegionFile rf = itr.next();
+                mcMMOSimpleRegionFile rf = itr.next();
                 if (rf != null) {
                     rf.close();
                     itr.remove();
@@ -42,7 +46,7 @@ public class HashChunkManager implements ChunkManager {
 
     @Override
     public ChunkStore readChunkStore(World world, int x, int z) throws IOException {
-        SimpleRegionFile rf = getSimpleRegionFile(world, x, z);
+        mcMMOSimpleRegionFile rf = getSimpleRegionFile(world, x, z);
         InputStream in = rf.getInputStream(x, z);
         if (in == null) {
             return null;
@@ -73,7 +77,7 @@ public class HashChunkManager implements ChunkManager {
             return;
         }
         try {
-            SimpleRegionFile rf = getSimpleRegionFile(world, x, z);
+            mcMMOSimpleRegionFile rf = getSimpleRegionFile(world, x, z);
             ObjectOutputStream objectStream = new ObjectOutputStream(rf.getOutputStream(x, z));
             objectStream.writeObject(data);
             objectStream.flush();
@@ -86,23 +90,23 @@ public class HashChunkManager implements ChunkManager {
 
     @Override
     public void closeChunkStore(World world, int x, int z) {
-        SimpleRegionFile rf = getSimpleRegionFile(world, x, z);
+        mcMMOSimpleRegionFile rf = getSimpleRegionFile(world, x, z);
         if (rf != null) {
             rf.close();
         }
     }
 
-    private SimpleRegionFile getSimpleRegionFile(World world, int x, int z) {
+    private mcMMOSimpleRegionFile getSimpleRegionFile(World world, int x, int z) {
         File directory = new File(world.getWorldFolder(), "mcmmo_regions");
 
         directory.mkdirs();
 
         UUID key = world.getUID();
 
-        HashMap<Long, SimpleRegionFile> worldRegions = regionFiles.get(key);
+        HashMap<Long, mcMMOSimpleRegionFile> worldRegions = regionFiles.get(key);
 
         if (worldRegions == null) {
-            worldRegions = new HashMap<Long, SimpleRegionFile>();
+            worldRegions = new HashMap<Long, mcMMOSimpleRegionFile>();
             regionFiles.put(key, worldRegions);
         }
 
@@ -111,11 +115,11 @@ public class HashChunkManager implements ChunkManager {
 
         long key2 = (((long) rx) << 32) | (((long) rz) & 0xFFFFFFFFL);
 
-        SimpleRegionFile regionFile = worldRegions.get(key2);
+        mcMMOSimpleRegionFile regionFile = worldRegions.get(key2);
 
         if (regionFile == null) {
             File file = new File(directory, "mcmmo_" + rx + "_" + rz + "_.mcm");
-            regionFile = new SimpleRegionFile(file, rx, rz);
+            regionFile = new mcMMOSimpleRegionFile(file, rx, rz);
             worldRegions.put(key2, regionFile);
         }
 
@@ -371,4 +375,90 @@ public class HashChunkManager implements ChunkManager {
 
     @Override
     public void cleanUp() {}
+
+    public void convertChunk(File dataDir, int cx, int cz, World world) {
+        HashChunkletManager manager = new HashChunkletManager();
+        manager.loadChunk(cx, cz, world);
+
+        for(int y = 0; y < (world.getMaxHeight() / 64); y++) {
+            String chunkletName = world.getName() + "," + cx + "," + cz + "," + y;
+	    ChunkletStore tempChunklet = manager.store.get(chunkletName);
+            PrimitiveChunkletStore primitiveChunklet = null;
+            PrimitiveExChunkletStore primitiveExChunklet = null;
+            if(tempChunklet instanceof PrimitiveChunkletStore)
+                primitiveChunklet = (PrimitiveChunkletStore) tempChunklet;
+            else if(tempChunklet instanceof PrimitiveExChunkletStore)
+                primitiveExChunklet = (PrimitiveExChunkletStore) tempChunklet;
+            if(tempChunklet == null) {
+                continue;
+            } else {
+                String chunkName = world.getName() + "," + cx + "," + cz;
+                PrimitiveChunkStore cChunk = (PrimitiveChunkStore) store.get(chunkName);
+
+                if(cChunk != null) {
+                    int xPos = cx * 16;
+                    int zPos = cz * 16;
+
+                    for(int x = 0; x < 16; x++) {
+                        for(int z = 0; z < 16; z++) {
+                            int cxPos = xPos + x;
+                            int czPos = zPos + z;
+
+                            for(int y2 = (64 * y); y2 < (64 * y + 64); y2++) {
+                                if(!manager.isTrue(cxPos, y2, czPos, world))
+                                    continue;
+
+                                setTrue(cxPos, y2, czPos, world);
+                            }
+                        }
+                    }
+                    continue;
+                }
+
+                setTrue(cx * 16, 0, cz * 16, world);
+		setFalse(cx * 16, 0, cz * 16, world);
+                cChunk = (PrimitiveChunkStore) store.get(chunkName);
+
+                for(int x = 0; x < 16; x++) {
+                    for(int z = 0; z < 16; z++) {
+                        boolean[] oldArray;
+                        if(primitiveChunklet != null)
+                            oldArray = primitiveChunklet.store[x][z];
+                        if(primitiveExChunklet != null)
+                            oldArray = primitiveExChunklet.store[x][z];
+                        else
+                            return;
+                        boolean[] newArray = cChunk.store[x][z];
+                        if(oldArray.length < 64)
+                            return;
+                        else if(newArray.length < ((y * 64) + 64))
+                            return;
+                        System.arraycopy(oldArray, 0, newArray, (y * 64), 64);
+                    }
+                }
+            }
+        }
+
+        manager.unloadChunk(cx, cz, world);
+        unloadChunk(cx, cz, world);
+
+        File cxDir = new File(dataDir, "" + cx);
+        if(!cxDir.exists()) return;
+        File czDir = new File(cxDir, "" + cz);
+        if(!czDir.exists()) return;
+
+        for(File yFile : czDir.listFiles()) {
+            if(!yFile.exists())
+                continue;
+
+            yFile.delete();
+        }
+
+        if(czDir.listFiles().length <= 0)
+            czDir.delete();
+        if(cxDir.listFiles().length <= 0)
+            cxDir.delete();
+        if(dataDir.listFiles().length <= 0)
+            dataDir.delete();
+    }
 }

+ 1 - 1
src/main/java/com/gmail/nossr50/util/blockmeta/NullChunkManager.java → src/main/java/com/gmail/nossr50/util/blockmeta/chunkmeta/NullChunkManager.java

@@ -1,4 +1,4 @@
-package com.gmail.nossr50.util.blockmeta;
+package com.gmail.nossr50.util.blockmeta.chunkmeta;
 
 import java.io.IOException;
 

+ 2 - 1
src/main/java/com/gmail/nossr50/util/blockmeta/PrimitiveChunkStore.java → src/main/java/com/gmail/nossr50/util/blockmeta/chunkmeta/PrimitiveChunkStore.java

@@ -1,4 +1,4 @@
-package com.gmail.nossr50.util.blockmeta;
+package com.gmail.nossr50.util.blockmeta.chunkmeta;
 
 import java.io.IOException;
 import java.io.ObjectInputStream;
@@ -8,6 +8,7 @@ import java.util.UUID;
 import org.bukkit.World;
 
 import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.util.blockmeta.ChunkletStore;
 
 public class PrimitiveChunkStore implements ChunkStore {
     private static final long serialVersionUID = -1L;

+ 3 - 3
src/main/java/org/getspout/spoutapi/chunkstore/SimpleChunkBuffer.java → src/main/java/org/getspout/spoutapi/chunkstore/mcMMOSimpleChunkBuffer.java

@@ -22,11 +22,11 @@ package org.getspout.spoutapi.chunkstore;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 
-public class SimpleChunkBuffer extends ByteArrayOutputStream {
-	final SimpleRegionFile rf;
+public class mcMMOSimpleChunkBuffer extends ByteArrayOutputStream {
+	final mcMMOSimpleRegionFile rf;
 	final int index;
 
-	SimpleChunkBuffer(SimpleRegionFile rf, int index) {
+	mcMMOSimpleChunkBuffer(mcMMOSimpleRegionFile rf, int index) {
 		super(1024);
 		this.rf = rf;
 		this.index = index;

+ 4 - 4
src/main/java/org/getspout/spoutapi/chunkstore/SimpleRegionFile.java → src/main/java/org/getspout/spoutapi/chunkstore/mcMMOSimpleRegionFile.java

@@ -29,7 +29,7 @@ import java.util.ArrayList;
 import java.util.zip.DeflaterOutputStream;
 import java.util.zip.InflaterInputStream;
 
-public class SimpleRegionFile {
+public class mcMMOSimpleRegionFile {
 	private RandomAccessFile file;
 	private final int[] dataStart = new int[1024];
 	private final int[] dataActualLength = new int[1024];
@@ -46,11 +46,11 @@ public class SimpleRegionFile {
 	@SuppressWarnings("unused")
 	private static long TIMEOUT_TIME = 300000; // 5 min
 
-	public SimpleRegionFile(File f, int rx, int rz) {
+	public mcMMOSimpleRegionFile(File f, int rx, int rz) {
 		this(f, rx, rz, 10);
 	}
 
-	public SimpleRegionFile(File f, int rx, int rz, int defaultSegmentSize) {
+	public mcMMOSimpleRegionFile(File f, int rx, int rz, int defaultSegmentSize) {
 		this.rx = rx;
 		this.rz = rz;
 		this.defaultSegmentSize = defaultSegmentSize;
@@ -160,7 +160,7 @@ public class SimpleRegionFile {
 
 	public DataOutputStream getOutputStream(int x, int z) {
 		int index = getChunkIndex(x, z);
-		return new DataOutputStream(new DeflaterOutputStream(new SimpleChunkBuffer(this, index)));
+		return new DataOutputStream(new DeflaterOutputStream(new mcMMOSimpleChunkBuffer(this, index)));
 	}
 
 	public DataInputStream getInputStream(int x, int z) throws IOException {

+ 1 - 1
src/main/resources/hidden.yml

@@ -6,4 +6,4 @@ Options:
     # true to use Chunklets metadata store system, false to disable
     Chunklets: true
     # Square root of the number of chunks to convert per tick.
-    ConversionRate: 1
+    ConversionRate: 3