import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import me.dpohvar.powernbt.api.NBTManager;
import me.dpohvar.powernbt.utils.ReflectionUtils;
import net.minecraft.server.v1_8_R3.NBTBase;
import net.minecraft.server.v1_8_R3.NBTCompressedStreamTools;
import net.minecraft.server.v1_8_R3.NBTTagCompound;
import net.minecraft.server.v1_8_R3.NBTTagList;
@SuppressWarnings("deprecation")
public class PosChanger {
public static void setNewLocation(String name, double xx, double yy, double zz) {
NBTTagCompound nbt = getNBTTC(name);
NBTTagList l = nbt.getList("Pos", 6);
NBTBase x = new net.minecraft.server.v1_8_R3.NBTTagDouble(Double.valueOf(xx));
NBTBase y = new net.minecraft.server.v1_8_R3.NBTTagDouble(Double.valueOf(yy));
NBTBase z = new net.minecraft.server.v1_8_R3.NBTTagDouble(Double.valueOf(zz));
l.a(0, x);
l.a(1, y);
l.a(2, z);
nbt.set("Pos", l);
save(nbt, Bukkit.getOfflinePlayer(name));
}
public static void save(final NBTTagCompound nbt, OfflinePlayer op) {
try {
final NBTTagCompound nbttagcompound = nbt;
final File file = getPlayerTempFile(op);
final File file2 = getPlayerFile(op);
Bukkit.broadcastMessage(file.exists() + " " + file2.exists());
NBTCompressedStreamTools.a(nbttagcompound, new FileOutputStream(file));
if (file2.exists()) {
file2.delete();
}
file.renameTo(file2);
}
catch (Exception ex) {
ex.printStackTrace();
//WorldNBTStorage.a.warn("Failed to save player data for " + entityhuman.getName());
}
}
public static NBTTagCompound getNBTTC(String name) {
try {
final File file1 = NBTManager.nbtManager.getPlayerFile(Bukkit.getOfflinePlayer(name));
if (file1.exists()) {
return NBTCompressedStreamTools.a(new FileInputStream(file1));
}
}
catch (Exception ex) {
//WorldNBTStorage.a.warn("Failed to load player data for " + s);
}
return null;
}
public static File getPlayerFile(final OfflinePlayer player) {
final File baseDir = Bukkit.getWorlds().get(0).getWorldFolder();
ReflectionUtils.RefMethod getUUID = null;
try {
getUUID = ReflectionUtils.getRefClass(OfflinePlayer.class).findMethodByReturnType((Class<Object>[])new Class[] { UUID.class });
} catch (Exception e) {
// TODO: handle exception
}
if (getUUID != null) {
final UUID uuid = player.getUniqueId();
final File playerDir = new File(baseDir, "playerdata");
return new File(playerDir, uuid + ".dat");
}
final File playerDir2 = new File(baseDir, "players");
return new File(playerDir2, player.getName() + ".dat");
}
public static File getPlayerTempFile(final OfflinePlayer player) {
final File baseDir = Bukkit.getWorlds().get(0).getWorldFolder();
ReflectionUtils.RefMethod getUUID = null;
try {
getUUID = ReflectionUtils.getRefClass(OfflinePlayer.class).findMethodByReturnType((Class<Object>[])new Class[] { UUID.class });
} catch (Exception e) {
}
if (getUUID != null) {
final UUID uuid = player.getUniqueId();
final File playerDir = new File(baseDir, "playerdata");
return new File(playerDir, uuid + ".dat.tmp");
}
final File playerDir2 = new File(baseDir, "players");
return new File(playerDir2, player.getName() + ".dat.tmp");
}
}