Описание
LootAPI - Простой плагин, который может использоваться в других плагинах как зависимость для облегчения генерации предметов в сундуках\шалкерах\бочках.С помощью этого плагина, можно воссоздать такие режимы как:
- SkyWars
- HungerGames
- и другие.
Функционал
Его особенность в том, что он генерирует предметы не примитивным образом, а строгим рандомом, и распределяет лут на некие "группы" контейнеров.Пример:
Вы создаёте SkyWars режим, и хотите, что-бы у каждого игрока в сундуках на острове гарантированно были:
- Полный сет брони (без лишних элементов, и без недостающих. Т. е - 1 шлем, 1 нагрудник, 1 штаны, 1 ботинки)
- Меч, для примера каменный ИЛИ (об этом подробнее позже) железный. При чём, шанс железного меча - 50%, но если он не сгенерируется, гарантированно появится каменный.
- С 30% шансом лук и стрелы в количестве от 10 до 32
- С 30% шансом пузырьки опыта в количестве от 10 до 20
Код:
Java:
// Создаём образец лута с ключом-названием "skywars"
LootContainer loot = LootService.generateNew(new LootKey("skywars"));
// Добавим с 100 шансом железную броню
LootTable armour = new LootTable(100){{
addItem(new LootItem(new ItemStack(Material.IRON_HELMET)));
addItem(new LootItem(new ItemStack(Material.IRON_CHESTPLATE)));
addItem(new LootItem(new ItemStack(Material.IRON_LEGGINGS)));
addItem(new LootItem(new ItemStack(Material.IRON_BOOTS)));
}};
// Добавим с 50% шансом железный меч, и с 100% шансом каменный меч.
LootTable iron_sword = new LootTable(50){{
addItem(new LootItem(new ItemStack(Material.IRON_SWORD)));
}};
LootTable stone_sword = new LootTable(100){{
addItem(new LootItem(new ItemStack(Material.STONE_SWORD)));
}};
// Генерация лука и стрел с шансом 30%, при чём количество стрел будет так-же рандомно от 10 до 32
LootTable bow_set = new LootTable(30){{
addItem(new LootItem(new ItemStack(Material.BOW)));
addItem(new LootItem(new ItemStack(Material.ARROW), 10, 32));
}};
// Генерация бутыльков опыта с шансом 30%, в количестве от 10 до 20, так-же как и стрелы
LootTable xp = new LootTable(30){{
addItem(new LootItem(new ItemStack(Material.EXPERIENCE_BOTTLE), 10, 20));
}};
// Зарегистрируем все наши предметы
loot.addTable(armour, iron_sword, stone_sword, bow_set, xp);
// Добавляем условие, которое разрешит спавн каменному мечу только в том случае, если железный меч не сгенерировался
loot.addPredicate(new LootPredicate(LootPredicate.PredicateType.IF_NOT_CONTAINS, iron_sword, stone_sword));
Несколько примеров сгенерированного нашим кодом лута:
Как видим, во втором примере, сгенерировались лук и стрелы, это позволяет сделать более сбалансированный рандом. При чём, если при генерации, вы укажете несколько сундуков для одного списка предметов, и в одном из сундуков сгенерируется лук, то в другом будут гарантированны стрелы и наоборот.
Дополнительные функции
Каждый, настроенный для генерации лут, можно сохранить в конфиг и наоборот, загрузить, используя:
LootSerializer.saveToConfig(FileConfiguration, LootContainer, String)
- для сохранения лута в конфиг, по определенному путиLootSerializer.fromConfig(FileConfiguration, String, LootKey)
- для загрузки лута из конфиг по определенному пути, используя ключ лута при его созданииПолную поддержку по плагину при покупке, предоставляю в: TG, ВК или дс: just_lofe.