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

Помогите Создание кастомных крафтов

Тема в разделе "Разработка плагинов для новичков", создана пользователем ToBlEzZ, 11 мар 2021.

  1. Автор темы
    ToBlEzZ

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

    Баллы:
    76
    Всем привет!
    Делаю кастомные верстаки (3х3, 4х4) с помощью соответствующих инвентарей. А добавление рецептов думаю сделать с помощью их загрузки из соответствующих файлов, которые создаются при создании новых крафтов в gui. И тут вопросы:
    1. Как сохранить рецепт? Через сериализацию инвентаря верстака (если не трудно дайте пример), или есть вариант по лучше?
    2. Можно ли будет дать таким инвентарям полноценный функционал верстака? Чтобы можно было делать в них базовые рецепты

    И доп. вопрос: есть ли у айтемов "скрытая" мета? Типа игрок при наведении на предмет может видеть читабельный лор и название, но не функциональную мету, в которой бы хранились характеристики и способности предмета, так сказать, на программном языке
    (Видит) DisplayName: Двуручный меч
    (Видит) Lore: Урон 15. Крит 20%
    При атаке с шансом 15% может оглушить противника на 2 секунды
    (Не видит) HideLore: damage = 15/crite = 0.2/stunAbility = {0.15, 40}
     
  2. adodvstudios

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

    Баллы:
    76
    Имя в Minecraft:
    Jenka20091
    Бери исходники того, чего я тебе скинул и добавляй свой крафт.
     
  3. Автор темы
    ToBlEzZ

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

    Баллы:
    76
    :lol: Я знаю как свои верстачные крафты делать, как делать свои айтемстаки и настраивать им мету тоже (вот подумал, как бы упростить получение характеристик из меты, в доп. вопросе написал)
    Но дело в том, что у меня свои верстаки (инвентари): 4х4, 5х5, не думаю (возможно не знаю), что серв поймёт их назначение. Да, из ваших исходников можно получить метод создания ванильных (ну и наверное кастомных, верстачных крафтов) в моих инвентарях. Может пригодиться.
    Однако мой вопрос в том, чтобы создавать, хранить и получать рецепты в больших верстаках
     
  4. SaMEC

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

    Баллы:
    173
    Skype:
    support.meedway
    Имя в Minecraft:
    Nick
    А собственно в чем проблема получения вещей из инвентаря?
    Инвентарь же ты создаешь сам(кастомный), значит ты его знаешь.
    Слоты известны которые нужно проверять.
    Остается только сравнивать со списком который у вас уже есть где нибудь сохраненный.
     
  5. adodvstudios

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

    Баллы:
    76
    Имя в Minecraft:
    Jenka20091
    Можешь кинуть код. Мне аж интересно
     
  6. SaMEC

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

    Баллы:
    173
    Skype:
    support.meedway
    Имя в Minecraft:
    Nick
    Уже есть такой плагин, скачайте и посмотрите код.
     
  7. alexandrage

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

    Баллы:
    173
    Этож капец как неудобно и с книжкой крафта это не будет работать и продвижение на такой крафт не сделать.
     
  8. SaMEC

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

    Баллы:
    173
    Skype:
    support.meedway
    Имя в Minecraft:
    Nick
    А разве в книгу крафта можно добавлять свои вещи и делать открытие крафта?
     
  9. alexandrage

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

    Баллы:
    173
    Естественно, нужно передать продвижение по этому крафту игроку.
     
  10. alexandrage

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

    Баллы:
    173
  11. alexandrage

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

    Баллы:
    173
    Ну с кастомными предметами как на видосе нужно чуть больше, но не суть.
     
  12. SaMEC

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

    Баллы:
    173
    Skype:
    support.meedway
    Имя в Minecraft:
    Nick
    У меня кажется теперь появилась новая цель)
     
  13. alexandrage

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

    Баллы:
    173
    Эта? https://github.com/alexandrage/Craft
     
  14. SaMEC

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

    Баллы:
    173
    Skype:
    support.meedway
    Имя в Minecraft:
    Nick
    Да эта!
    Но я завис на 1.12.2
    Хотя на ней уже была книга рецептов, но вот методов для отправки игроку рецептов нет.
     
  15. Автор темы
    ToBlEzZ

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

    Баллы:
    76
    Да вот, так-то по сути всё просто. Если сравнивать инвентари или массивы юзабельных слотов на полное совпадение. Но вот тогда о вариативности в размещении ингредиентов речи быть не может. Можно, конечно, под один крафт палки сделать 6 рецептов, но потом задолбаюсь делать так для всех айтемов:lol:
    Вот сейчас голову ломаю как сравнить на положение ингредиентов относительно друг друга (пока не очень успехи)
     
  16. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    На первый взгляд, варианта минимум два. Первый, простейший - просто перебирать все рецепты. Не очень производительно.
    Второй...
    Перебираешь все кастомные крафты при старте сервера:
    - Сортируешь все материалы крафта как-либо(по названию или Material#ordinal)
    - Получаешь некий общий хэш с этого
    - Сохраняешь это дело в какой-нибудь вид Map<Integer, List<LargeRecipe>> (List в случае коллизий). Можно ещё FastUtils воспользоваться, там есть мапа с ключами int.
    При крафте:
    - Сортируешь все материалы крафта
    - Получаешь общий хэш
    - Получаешь List с мапы
    - Перебираешь список:
    - - Если shaped, проверяешь слоты на соответствие; в случае, если рецепт меньше 4х4, то не забудь про проверку с отступами
    - - Если shapeless, просто проверяешь наличие всех предметов

    Для получения ванильных рецептов погугли, есть решения. Думаю, лучше попробовать через nms, там должен быть какой-то оптимизированный поиск рецепта. В случае чего, можно подсмотреть код и адаптировать его под 4х4.
     
    Последнее редактирование: 13 мар 2021
  17. adodvstudios

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

    Баллы:
    76
    Имя в Minecraft:
    Jenka20091
    Мапа с ключами инт? С ума сошёл??
    HashMap<переменная, Integer>
     
  18. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Ты вообще вчитывался в суть того, что я написал?
     
  19. _MRDen3000YT_

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

    Баллы:
    76
    Орнул. Тут речь совсем о другом идет.
     
  20. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Проглядел второй вопрос. На 1.14+ ты можешь воспользоваться PersistentData API. Она хранится в предмете и никуда не исчезает. На более старых версиях можно воспользоваться дополнительным плагином NBT API или, если хочешь самобытности, есть такой вот одно-классник.
     

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