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

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

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}
 
Ага, смотрю уже, подчерпнул некоторые идеи. Но всё же, верстак в примере позволяет крафтить базовые предметы, которые уже есть в майнкрафте. Мне же нужно сделать крафт кастомных предметов в кастомных верстаках.

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

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

Для получения ванильных рецептов погугли, есть решения. Думаю, лучше попробовать через nms, там должен быть какой-то оптимизированный поиск рецепта. В случае чего, можно подсмотреть код и адаптировать его под 4х4.
Мапа с ключами инт? С ума сошёл??
HashMap<переменная, Integer>
 
И доп. вопрос: есть ли у айтемов "скрытая" мета? Типа игрок при наведении на предмет может видеть читабельный лор и название, но не функциональную мету, в которой бы хранились характеристики и способности предмета, так сказать, на программном языке
Проглядел второй вопрос. На 1.14+ ты можешь воспользоваться PersistentData API. Она хранится в предмете и никуда не исчезает. На более старых версиях можно воспользоваться дополнительным плагином NBT API или, если хочешь самобытности, есть такой вот одно-классник.
 

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

Назад
Верх