Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Туториал [1.5.2][Forge]Создание модов на Minecraft

Тема в разделе "Руководства, инструкции, утилиты", создана пользователем BeceJIbIu, 15 дек 2013.

  1. Автор темы
    BeceJIbIu

    BeceJIbIu Старожил Пользователь

    Баллы:
    103
    Skype:
    moloho3
    Имя в Minecraft:
    bakke530
    Для начала нам нужно запастись утилитами для создания модов!
    1.JDK7 - нужен для работы MCP
    2.MCP(Minecraft Coder Pack) - наше "ядро" компиляции/декомпиляции
    3.Forge Исходники - качаем только src! Версию выбираем сами(желательно Recommended)
    4.Eclipse - среда работы
    5.Клиент и сервер (чистые! с META-INF)

    Мы все скачали! Начнем!
    Готовим рабочий стол!

    [Не удаляем META-INF'ы
    1.Создаем папку где будет лежать ваш MCP(где хотите и называйте хоть "ОлолоЯМодолел111" и распаковываем туда MCP
    2.Копируем содержимое архива с клиентом и сервером в папку jars в папке MCP
    3.Копируем папку forge из архива с исходниками Forge в папку c MCP
    4.Открываем папку .../ваша_папка_с_mcp/forge/ и запускаем install.cmd. Ждем окончания декомпиляции
    5.Устанавливаем и запускаем Eclipse, во время запуска у вас спросят папку проекта - .../ваша_папка_с_mcp/eclipce/
    6. Итак, мы открыли проект, теперь слева есть Package explorer смотрим, какую библиотеку он использует(В окне Package explorer, "открываем проект Minecraft" и если будет строка "JRE System Library [JavaSE-1.7]", то все нормально, но если строка "JRE System Library [JavaSE-1.6]", то нажимаем ПКМ(Правой кнопкой мыши), выбираем пункт Properties, далее открылось окно в нем пункт Execution environment, выбираем в нем JavaSE-1.7 и нажимаем Ok.
    7.Приготовления закончены!

    Делаем основной класс!
    Для начала сделаем основную папку где будет храниться мод
    1.Заходим в Eclipse видим в Package Explorer папку Minecraft, открываем, и нажимаем ПКМ на папку src, выбираем New->Package. Открытом окне в строке Name, мы указываем название папки в которой будет все храниться (Например возьмем: ru.tutmod.src ) и нажимаем Ok.
    2. Нажимаем ПКМ по нашей папке ( ru.tutmod.src ), далее New -> Class. В строке Name указываем название нашего файла (Например: TutModCore ) и нажимаем Finish.
    Вот сам класс(TutModCore

    Блок!
    Сегодня мы создаем блок!
    Код:
    Перед @Init пишем:
    public static Block TutBlock;
    
    TutBlock название может быть другим
    
    Внутри метода public void load пишем это:
    
    TutBlock = new TutBlock(700,Material.rock)
    .setStepSound(Block.soundWoodFootstep)
    .setHardness(2.5F)
    .setCreativeTab(CreativeTabs.tabBlock)
    .setUnlocalizedName("TutBlock"
    GameRegistry.registerBlock(TutBlock);
    LanguageRegistry.addName(TutBlock, "Tutorial Block"

    Разберем!
    package ru.tutmod.src; - папка где лежит файл

    import... - импорты

    public TutBlock(int par1, Material par2Material) {super(par1, par2Material);} - публикация класса, с int'ами: "par1" - id блока, "par2Material" - материал блока

    public void registerIcons(IconRegister par1IconRegister){this.blockIcon = par1IconRegister.registerIcon("TutMod:TutBlock"}
    - а тут у нас самое интересное - иконка!
    Она будет лежать по пути ...\ваша_папка_с_mcp\src\minecraft\mods\TutMod\textures\blocks\TutBlock.png

    В итоге должно получится так!
    Код:
    package ru.tutmod.src;
    
    import net.minecraft.block.material.Material;
    import net.minecraft.src.*;
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.Mod.Init;
    import cpw.mods.fml.common.Mod.PreInit;
    import cpw.mods.fml.common.SidedProxy;
    import cpw.mods.fml.common.network.NetworkMod;
    import cpw.mods.fml.common.event.FMLInitializationEvent;
    import cpw.mods.fml.common.event.FMLPreInitializationEvent;
    import cpw.mods.fml.common.registry.GameRegistry;
    import cpw.mods.fml.common.registry.LanguageRegistry;
    @Mod (modid = "TutMod", name = "Tutorial Mod", version="0.0.1"
    public class TutModCore {
    
    public static Block TutBlock;
    
    @Init
    public void load(FMLInitializationEvent event)
    {
    TutBlock = new TutBlock(700,Material.rock)
    .setStepSound(Block.soundWoodFootstep)
    .setHardness(2.5F)
    .setCreativeTab(CreativeTabs.tabBlock)
    .setUnlocalizedName("TutBlock"
      GameRegistry.registerBlock(TutBlock);
      LanguageRegistry.addName(TutBlock, "Tutorial Block"
    }
    
    @PreInit
    public void init(FMLPreInitializationEvent preEvent){}
    }

    Предмет!
    Итак регистрируем наш предмет рядом с блоком
    public static Item TutItem;
    И в public void load пишем
    Код:
    TutItem = new TutItem(5003, 10)
    .setCreativeTab(CreativeTabs.tabMaterials)
    .setUnlocalizedName("TutItem"
        LanguageRegistry.addName(TutItem, "Учебный предмет");
    Разберем!
    10 - кол-во предметов в стаке
    Думаю кто читал прошлый урок поймут остальное
    Создаем класс TutItem
    Код:
    package ru.tutmod.src;
    import net.minecraft.client.renderer.texture.IconRegister;
    import net.minecraft.item.Item;
    
    public class TutItem extends Item
    {
    public TutItem(int i, int j)
    {
    super(i);
    maxStackSize=j;
    }
    public void registerIcons(IconRegister par1IconRegister)
            {
                                            this.itemIcon = par1IconRegister.registerIcon("TutMod:TutItem");
    }
    }
    Разбираем!
    public class TutItem extends Item - публикация класса TutItem как Item(предмет)
    public TutItem(int i, int j) { super(i);maxStackSize=j; } - публикация TutItem c int'ами: "i" - ID предмета, "j" - кол-во предметов в стаке
    public void registerIcons(IconRegister par1IconRegister) { this.itemIcon = par1IconRegister.registerIcon("TutMod:TutItem"); } - регистрация иконки предмета.
    Заметьте: блок - this.blockIcon, предмет - this.itemIcon
    Путь к иконке немного изменился: ...\ваша_папка_с_mcp\src\minecraft\mods\TutMod\textures\items\TutItem.png
    Рецепты
    Допустим вы сделали предмет и хотите его скрафтить. Сейчас этим займемся!Добавим в load это
    Код:
    GameRegistry.addRecipe(new ItemStack(Item.diamond, 64), new Object[]{
    "###",
    "#X#",
    "#Q#",
    Character.valueOf('X'), Block.cobblestone, Character.valueOf('#'), Block.dirt});
    Объясню, мы добавили крафт при помощи булыжника(cobblestone), земли(dirt)иии... ничего(Q) у нас получиться алмазик(diamond) в количестве - 64 шт.\
    Ну все же рассмотрим поближе.
    Код:
    (new ItemStack(Item.diamond, 64)
    тут мы пишем что хотим создать и его количество.
    Что бы создать свой блок или предмет из мода, нужно писать так:
    Код:
    (new ItemStack(TestModCore.TutItem, 1)
    А теперь печка! В load:
    Код:
    GameRegistry.addSmelting(Block.dirt.blockID, new ItemStack(Item.coal, 1), 1.0F);
    Здесь, мы добавили рецепт в печку, в котором при обжарке земли(dirt), мы получим уголь(coal), в количестве - 1 шт.

    Все о рудах
    Будем использовать блок который сделали во 2 как руду!
    Генерация
    Сначала регистрируем генерацию руды.После load пишем:
    Код:
    GameRegistry.registerWorldGenerator(new WorldgeneratorTut());
    Cоздаем новый класс WorldgeneratorTutorial (Ну или другое название, тогда поменяйте и в строке регистрации).Пишем там.
    Код:
    package ru.tutmod.src;
    import java.util.Random;
    import net.minecraft.world.World;
    import net.minecraft.world.chunk.IChunkProvider;
    import net.minecraft.world.gen.feature.WorldGenMinable;
    import cpw.mods.fml.common.IWorldGenerator;
    
    public class WorldgeneratorTut implements IWorldGenerator
    {
    public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider)
    {
      switch (world.provider.dimensionId)
      {
      case -1: generateNether(world, random, chunkX*16, chunkZ*16);
      case 0: generateSurface(world, random, chunkX*16, chunkZ*16);
      }
    }
    
    public void generateSurface(World world, Random random, int chunkX, int chunkZ)
    {
    for(int i=0; i < 300; i++)
    {
    int randPosX=chunkX + random.nextInt(16);
    int randPosY=random.nextInt(230);
    int randPosZ=chunkZ + random.nextInt(16);
    (new WorldGenMinable(TutModCore.TutBlock.blockID, 4)).generate(world, random, randPosX, randPosY, randPosZ);
    }
    }
    private void generateNether(World world, Random random, int chunkX, int chunkZ)
    {
    
    }
    }
    Нас интересует этот кусок
    Код:
    public void generateSurface(World world, Random random, int chunkX, int chunkZ)
    {
    for(int i=0; i < 300; i++)
    {
    int randPosX=chunkX + random.nextInt(16);
    int randPosY=random.nextInt(230);
    int randPosZ=chunkZ + random.nextInt(16);
    (new WorldGenMinable(TutModCore.TutBlock.blockID, 4)).generate(world, random, randPosX, randPosY, randPosZ);
    }
    }
    Разберем!
    Цифра 300 - это частота появления. 300 - руды будет много как земли .
    Что бы была нормальная генерация руды, ставим 10 - 25.
    Цифра 230, это высота на которой спавнится руда (от админиума).
    С этим экспериментируйте. ( К примеру алмазы появляются от 20 и ниже).
    Код:
    TutModCore.TutBlock.blockID, 4
    Это блок и количество его спавна в одном месте.
    Дроп с руды
    Добавляем это в блок

    Код:
    public int idDropped(int par1, Random par2Random, int par3)
    {
    return TutModCore.TutItem.itemID;
    }
    Разберем
    TutMod.TutItem.itemID - это то что будет выпадет с руды.
    Что бы выпадал не один предмет а больше.
    Код:
    public int quantityDropped(Random par1Random)
    {
    return 2;
    }
    Будет выпадать 2 предмета, меняйте число по своему желанию.
     
    Последнее редактирование: 15 дек 2013
    ApaDoctor, FrozenLiveX и Larin нравится это.
  2. Хостинг MineCraft
    <
  3. Автор темы
    BeceJIbIu

    BeceJIbIu Старожил Пользователь

    Баллы:
    103
    Skype:
    moloho3
    Имя в Minecraft:
    bakke530
    Продолжать ли мне писать гайд?
     
    Larin нравится это.
  4. FirePoint

    FirePoint Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    Just_Andrew
    Раз взялся - продолжай.
    Поменяй оформление. Сделай каждый урок на один пост. Никаких спойлеров с жирными текстами! Добавь скриншотов.
     
  5. Larin

    Larin Старожил Пользователь

    Баллы:
    103
    Кочено-же можно почитать доки, но так, текстом удобнее. Продолжай.
     
  6. Автор темы
    BeceJIbIu

    BeceJIbIu Старожил Пользователь

    Баллы:
    103
    Skype:
    moloho3
    Имя в Minecraft:
    bakke530
    Ок оформление изменю!!!Щас время появиться допишу про Рецепты,всё о рудах,о еде,создание своей вкладки в креативе (Creative Tab),инструменты,броня,config файл,
    предметы с моделью.[DOUBLEPOST=1387093279,1387086941][/DOUBLEPOST]Обновил!!!
     
  7. Help

    Help Старожил Пользователь

    Баллы:
    123
    Если копипастишь , то хотя бы сам проверяй , что копипастишь.
    Откуда такой путь возьмется?
    И Зачем скачивать МСР если после нажатия install.cmd скачивается тоже самое, но в другую папку.
    Галиматья и путанница.

    Отсюда копировал своими кривыми руками? http://gromid.com/topic/53/

    Если кому нужно человеческое описание , то здесь понятно и подробно все. >( WIKI)
     
    Последнее редактирование: 16 дек 2013
    Larin нравится это.
  8. Автор темы
    BeceJIbIu

    BeceJIbIu Старожил Пользователь

    Баллы:
    103
    Skype:
    moloho3
    Имя в Minecraft:
    bakke530
    Хм совсем другое!!!Кто еще у кого взял!!!
     
  9. Help

    Help Старожил Пользователь

    Баллы:
    123
    Что значит другое? Ты скопировать оттуда по человечески даже не смог.
    Вот . Готовая рабочая среда для Eclips для версии Майнкрата 1.6.4 .

    СкачатьsredaECLIPS.zip

    Скачав и распаковав этот архив , можно смело устанавливать Эклипс и приступать к созданию основного класса.
     
    Последнее редактирование: 16 дек 2013
  10. Автор темы
    BeceJIbIu

    BeceJIbIu Старожил Пользователь

    Баллы:
    103
    Skype:
    moloho3
    Имя в Minecraft:
    bakke530
    Кто у кого еще копипастил!!! как ты не понимаешь
     
  11. Help

    Help Старожил Пользователь

    Баллы:
    123
    Помести мой архив в первое сообщение и не мучай детей.
     
    WCRAFT нравится это.
  12. DoG743

    DoG743 Старожил Пользователь

    Баллы:
    103
    Skype:
    dog7431
    Имя в Minecraft:
    DoG743
    А что на счет создания мода,со своей моделью?
     
  13. Автор темы
    BeceJIbIu

    BeceJIbIu Старожил Пользователь

    Баллы:
    103
    Skype:
    moloho3
    Имя в Minecraft:
    bakke530
    Хорошая идейка обезательно отпишусь.
     
    DoG743 нравится это.

Поделиться этой страницей