Помогите Ошибка с UUID/файлом

  • Автор темы Автор темы Boss90
  • Дата начала Дата начала

Boss90

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
Boss90
Здравствуйте господа :3.
У меня маленькая ошибочка:
upload_2021-2-4_20-4-33.png

Пробовал и в конфиг загружать, при включении изменение и т.п, ни как ни сяк.
Код UUID и всего дела:

UUID UUID = (UUID) GLClass.getData().get("Info.UUID");
Entity hologram2 = Bukkit.getEntity(UUID);
hologram2.remove();
GLClass.saveData();

String amount2 = e.getLine(2);
String nameHologram = plugin.getConfig().getString("Sign.HologramText");
nameHologram = nameHologram.replace("&", "\u00a7");
nameHologram = nameHologram.replace("%business%", name);
nameHologram = nameHologram.replace("%price%", amount2);
Entity ent = world.spawn(loc, ArmorStand.class);
ArmorStand hologram = (ArmorStand)ent;
hologram.setVisible(false);
hologram.setCustomName(nameHologram);
hologram.setCustomNameVisible(true);
hologram.setGravity(false);
GLClass.getData().set("Info.UUID", hologram.getUniqueId());
 
У десериализатора нет "инструкции" как разобрать UUID. Конвертируй его в строку перед сохранением, а на загрузке данных получай UUID.fromString(uuidString);
Либо можно вообще сделать так:
Код:
private final File configFile;
private final FileConfiguration yamlConfiguration;

public Main() {
    this.configFile = new File(super.getDataFolder(), "test.yml");
    this.yamlConfiguration = YamlConfiguration.loadConfiguration(this.configFile);
    this.yamlConfiguration.set("some.path.id", uuidToBytes(UUID.randomUUID()));
    try {
        this.yamlConfiguration.save(configFile);
    } catch (IOException ioException) {
        System.err.println("Cannot save config file");
    }
}

private byte[] uuidToBytes (UUID uuid) {
    ByteBuffer buffer = ByteBuffer.allocate(16);
    buffer.putLong(uuid.getMostSignificantBits());
    buffer.putLong(uuid.getLeastSignificantBits());

    return buffer.array();
}

@Override
public void onEnable() {
    super.getCommand("test").setExecutor((commandSender, command, label, args) -> {

        FileConfiguration configuration = YamlConfiguration.loadConfiguration(configFile);

        byte[] uuidBytes = configuration.getObject("some.path.id", byte[].class);
        System.out.println(UUID.nameUUIDFromBytes(uuidBytes));
        return true;
    });
 
}

Или можно написать обертку над UUID, чтобы ее можно было записать в конфиг:
Код:
import org.bukkit.configuration.serialization.ConfigurationSerializable;
import org.bukkit.configuration.serialization.SerializableAs;
import org.jetbrains.annotations.NotNull;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

@SerializableAs("UUID")
public class SerializableUUID implements ConfigurationSerializable {
    private final UUID uuid;

    public SerializableUUID(UUID uuid) {
        this.uuid = uuid;
    }

    public static SerializableUUID deserialize(@NotNull Map<String, Object> map) {
        return new SerializableUUID(UUID.fromString((String) map.get("uuid")));
    }

    @Override
    public @NotNull Map<String, Object> serialize() {
        Map<String, Object> map = new HashMap<>();
        map.put("uuid", this.uuid.toString());
        return map;
    }

    public UUID getUUID() {
        return this.uuid;
    }

    @Override
    public String toString() {
        return this.uuid.toString();
    }
}
(конечно можно легко переделать под байтовый массив, если надо)


И регистрируешь в Main:
Код:
static {
    ConfigurationSerialization.registerClass(SerializableUUID.class, "UUID");
}
 
Последнее редактирование:
У десериализатора нет "инструкции" как разобрать UUID. Конвертируй его в строку перед сохранением, а на загрузке данных получай UUID.fromString(uuidString);
Либо можно вообще сделать так:
Код:
private final File configFile;
private final FileConfiguration yamlConfiguration;

public Main() {
    this.configFile = new File(super.getDataFolder(), "test.yml");
    this.yamlConfiguration = YamlConfiguration.loadConfiguration(this.configFile);
    this.yamlConfiguration.set("some.path.id", uuidToBytes(UUID.randomUUID()));
    try {
        this.yamlConfiguration.save(configFile);
    } catch (IOException ioException) {
        System.err.println("Cannot save config file");
    }
}

private byte[] uuidToBytes (UUID uuid) {
    ByteBuffer buffer = ByteBuffer.allocate(16);
    buffer.putLong(uuid.getMostSignificantBits());
    buffer.putLong(uuid.getLeastSignificantBits());

    return buffer.array();
}

@Override
public void onEnable() {
    super.getCommand("test").setExecutor((commandSender, command, label, args) -> {

        FileConfiguration configuration = YamlConfiguration.loadConfiguration(configFile);

        byte[] uuidBytes = configuration.getObject("some.path.id", byte[].class);
        System.out.println(UUID.nameUUIDFromBytes(uuidBytes));
        return true;
    });
 
}

Либо вообще написать обертку над UUID, чтобы ее можно было записать в конфиг:
Код:
import org.bukkit.configuration.serialization.ConfigurationSerializable;
import org.bukkit.configuration.serialization.SerializableAs;
import org.jetbrains.annotations.NotNull;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

@SerializableAs("UUID")
public class SerializableUUID implements ConfigurationSerializable {
    private final UUID uuid;

    public SerializableUUID(UUID uuid) {
        this.uuid = uuid;
    }

    public static SerializableUUID deserialize(@NotNull Map<String, Object> map) {
        return new SerializableUUID(UUID.fromString((String) map.get("uuid")));
    }

    @Override
    public @NotNull Map<String, Object> serialize() {
        Map<String, Object> map = new HashMap<>();
        map.put("uuid", this.uuid.toString());
        return map;
    }

    public UUID getUUID() {
        return this.uuid;
    }

    @Override
    public String toString() {
        return this.uuid.toString();
    }
}
(конечно можно легко переделать под байтовый массив, если надо)


И регистрируешь в Main:
Код:
static {
    ConfigurationSerialization.registerClass(SerializableUUID.class, "UUID");
}
Новые технологии), проверю данные способы :D.
 
Назад
Верх