[1.6.4] [Tutorial] [Forge] Уроки по созданию мода 1-5
Категория: Разное
!!!!При размещении уроков на другом сайте, указывайте автора!!!!
Что нужно для моддинга на forge?
В нашем файле testbase
После надписи:
public class testbase {
Вписываем вот такую строку:
public static final Block TestBlock
Разбор:
public static final Block "testBlock" - TestBlock название нашего блока в коде( не в игре)
После надписи:
@EventHandler
public void preInit(FMLPreInitializationEvent event)
{
Вписываем вот такие строки:
TestBlock = new TestBlock(2000).setUnlocalizedName("TestBlock");
GameRegistry.registerBlock(TestBlock);
LanguageRegistry.addName(TestBlock, "Test Block");
Разбор:
(TestBlock) - название нашего блока в коде(не в игре)
(TestBlock, "Test Block") - TestBlock название нашего блока в коде(не в игре), "Test Block" название нашего блока в игре.
Создаем файл TestBlock и вписываем в него такой код:
package net.testmod.mod
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class TestBlock extends Block
{
protected TestBlock(int par1)
{
super(par1, Material.ground);
this.setCreativeTab(CreativeTabs.tabBlock);
this.setHardness(1.0F);
this.setLightValue(1.0F);
this.setResistance(3.0F);
this.setStepSound(soundMetalFootstep);
}
@SideOnly(Side.CLIENT)
public void registerIcons(IconRegister ir)
{
this.blockIcon = ir.registerIcon("testbase:TestBlock");
}
}
Текстуры пихать туда: forge\mcp\src\minecraft\assets\testbase\textures\blocks
В нашем файле testbase
После надписи:
public class testbase {
Вписываем вот такую строку:
public static Item TestItem;
Разбор:
public static Item "TestItem" - testItem название нашего предмета в коде( не в игре)
После надписи:
@EventHandler
public void preInit(FMLPreInitializationEvent event)
{
Вписываем вот такую строку:
TestItem = new TestItem(2001).setUnlocalizedName("TestItem");
LanguageRegistry.addName(TestItem, "Test Item");
Создаем файл TestItem и вписываем в него такой код:
package net.testmod.mod;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.util.List;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagString;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
public class TestItem extends Item
{
public TestItem(int par1)
{
super(par1);
this.setCreativeTab(CreativeTabs.tabBlock);
this.maxStackSize = 2;
}
@Override
public void registerIcons(IconRegister par1IconRegister)
{
this.itemIcon = par1IconRegister.registerIcon("TestBase:TestItem");
}
}
}
Для начала давайте разберёмся куда мы будем добавлять наши рецепты, мы добавляем их туда где у нас все регистры, а именно в @EventHandler:
@EventHandler
public void preInit(FMLPreInitializationEvent event)
{
\\Сюда
}
Для начала давайте разберём форменный крафт, то есть в котором нужно соблюдать особенное расположение предметов:
GameRegistry.addRecipe(new ItemStack(testbase.TestBlock, 1), new Object[]{ "XXX", "D#D", "D#D", Character.valueOf('X'), Block.cobblestone, ('#'), Block.dirt});
(new ItemStack(TestBase.TestBlock, 1)
Тут мы указываем что в результате крафта мы получим 1 TestBlock.
{ "XXX", "D#D", "D#D", Character.valueOf('X'), Block.cobblestone, ('#'), Block.dirt}
Тут мы указали что наш блок будет крафтиться как кирка с навершием из булыжника и ручкой из земли, показав это символами X и #, а так как мы не указали что означает символ D - он является пустотой и в те слоты вставлять ничего не надо.
Теперь разберём безформенный крафт, в котором не надо соблюдать позиций предметов так же как и в крафте миски с супом:
GameRegistry.addShapelessRecipe(new ItemStack(testbase.TestBlock, 1), new Object[] {Item.stick, Block.dirt});
Тут всё ещё проще:
{Item.stick, Block.dirt}
Мы просто указываем что нужно скинуть в верстак.
Теперь перейдём к печке:
GameRegistry.addSmelting(Block.dirt.blockID, new ItemStack(testblock.TestBlock, 1), 1.0F);
(Block.dirt.blockID, new ItemStack(TutBase.TutBlock, 1)
Тут сказанно что мы плавим обычную землю в наш TestBlock и получаем из 1 земли 1 TestBlock.
1.0F
Это кол-во опыта за переплавку.
Ну вот и всё, успехов в моддинге!
Скачиваем Forge Src, и распаковываем в удобное нам место. После заходим в папочку forge и запускаем install.cmd. Дальше он все сделает за нас. Скачает MCP, Minecraft и декомпилирует его. Как по мне, сделали очень удобно, убраны лишние действия, как было в ранних версиях.
После этого, делаем все как раньше. Запускаем Eclipse и выбираем начальный "Workspace". Вот такой был путь у меня E:\Moding\forge\mcp, у вас должен быть схожий. Думаю разберетесь. И да, не забудьте поменять [JavaSE-1.6] на [JavaSE-1.7], все это делается так. Нажимаем правой кнопкой на "JRE System Library" далее вылетает контекстное меню и там вы нажимаете на "Properties". Дальше сами разберетесь.
После этого, делаем все как раньше. Запускаем Eclipse и выбираем начальный "Workspace". Вот такой был путь у меня E:\Moding\forge\mcp, у вас должен быть схожий. Думаю разберетесь. И да, не забудьте поменять [JavaSE-1.6] на [JavaSE-1.7], все это делается так. Нажимаем правой кнопкой на "JRE System Library" далее вылетает контекстное меню и там вы нажимаете на "Properties". Дальше сами разберетесь.
Нажимаем правой кнопкой по src, потом New->Package, пишем имя, у меня будет net.testmod.mod. Создали папку, теперь создаем базу правой кнопкой по net.testmod.mod и New->Class, называем его, у меня будет testbase.java
package net.testmod.mod;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.event.FMLServerStartingEvent;
import cpw.mods.fml.common.network.NetworkMod;
@Mod (modid = "TestMod", name = "Test Mod", version = "1.0")
@NetworkMod (clientSideRequired = true, serverSideRequired = false, versionBounds = "1.0.0")
public class testbase {
@EventHandler
public void preInit(FMLPreInitializationEvent event)
{
}
@EventHandler
public void init(FMLInitializationEvent event)
{
}
@EventHandler
public void postInit(FMLPostInitializationEvent event)
{
}
@EventHandler
public void serverStarting(FMLServerStartingEvent event)
{
}
}
package net.testmod.mod;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.event.FMLServerStartingEvent;
import cpw.mods.fml.common.network.NetworkMod;
@Mod (modid = "TestMod", name = "Test Mod", version = "1.0")
@NetworkMod (clientSideRequired = true, serverSideRequired = false, versionBounds = "1.0.0")
public class testbase {
@EventHandler
public void preInit(FMLPreInitializationEvent event)
{
}
@EventHandler
public void init(FMLInitializationEvent event)
{
}
@EventHandler
public void postInit(FMLPostInitializationEvent event)
{
}
@EventHandler
public void serverStarting(FMLServerStartingEvent event)
{
}
}
В нашем файле testbase
После надписи:
public class testbase {
Вписываем вот такую строку:
public static final Block TestBlock
Разбор:
public static final Block "testBlock" - TestBlock название нашего блока в коде( не в игре)
После надписи:
@EventHandler
public void preInit(FMLPreInitializationEvent event)
{
Вписываем вот такие строки:
TestBlock = new TestBlock(2000).setUnlocalizedName("TestBlock");
GameRegistry.registerBlock(TestBlock);
LanguageRegistry.addName(TestBlock, "Test Block");
Разбор:
(TestBlock) - название нашего блока в коде(не в игре)
(TestBlock, "Test Block") - TestBlock название нашего блока в коде(не в игре), "Test Block" название нашего блока в игре.
Создаем файл TestBlock и вписываем в него такой код:
package net.testmod.mod
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class TestBlock extends Block
{
protected TestBlock(int par1)
{
super(par1, Material.ground);
this.setCreativeTab(CreativeTabs.tabBlock);
this.setHardness(1.0F);
this.setLightValue(1.0F);
this.setResistance(3.0F);
this.setStepSound(soundMetalFootstep);
}
@SideOnly(Side.CLIENT)
public void registerIcons(IconRegister ir)
{
this.blockIcon = ir.registerIcon("testbase:TestBlock");
}
}
Текстуры пихать туда: forge\mcp\src\minecraft\assets\testbase\textures\blocks
В нашем файле testbase
После надписи:
public class testbase {
Вписываем вот такую строку:
public static Item TestItem;
Разбор:
public static Item "TestItem" - testItem название нашего предмета в коде( не в игре)
После надписи:
@EventHandler
public void preInit(FMLPreInitializationEvent event)
{
Вписываем вот такую строку:
TestItem = new TestItem(2001).setUnlocalizedName("TestItem");
LanguageRegistry.addName(TestItem, "Test Item");
Создаем файл TestItem и вписываем в него такой код:
package net.testmod.mod;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.util.List;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagString;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
public class TestItem extends Item
{
public TestItem(int par1)
{
super(par1);
this.setCreativeTab(CreativeTabs.tabBlock);
this.maxStackSize = 2;
}
@Override
public void registerIcons(IconRegister par1IconRegister)
{
this.itemIcon = par1IconRegister.registerIcon("TestBase:TestItem");
}
}
}
Для начала давайте разберёмся куда мы будем добавлять наши рецепты, мы добавляем их туда где у нас все регистры, а именно в @EventHandler:
@EventHandler
public void preInit(FMLPreInitializationEvent event)
{
\\Сюда
}
Для начала давайте разберём форменный крафт, то есть в котором нужно соблюдать особенное расположение предметов:
GameRegistry.addRecipe(new ItemStack(testbase.TestBlock, 1), new Object[]{ "XXX", "D#D", "D#D", Character.valueOf('X'), Block.cobblestone, ('#'), Block.dirt});
(new ItemStack(TestBase.TestBlock, 1)
Тут мы указываем что в результате крафта мы получим 1 TestBlock.
{ "XXX", "D#D", "D#D", Character.valueOf('X'), Block.cobblestone, ('#'), Block.dirt}
Тут мы указали что наш блок будет крафтиться как кирка с навершием из булыжника и ручкой из земли, показав это символами X и #, а так как мы не указали что означает символ D - он является пустотой и в те слоты вставлять ничего не надо.
Теперь разберём безформенный крафт, в котором не надо соблюдать позиций предметов так же как и в крафте миски с супом:
GameRegistry.addShapelessRecipe(new ItemStack(testbase.TestBlock, 1), new Object[] {Item.stick, Block.dirt});
Тут всё ещё проще:
{Item.stick, Block.dirt}
Мы просто указываем что нужно скинуть в верстак.
Теперь перейдём к печке:
GameRegistry.addSmelting(Block.dirt.blockID, new ItemStack(testblock.TestBlock, 1), 1.0F);
(Block.dirt.blockID, new ItemStack(TutBase.TutBlock, 1)
Тут сказанно что мы плавим обычную землю в наш TestBlock и получаем из 1 земли 1 TestBlock.
1.0F
Это кол-во опыта за переплавку.
Ну вот и всё, успехов в моддинге!
Тэги: mods, mods, tutorial, forge