Манипуляций с таблицей лута

Перевод Манипуляций с таблицей лута

Версия(и) Minecraft
1.12+
Источник
https://tutorials.darkhax.net/tutorials/loot_tables/
Таблицы лута - это относительно новый аспект в Minecraft. Эти таблицы обрабатывают различные запросы добычи, которые можно получить в игре. В то время как обычные пользователи будут взаимодействовать с таблицами добычи в пакетах ресурсов, у авторов модификаций через Forge API есть LootTableLoadEvent, который позволяет полностью манипулировать запросами добычи. Это событие запускается каждый раз при загрузке таблицы. Таблицы загружаются во время запуска мира, и есть не одна таблица лута. По этой причине вы должны стараться, чтобы ваше использование события LootTableLoadEvent было максимально оптимизированным и не потребляющим большого количества системных ресурсов.

В первой части этого туториала мы рассмотрим, как добавлять предметы в ванильный сундук который генерируется в подземельях. Так как это событие будет срабатывать один раз для каждой загруженной таблицы, первое, что нужно сделать, это проверить, является ли загружаемый запрос целым запросом лута. Вы можете получить имя текущего запроса, вызвав getName в LootTableLoadEvent. Список всех таблиц ванильного лута можно найти в LootTableList, что позволяет очень легко узнавать список всех таблиц лута. Ниже приведен пример проверки, которая ищет простой запрос на генерацию лута в сундуке из подземелья.
Пример проверки, которая ищет простой запрос на генерацию лута в сундуке из подземелья:
@SubscribeEvent
public void onLootTablesLoaded(LootTableLoadEvent event) {

    if (event.getName().equals(LootTableList.CHESTS_SIMPLE_DUNGEON)) {
      
    }
}
Как только мы убедимся, что загружаемая таблица является целой, мы сможем начать манипулировать запросами лута. Запросы используются как подкатегории таблицы лута. В таких случаях, как подземелье, есть три разных запроса. Главный ("main"), который содержит все редкие вещи, как лошадиные доспехи и золотые яблоки, запрос-1 ("pool1") в котором содержится необычная добыча, например семена тыквы и хлеб, и запрос-2 ("pool2"), в котором находиться мусор, как например гнилая плоть. Эти названия и цели, вероятно, будут отличаться в других таблицах. В этом уроке мы будем добавлять печенье :mc_357-0: в качестве мусора, поэтому мы будем ориентироваться на запрос-2. Запросы могут быть получены путем вызова getTable().getPool("name") в событии загрузки таблицы лута. Однако следует иметь в виду, что другие моды могут удалять запросы лута, поэтому для безопасности следует добавить нулевую проверку.
Нулевая проверка:
@SubscribeEvent
public void onLootTablesLoaded(LootTableLoadEvent event) {

    if (event.getName().equals(LootTableList.CHESTS_SIMPLE_DUNGEON)) {

        final LootPool pool2 = event.getTable().getPool("pool2");
        if (pool2 != null) {

        }
    }
}
На этом этапе мы можем начать добавлять новую запись в запрос лута с помощью метода addEntry. В этом случае мы добавим LootEntryItem, который имеет несколько аргументов конструктора. Первый аргумент - предмет, в нашем случае это Items.COOKIE, хотя другие предметы также могут быть использованы. Второй аргумент-вес записи. Для тех, кто не знаком с "весовым рандомом", это просто другой способ рассчитать % - процентную вероятность результата. Пример формулы для получения процентного шанса \( (вес\;/\;общий\;вес)\;\times\;100 \). Для этого примера я буду использовать 10, что является средним показателем для этого пула. Третий аргумент-качество, которое используется для увеличения / уменьшения шансов на результат. Это почти никогда не используется в ванильном Minecraft, и в большинстве случаев оно установлено до ноля. Четвертый параметр представляет собой массив LootFunction, который позволяет применять код. Мы разберемся с ними немного позже, поэтому пока можно использовать пустой массив. Пятый аргумент является массивом LootCondition, он позволяет выбрать код только при определенных условиях. Мы снова сохранить это на потом, пока что будет использовать пустой массив. Последний аргумент - это имя записи. Имена должны быть уникальными, стандартное - "MODID:NAME". В этом случае я буду использовать "tutorial:cookies". После завершения код будет выглядеть примерно так:
Загрузчик таблице лута:
@SubscribeEvent
public void onLootTablesLoaded(LootTableLoadEvent event) {

    if (event.getName().equals(LootTableList.CHESTS_SIMPLE_DUNGEON)) {

        final LootPool pool2 = event.getTable().getPool("pool2");

        if (pool2 != null) {

            // pool2.addEntry(new LootEntryItem(ITEM, WEIGHT, QUALITY, FUNCTIONS, CONDITIONS, NAME));
            pool2.addEntry(new LootEntryItem(Items.COOKIE, 10, 0, new LootFunction[0], new LootCondition[0], "loottable:cookie"));
        }
    }
}
Это был последний шаг к добавлению записи в запрос лута. Теперь у вас должны генерироваться печеньки :mc_357-0: или любой другой предмет, который вы указали, в сундуках подземелий. Теперь перейдем к двум массивам, которые мы прошли. Во-первых, у нас есть массив LootConditions, которые позволяют чему-то произойти только при выполнении условия. Например RandomChance условие ванили, который будет передавать только истинно определенный % времени. Добавление нового RandomChance (0.50 f); к условиям будет верно только 50% времени. Другая вещь, которую мы пропустили ранее, - это LootFunctions. Они позволяют выполнять код при выборе записи. Их аргументы зависят от функции, но почти все они принимают массив LootCondition, который предотвратит выполнение, если не будет выполнен. Примером функции ванильного лута является SetCount, который принимает массив LootCondition и RandomValueRange. Диапазон значений просто класс - оболочка для варьирования значений. Добавление нового SetCount(new LootCondition[0], new RandomValueRange(1, 5)) приведет к созданию от одной до пяти печенюшки :mc_357-0:, создаваемых кодом.

Все таблицы лута в игре следуют этим же параметрам, поэтому этот учебник можно легко адаптировать к другим таблицам и запросам. Такие вещи, как дроп с моба и рыбаловный лут теперь используют систему "запросов", поэтому можно применить этот учебник к ним. Полный список ванильных запросов можно найти здесь (ЗАВТРА ВЫЛОЖУ ЕГО НА ФОРУМ). Я настоятельно рекомендую использовать его при редактировании запросов лута.
Автор
Գարեգին Նժդեհ
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок

Другие ресурсы пользователя Գարեգին Նժդեհ

Сверху