получить список всех ID и рецептов

127
0
Доброе утро,

Подскажите как можно получить список всех ID предметов и рецептов из игры(включая установленные моды)?
 
Для какой версии?
До 1.7 в классах: Block и Item есть массив - Block'е blocksList Item'е itemsList, проверяешь эти списки на "!= null". Примечание itemsList, есть ItemBlock'и.
После 1.7... Вот тут я не знаю как сделать проще.
Набросал:
Код:
for (int i = 1; i < 32767; i++) {

    Item item = Item.getItemById(i);
    Block block = Block.getBlockFromItem(item);

    ArrayList<Block> block_list = new ArrayList<Block>();
    ArrayList<Item> item_list = new ArrayList<Item>();

    if (item != null)
        if (block != Blocks.air)
            block_list.add(block);
        else
            item_list.add(item);
}
О его работа способности, точно не знаю.
 
Версия 1.6.4
[merge_posts_bbcode]Добавлено: 31.07.2015 12:25:59[/merge_posts_bbcode]

Спасибо за код, но все id он не получит, есть же еще подтипы. Попробую щас.
 
Что ты имеешь виду под "есть же еще подтипы"?
 
Ну например 4033:27
[merge_posts_bbcode]Добавлено: 31.07.2015 12:46:12[/merge_posts_bbcode]

Еще вопрос, считывание всех id в каком методе мода делать? (к тому моменту должны все остальные моды загрузиться же ведь?) Событие FMLLoadCompleteEvent подойдет?
 
Да, подобное трудно будет сделать. Можно проверить предмет является он повреждаемым (в 1.7.: is.isItemStackDamageable()). А если у тебя ещё в под типы включены, такие как: энергия в батарейки из IC2, скрытые индикаторы повреждения, т.е. использование NBT тегов, то тут я явно не знаю как это сделать.
Думаю можно попробовать брать из списка креативной вкладки (где есть поиск), если конечно тебе это подходит.
А так не думаю, что это будет просто.
---
В Init'е или PostInit'е можно попробовать (зависть для чего тебе это надо).
---
На счёт рецептов... "CraftingManager.getInstance().getRecipeList()"
 
Список предметов брать в PostInit, потому что обычно все предметы регаются в ините.
А в 1.7 получить все предметы можно намного легче:
Код:
List<Block> blockList = Lists.newArrayList(Block.blockRegistry.iterator()); //Блоки

List<Item> itemList = Lists.newArrayList(Item.itemRegistry.iterator()); //Предметы
Для 1.6:
Код:
Item[] items = Iterators.toArray(Iterators.filter(Iterators.forArray(Item.itemList), Predicates.notNull()), Item.class); //Предметы

Block[] blocks = Iterators.toArray(Iterators.filter(Iterators.forArray(Block.blockList), Predicates.notNull()), Block.class); //Блоки
P.S Guava рулит!
 
Назад
Сверху