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

Помогите Как сделать рандомный генератор лута? Система лутания сундука.

Тема в разделе "Разработка плагинов для новичков", создана пользователем Ryazha_, 1 фев 2022.

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

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

    Баллы:
    76
    Имя в Minecraft:
    Ryazha_
    Я хочу сделать систему лутания сундука, чтобы после определённого времени, открывалось Gui меню с рандомными ресами из списка, по типу золотого яблока с название аптечка. Так же хотелось бы сделать так, чтобы после того как игрок закроет сундук (меню) и там что-то останется сундук оставался и другим игрокам и тому игроку открывалось то же самое меню пока не перезагрузятся сундуки, а если игрок забирает всё, сундук изчезал, но после определённого времени он появлялся вновь и всё по новому кругу. Я вроде что-то набросал на первое время, далее буду по советам дополнять.
     
  2. NoooobKa

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

    Баллы:
    76
    Имя в Minecraft:
    NoooobKa
    Инвентарь сундука один на всех?
    Если да то всё вроде просто.
    Для респауна сундуков нужен список локация:направление сундука, можно создать обьект хранящий эти данные и хранить в листе, а можно просто запихать в мапу.
    Для удаления сундука InventoryCloseEvent, получать холдера, если это сундук то проверяешь пустой ли инвентарь и удаляешь
     
  3. Автор темы
    Ryazha_

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

    Баллы:
    76
    Имя в Minecraft:
    Ryazha_
    Друк блин.... И ещё хотел бы узнать - Как получить игрока, который открыл ЭНДЕР сундук и отменить это действие?
    Буду благодарен
     
  4. NoooobKa

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

    Баллы:
    76
    Имя в Minecraft:
    NoooobKa
    Есть InventoryOpenEvent, получаешь инвентарь и сравниваешь является ли он эндер инвентарём игрока
     
  5. Автор темы
    Ryazha_

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

    Баллы:
    76
    Имя в Minecraft:
    Ryazha_
    И ещё я никогда не сталкивался с тем чтобы рандомные ресурсы из списка генерировались (с названиями, так как будет ресурспак).
     
  6. NoooobKa

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

    Баллы:
    76
    Имя в Minecraft:
    NoooobKa
    Помести предметы в список, и получай рандомные элементы из списка когда нужно, разве это будет проблемой?
    Если нужен весовой рандом, то используй весовой рандом - https://stackoverflow.com/questions/6409652/random-weighted-selection-in-java
    Для этой задачи я его и использовал
     
  7. Автор темы
    Ryazha_

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

    Баллы:
    76
    Имя в Minecraft:
    Ryazha_
    Я понимаю, что из списка, но как?
     
  8. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Создаёшь List, заполняешь, получаешь его размер, генерируешь рандомное число от 0 до размер - 1, получаешь из листа элемент по индексу, равному рандомному числу.
    Готовый код специально не кидаю, шоб ты учился
     
  9. Автор темы
    Ryazha_

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

    Баллы:
    76
    Имя в Minecraft:
    Ryazha_
    я в принципе ничего не понял, но посмотрю туториал по теме листов в плагинах
     
  10. Автор темы
    Ryazha_

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

    Баллы:
    76
    Имя в Minecraft:
    Ryazha_
    Я лично ниодного туториала по ключевым словам не нашёл, даже на англоязычных каналах((
     
  11. Sturm_PT

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

    Баллы:
    76
  12. Автор темы
    Ryazha_

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

    Баллы:
    76
    Имя в Minecraft:
    Ryazha_
  13. Автор темы
    Ryazha_

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

    Баллы:
    76
    Имя в Minecraft:
    Ryazha_
    И так, то что я понял - Лист это тот или иной список объектов, выводящихся по очереди или по решению разработчика (в той или иной последовательности или рандомно). И я так монял что можно сделать примерно так:

    ArrayList<String> myArrayList = new ArrayList<String>();

    myArrayList.add(//Тот либо иной предмет, его описания, то есть мета и т.д.);

    Но как выбрать из этого рандомное я не понял.
     
  14. Sturm_PT

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

    Баллы:
    76
    Теперь гуглишь java random и учишься создавать случайное целое число на отрезке от 0 до N-1, где в качестве N берёшь длину списка
     
    Последнее редактирование: 3 фев 2022
  15. Автор темы
    Ryazha_

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

    Баллы:
    76
    Имя в Minecraft:
    Ryazha_
    ог
     
  16. Автор темы
    Ryazha_

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

    Баллы:
    76
    Имя в Minecraft:
    Ryazha_
    Теперь я понял что dauble - это выводящееся число, Math.random() далее можно указать наибольшее число вещей в списке умножив к примру и наименьшее будет = 0, а наибольшее числу предметов. Но как это вписать в код я всё же не понимаю((
     
  17. Автор темы
    Ryazha_

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

    Баллы:
    76
    Имя в Minecraft:
    Ryazha_
    Ну я понимаю что то число которое будет выведено, точнее по нему будет выбран предмет из списка или несколько предметов, смотря как
     
  18. Sturm_PT

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

    Баллы:
    76
    Ну у тебя есть лист с предметами, делаешь случайное число и по нему берёшь элемент листа, что смущает?
     
  19. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Не dauble, а double. Это дробное число.
    Для получения из листа объекта по индексу тебе нужно целое - в твоём случае int.
    Индекс - это порядковый номер элемента в листе. Индексы начинаются с нуля.
    Таким образом, индекс первого элемента = 0
    А последнего = размер списка - 1.

    Получить размер списка: list.size()
    получить объект из списка по его индексу (номеру): list.get(index)
    Сам индекс нужно сгенерировать случайным образом между минимальным и максимальным значением
     
  20. Автор темы
    Ryazha_

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

    Баллы:
    76
    Имя в Minecraft:
    Ryazha_
    ага.... ну теперь определённо стало легче друк, точнее я что-то хотя бы понимаю теперь)
     

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