Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
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}