mirror of
https://github.com/PaperMC/Paper.git
synced 2025-08-11 18:22:08 -07:00
uuid changes
This commit is contained in:
246
src/main/java/net/minecraft/server/PlayerNBTManager.java
Normal file
246
src/main/java/net/minecraft/server/PlayerNBTManager.java
Normal file
@@ -0,0 +1,246 @@
|
||||
package net.minecraft.server;
|
||||
|
||||
import java.io.DataInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class PlayerNBTManager implements PlayerFileData, IDataManager {
|
||||
|
||||
private static final Logger a = Logger.getLogger("Minecraft");
|
||||
private final File b;
|
||||
private final File c;
|
||||
private final File d;
|
||||
private final long e = System.currentTimeMillis();
|
||||
|
||||
public PlayerNBTManager(File file1, String s, boolean flag) {
|
||||
this.b = new File(file1, s);
|
||||
this.b.mkdirs();
|
||||
this.c = new File(this.b, "players");
|
||||
this.d = new File(this.b, "data");
|
||||
this.d.mkdirs();
|
||||
if (flag) {
|
||||
this.c.mkdirs();
|
||||
}
|
||||
|
||||
this.f();
|
||||
}
|
||||
|
||||
private void f() {
|
||||
try {
|
||||
File file1 = new File(this.b, "session.lock");
|
||||
DataOutputStream dataoutputstream = new DataOutputStream(new FileOutputStream(file1));
|
||||
|
||||
try {
|
||||
dataoutputstream.writeLong(this.e);
|
||||
} finally {
|
||||
dataoutputstream.close();
|
||||
}
|
||||
} catch (IOException ioexception) {
|
||||
ioexception.printStackTrace();
|
||||
throw new RuntimeException("Failed to check session lock, aborting");
|
||||
}
|
||||
}
|
||||
|
||||
protected File a() {
|
||||
return this.b;
|
||||
}
|
||||
|
||||
public void b() {
|
||||
try {
|
||||
File file1 = new File(this.b, "session.lock");
|
||||
DataInputStream datainputstream = new DataInputStream(new FileInputStream(file1));
|
||||
|
||||
try {
|
||||
if (datainputstream.readLong() != this.e) {
|
||||
throw new MinecraftException("The save is being accessed from another location, aborting");
|
||||
}
|
||||
} finally {
|
||||
datainputstream.close();
|
||||
}
|
||||
} catch (IOException ioexception) {
|
||||
throw new MinecraftException("Failed to check session lock, aborting");
|
||||
}
|
||||
}
|
||||
|
||||
public IChunkLoader a(WorldProvider worldprovider) {
|
||||
if (worldprovider instanceof WorldProviderHell) {
|
||||
File file1 = new File(this.b, "DIM-1");
|
||||
|
||||
file1.mkdirs();
|
||||
return new ChunkLoader(file1, true);
|
||||
} else {
|
||||
return new ChunkLoader(this.b, true);
|
||||
}
|
||||
}
|
||||
|
||||
public WorldData c() {
|
||||
File file1 = new File(this.b, "level.dat");
|
||||
NBTTagCompound nbttagcompound;
|
||||
NBTTagCompound nbttagcompound1;
|
||||
|
||||
if (file1.exists()) {
|
||||
try {
|
||||
nbttagcompound = CompressedStreamTools.a((InputStream) (new FileInputStream(file1)));
|
||||
nbttagcompound1 = nbttagcompound.k("Data");
|
||||
return new WorldData(nbttagcompound1);
|
||||
} catch (Exception exception) {
|
||||
exception.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
file1 = new File(this.b, "level.dat_old");
|
||||
if (file1.exists()) {
|
||||
try {
|
||||
nbttagcompound = CompressedStreamTools.a((InputStream) (new FileInputStream(file1)));
|
||||
nbttagcompound1 = nbttagcompound.k("Data");
|
||||
return new WorldData(nbttagcompound1);
|
||||
} catch (Exception exception1) {
|
||||
exception1.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public void a(WorldData worlddata, List list) {
|
||||
NBTTagCompound nbttagcompound = worlddata.a(list);
|
||||
NBTTagCompound nbttagcompound1 = new NBTTagCompound();
|
||||
|
||||
nbttagcompound1.a("Data", (NBTBase) nbttagcompound);
|
||||
|
||||
try {
|
||||
File file1 = new File(this.b, "level.dat_new");
|
||||
File file2 = new File(this.b, "level.dat_old");
|
||||
File file3 = new File(this.b, "level.dat");
|
||||
|
||||
CompressedStreamTools.a(nbttagcompound1, (OutputStream) (new FileOutputStream(file1)));
|
||||
if (file2.exists()) {
|
||||
file2.delete();
|
||||
}
|
||||
|
||||
file3.renameTo(file2);
|
||||
if (file3.exists()) {
|
||||
file3.delete();
|
||||
}
|
||||
|
||||
file1.renameTo(file3);
|
||||
if (file1.exists()) {
|
||||
file1.delete();
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
exception.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void a(WorldData worlddata) {
|
||||
NBTTagCompound nbttagcompound = worlddata.a();
|
||||
NBTTagCompound nbttagcompound1 = new NBTTagCompound();
|
||||
|
||||
nbttagcompound1.a("Data", (NBTBase) nbttagcompound);
|
||||
|
||||
try {
|
||||
File file1 = new File(this.b, "level.dat_new");
|
||||
File file2 = new File(this.b, "level.dat_old");
|
||||
File file3 = new File(this.b, "level.dat");
|
||||
|
||||
CompressedStreamTools.a(nbttagcompound1, (OutputStream) (new FileOutputStream(file1)));
|
||||
if (file2.exists()) {
|
||||
file2.delete();
|
||||
}
|
||||
|
||||
file3.renameTo(file2);
|
||||
if (file3.exists()) {
|
||||
file3.delete();
|
||||
}
|
||||
|
||||
file1.renameTo(file3);
|
||||
if (file1.exists()) {
|
||||
file1.delete();
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
exception.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void a(EntityHuman entityhuman) {
|
||||
try {
|
||||
NBTTagCompound nbttagcompound = new NBTTagCompound();
|
||||
|
||||
entityhuman.d(nbttagcompound);
|
||||
File file1 = new File(this.c, "_tmp_.dat");
|
||||
File file2 = new File(this.c, entityhuman.name + ".dat");
|
||||
|
||||
CompressedStreamTools.a(nbttagcompound, (OutputStream) (new FileOutputStream(file1)));
|
||||
if (file2.exists()) {
|
||||
file2.delete();
|
||||
}
|
||||
|
||||
file1.renameTo(file2);
|
||||
} catch (Exception exception) {
|
||||
a.warning("Failed to save player data for " + entityhuman.name);
|
||||
}
|
||||
}
|
||||
|
||||
public void b(EntityHuman entityhuman) {
|
||||
NBTTagCompound nbttagcompound = this.a(entityhuman.name);
|
||||
|
||||
if (nbttagcompound != null) {
|
||||
entityhuman.e(nbttagcompound);
|
||||
}
|
||||
}
|
||||
|
||||
public NBTTagCompound a(String s) {
|
||||
try {
|
||||
File file1 = new File(this.c, s + ".dat");
|
||||
|
||||
if (file1.exists()) {
|
||||
return CompressedStreamTools.a((InputStream) (new FileInputStream(file1)));
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
a.warning("Failed to load player data for " + s);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public PlayerFileData d() {
|
||||
return this;
|
||||
}
|
||||
|
||||
public void e() {}
|
||||
|
||||
public File b(String s) {
|
||||
return new File(this.d, s + ".dat");
|
||||
}
|
||||
|
||||
// CraftBukkit start
|
||||
public UUID getUUID() {
|
||||
try {
|
||||
File file1 = new File(this.b, "uid.dat");
|
||||
UUID id;
|
||||
if(!file1.exists()) {
|
||||
DataOutputStream dos = new DataOutputStream(new FileOutputStream(file1));
|
||||
id = UUID.randomUUID();
|
||||
dos.writeLong(id.getMostSignificantBits());
|
||||
dos.writeLong(id.getLeastSignificantBits());
|
||||
}
|
||||
else {
|
||||
DataInputStream dis = new DataInputStream(new FileInputStream(file1));
|
||||
id = new UUID(dis.readLong(), dis.readLong());
|
||||
}
|
||||
return id;
|
||||
}
|
||||
catch (IOException ex) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
// CraftBukkit end
|
||||
}
|
Reference in New Issue
Block a user