1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите сундук вставляется без вещей | schematic

Тема в разделе "Разработка плагинов для новичков", создана пользователем nutrolshok, 3 июл 2019.

Статус темы:
Закрыта.
  1. Автор темы
    nutrolshok

    nutrolshok Активный участник Пользователь

    Баллы:
    76
    Кр4, писал я скай блок, всё было нормально... Дело дошло до нормального острова. Я его построил, скопировал, вставил - всё нормально, всё переносится. Залил в schematic, залил в плагин. Тещу - вещей в сундуке нет. Вот отрывок кода, который отвечает за вставку сундука

    UPD: версия майна 1.12.2

    Код:
    if(id.equalsIgnoreCase("Chest")) {
                    List<Tag> items = getChildTag(tags, "Items", ListTag.class).getValue();
                    Block block = new Location(loc.getWorld(), x + loc.getX(), y + loc.getY(), z + loc.getZ()).getBlock();
                    if (block.getState() instanceof Chest) {
                        Chest chest = (Chest) block.getState();
                        for (Tag item : items) {
                            if (!(item instanceof CompoundTag))
                                continue;
                            Map<String, Tag> itemtag = ((CompoundTag) item).getValue();
                            byte slot = getChildTag(itemtag, "Slot", ByteTag.class).getValue();
                            String name = (getChildTag(itemtag, "id", StringTag.class).getValue()).toLowerCase().replace("minecraft:", "");
                            Byte amount = getChildTag(itemtag, "Count", ByteTag.class).getValue();
                            if(MultiversionMaterials.fromString(name.toUpperCase()) != null){
                                Material material = MultiversionMaterials.fromString(name.toUpperCase()).parseMaterial();
                                if (material != null) {
                                    chest.getBlockInventory().setItem(slot, new ItemStack(material, amount));
                                }
                            }
                        }
                    }
                }
     
    Последнее редактирование: 4 июл 2019
  2. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Попробуй добавить chest.update() после цикла предметов.
    Ну, и убедись, что setItem выполняется с корректным материалом.
    Условие
    if(MultiversionMaterials.fromString(name.toUpperCase()) != null){
    не нужно, кстати (хотя это не причина проблемы)
     
    Последнее редактирование: 3 июл 2019
  3. Автор темы
    nutrolshok

    nutrolshok Активный участник Пользователь

    Баллы:
    76
    Щас попробую. Надеюсь, поможет.
     
  4. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Вот так надо chest.getSnapshotInventory().addItem(stack); state.update();
     
  5. Автор темы
    nutrolshok

    nutrolshok Активный участник Пользователь

    Баллы:
    76
    Этот метод не для сундука
     
  6. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Я так понимаю, не помогло?
     
  7. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Как хочешь, мое дело предложить. Через getBlockInventory ты не добавишь предметы в сундук.
     
    Последнее редактирование: 4 июл 2019
  8. Автор темы
    nutrolshok

    nutrolshok Активный участник Пользователь

    Баллы:
    76
    Ага
    Типо, для сундука нет такого метода
     
  9. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    У всех есть, а у тебя нет? Ты особенный.
     
  10. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
  11. Автор темы
    nutrolshok

    nutrolshok Активный участник Пользователь

    Баллы:
    76
  12. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    getSnapshotInventory пиши.
    [​IMG]
     
  13. Автор темы
    nutrolshok

    nutrolshok Активный участник Пользователь

    Баллы:
    76
    А какая разница? Автодополнение показывает все совпадения в любой форме. Но, если ты так хочешь, то держи https://imgur.com/a/IxPooJH
    Понимаешь, в API Bukkit'a 1.12.2 нет метода getSnapshotInventory()
     
  14. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Он есть и давно.
     
  15. imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Должен быть. Вот сорсы лета 2017 - метод вполне себе на месте.
    upd: Хотя, отбой. Есть вероятность, что Chest раньше не был Conatiner'ом
    upd2: Довольно странно. В какой-то момент API резко изменилось. Однако, это должно быть в 1.12.2, ибо первый снапшот 1.13 вышел лишь осенью этого же года.
     
    Последнее редактирование: 4 июл 2019
  16. Автор темы
    nutrolshok

    nutrolshok Активный участник Пользователь

    Баллы:
    76
    https://imgur.com/a/IxPooJH
     
  17. Автор темы
    nutrolshok

    nutrolshok Активный участник Пользователь

    Баллы:
    76
    Screenshot_400.png Забыл упомянуть, у меня скай блок под разные версии майна. Из-за этого я ограничен в действиях. Когда-то я хотел добавить звуки для разных действий. Но не смог. Звуков 1.12.2 не было, были только для 1.8.

    UPD: подумываю убрать возможность заходить с других версий
     
  18. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    С 1.12.1 уже был.
     
  19. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    В чем твои проблемы? Ставь протоколсапорт и сервер везде будет 1.14.3, а заход с 1.8 до последней.
     
  20. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Тебе все говорят, что есть. Наверно, стоит загрузить последнюю версию ядра 1.12.2?
    Вообще, на самом деле, ХЗ, зачем этот снапшот с учётом, что в сундуки без проблем устанавливали содержимое и в более ранних версиях, когда этого снапшота и в помине не было.
    Странно, на самом деле...

    Ты пишешь скайблок под разные версии NMS, потому что у тебя игроки с разных версий заходят? Если сервер на 1.14 - так и оставь только свой NMS_v1_14_R1.
    Или это для работы с пакетами или плагин для паблика?
     
Статус темы:
Закрыта.

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