[Forge][Modding] Создание модов для Minecraft

6 ответ(ов) в теме
rew
не в сети давно
На сайте с 16.10.2012
Участник
0
12:36

Уроки будут добавляться постепенно!

Что требуется для моддинга с Forge?
1. JDK 7
2. MCP (Minecraft Coder Pack)
3. Forge-Src
4. Eclipse
5. Чистый клиент (и если нужно сервер)
!Внимание, гайд не рассчитан на сборку Bukkit!

Приступим:
1. Создаем папку (Например: ModdingMC) и распаковываем туда содержание архива с MCP.
2. Копируем в папку ../ModdingMC/jars/ , из клиента папку bin и resources, из сервера нам потребуется только minecraft_server.jar.
3. Распаковываем архив с Forge-src в папку ModdingMC
4. Открываем папку ../ModdingMC/forge/ и запускаем файл install.cmd. Ждем окончания декомпиляции..
5. "Устанавливаем" и запускаем Eclipse, во время запуска у вас "спросят" папку с проектом, указываем путь: ../ModdingMC/eclipse/
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, нажимаем ПКМ на папку common, выбираем New->Package. Открытом окне в строке Name, мы указываем название папки в которой будет все храниться (Для примера возьмем: net.testmod.src ) и нажимаем Ok.
2. Нажимаем ПКМ по нашей папке ( net.testmod.src ), далее New -> Class. В строке Name указываем название нашего файла (Например: TestModBase ) и нажимаем Finish.

"Внутренности" файла TestModBase, должны выглядить примерно так.

Спойлер
package net.testmod.src;

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 = "TestMod", name = "Test Mod", version="0.0.1")
public class TestModBase {
@Init
public void load(FMLInitializationEvent event)
{
}

@PreInit
public void init(FMLPreInitializationEvent preEvent){}
}

Итак, раз у нас все подготовлено, можно приступать к "урокам":

Урок 1. Создание блока:

Спойлер

Сразу скажу, отличий от Modloader'a почти нет, но все-же.
Сам блок

public static final Block TestBlock = new TestBlock(2020,0).setStepSound(Block.soundStoneFootstep).setBlockName("Test Block");

Так же не забываем "зарегистрировать" наш блок(Пишем после скобки, функции load).

GameRegistry.registerBlock(TestBlock);
LanguageRegistry.addName(TestBlock, "Test Block");

Должно получиться примерно так:
[spoiler]package net.testmod.src;
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 = "TestMod", name = "Test Mod", version="0.0.1")
public class TestModBase {
public static final Block TestBlock = new TestBlock(2020,0).setStepSound(Block.soundStoneFootstep).setBlockName("Test Block");
@Init
public void load(FMLInitializationEvent event)
{
GameRegistry.registerBlock(TestBlock);
LanguageRegistry.addName(TestBloc, "Test Block");
}
@PreInit
public void init(FMLPreInitializationEvent preEvent){}
}

Файл TestBlock.java

package net.testmod.src;
import net.minecraft.src.*;
public class TestBlock extends Block {
public TestBlock(int par1, int par2)
{
super(par1,par2,Material.rock); //par1 - ID блока, par2 - ID его текстуры(Считается от 0), берется из файла ниже.
setCreativeTab(CreativeTabs.tabTools); //Добавляем в панель Creative режима
}

public String getTextureFile()
{
return "/test/textures.png"; //Указываем путь к текстурам. Путь данных текстур ../ModdingMC/src/common/test/textures.png
}

}

[/spoiler]

Урок 2.Экспорт нашего мода

Спойлер
1. Запускаем recompile.bat, затем reobfuscate.bat (Внимание, код не должен содержать русские символы!)
2. В папке ../reobf/minecraft/ будет лежать ваша папка с модом, ее запаковываем в ZIP архив.
3. Данный ZIP архив помещаем в папку mods(Перед этим установив Forge-universal). Мод подходит, как для клиента, так и для сервера!

Урок 3.Рецепты (Крафт, Печка)

Спойлер
Рецепт крафта

GameRegistry.addRecipe(new ItemStack(Block.stone, 1), new Object[]{ "#X", Character.valueOf('X'), Block.cobblestone, Character.valueOf('#'), Block.dirt});

Объясню, мы добавили крафт при помощи булыжника(cobblestone) и земли(dirt), у нас получиться камень(stone) в количестве - 1 шт.

Рецепт печки

GameRegistry.addSmelting(Block.wool.blockID, new ItemStack(Item.coal, 1), 1.0F);

Здесь, мы добавили рецепт в печку, в котором при обжарке Шерсти(wool), мы получим уголь(Coal), в количестве - 1 шт.

Наш код будет выглядит примерно так:

package net.testmod.src;
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 = "TestMod", name = "Test Mod", version="0.0.1")
public class TestModBase {
@Init
public void load(FMLInitializationEvent event)
{
GameRegistry.addRecipe(new ItemStack(Block.stone, 1), new Object[]{ "#X", Character.valueOf('X'), Block.cobblestone, Character.valueOf('#'), Block.dirt});
GameRegistry.addSmelting(Block.wool.blockID, new ItemStack(Item.coal, 1), 1.0F);
}
@PreInit
public void init(FMLPreInitializationEvent preEvent){}
}

Редакции сообщения
0
Форум
Гость
0
23:22

Большое спасибо за данный урок, у меня всё получилось.;D

Редакции сообщения
0
не в сети 3 месяца
На сайте с
Участник
0
23:25

Константин, можешь в теме рейтинг поднять (справа сверху) автору приятно будет beach

Редакции сообщения
0
Маримар
не в сети давно
На сайте с 04.05.2015
Участник
0
20:41

Подскажите пожалуйста, а можно ли обновить моды, если данная игра установлена из интернета бесплатно, или моды только для платных версий реально обновить? Сын просит, а я ноль полный в этом деле. Спасибо заранее)

Редакции сообщения
0
moto
не в сети 5 часов
На сайте с 12.03.2017
Администратор
Тем 3410
Сообщения 13602
0
21:10

Можно, моды ставятся в папку, есть готовые сборки с серверами и загрузчиками.

Редакции сообщения
0
dimation96
не в сети давно
На сайте с 07.09.2015
Участник
0
16:28

Как можно в это играть?

Редакции сообщения
0

Ваше имя *

Ваш E-mail *

не публикуется

Текст сообщения *