Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
at develop 143 lines 4.7 kB view raw
1package net.minecraft.server; 2 3import java.io.*; 4import java.util.ArrayList; 5import java.util.Collections; 6import java.util.Iterator; 7import java.util.zip.GZIPInputStream; 8 9public class WorldLoaderServer extends WorldLoader { 10 11 public WorldLoaderServer(File file1) { 12 super(file1); 13 } 14 15 public IDataManager a(String s, boolean flag) { 16 return new ServerNBTManager(this.a, s, flag); 17 } 18 19 public boolean isConvertable(String s) { 20 WorldData worlddata = this.b(s); 21 22 return worlddata != null && worlddata.i() == 0; 23 } 24 25 public boolean convert(String s, IProgressUpdate iprogressupdate) { 26 iprogressupdate.a(0); 27 ArrayList arraylist = new ArrayList(); 28 ArrayList arraylist1 = new ArrayList(); 29 ArrayList arraylist2 = new ArrayList(); 30 ArrayList arraylist3 = new ArrayList(); 31 File file1 = new File(this.a, s); 32 File file2 = new File(file1, "DIM-1"); 33 34 System.out.println("Scanning folders..."); 35 this.a(file1, arraylist, arraylist1); 36 if (file2.exists()) { 37 this.a(file2, arraylist2, arraylist3); 38 } 39 40 int i = arraylist.size() + arraylist2.size() + arraylist1.size() + arraylist3.size(); 41 42 System.out.println("Total conversion count is " + i); 43 this.a(file1, arraylist, 0, i, iprogressupdate); 44 this.a(file2, arraylist2, arraylist.size(), i, iprogressupdate); 45 WorldData worlddata = this.b(s); 46 47 worlddata.a(19132); 48 IDataManager idatamanager = this.a(s, false); 49 50 idatamanager.a(worlddata); 51 this.a(arraylist1, arraylist.size() + arraylist2.size(), i, iprogressupdate); 52 if (file2.exists()) { 53 this.a(arraylist3, arraylist.size() + arraylist2.size() + arraylist1.size(), i, iprogressupdate); 54 } 55 56 return true; 57 } 58 59 private void a(File file1, ArrayList arraylist, ArrayList arraylist1) { 60 ChunkFileFilter chunkfilefilter = new ChunkFileFilter((EmptyClass2) null); 61 ChunkFilenameFilter chunkfilenamefilter = new ChunkFilenameFilter((EmptyClass2) null); 62 File[] afile = file1.listFiles(chunkfilefilter); 63 File[] afile1 = afile; 64 int i = afile.length; 65 66 for (int j = 0; j < i; ++j) { 67 File file2 = afile1[j]; 68 69 arraylist1.add(file2); 70 File[] afile2 = file2.listFiles(chunkfilefilter); 71 File[] afile3 = afile2; 72 int k = afile2.length; 73 74 for (int l = 0; l < k; ++l) { 75 File file3 = afile3[l]; 76 File[] afile4 = file3.listFiles(chunkfilenamefilter); 77 File[] afile5 = afile4; 78 int i1 = afile4.length; 79 80 for (int j1 = 0; j1 < i1; ++j1) { 81 File file4 = afile5[j1]; 82 83 arraylist.add(new ChunkFile(file4)); 84 } 85 } 86 } 87 } 88 89 private void a(File file1, ArrayList arraylist, int i, int j, IProgressUpdate iprogressupdate) { 90 Collections.sort(arraylist); 91 byte[] abyte = new byte[4096]; 92 Iterator iterator = arraylist.iterator(); 93 94 while (iterator.hasNext()) { 95 ChunkFile chunkfile = (ChunkFile) iterator.next(); 96 int k = chunkfile.b(); 97 int l = chunkfile.c(); 98 RegionFile regionfile = RegionFileCache.a(file1, k, l); 99 100 if (!regionfile.c(k & 31, l & 31)) { 101 try { 102 DataInputStream datainputstream = new DataInputStream(new GZIPInputStream(new FileInputStream(chunkfile.a()))); 103 DataOutputStream dataoutputstream = regionfile.b(k & 31, l & 31); 104 boolean flag = false; 105 106 int i1; 107 108 while ((i1 = datainputstream.read(abyte)) != -1) { 109 dataoutputstream.write(abyte, 0, i1); 110 } 111 112 dataoutputstream.close(); 113 datainputstream.close(); 114 } catch (IOException ioexception) { 115 ioexception.printStackTrace(); 116 } 117 } 118 119 ++i; 120 int j1 = (int) Math.round(100.0D * (double) i / (double) j); 121 122 iprogressupdate.a(j1); 123 } 124 125 RegionFileCache.a(); 126 } 127 128 private void a(ArrayList arraylist, int i, int j, IProgressUpdate iprogressupdate) { 129 Iterator iterator = arraylist.iterator(); 130 131 while (iterator.hasNext()) { 132 File file1 = (File) iterator.next(); 133 File[] afile = file1.listFiles(); 134 135 a(afile); 136 file1.delete(); 137 ++i; 138 int k = (int) Math.round(100.0D * (double) i / (double) j); 139 140 iprogressupdate.a(k); 141 } 142 } 143}