Fixed achievements/stats not saving
This commit is contained in:
parent
8d49882f4a
commit
ac791ee6fa
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,3 +1,4 @@
|
|||
/.gradle/
|
||||
/output/
|
||||
/filesystem/
|
||||
build/*
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -14,8 +14,178 @@ private static final java.io.File filesystemBaseDirectory = new java.io.File("fi
|
|||
filesystemBaseDirectory.mkdirs();
|
||||
}
|
||||
|
||||
private String path;
|
||||
private transient int prefixLength;
|
||||
private final char slash = '/';
|
||||
private static final String pathSeperator = "/";
|
||||
private static final String[] altPathSeperator = new String[] { "\\" };
|
||||
|
||||
public File(String pathName) {
|
||||
if (pathName == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
this.path = this.normalize(pathName);
|
||||
this.prefixLength = this.prefixLength(this.path);
|
||||
}
|
||||
|
||||
public File(String parent, String child) {
|
||||
if (child == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
|
||||
if(parent != null) {
|
||||
this.path = this.createPath(parent, child);
|
||||
} else {
|
||||
this.path = this.normalize(child);
|
||||
}
|
||||
}
|
||||
|
||||
public File(File parent, String child) {
|
||||
if (child == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
if(parent != null) {
|
||||
this.path = this.createPath(parent.path, child);
|
||||
} else {
|
||||
this.path = this.normalize(child);
|
||||
}
|
||||
}
|
||||
|
||||
private int prefixLength(String path) {
|
||||
char slash = this.slash;
|
||||
int n = path.length();
|
||||
if (n == 0) return 0;
|
||||
char c0 = path.charAt(0);
|
||||
char c1 = (n > 1) ? path.charAt(1) : 0;
|
||||
if (c0 == slash) {
|
||||
if (c1 == slash) return 2;
|
||||
return 1;
|
||||
}
|
||||
if (isLetter(c0) && (c1 == ':')) {
|
||||
if ((n > 2) && (path.charAt(2) == slash))
|
||||
return 3;
|
||||
return 2;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
private boolean isLetter(char c) {
|
||||
return ((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z'));
|
||||
}
|
||||
|
||||
private String normalize(String p) {
|
||||
for(int i = 0; i < altPathSeperator.length; ++i) {
|
||||
p = p.replace(altPathSeperator[i], pathSeperator);
|
||||
}
|
||||
if(p.startsWith(pathSeperator)) {
|
||||
p = p.substring(1);
|
||||
}
|
||||
if(p.endsWith(pathSeperator)) {
|
||||
p = p.substring(0, p.length() - pathSeperator.length());
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
private String[] splitPath(String p) {
|
||||
String[] pth = normalize(p).split(pathSeperator);
|
||||
for(int i = 0; i < pth.length; ++i) {
|
||||
pth[i] = pth[i].trim();
|
||||
}
|
||||
return pth;
|
||||
}
|
||||
|
||||
private String createPath(Object... p) {
|
||||
ArrayList<String> r = new ArrayList();
|
||||
for(int i = 0; i < p.length; ++i) {
|
||||
if(p[i] == null) {
|
||||
continue;
|
||||
}
|
||||
String gg = p[i].toString();
|
||||
if(gg == null) {
|
||||
continue;
|
||||
}
|
||||
String[] parts = splitPath(gg);
|
||||
for(int j = 0; j < parts.length; ++j) {
|
||||
if(parts[j] == null || parts[j].equals(".")) {
|
||||
continue;
|
||||
}else if(parts[j].equals("..") && r.size() > 0) {
|
||||
int k = r.size() - 1;
|
||||
if(!r.get(k).equals("..")) {
|
||||
r.remove(k);
|
||||
}else {
|
||||
r.add("..");
|
||||
}
|
||||
}else {
|
||||
r.add(parts[j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(r.size() > 0) {
|
||||
StringBuilder s = new StringBuilder();
|
||||
for(int i = 0; i < r.size(); ++i) {
|
||||
if(i > 0) {
|
||||
s.append(pathSeperator);
|
||||
}
|
||||
s.append(r.get(i));
|
||||
}
|
||||
return s.toString();
|
||||
}else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// ======== Virtual Filesystem Functions =============
|
||||
|
||||
public String getName() {
|
||||
int index = path.lastIndexOf(slash);
|
||||
if (index < prefixLength) return path.substring(prefixLength);
|
||||
return path.substring(index + 1);
|
||||
}
|
||||
|
||||
public String getPath() {
|
||||
return path;
|
||||
}
|
||||
|
||||
public boolean exists() {
|
||||
return exists(path);
|
||||
}
|
||||
|
||||
public boolean isDirectory() {
|
||||
return exists(path) && directoryExists(path);
|
||||
}
|
||||
|
||||
public void renameTo(File newPath) {
|
||||
renameFile(path, newPath.path);
|
||||
}
|
||||
|
||||
public byte[] read() {
|
||||
return readFile(path);
|
||||
}
|
||||
|
||||
public void write(byte[] data) {
|
||||
writeFile(path, data);
|
||||
}
|
||||
|
||||
public void delete() {
|
||||
deleteFile(path);
|
||||
}
|
||||
|
||||
public void mkdir() {
|
||||
(new java.io.File(filesystemBaseDirectory, stripPath(path))).mkdir();
|
||||
}
|
||||
|
||||
public File[] listFiles() {
|
||||
Collection<FileEntry> collection = listFiles(path, false, false);
|
||||
int size = collection.size();
|
||||
FileEntry[] entries = collection.toArray(new FileEntry[size]);
|
||||
File[] files = new File[size];
|
||||
|
||||
for(int i = 0; i < size; i++) {
|
||||
files[i] = new File(entries[i].path);
|
||||
}
|
||||
return files;
|
||||
}
|
||||
|
||||
public static final boolean exists(String path) {
|
||||
return (new java.io.File(filesystemBaseDirectory, stripPath(path))).exists();
|
||||
}
|
||||
|
|
47
src/main/java/net/PeytonPlayz585/io/FilterReader.java
Normal file
47
src/main/java/net/PeytonPlayz585/io/FilterReader.java
Normal file
|
@ -0,0 +1,47 @@
|
|||
package net.PeytonPlayz585.io;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
|
||||
public abstract class FilterReader extends Reader {
|
||||
|
||||
protected Reader in;
|
||||
|
||||
protected FilterReader(Reader in) {
|
||||
super(in);
|
||||
this.in = in;
|
||||
}
|
||||
|
||||
public int read() throws IOException {
|
||||
return in.read();
|
||||
}
|
||||
|
||||
public int read(char cbuf[], int off, int len) throws IOException {
|
||||
return in.read(cbuf, off, len);
|
||||
}
|
||||
|
||||
public long skip(long n) throws IOException {
|
||||
return in.skip(n);
|
||||
}
|
||||
|
||||
public boolean ready() throws IOException {
|
||||
return in.ready();
|
||||
}
|
||||
|
||||
public boolean markSupported() {
|
||||
return in.markSupported();
|
||||
}
|
||||
|
||||
public void mark(int readAheadLimit) throws IOException {
|
||||
in.mark(readAheadLimit);
|
||||
}
|
||||
|
||||
public void reset() throws IOException {
|
||||
in.reset();
|
||||
}
|
||||
|
||||
public void close() throws IOException {
|
||||
in.close();
|
||||
}
|
||||
|
||||
}
|
140
src/main/java/net/PeytonPlayz585/io/PushbackReader.java
Normal file
140
src/main/java/net/PeytonPlayz585/io/PushbackReader.java
Normal file
|
@ -0,0 +1,140 @@
|
|||
package net.PeytonPlayz585.io;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
|
||||
public class PushbackReader extends FilterReader {
|
||||
|
||||
private char[] buf;
|
||||
|
||||
private int pos;
|
||||
|
||||
public PushbackReader(Reader in, int size) {
|
||||
super(in);
|
||||
if (size <= 0) {
|
||||
throw new IllegalArgumentException("size <= 0");
|
||||
}
|
||||
this.buf = new char[size];
|
||||
this.pos = size;
|
||||
}
|
||||
|
||||
public PushbackReader(Reader in) {
|
||||
this(in, 1);
|
||||
}
|
||||
|
||||
private void ensureOpen() throws IOException {
|
||||
if (buf == null)
|
||||
throw new IOException("Stream closed");
|
||||
}
|
||||
|
||||
public int read() throws IOException {
|
||||
synchronized (lock) {
|
||||
ensureOpen();
|
||||
if (pos < buf.length)
|
||||
return buf[pos++];
|
||||
else
|
||||
return super.read();
|
||||
}
|
||||
}
|
||||
|
||||
public int read(char cbuf[], int off, int len) throws IOException {
|
||||
synchronized (lock) {
|
||||
ensureOpen();
|
||||
try {
|
||||
if (len <= 0) {
|
||||
if (len < 0) {
|
||||
throw new IndexOutOfBoundsException();
|
||||
} else if ((off < 0) || (off > cbuf.length)) {
|
||||
throw new IndexOutOfBoundsException();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
int avail = buf.length - pos;
|
||||
if (avail > 0) {
|
||||
if (len < avail)
|
||||
avail = len;
|
||||
System.arraycopy(buf, pos, cbuf, off, avail);
|
||||
pos += avail;
|
||||
off += avail;
|
||||
len -= avail;
|
||||
}
|
||||
if (len > 0) {
|
||||
len = super.read(cbuf, off, len);
|
||||
if (len == -1) {
|
||||
return (avail == 0) ? -1 : avail;
|
||||
}
|
||||
return avail + len;
|
||||
}
|
||||
return avail;
|
||||
} catch (ArrayIndexOutOfBoundsException e) {
|
||||
throw new IndexOutOfBoundsException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void unread(int c) throws IOException {
|
||||
synchronized (lock) {
|
||||
ensureOpen();
|
||||
if (pos == 0)
|
||||
throw new IOException("Pushback buffer overflow");
|
||||
buf[--pos] = (char) c;
|
||||
}
|
||||
}
|
||||
|
||||
public void unread(char cbuf[], int off, int len) throws IOException {
|
||||
synchronized (lock) {
|
||||
ensureOpen();
|
||||
if (len > pos)
|
||||
throw new IOException("Pushback buffer overflow");
|
||||
pos -= len;
|
||||
System.arraycopy(cbuf, off, buf, pos, len);
|
||||
}
|
||||
}
|
||||
|
||||
public void unread(char cbuf[]) throws IOException {
|
||||
unread(cbuf, 0, cbuf.length);
|
||||
}
|
||||
|
||||
public boolean ready() throws IOException {
|
||||
synchronized (lock) {
|
||||
ensureOpen();
|
||||
return (pos < buf.length) || super.ready();
|
||||
}
|
||||
}
|
||||
|
||||
public void mark(int readAheadLimit) throws IOException {
|
||||
throw new IOException("mark/reset not supported");
|
||||
}
|
||||
|
||||
public void reset() throws IOException {
|
||||
throw new IOException("mark/reset not supported");
|
||||
}
|
||||
|
||||
public boolean markSupported() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public void close() throws IOException {
|
||||
super.close();
|
||||
buf = null;
|
||||
}
|
||||
|
||||
public long skip(long n) throws IOException {
|
||||
if (n < 0L)
|
||||
throw new IllegalArgumentException("skip value is negative");
|
||||
synchronized (lock) {
|
||||
ensureOpen();
|
||||
int avail = buf.length - pos;
|
||||
if (avail > 0) {
|
||||
if (n <= avail) {
|
||||
pos += n;
|
||||
return n;
|
||||
} else {
|
||||
pos = buf.length;
|
||||
n -= avail;
|
||||
}
|
||||
}
|
||||
return avail + super.skip(n);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -5,7 +5,7 @@ import java.io.Reader;
|
|||
import java.io.StringReader;
|
||||
|
||||
public final class J_JdomParser {
|
||||
public J_JsonRootNode func_27366_a(String var1) throws IOException, J_InvalidSyntaxException {
|
||||
public J_JsonRootNode func_27366_a(Reader var1) throws IOException, J_InvalidSyntaxException {
|
||||
J_JsonListenerToJdomAdapter var2 = new J_JsonListenerToJdomAdapter();
|
||||
(new J_SajParser()).func_27463_a(var1, var2); //TODO: Find out why this shit crashes
|
||||
return var2.func_27208_a();
|
||||
|
@ -13,7 +13,7 @@ public final class J_JdomParser {
|
|||
|
||||
public J_JsonRootNode func_27367_a(String var1) throws J_InvalidSyntaxException {
|
||||
try {
|
||||
J_JsonRootNode var2 = this.func_27366_a(var1);
|
||||
J_JsonRootNode var2 = this.func_27366_a(new StringReader(var1));
|
||||
return var2;
|
||||
} catch (IOException var4) {
|
||||
throw new RuntimeException("Coding failure in Argo: StringWriter gave an IOException", var4);
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
package net.minecraft.src;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.Stack;
|
||||
|
||||
final class J_JsonListenerToJdomAdapter implements J_JsonListener {
|
||||
private final LinkedList<J_NodeContainer> field_27210_a = new LinkedList<J_NodeContainer>();
|
||||
private final Stack field_27210_a = new Stack();
|
||||
private J_JsonNodeBuilder field_27209_b;
|
||||
|
||||
J_JsonRootNode func_27208_a() {
|
||||
|
|
|
@ -1,20 +1,18 @@
|
|||
package net.minecraft.src;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
|
||||
import net.PeytonPlayz585.io.PushbackReader;
|
||||
|
||||
final class J_PositionTrackingPushbackReader implements J_ThingWithPosition {
|
||||
private String field_27338_a;
|
||||
private final PushbackReader field_27338_a;
|
||||
private int field_27337_b = 0;
|
||||
private int field_27340_c = 1;
|
||||
private boolean field_27339_d = false;
|
||||
private int index = 0;
|
||||
|
||||
public J_PositionTrackingPushbackReader(String var1) {
|
||||
if(var1 == null) {
|
||||
this.field_27338_a = "";
|
||||
} else {
|
||||
this.field_27338_a = var1;
|
||||
}
|
||||
public J_PositionTrackingPushbackReader(Reader var1) {
|
||||
this.field_27338_a = new PushbackReader(var1);
|
||||
}
|
||||
|
||||
public void func_27334_a(char var1) throws IOException {
|
||||
|
@ -22,7 +20,8 @@ final class J_PositionTrackingPushbackReader implements J_ThingWithPosition {
|
|||
if(this.field_27337_b < 0) {
|
||||
this.field_27337_b = 0;
|
||||
}
|
||||
index--;
|
||||
|
||||
this.field_27338_a.unread(var1);
|
||||
}
|
||||
|
||||
public void func_27335_a(char[] var1) {
|
||||
|
@ -30,25 +29,26 @@ final class J_PositionTrackingPushbackReader implements J_ThingWithPosition {
|
|||
if(this.field_27337_b < 0) {
|
||||
this.field_27337_b = 0;
|
||||
}
|
||||
index -= var1.length;
|
||||
|
||||
}
|
||||
|
||||
public int func_27333_c() throws IOException {
|
||||
if (index >= field_27338_a.length()) {
|
||||
return -1; //EOF reached (I think)
|
||||
}
|
||||
char var1 = field_27338_a.charAt(index++);
|
||||
this.func_27332_a(var1);
|
||||
return var1;
|
||||
int var1 = this.field_27338_a.read();
|
||||
this.func_27332_a(var1);
|
||||
return var1;
|
||||
}
|
||||
|
||||
public int func_27336_b(char[] var1) throws IOException {
|
||||
int length = Math.min(var1.length, field_27338_a.length() - index);
|
||||
for (int i = 0; i < length; i++) {
|
||||
var1[i] = field_27338_a.charAt(index++);
|
||||
this.func_27332_a(var1[i]);
|
||||
}
|
||||
return length;
|
||||
int var2 = this.field_27338_a.read(var1);
|
||||
char[] var3 = var1;
|
||||
int var4 = var1.length;
|
||||
|
||||
for(int var5 = 0; var5 < var4; ++var5) {
|
||||
char var6 = var3[var5];
|
||||
this.func_27332_a(var6);
|
||||
}
|
||||
|
||||
return var2;
|
||||
}
|
||||
|
||||
private void func_27332_a(int var1) {
|
||||
|
|
|
@ -5,7 +5,7 @@ import java.io.Reader;
|
|||
import java.util.Arrays;
|
||||
|
||||
public final class J_SajParser {
|
||||
public void func_27463_a(String var1, J_JsonListener var2) throws IOException, J_InvalidSyntaxException {
|
||||
public void func_27463_a(Reader var1, J_JsonListener var2) throws IOException, J_InvalidSyntaxException {
|
||||
J_PositionTrackingPushbackReader var3 = new J_PositionTrackingPushbackReader(var1);
|
||||
char var4 = (char)var3.func_27333_c();
|
||||
switch(var4) {
|
||||
|
@ -26,6 +26,8 @@ public final class J_SajParser {
|
|||
int var5 = this.func_27448_l(var3);
|
||||
if(var5 != -1) {
|
||||
throw new J_InvalidSyntaxException("Got unexpected trailing character [" + (char)var5 + "].", var3);
|
||||
} else {
|
||||
var2.func_27204_c();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,33 +1,35 @@
|
|||
package net.minecraft.src;
|
||||
|
||||
import net.PeytonPlayz585.fileutils.File;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import net.PeytonPlayz585.fileutils.File;
|
||||
import net.PeytonPlayz585.fileutils.FileEntry;
|
||||
|
||||
public class StatFileWriter {
|
||||
private Map field_25102_a = new HashMap();
|
||||
private Map field_25101_b = new HashMap();
|
||||
private boolean field_27189_c = false;
|
||||
private StatsSyncher statsSyncher;
|
||||
|
||||
public StatFileWriter(Session var1, String var2) {
|
||||
String var3 = var2 + "/" + "stats";
|
||||
public StatFileWriter(Session var1, String var2File) {
|
||||
File var2 = new File(var2File);
|
||||
File var3 = new File(var2, "stats");
|
||||
if(!var3.exists()) {
|
||||
var3.mkdir();
|
||||
}
|
||||
|
||||
FileEntry[] var4 = File.listFiles(var2);
|
||||
File[] var4 = var2.listFiles();
|
||||
int var5 = var4.length;
|
||||
|
||||
for(int var6 = 0; var6 < var5; ++var6) {
|
||||
FileEntry var7 = var4[var6];
|
||||
File var7 = var4[var6];
|
||||
if(var7.getName().startsWith("stats_") && var7.getName().endsWith(".dat")) {
|
||||
String var8 = var3 + "/" + var7.getName();
|
||||
if(!File.exists(var8)) {
|
||||
File var8 = new File(var3, var7.getName());
|
||||
if(!var8.exists()) {
|
||||
System.out.println("Relocating " + var7.getName());
|
||||
File.renameFile(var7.path, var8);
|
||||
var7.renameTo(var8);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -97,8 +99,8 @@ public class StatFileWriter {
|
|||
|
||||
try {
|
||||
String var2 = "local";
|
||||
String var3 = "";
|
||||
J_JsonRootNode var4 = (new J_JdomParser()).func_27367_a(var0); //Crashes!?!?
|
||||
StringBuilder var3 = new StringBuilder();
|
||||
J_JsonRootNode var4 = (new J_JdomParser()).func_27367_a(var0);
|
||||
List var5 = var4.func_27217_b(new Object[]{"stats-change"});
|
||||
Iterator var6 = var5.iterator();
|
||||
|
||||
|
@ -112,8 +114,8 @@ public class StatFileWriter {
|
|||
if(var12 == null) {
|
||||
System.out.println(var10 + " is not a valid stat");
|
||||
} else {
|
||||
var3 = var3 + StatList.func_27361_a(var10).statGuid + ",";
|
||||
var3 = var3 + var11 + ",";
|
||||
var3.append(StatList.func_27361_a(var10).statGuid).append(",");
|
||||
var3.append(var11).append(",");
|
||||
var1.put(var12, Integer.valueOf(var11));
|
||||
}
|
||||
}
|
||||
|
@ -132,41 +134,41 @@ public class StatFileWriter {
|
|||
}
|
||||
|
||||
public static String func_27185_a(String var0, String var1, Map var2) {
|
||||
String var3 = "";
|
||||
String var4 = "";
|
||||
StringBuilder var3 = new StringBuilder();
|
||||
StringBuilder var4 = new StringBuilder();
|
||||
boolean var5 = true;
|
||||
var3 = var3 + "{\r\n";
|
||||
var3.append("{\r\n");
|
||||
if(var0 != null && var1 != null) {
|
||||
var3 = var3 + " \"user\":{\r\n";
|
||||
var3 = var3 + " \"name\":\"" + var0 + "\",\r\n";
|
||||
var3 = var3 + " \"sessionid\":\"" + var1 + "\"\r\n";
|
||||
var3 = var3 + " },\r\n";
|
||||
var3.append(" \"user\":{\r\n");
|
||||
var3.append(" \"name\":\"").append(var0).append("\",\r\n");
|
||||
var3.append(" \"sessionid\":\"").append(var1).append("\"\r\n");
|
||||
var3.append(" },\r\n");
|
||||
}
|
||||
|
||||
var3 = var3 + " \"stats-change\":[";
|
||||
var3.append(" \"stats-change\":[");
|
||||
Iterator var6 = var2.keySet().iterator();
|
||||
|
||||
while(var6.hasNext()) {
|
||||
StatBase var7 = (StatBase)var6.next();
|
||||
if(!var5) {
|
||||
var3 = var3 + "},";
|
||||
var3.append("},");
|
||||
} else {
|
||||
var5 = false;
|
||||
}
|
||||
|
||||
var3 = var3 + "\r\n {\"" + var7.statId + "\":" + var2.get(var7);
|
||||
var4 = var4 + var7.statGuid + ",";
|
||||
var4 = var4 + var2.get(var7) + ",";
|
||||
var3.append("\r\n {\"").append(var7.statId).append("\":").append(var2.get(var7));
|
||||
var4.append(var7.statGuid).append(",");
|
||||
var4.append(var2.get(var7)).append(",");
|
||||
}
|
||||
|
||||
if(!var5) {
|
||||
var3 = var3 + "}";
|
||||
var3.append("}");
|
||||
}
|
||||
|
||||
MD5String var8 = new MD5String(var1);
|
||||
var3 = var3 + "\r\n ],\r\n";
|
||||
var3 = var3 + " \"checksum\":\"" + var8.func_27369_a(var4) + "\"\r\n";
|
||||
var3 = var3 + "}";
|
||||
var3.append("\r\n ],\r\n");
|
||||
var3.append(" \"checksum\":\"").append(var8.func_27369_a(var4.toString())).append("\"\r\n");
|
||||
var3.append("}");
|
||||
return var3.toString();
|
||||
}
|
||||
|
||||
|
@ -197,4 +199,4 @@ public class StatFileWriter {
|
|||
|
||||
this.statsSyncher.func_27425_c();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -3,35 +3,35 @@ package net.minecraft.src;
|
|||
import java.io.BufferedReader;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
|
||||
import net.PeytonPlayz585.fileutils.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.Map;
|
||||
|
||||
import net.PeytonPlayz585.fileutils.File;
|
||||
|
||||
public class StatsSyncher {
|
||||
private volatile boolean field_27438_a = false;
|
||||
private volatile Map field_27437_b = null;
|
||||
private volatile Map field_27436_c = null;
|
||||
private StatFileWriter field_27435_d;
|
||||
private String field_27434_e;
|
||||
private String field_27433_f;
|
||||
private String field_27432_g;
|
||||
private String field_27431_h;
|
||||
private String field_27430_i;
|
||||
private String field_27429_j;
|
||||
private File field_27434_e;
|
||||
private File field_27433_f;
|
||||
private File field_27432_g;
|
||||
private File field_27431_h;
|
||||
private File field_27430_i;
|
||||
private File field_27429_j;
|
||||
private Session field_27428_k;
|
||||
private int field_27427_l = 0;
|
||||
private int field_27426_m = 0;
|
||||
|
||||
public StatsSyncher(Session var1, StatFileWriter var2, String var3) {
|
||||
this.field_27434_e = makeFilePath(var3, "stats_" + var1.username.toLowerCase() + "_unsent.dat");
|
||||
this.field_27433_f = makeFilePath(var3, "stats_" + var1.username.toLowerCase() + ".dat");
|
||||
this.field_27430_i = makeFilePath(var3, "stats_" + var1.username.toLowerCase() + "_unsent.old");
|
||||
this.field_27429_j = makeFilePath(var3, "stats_" + var1.username.toLowerCase() + ".old");
|
||||
this.field_27432_g = makeFilePath(var3, "stats_" + var1.username.toLowerCase() + "_unsent.tmp");
|
||||
this.field_27431_h = makeFilePath(var3, "stats_" + var1.username.toLowerCase() + ".tmp");
|
||||
public StatsSyncher(Session var1, StatFileWriter var2, File var3) {
|
||||
this.field_27434_e = new File(var3, "stats_" + var1.username.toLowerCase() + "_unsent.dat");
|
||||
this.field_27433_f = new File(var3, "stats_" + var1.username.toLowerCase() + ".dat");
|
||||
this.field_27430_i = new File(var3, "stats_" + var1.username.toLowerCase() + "_unsent.old");
|
||||
this.field_27429_j = new File(var3, "stats_" + var1.username.toLowerCase() + ".old");
|
||||
this.field_27432_g = new File(var3, "stats_" + var1.username.toLowerCase() + "_unsent.tmp");
|
||||
this.field_27431_h = new File(var3, "stats_" + var1.username.toLowerCase() + ".tmp");
|
||||
if(!var1.username.toLowerCase().equals(var1.username)) {
|
||||
this.func_28214_a(var3, "stats_" + var1.username + "_unsent.dat", this.field_27434_e);
|
||||
this.func_28214_a(var3, "stats_" + var1.username + ".dat", this.field_27433_f);
|
||||
|
@ -43,53 +43,94 @@ public class StatsSyncher {
|
|||
|
||||
this.field_27435_d = var2;
|
||||
this.field_27428_k = var1;
|
||||
if(File.exists(this.field_27434_e)) {
|
||||
if(this.field_27434_e.exists()) {
|
||||
var2.func_27179_a(this.func_27415_a(this.field_27434_e, this.field_27432_g, this.field_27430_i));
|
||||
}
|
||||
|
||||
this.func_27418_a();
|
||||
}
|
||||
|
||||
private void func_28214_a(String var1, String var2, String var3) {
|
||||
String var4 = makeFilePath(var1, var2);
|
||||
if(File.exists(var4) && !File.directoryExists(var4) && !File.exists(var3)) {
|
||||
File.renameFile(var4, var3);
|
||||
private void func_28214_a(File var1, String var2, File var3) {
|
||||
File var4 = new File(var1, var2);
|
||||
if(var4.exists() && !var4.isDirectory() && !var3.exists()) {
|
||||
var4.renameTo(var3);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private Map func_27415_a(String var1, String var2, String var3) {
|
||||
return File.exists(var1) ? this.func_27408_a(var1) : (File.exists(var3) ? this.func_27408_a(var3) : (File.exists(var2) ? this.func_27408_a(var2) : null));
|
||||
private Map func_27415_a(File var1, File var2, File var3) {
|
||||
return var1.exists() ? this.func_27408_a(var1) : (var3.exists() ? this.func_27408_a(var3) : (var2.exists() ? this.func_27408_a(var2) : null));
|
||||
}
|
||||
|
||||
private Map func_27408_a(String var1) {
|
||||
byte[] bytes = File.readFile(var1);
|
||||
if (bytes == null || bytes.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return StatFileWriter.func_27177_a(new String(""));
|
||||
}
|
||||
|
||||
private void func_27410_a(Map var1, String var2, String var3, String var4) throws IOException {
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
PrintWriter var5 = new PrintWriter(baos);
|
||||
private Map func_27408_a(File var1) {
|
||||
BufferedReader var2 = null;
|
||||
|
||||
try {
|
||||
var5.print(StatFileWriter.func_27185_a(this.field_27428_k.username, "local", var1));
|
||||
File.writeFile(var3, baos.toByteArray());
|
||||
ByteArrayInputStream bais = new ByteArrayInputStream(var1.read());
|
||||
InputStreamReader isr = new InputStreamReader(bais, "UTF-8");
|
||||
var2 = new BufferedReader(isr);
|
||||
String var3 = "";
|
||||
StringBuilder var4 = new StringBuilder();
|
||||
|
||||
while(true) {
|
||||
var3 = var2.readLine();
|
||||
if(var3 == null) {
|
||||
Map var5 = StatFileWriter.func_27177_a(var4.toString());
|
||||
return var5;
|
||||
}
|
||||
|
||||
var4.append(var3);
|
||||
}
|
||||
} catch (Exception var15) {
|
||||
var15.printStackTrace();
|
||||
} finally {
|
||||
if(var2 != null) {
|
||||
try {
|
||||
var2.close();
|
||||
} catch (Exception var14) {
|
||||
var14.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private void func_27410_a(Map var1, File var2, File var3, File var4) throws IOException {
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
PrintWriter var5 = new PrintWriter(baos);
|
||||
|
||||
try {
|
||||
var5.print(StatFileWriter.func_27185_a(this.field_27428_k.username, "local", var1));
|
||||
|
||||
var5.flush();
|
||||
byte[] data = baos.toByteArray();
|
||||
var3.write(data);
|
||||
var5.close();
|
||||
} catch(Exception e) {
|
||||
var5.close();
|
||||
System.out.println("Failed to save stats");
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
if(File.exists(var4)) {
|
||||
File.deleteFile(var4);
|
||||
// try {
|
||||
// var5.print(StatFileWriter.func_27185_a(this.field_27428_k.username, "local", var1));
|
||||
// var3.write(baos.toByteArray());
|
||||
// } finally {
|
||||
// var5.close();
|
||||
// baos.close();
|
||||
// }
|
||||
|
||||
if(var4.exists()) {
|
||||
var4.delete();
|
||||
}
|
||||
|
||||
if(File.exists(var2)) {
|
||||
File.renameFile(var2, var4);
|
||||
if(var2.exists()) {
|
||||
var2.renameTo(var4);
|
||||
}
|
||||
|
||||
File.renameFile(var3, var2);
|
||||
var3.renameTo(var2);
|
||||
}
|
||||
|
||||
public void func_27418_a() {
|
||||
|
@ -98,7 +139,18 @@ public class StatsSyncher {
|
|||
} else {
|
||||
this.field_27427_l = 100;
|
||||
this.field_27438_a = true;
|
||||
(new ThreadStatSyncherReceive(this)).start();
|
||||
|
||||
try {
|
||||
if(StatsSyncher.func_27422_a(this) != null) {
|
||||
StatsSyncher.func_27412_a(this, StatsSyncher.func_27422_a(this), StatsSyncher.func_27423_b(this), StatsSyncher.func_27411_c(this), StatsSyncher.func_27413_d(this));
|
||||
} else if(StatsSyncher.func_27423_b(this).exists()) {
|
||||
StatsSyncher.func_27421_a(this, StatsSyncher.func_27409_a(this, StatsSyncher.func_27423_b(this), StatsSyncher.func_27411_c(this), StatsSyncher.func_27413_d(this)));
|
||||
}
|
||||
} catch (Exception var5) {
|
||||
var5.printStackTrace();
|
||||
} finally {
|
||||
StatsSyncher.func_27416_a(this, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -169,19 +221,19 @@ public class StatsSyncher {
|
|||
return var0.field_27437_b;
|
||||
}
|
||||
|
||||
static String func_27423_b(StatsSyncher var0) {
|
||||
static File func_27423_b(StatsSyncher var0) {
|
||||
return var0.field_27433_f;
|
||||
}
|
||||
|
||||
static String func_27411_c(StatsSyncher var0) {
|
||||
static File func_27411_c(StatsSyncher var0) {
|
||||
return var0.field_27431_h;
|
||||
}
|
||||
|
||||
static String func_27413_d(StatsSyncher var0) {
|
||||
static File func_27413_d(StatsSyncher var0) {
|
||||
return var0.field_27429_j;
|
||||
}
|
||||
|
||||
static void func_27412_a(StatsSyncher var0, Map var1, String var2, String var3, String var4) throws IOException {
|
||||
static void func_27412_a(StatsSyncher var0, Map var1, File var2, File var3, File var4) throws IOException {
|
||||
var0.func_27410_a(var1, var2, var3, var4);
|
||||
}
|
||||
|
||||
|
@ -189,7 +241,7 @@ public class StatsSyncher {
|
|||
return var0.field_27437_b = var1;
|
||||
}
|
||||
|
||||
static Map func_27409_a(StatsSyncher var0, String var1, String var2, String var3) {
|
||||
static Map func_27409_a(StatsSyncher var0, File var1, File var2, File var3) {
|
||||
return var0.func_27415_a(var1, var2, var3);
|
||||
}
|
||||
|
||||
|
@ -197,19 +249,15 @@ public class StatsSyncher {
|
|||
return var0.field_27438_a = var1;
|
||||
}
|
||||
|
||||
static String func_27414_e(StatsSyncher var0) {
|
||||
static File func_27414_e(StatsSyncher var0) {
|
||||
return var0.field_27434_e;
|
||||
}
|
||||
|
||||
static String func_27417_f(StatsSyncher var0) {
|
||||
static File func_27417_f(StatsSyncher var0) {
|
||||
return var0.field_27432_g;
|
||||
}
|
||||
|
||||
static String func_27419_g(StatsSyncher var0) {
|
||||
static File func_27419_g(StatsSyncher var0) {
|
||||
return var0.field_27430_i;
|
||||
}
|
||||
|
||||
private static String makeFilePath(String s, String s1) {
|
||||
return s + "/" + s1;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,26 +0,0 @@
|
|||
package net.minecraft.src;
|
||||
|
||||
import net.PeytonPlayz585.fileutils.File;
|
||||
|
||||
class ThreadStatSyncherReceive extends Thread {
|
||||
final StatsSyncher field_27231_a;
|
||||
|
||||
ThreadStatSyncherReceive(StatsSyncher var1) {
|
||||
this.field_27231_a = var1;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
try {
|
||||
if(StatsSyncher.func_27422_a(this.field_27231_a) != null) {
|
||||
StatsSyncher.func_27412_a(this.field_27231_a, StatsSyncher.func_27422_a(this.field_27231_a), StatsSyncher.func_27423_b(this.field_27231_a), StatsSyncher.func_27411_c(this.field_27231_a), StatsSyncher.func_27413_d(this.field_27231_a));
|
||||
} else if(File.exists(StatsSyncher.func_27423_b(this.field_27231_a))) {
|
||||
StatsSyncher.func_27421_a(this.field_27231_a, StatsSyncher.func_27409_a(this.field_27231_a, StatsSyncher.func_27423_b(this.field_27231_a), StatsSyncher.func_27411_c(this.field_27231_a), StatsSyncher.func_27413_d(this.field_27231_a)));
|
||||
}
|
||||
} catch (Exception var5) {
|
||||
var5.printStackTrace();
|
||||
} finally {
|
||||
StatsSyncher.func_27416_a(this.field_27231_a, false);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
package net.PeytonPlayz585.fileutils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
import net.PeytonPlayz585.Client;
|
||||
|
@ -7,6 +8,176 @@ import net.PeytonPlayz585.fileutils.IndexedDBFilesystem.OpenState;
|
|||
|
||||
public class File {
|
||||
|
||||
private String path;
|
||||
private transient int prefixLength;
|
||||
private final char slash = '/';
|
||||
private static final String pathSeperator = "/";
|
||||
private static final String[] altPathSeperator = new String[] { "\\" };
|
||||
|
||||
public File(String pathName) {
|
||||
if (pathName == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
this.path = this.normalize(pathName);
|
||||
this.prefixLength = this.prefixLength(this.path);
|
||||
}
|
||||
|
||||
public File(String parent, String child) {
|
||||
if (child == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
|
||||
if(parent != null) {
|
||||
this.path = this.createPath(parent, child);
|
||||
} else {
|
||||
this.path = this.normalize(child);
|
||||
}
|
||||
}
|
||||
|
||||
public File(File parent, String child) {
|
||||
if (child == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
if(parent != null) {
|
||||
this.path = this.createPath(parent.path, child);
|
||||
} else {
|
||||
this.path = this.normalize(child);
|
||||
}
|
||||
}
|
||||
|
||||
private int prefixLength(String path) {
|
||||
char slash = this.slash;
|
||||
int n = path.length();
|
||||
if (n == 0) return 0;
|
||||
char c0 = path.charAt(0);
|
||||
char c1 = (n > 1) ? path.charAt(1) : 0;
|
||||
if (c0 == slash) {
|
||||
if (c1 == slash) return 2;
|
||||
return 1;
|
||||
}
|
||||
if (isLetter(c0) && (c1 == ':')) {
|
||||
if ((n > 2) && (path.charAt(2) == slash))
|
||||
return 3;
|
||||
return 2;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
private boolean isLetter(char c) {
|
||||
return ((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z'));
|
||||
}
|
||||
|
||||
private String normalize(String p) {
|
||||
for(int i = 0; i < altPathSeperator.length; ++i) {
|
||||
p = p.replace(altPathSeperator[i], pathSeperator);
|
||||
}
|
||||
if(p.startsWith(pathSeperator)) {
|
||||
p = p.substring(1);
|
||||
}
|
||||
if(p.endsWith(pathSeperator)) {
|
||||
p = p.substring(0, p.length() - pathSeperator.length());
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
private String[] splitPath(String p) {
|
||||
String[] pth = normalize(p).split(pathSeperator);
|
||||
for(int i = 0; i < pth.length; ++i) {
|
||||
pth[i] = pth[i].trim();
|
||||
}
|
||||
return pth;
|
||||
}
|
||||
|
||||
private String createPath(Object... p) {
|
||||
ArrayList<String> r = new ArrayList();
|
||||
for(int i = 0; i < p.length; ++i) {
|
||||
if(p[i] == null) {
|
||||
continue;
|
||||
}
|
||||
String gg = p[i].toString();
|
||||
if(gg == null) {
|
||||
continue;
|
||||
}
|
||||
String[] parts = splitPath(gg);
|
||||
for(int j = 0; j < parts.length; ++j) {
|
||||
if(parts[j] == null || parts[j].equals(".")) {
|
||||
continue;
|
||||
}else if(parts[j].equals("..") && r.size() > 0) {
|
||||
int k = r.size() - 1;
|
||||
if(!r.get(k).equals("..")) {
|
||||
r.remove(k);
|
||||
}else {
|
||||
r.add("..");
|
||||
}
|
||||
}else {
|
||||
r.add(parts[j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(r.size() > 0) {
|
||||
StringBuilder s = new StringBuilder();
|
||||
for(int i = 0; i < r.size(); ++i) {
|
||||
if(i > 0) {
|
||||
s.append(pathSeperator);
|
||||
}
|
||||
s.append(r.get(i));
|
||||
}
|
||||
return s.toString();
|
||||
}else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
int index = path.lastIndexOf(slash);
|
||||
if (index < prefixLength) return path.substring(prefixLength);
|
||||
return path.substring(index + 1);
|
||||
}
|
||||
|
||||
public String getPath() {
|
||||
return path;
|
||||
}
|
||||
|
||||
public boolean exists() {
|
||||
return exists(path);
|
||||
}
|
||||
|
||||
public boolean isDirectory() {
|
||||
return exists(path) && directoryExists(path);
|
||||
}
|
||||
|
||||
public void renameTo(File newPath) {
|
||||
renameFile(path, newPath.path);
|
||||
}
|
||||
|
||||
public byte[] read() {
|
||||
return readFile(path);
|
||||
}
|
||||
|
||||
public void write(byte[] data) {
|
||||
writeFile(path, data);
|
||||
}
|
||||
|
||||
public void delete() {
|
||||
deleteFile(path);
|
||||
}
|
||||
|
||||
public void mkdir() {
|
||||
IndexedDBFilesystem.mkdir(path);
|
||||
}
|
||||
|
||||
public File[] listFiles() {
|
||||
Collection<FileEntry> collection = listFiles(path, false, false);
|
||||
int size = collection.size();
|
||||
FileEntry[] entries = collection.toArray(new FileEntry[size]);
|
||||
File[] files = new File[size];
|
||||
|
||||
for(int i = 0; i < size; i++) {
|
||||
files[i] = new File(entries[i].path);
|
||||
}
|
||||
return files;
|
||||
}
|
||||
|
||||
public static final boolean fileExists(String path) {
|
||||
return IndexedDBFilesystem.fileExists(path);
|
||||
}
|
||||
|
@ -20,7 +191,7 @@ public class File {
|
|||
}
|
||||
|
||||
public static final boolean exists(String path) {
|
||||
return readFile(path) != null;
|
||||
return IndexedDBFilesystem.exists(path);
|
||||
}
|
||||
|
||||
public static final void mkdir(String path) {
|
||||
|
|
|
@ -61,11 +61,15 @@ public class IndexedDBFilesystem {
|
|||
return AsyncHandlers.fileGetType(db, path) == FileExists.DIRECTORY;
|
||||
}
|
||||
|
||||
public static final boolean exists(String path) {
|
||||
return AsyncHandlers.fileGetType(db, path) != FileExists.FALSE;
|
||||
}
|
||||
|
||||
public static final boolean pathExists(String path) {
|
||||
return AsyncHandlers.fileExists(db, path).bool;
|
||||
}
|
||||
|
||||
private static final void mkdir(String dir) {
|
||||
public static final void mkdir(String dir) {
|
||||
if(directoryExists(dir)) {
|
||||
return;
|
||||
}
|
||||
|
|
23340
web/js/app.js
23340
web/js/app.js
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user