Система лута#
Сундуки#
Перейдём в наш класс EventsHandler и добавим такой метод:
@SubscribeEvent
public void onLoot(LootTableLoadEvent e) {
if (LootTableList.CHESTS_SPAWN_BONUS_CHEST.equals(e.getName())) {
final ResourceLocation loc = new ResourceLocation("tut", "chests/tut_spawn_bonus_chest");
final LootTable customLootTable = e.getLootTableManager().getLootTableFromLocation(loc);
e.setTable(customLootTable);
}
}
Для сундуков существует множество таблица:
* CHESTS_SPAWN_BONUS_CHEST
- эта таблица содержит предметы бонусного сундука.
* CHESTS_END_CITY_TREASURE
- эта таблица содержит предметы сундуков в Городе Края. (Второе измерение в Крае)
* CHESTS_SIMPLE_DUNGEON
- эта таблица содержит предметы сундуков расположенных в данже под землёй. (Данж - это подземное строение имеющие 2-3 сундука и посередине спавнер мобов)
* CHESTS_VILLAGE_BLACKSMITH
- эта таблица содержит предметы сундука в кузнице, в деревни жителей.
* CHESTS_ABANDONED_MINESHAFT
- эта таблица содержит предметы сундуков расположенных в заброшенных шахтах.
* CHESTS_NETHER_BRIDGE
- эта таблица содержит предметы сундуков расположенных на мосту ада.
* CHESTS_STRONGHOLD_LIBRARY
- эта таблица содержит предметы сундуков расположенных в библиотеке крепости. (Крепость - это подземное строение, где расположен портал в Край)
* CHESTS_STRONGHOLD_CROSSING
- эта таблица содержит предметы сундуков расположенных на перекрёстках в крепости.
* CHESTS_STRONGHOLD_CORRIDOR
- эта таблица содержит предметы сундуков расположенных в коридорах крепости.
* CHESTS_DESERT_PYRAMID
- эта таблица содержит предметы сундуков в пирамиде.
* CHESTS_JUNGLE_TEMPLE
- эта таблица содержит предметы сундуков в храме джунглей.
* CHESTS_JUNGLE_TEMPLE_DISPENSER
- эта таблица содержит предметы раздатчиков в храме джунглей.
* CHESTS_IGLOO_CHEST
- эта таблица содержит предметы сундука в иглу. (Снежный биом)
* CHESTS_WOODLAND_MANSION
- эта таблица содержит предметы сундуков в особняке тёмного леса.
В условии мы получаем лист со всеми Loot таблицами, которые существуют в Minecraft. В данном случаи мы получаем LootTable бонусного сундука. (Это тот, что спавнится рядом с нами если при создании мира выбрана опция спавна бонусного сундуку)
Перейдём по пути:
└── src
└── main
└── resources
└── assets
└── tut
tut
папку loot_tables
и в ней ещё одну папку chests
. Создадим в папке chests
файл с таким название tut_spawn_bonus_chest
и форматом .json
.
Содержание файла:
{
"pools": [
{
"name": "chest_1",
"rolls": 2,
"entries": [
{
"type": "item",
"name": "minecraft:dimond",
"weight": 24
},
{
"type": "item",
"name": "minecraft:golden_apple",
"weight": 15,
"functions": [
{
"function": "minecraft:set_data",
"data": 1
},
{
"function": "minecraft:set_count",
"count": {
"min": 1,
"max": 2
}
}
]
},
{
"type": "block",
"name": "minecraft:wool",
"weight": 5,
"functions": [
{
"function": "minecraft:set_data",
"data": {
"min": 0,
"max": 5
}
}
]
}
]
}
]
}
name
- это название нашего сундука/категории предметов.rolls
- это то сколько предметов будет находиться в сундуке. Если вentries
будет указано больше, чем вrolls
, то minecraft будет случайно доставать 2 вещи из списка.type
- это тип нашего предмета, всего их два (block
иitem
).name
- это сам предмет, его обязательно нужно указывать с modId!weight
- это количество наших предметов. К примеру мы указали, что уdiamond
,weight
равен 24, значит в сундуке у нас будет лежать 24 алмаза.set_data
- это функция установки метадаты.data
- это сама метадата. Пример: Золотое яблоко существует в двух версия (обычное = 0, зачарованное = 1). 1. Так же вы можете задатьmin
иmax
, если минимум 2 и максимум 4, то метадата будет браться от 2 до 4.set_count
- это функция количества.count
- это диапазон от 0 до n. К примеру если мы укажем минимум 1 и максимум 4, то количество предметов будет от 1 до 4. Так жеweight
должен быть либо больше, либо равен count иначе будет ошибка.
Заходим в игру, создаём мир и в настройках ставим "Бонусный сундук". Открываем его и видим, что в нём присутствуют некоторые предметы, которые мы указали в json файле.
Сущности#
TODO
Рыбалка#
Перейдём в наш класс EventsHandler и добавим в метод onLoot, такой код:
if (LootTableList.GAMEPLAY_FISHING_FISH.equals(e.getName())) {
final ResourceLocation loc = new ResourceLocation("tut", "gameplay/fishing/tut_fish");
final LootTable customLootTable = e.getLootTableManager().getLootTableFromLocation(loc);
e.setTable(customLootTable);
}
Для рыбалки существует несколько таблица:
* GAMEPLAY_FISHING
- это главная таблица, в ней находятся fish
, treasure
, junk
. Добавления других таблиц не рекомендуется!
* GAMEPLAY_FISHING_FISH
- эта таблица отвечает за пойманную рыбу, т.е. ту которую мы будем ловить. (Можно добавить свою)
* GAMEPLAY_FISHING_TREASURE
- эта таблица отвечает за сокровища, т.е. во время рыбалки мы можем поймать не только рыбу, но и сокровища на подобии алмаза.
* GAMEPLAY_FISHING_JUNK
- эта таблица отвечает за мусор, т.е. то что будет нам не нужно, например поломанные кожаные ботинки или деревянный меч.
Перейдём по пути:
└── src
└── main
└── resources
└── assets
└── tut
└── loot_tables
loot_tables
папку gameplay
и в ней папку fishing
. Создадим файл tut_fish
формата .json
.
Содержание файла: