Помогите поменять локацию офлайн игрока используя PowerNBT 1.8.9

NoooobKa

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
NoooobKa
Пытаюсь поменять локацию офлайн игрока используя PowerNBT 1.8.9
Код:
                NBTManager manager = PowerNBT.getApi();
                NBTCompound playerData = manager.readOfflinePlayer(Bukkit.getOfflinePlayer("NoooobKa"));
                NBTList l = new NBTList();
                l.add((double)100.123);
                l.add((double)100.321);
                l.add((double)100.142);
                playerData.put("Pos", l);
                try {
                    manager.write(manager.getPlayerFile(Bukkit.getOfflinePlayer("NoooobKa")), playerData);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
В dat файл вносятся изменения. Но при заходе спавнит в районе мирового спавна.
Что я делаю не так?
 
Решено с помощью использования ванильных НМС методов. Если кому интересно оставлю класс.
Код:
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");
    }
    
}
 
Назад
Верх