Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите После перезахода на сервер ItemMeta предмета изменяется

Статус
Закрыто для дальнейших ответов.

SmashDestroy

Активный участник
Пользователь
Баллы
63
Всем привет :good:

Столкнулся со следующей ситуацией.
1. Я создаю ItemStack (PLAYER_HEAD со скином) и выдаю его игроку [назовем его Предмет#1].
2. Игрок перезаходит на сервер.
3. Я снова создаю точно такой же ItemStack как и в пункте 1 (с UUID скина и тд проблем нет) [назовем его Предмет#2].
4. В результате чего Предмет#1 нельзя застакать с Предмет#2, пока игрок снова не перезайдет на сервер (тогда у Предмет#2 формат ItemMeta поменяется и он станет идентичным Предмету#1).

Вот из-за чего это происходит.
Ввожу /data get entity Player SelectedItem без перезахода на сервер:
Код:
{
    Count: 1b,
    id: "minecraft:player_head",
    tag: {
        SkullOwner: {
            Id: [
                I;
                -1234567890,
                -1234567890,
                -1234567890,
                -1234567890
            ],
            Properties: {
                textures: [
                    {
                        Value: "длинная_строка_с_текстурами"
                    }
                ]
            }
        },
        display: {
            Lore: [
                '{"text":"§fОписание предмета"}'
            ],
            Name: '{"text":"§dНазвание предмета"}'
        }
    }
}


Ввожу /data get entity Player SelectedItem после перезахода на сервер:
Код:
{
    Count: 1b,
    id: "minecraft:player_head",
    tag: {
        SkullOwner: {
            Id: [
                I;
                -1234567890,
                -1234567890,
                -1234567890,
                -1234567890
            ],
            Properties: {
                textures: [
                    {
                        Value: "длинная_строка_с_текстурами"
                    }
                ]
            }
        },
        display: {
            Lore: [
                '{"extra":[{"bold":false,"italic":false,"underlined":false,"strikethrough":false,"obfuscated":false,"color":"white","text":"Описание предмета"}],"text":""}'
            ],
            Name: '{"extra":[{"bold":false,"italic":false,"underlined":false,"strikethrough":false,"obfuscated":false,"color":"light_purple","text":"Название предмета"}],"text":""}'
        }
    }
}

Короче говоря, значения полей "display.Lore" и "display.Name" изменяются после перезахода на сервер.

ItemMeta я заполняю вот так:
Код:
ItemStack item = new ItemStack(Material.PLAYER_HEAD, 1);
SkullMeta meta = (SkullMeta) item.getItemMeta();
meta.displayName(Component.text("§dНазвание предмета"));
ArrayList<Component> lore = new ArrayList<>();
lore.add(Component.text("§Описание предмета"));
meta.lore(lore);
item.setItemMeta(meta);

Подскажите пожалуйста, есть ли способ заполнения ItemMeta у предмета таким образом, чтобы значения полей "display.Lore" и "display.Name" сразу имели вид, как будто игрок перезашел на сервер?
 
В общем заглянул в соседнюю тему https://rubukkit.org/threads/kak-sozdavat-gradienty-v-net-kyori-adventure-text-component.185745/ и понял в чем моя проблема.

Теперь заполняю ItemMeta вот так:
Код:
ItemStack item = new ItemStack(Material.PLAYER_HEAD, 1);
SkullMeta meta = (SkullMeta) item.getItemMeta();
meta.displayName(Component.text("Название предмета").color(TextColor.color(255, 85, 255)).decoration(TextDecoration.ITALIC, false));
ArrayList<Component> lore = new ArrayList<>();
lore.add(Component.text("Описание предмета").color(TextColor.color(255, 255, 255)).decoration(TextDecoration.ITALIC, false));
meta.lore(lore);
item.setItemMeta(meta);
 
Статус
Закрыто для дальнейших ответов.

Поделиться этой страницей

Назад
Верх