Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
lDEVinux
GitHub Repository: lDEVinux/eaglercraft
Path: blob/main/sp-server/src_aux/RegionFileCache.java
8641 views
1
package net.minecraft.src;
2
3
import java.io.DataInputStream;
4
import java.io.DataOutputStream;
5
import java.io.File;
6
import java.io.IOException;
7
import java.util.HashMap;
8
import java.util.Iterator;
9
import java.util.Map;
10
11
public class RegionFileCache {
12
/** A map containing Files as keys and RegionFiles as values */
13
private static final Map regionsByFilename = new HashMap();
14
15
public static synchronized RegionFile createOrLoadRegionFile(File par0File, int par1, int par2) {
16
File var3 = new File(par0File, "region");
17
File var4 = new File(var3, "r." + (par1 >> 5) + "." + (par2 >> 5) + ".mca");
18
RegionFile var5 = (RegionFile) regionsByFilename.get(var4);
19
20
if (var5 != null) {
21
return var5;
22
} else {
23
if (!var3.exists()) {
24
var3.mkdirs();
25
}
26
27
if (regionsByFilename.size() >= 256) {
28
clearRegionFileReferences();
29
}
30
31
RegionFile var6 = new RegionFile(var4);
32
regionsByFilename.put(var4, var6);
33
return var6;
34
}
35
}
36
37
/**
38
* clears region file references
39
*/
40
public static synchronized void clearRegionFileReferences() {
41
Iterator var0 = regionsByFilename.values().iterator();
42
43
while (var0.hasNext()) {
44
RegionFile var1 = (RegionFile) var0.next();
45
46
try {
47
if (var1 != null) {
48
var1.close();
49
}
50
} catch (IOException var3) {
51
var3.printStackTrace();
52
}
53
}
54
55
regionsByFilename.clear();
56
}
57
58
/**
59
* Returns an input stream for the specified chunk. Args: worldDir, chunkX,
60
* chunkZ
61
*/
62
public static DataInputStream getChunkInputStream(File par0File, int par1, int par2) {
63
RegionFile var3 = createOrLoadRegionFile(par0File, par1, par2);
64
return var3.getChunkDataInputStream(par1 & 31, par2 & 31);
65
}
66
67
/**
68
* Returns an output stream for the specified chunk. Args: worldDir, chunkX,
69
* chunkZ
70
*/
71
public static DataOutputStream getChunkOutputStream(File par0File, int par1, int par2) {
72
RegionFile var3 = createOrLoadRegionFile(par0File, par1, par2);
73
return var3.getChunkDataOutputStream(par1 & 31, par2 & 31);
74
}
75
}
76
77