[1.7.2] [IC2 API] Туториал. Доступ к предметам из IC2.

Здравствуйте!

В этом туториале я покажу как получить доступ к предметам я покажу как использовать предметы из IC2 в своих модах. Многие из вас скажут "Нафиг мне этот тутор если есть OreDictionary". А что делать если какой нибудь предмет или блок из IC2 не зарегистрирован в OreDictionary. Тогда вам в помощь этот туториал.

Итак для начала вам нужно скачать IC2 API. Скачиваем версию для вашего Minecraft'а, тобишь 1.6.4, 1.7.2 или 1.7.10. У меня стоит сборка #478 для Minecraft 1.7.2. Распаковываем это в "ПАПКА С Forge\src\main\java".

Теперь можно приступить создавать мод. Для начала создадим главный класс мода. Думаю не нужно объяснять как это делать, но на всякий случай вот ссылка 1.7.21.6.4. Например мы хотим сделать крафт Улучшенной Электросхемы из Алмазного Блока и 8 Измельчённых Промытых Медных Руд. Для начала загрузим их:
Код:
package бла.бла;

import ic2.api.item.IC2Items;
import cpw.mods.fml.common.Loader;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.registry.GameRegistry;

@Mod (modid = "test", name = "TestMod", version = "1.0.0", dependencies = "required-after:IC2")

public class TestMod{
public ItemStack PCOre; //Создаём стак и даём ему имя
public ItemStack AdvancedCircuit;

    @EventHandler
    public void preLoad(FMLPreInitializationEvent event)
    {
    PCOre = IC2Items.getItem("purifiedCrushedCopperOre"); //Записываем в стак предмет из IC2. Название предметов смотрим в классе ic2.api.item.IC2Items
    AdvancedCircuit = IC2Items.getItem("advancedCircuit");
    }}

Теперь создаём крафт:
Код:
package бла.бла;

import ic2.api.item.IC2Items;
import cpw.mods.fml.common.Loader;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.registry.GameRegistry;

@Mod (modid = "test", name = "TestMod", version = "1.0.0", dependencies = "required-after:IC2")

public class TestMod{
public ItemStack PCOre;
public ItemStack AdvancedCircuit;

    @EventHandler
    public void preLoad(FMLPreInitializationEvent event)
    {
    PCOre = IC2Items.getItem("purifiedCrushedCopperOre");
    AdvancedCircuit = IC2Items.getItem("advancedCircuit");
    GameRegistry.addRecipe(AdvancedCircuit, 
            new Object[]{ "KKK", "KIK", "KKK",
            ('K'), PCOre, ('I'), Blocks.diamond_block});
    //Добавляем крафт, если кто ещё не понял.
    }}

Всё бы хорошо, но, что если нам надо скрафтить несколько предметов из IC2. Для этого просто добавляем в конце переменной ItemStack ".splitStack(кол-во предметов)", вот так:
Код:
GameRegistry.addRecipe(AdvancedCircuit.splitStack(9), 
           new Object[]{ "KKK", "KIK", "KKK",
            ('K'), PCOre, ('I'), Blocks.diamond_block});
Теперь мы получим 9 Улучшенных Электросхем

Ну вот вообщем то и всё. Надеюсь урок был вам полезен.
 
2,955
12
Ну хорошо, перенесем.
Пока мне самому лень писать полный тутор по ic2 api, пусть будет этот коротенький.
[merge_posts_bbcode]Добавлено: 09.07.2014 22:16:57[/merge_posts_bbcode]

Только вот ты создал тему чуть-чуть не в том месте. У нас с лазом нет прав переносить что то из флудилки. Жди анти.
 

CumingSoon

Местный стендапер
1,634
12
269
Как получить доступ не к ItemStack а к блоку?У меня метод жует только блок (меняю параметры) а ItemStack как показано принимать не хочет.
 

CumingSoon

Местный стендапер
1,634
12
269
Не работает так.

Код:
Operator '==' cannot be applied to 'net.minecraft.block.Block', 'net.minecraft.item.ItemStack'
 

CumingSoon

Местный стендапер
1,634
12
269
Я же говорю не работает.В туторе получают ItemStack то есть то что валяется или лежит в инвентаре.А блок нужен который установлен.Из майнкрафта просто Block.
 
503
3
CoomingSoon написал(а):
Я же говорю не работает.В туторе получают ItemStack то есть то что валяется или лежит в инвентаре.А блок нужен который установлен.Из майнкрафта просто Block.
А блок синглтон,ты его не ставишь.Получаешь итем из стака и превращаешь в блок(сверху)
 

CumingSoon

Местный стендапер
1,634
12
269
Нет,не получается у меня.Покажи как надо
 
20
0
У меня возникла проблема при добавлении в рецепт ЭнергоКристалов. Я создаю рецепт:
Код:
GameRegistry.addRecipe(new ItemStack(ItemList.EnergyCircuit, 1), 
                new Object[]{ "X#X", "#Z#", "X#X",
                ('X'), IC2Items.getItem("energyCrystal"), ('#'), Items.redstone, ('Z'), new ItemStack(ItemList.MetaItemBoard, 1, 3)});
он виден в игре  показывает что его можно скрафтить и получить ожидаемый предмет. Но когда я вылаживаю предметы ничего не происходит, я не могу получить то что хотел. С кабелем, рудами и прочим рецепты работаю, но именно с ЭнергоКристалами нет. Подскажи что я делаю не так ?
 
1,239
2
24
Код:
Recipes.macerator.addRecipe(new RecipeInputItemStack(new ItemStack(energyCrystal.getItem(), 1, OreDictionary.WILDCARD_VALUE), 1),null, energiumDust);
Пример
 
20
0
Парни у меня еще один вопрос, возможно ли сделать эффект радиации. Чтобы при нахождении моего предмета в инвентаре вешалась радиация и чем дольше он в инвентаре тем на дольше по времени бафался игрок(как у урана). Еще раз спасибо заранее.
 
1,239
2
24
Кажется интерфейс из апи "ICustomDamageItem"
[merge_posts_bbcode]Добавлено: 12.01.2016 12:36:00[/merge_posts_bbcode]

Либо подключи ic2 как библиотеку и юзай "IRadiationItem"
 
Сверху