Sponge: Будущее Bukkit и Minecraft моддинга в целом

я хотел оптимизировать до максимума но когда запустил то ядро просто крашился и все
Я хотел оптимизировать и почистить диск C:, удалил там Windows и система не загрузилась, какая плохая Windows, лучше голый linux поставлю.
 
Мне кажется, это косяк твоего авторизатора
Нит 😁
p.s. вместо getValue можно использовать get(TypeToken.of(UUID.class))
Кстати, прикольная фишечка... Думаю даже очень... Но тут она мне пока не нужна.
Во время входа отправь игроку value
А вот тут у меня вопрос.
Sponge, какого *уя?!
Моя логика такова: если метод config.getNode принимает значения Object[], то я могу ему давать значения Object[], а не String[], и он сам чето как-то кастанет к String.
Однако, видимо все-таки нет, и надо вручную все кастовать к String... WTF?!
Итак, то как я решил протестить:
Код:
    @Listener
    public void test(ClientConnectionEvent.Auth event) {
        GameProfile profile = event.getProfile();
        UUID uuid = profile.getUniqueId();
        ConfigurationNode node = config.getNode(uuid, "PASSWORD");
        Object value = node.getValue();
        System.out.println("ТУТ КАРОЧ ЗНАЧЕНИЕ = " + value);
        System.out.println("ТУТ КАРОЧЕ ТЕСТ №1 = " + config.getNode(uuid, "PASSWORD").getValue());
        System.out.println("ТУТ КАРОЧЕ ТЕСТ №2 = " + config.getNode(uuid.toString(), "PASSWORD").getValue());
        auth.put(uuid, value == null ? AuthType.REGISTER : AuthType.LOGIN);
    }
И в итоге, последний вариант таки выдал мне мой пароль (PASSWORD)...
edb4338827c0.png

Это баг, или так и задумано? Почему тогда метод принимает Object[] а не String[]?
 
Нит 😁

Кстати, прикольная фишечка... Думаю даже очень... Но тут она мне пока не нужна.

А вот тут у меня вопрос.
Sponge, какого *уя?!
Моя логика такова: если метод config.getNode принимает значения Object[], то я могу ему давать значения Object[], а не String[], и он сам чето как-то кастанет к String.
Однако, видимо все-таки нет, и надо вручную все кастовать к String... WTF?!
Итак, то как я решил протестить:
Код:
    @Listener
    public void test(ClientConnectionEvent.Auth event) {
        GameProfile profile = event.getProfile();
        UUID uuid = profile.getUniqueId();
        ConfigurationNode node = config.getNode(uuid, "PASSWORD");
        Object value = node.getValue();
        System.out.println("ТУТ КАРОЧ ЗНАЧЕНИЕ = " + value);
        System.out.println("ТУТ КАРОЧЕ ТЕСТ №1 = " + config.getNode(uuid, "PASSWORD").getValue());
        System.out.println("ТУТ КАРОЧЕ ТЕСТ №2 = " + config.getNode(uuid.toString(), "PASSWORD").getValue());
        auth.put(uuid, value == null ? AuthType.REGISTER : AuthType.LOGIN);
    }
И в итоге, последний вариант таки выдал мне мой пароль (PASSWORD)...
edb4338827c0.png

Это баг, или так и задумано? Почему тогда метод принимает Object[] а не String[]?
Потому, что это нормальный сериализатор/десериализатор, а не баккитовское дерьмо, которое всё в непонятном виде хранит. Привыкай.
Тебе надо так устанавливать значение:
.setValue(TypeToken.of(UUID.class), newUuid);
и получать его так, как я выше говорил.
Это программирование НОРМАЛЬНОГО человека.
 
Потому, что это нормальный сериализатор/десериализатор, а не баккитовское дерьмо, которое всё в непонятном виде хранит. Привыкай.
Тебе надо так устанавливать значение:
.setValue(TypeToken.of(UUID.class), newUuid);
и получать его так, как я выше говорил.
Это программирование НОРМАЛЬНОГО человека.
Так я же само UUID фактически никогда не выставляю...
Ну как сказать...
UUID у меня как-бы только как "ПУТЬ" до нужных мне значений по заданному UUID! Типо пароль, email, раса, etc...
Но смысл плюс минус понял..
 
Так я же само UUID фактически никогда не выставляю...
Ну как сказать...
UUID у меня как-бы только как "ПУТЬ" до нужных мне значений по заданному UUID! Типо пароль, email, раса, etc...
Но смысл плюс минус понял..
Тогда и храни UUID.toString()
Вообще, ему без разницы, что десериализовывать. Если какой-то свой класс - то просто регистрируешь TypeSerializer и всё.
 
Тогда и храни UUID.toString()
Вообще, ему без разницы, что десериализовывать. Если какой-то свой класс - то просто регистрируешь TypeSerializer и всё.
OKay, спасибо!)
@Larin пока ты тут, скажи как делать лучше, что возвращать в методе Text getUsage (CommandCallable) если у меня в команде нету аргументов?
т.е.,
для команд регистрации и авторизации соответственно я делаю вот так:
Код:
    @Override
    public Text getUsage(CommandSource source) {
        return Text.of("<race> <password> [email]");
    }
Код:
    @Override
    public Text getUsage(CommandSource source) {
        return Text.of("<password>");
    }
А если нету аргументов?
Text.of(); ?
Text.of("")?
Или как?
 
OKay, спасибо!)
@Larin пока ты тут, скажи как делать лучше, что возвращать в методе Text getUsage (CommandCallable) если у меня в команде нету аргументов?
т.е.,
для команд регистрации и авторизации соответственно я делаю вот так:
Код:
    @Override
    public Text getUsage(CommandSource source) {
        return Text.of("<race> <password> [email]");
    }
Код:
    @Override
    public Text getUsage(CommandSource source) {
        return Text.of("<password>");
    }
А если нету аргументов?
Text.of(); ?
Text.of("")?
Или как?
https://docs.spongepowered.org/master/en/plugin/commands/creating.html

Зачем ты CommandCallable используешь?
 
Ребят, а как изменить имя игрока над головой БЕЗ ScoreBoard, Team, и прочего?
Просто поменять цвет, возможно ли?
 
Ребят, а как изменить имя игрока над головой БЕЗ ScoreBoard, Team, и прочего?
Просто поменять цвет, возможно ли?
Если есть методы CustomName то можно
Код:
player.setCustomName("&3"+player.getName())
plaer.setVisibleCustomName(true); //Или похожий метод
P.S. И пофиг, что вопрос был поставлен 4 дня назад
 
Если есть методы CustomName то можно
Код:
player.setCustomName("&3"+player.getName())
plaer.setVisibleCustomName(true); //Или похожий метод
P.S. И пофиг, что вопрос был поставлен 4 дня назад
А ты мне не втираешь какую-то дичь? Это же ведрянские методы... В губке таких вроде как нету...
 
Назад
Верх Низ