( +4.35 4,35 0.00 )

[Guide][1.9] Моддинг 1.9 - #3 Items

Автор: CheshirX
[Guide][1.9] Моддинг 1.9 - #3 Items


С Proxy мы разобрались, с главным файлом тоже. Но когда всё-таки мы будем добавлять что-то визуальное в игру? Прямо сейчас!

Чтобы создавать предметы, создадим новый класс Items в директории /ник создававшего\./название мода\.items.

Делаем файл финальным[final], чтобы его не могли сделать подклассом. Теперь делаем метод "createItems()" и делаем его статичным[static] и публичным[public]. Класс теперь выглядет примерно так:

public final class Items {

    public static void createItems() {
    }
}


Создаём объект вот так: public static Item item; пишем это между public static void createItems() и public final class Items.Нажимаем Ctrl+Shift+O и импортируем net.minecraft.item.Item.
Теперь заходим в CommonProxy и в preInit вписываем Items.createItems();
Создаём сам предмет: в папке items создаём ещё одну папку item, а в ней класс ItemNew.
Потом пытаемся создать что-то похожее:
import net.minecraft.item.Item;

public class ItemNew extends Item{
	public ItemNew(String unlocalizedName) {
		super();
		
		this.setUnlocalizedName(unlocalizedName);
	}
}

Это класс с названием ItemNew который является подклассом класса Item.
this.setUnlocalizedName(unlocalizedName); - даёт "название" предмету.
Теперь в нашем классе всех предметов[Items] пишем:
GameRegistry.registerItem(item = new ItemNew("new_item"), "new_item");
Это регистрирует наш предмет в игре. item - тот самый объект который мы создали вначале, ItemNew - название класса, new_item - название блока, текстура|модель.

Далее создаём регистратор моделей. Путь к нему вот такой - /никнейм\./мод\.client.render.items. Создаём класс ItemRenderRegister и пишем примерно такой код:

Всё! Предмет создан, осталось только сделать для него модель и текстуру. Создаём в src/main/resources папку assets, в ней папку с названием от modid(Обязательно маленькими буквами!) там папки models и textures. В textures создаём новую, с названием items и кидаем туда файл new_item.png. В models создаём папку item, а в ней файл new_item.json где мы пишем вот это:
{
    "parent": "item/generated",
    "textures": {
        "layer0":"/modid\:items/new_item"
    }
}


Всё, предмет должен быть с текстурой и названием(довольно странным, про локализацию в отдельном уроке).
Чтобы дать себе предмет, вводим команду /give @a /modid\:[tab]

Вам довольно долго писал CheshirX, извините за некоторые непонятицы! Если что-то осталось неясным спрашивайте в комментариях!

  1. Олдфаги

    19 марта 2016 19:42

    0

    Эмм.. в конце у меня, почему то не было кода !?
  2. Олдфаги

    19 марта 2016 19:49

    0

    Куда делся проверочный код? Я боюююсь... Shto-za
  3. Посетители

    19 марта 2016 19:57

    0

    CheshirX,
    Че? poker-face2
  4. Олдфаги

    19 марта 2016 20:03

    0

    porludom, когда пишу статью в конце есть проверочный код, сейчас его не было! Shto-za
  5. Просто хорошие люди

    20 марта 2016 08:43

    0

    можеш помочь мне надо чтобы блок можно было добывать только железной киркой вот сам код :
    public class mcreator_legendaryMeteorOre {

    public mcreator_legendaryMeteorOre(){}

    public static BlockLegendaryMeteorOre block;

    public static Object instance;public int addFuel(ItemStack fuel){return 0;}
    public void serverLoad(FMLServerStartingEvent event){}
    public void preInit(FMLPreInitializationEvent event){
    }
    public void registerRenderers(){}
    public void load(FMLInitializationEvent event){
    if(event.getSide() == Side.CLIENT){
    Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getI
    temFromBlock(block), 0, new ModelResourceLocation("TestEnvironmentMod:LegendaryMeteorOre", "inventory"));}
    }


    static{

    block = (BlockLegendaryMeteorOre)(new BlockLegendaryMeteorOre().setHardness(2.0F)
    .setResistance(10.0F)
    .setLightLevel(0.0F)
    .setUnlocalizedName("LegendaryMeteorOre")
    .setLightOpacity(0)
    .setStepSound(Block.soundTypeStone)
    .setCreativeTab(CreativeTabs.tabBlock)
    );block.setBlockBounds(0.0F,0.0F,0.0F,1.0F,1.0F,1.0F);
    block.setHarvestLevel("pickaxe", 2);
    }


    public void generateSurface(World world, java.util.Random rand, int chunkX, int chunkZ){
    for(int i = 0; i < 8; i++){
    int randPosX = chunkX + rand.nextInt(16);
    int randPosY = rand.nextInt(60)+0;
    int randPosZ = chunkZ + rand.nextInt(16);
    (new WorldGenMinable(mcreator_legendaryMeteorOre.block.getDefaultState(), 12)).generate(world, rand, new BlockPos(randPosX, randPosY, randPosZ));
    }
    }

    public void generateNether(World world, Random random, int chunkX, int chunkZ){}
    static class BlockLegendaryMeteorOre extends Block
    {

    int a1 = 0,a2 = 0,a3 = 0,a4 = 0,a5 = 0,a6 = 0;

    boolean red = false;





    protected BlockLegendaryMeteorOre()
    {
    super(Material.ground);

    GameRegistry.registerBlock(this, "LegendaryMeteorOre");

    }


    public void onBlockAdded(World world, BlockPos pos, IBlockState state){
    int i = pos.getX();int j = pos.getY();int k = pos.getZ();world.scheduleUpdate(new BlockPos(i, j, k), this, this.tickRate(world));

    }
    public int isProvidingStrongPower(IBlockAccess worldIn, BlockPos pos, IBlockState state, EnumFacing side){
    return red?15:0;
    }
    public int isProvidingWeakPower(IBlockAccess worldIn, BlockPos pos, IBlockState state, EnumFacing side){
    return red?15:0;
    }
    @SideOnly(Side.CLIENT)
    public EnumWorldBlockLayer getBlockLayer()
    {
    return EnumWorldBlockLayer.SOLID;
    }

    @Override
    public int tickRate(World world)
    {
    return 10;
    }

    public int quantityDropped(Random par1Random){
    return 1;
    }

    }
    }
  6. Олдфаги

    20 марта 2016 09:07

    0

    Funcrafter_Pro,
    Ответил в ЛП =)
  7. Олдфаги

    20 марта 2016 11:10

    0

    CheshirX,
    слушай, а Eclipse Mars подойдёт?
  8. Посетители

    20 марта 2016 13:55

    0

    Спасибо"
    ____________________________________________________________
    Мой ник зарегистрирован на NickName.ru Зайдите плиииз:)
  9. Олдфаги

    20 марта 2016 14:49

    0

    iVAN2020,
    К сожалению нет, Eclipse Mars немного изменён, но этого изменения хватает что-бы minecraft его не видел. Нет не подойдёт.

    AquiL,
    За что? Если гайд, то не за что =) Хотя даже так на здоровье =)
  10. Просто хорошие люди

    21 марта 2016 21:22

    0

    CheshirX,
    Чел, будет ли гайд по API к конкретным модам? К примеру к API IC2 или Thaumcraft?
  11. Олдфаги

    22 марта 2016 16:24

    0

    Stebbilust,
    В плане? Вы имеете ввиду АПИ которое создаёт энергию, например как ИК2?
    Сам пока разбираюсь, с этим, скоро будет гайд по блоку кстати!
  12. Олдфаги

    22 марта 2016 19:14

    0

    Или вы про аддоны?
  13. Просто хорошие люди

    23 марта 2016 07:27

    0

    CheshirX,
    Я интересуюсь в создании аддона для IC2, но и энергия тоже интересна. Про API IC2 нашел только 1 сборник гайдов на 1.6.2, на анг. языке.
  14. Олдфаги

    23 марта 2016 07:36

    0

    Stebbilust,
    Для того чтобы создавать аддоны нужно знать как создавать простые моды =)
    Так что жди новостей =)
    Сегодня выпущу по блоку и локализации(нормальному переводу).
    1. Просто хорошие люди

      24 марта 2016 16:47

      0

      Без обид, но не считай базовые навыки java и знания forge API чем то сверхъестественным, на сайте много тех, кто как минимум имеет базовые знания в Java и может создать простой мод, кстати могу себя отнести к этой категории.
  15. Посетители

    24 марта 2016 15:08

    0

    НА КАКОМ ВЫ ЯЗЫКЕ ГОВОРИТЕ? 3a_4to
  16. Олдфаги

    24 марта 2016 18:50

    0

    VanaWasd На языке Java.
    Stebbilust А я и не считаю, зато те кто не изучали её считают. Если хочешь могу создать отдельный топик на форуме специально для тех кто знает её =) Кстати это не оскорбление! Я не люблю когда меня оскорбляют, соответственно - когда я оскорбляю. Надо добавить это в подпись =)
Для написания комментария зарегистрируйся на сайте, это займет всего пару минут, голосуй за новости, зарабатывай репутацию.

Последние сообщения с форума

Название темы
Статистика
Последнее сообщение

Просмотров: 6755

Ответов: 160

Просмотров: 145296

Ответов: 693

Просмотров: 1169

Ответов: 14

Просмотров: 144

Ответов: 0