Minecraft(我的世界)中文论坛

标题: Minecraft MOD制作:从入门到精通——第四章第一节:

作者: DJXGAME    时间: 2012-8-22 12:48
标题: Minecraft MOD制作:从入门到精通——第四章第一节:
本帖最后由 1137246733 于 2015-8-16 20:18 编辑

Minecraft MOD制作:从入门到精通
The Dummy's Guide to Modding - From Setup to Advanced!




第四章:您等待已久的一章


我希望您能多加阅读一些Minecraft的代码,虽然对于一个java造诣不精人来说,代码有可能显得凌乱,但是不要灰心丧气。


第一节:您的第一个方块


通过在net.minecraft.src包内右击任意文件,点击New ->Class。

将其命名为“mod_YOURMODNAME”,必须确保其以“mod_”开头,因为只有这样系统才会识别该文件为一个MOD并开始加载。无需在底部选择任何的选项,点击"Finish"完成创建。

此时您会看见一段预先写好的类代码。您的第一件事就是要扩展这个MOD使之成为一个基本类(BaseMod)。您可以通过添加“extends BaseMod”这样的代码完成类的声明,此时代码如下:

  1. package net.minecraft.src;

  2. public class mod_YourModName extends BaseMod {

  3. }
复制代码

当然,此时会在“mod_YOURMODNAME”处显示错误,此时将鼠标移至该错误处,在弹出的对话框中单击“Add unimplemented methods”。此时会在当前的基本类里添加两个类函数:“load”与“getVersion”。您可以删除掉“//TODO”这种行,在“getVersion”类函数中,您需要将null替换为”1.0“或者其他您喜欢的版本号。您需要保留引用,就如同需要返回一个字符串一样。此时的代码如下所示:


  1. package net.minecraft.src;

  2. public class mod_YourModName extends BaseMod {

  3.     @Override
  4.     public String getVersion() {
  5.         return "1.0";
  6.     }

  7.     @Override
  8.     public void load() {
  9.         
  10.     }

  11. }
复制代码

现在您终于可以开始创作您的第一份方块代码啦~

在类的顶端添加下列代码(在“{}”之内):

  1. public static Block yourFirstBlock = new BlockTutorial(blockID, 0).setHardness(2.5F).setStepSound(Block.soundWoodFootstep).setBlockName("blockName");
复制代码

其中:

名称
含义
public 表示所有类均可以访问。
static
表示在类内不创建一个新的实例的条件下即可访问(详情请查阅java教程)
Block 该变量引用“Block.java”
yourfirstBLock 变量名,叫什么都行
= new BlockTutorial 此时在BlockTutorial类中创建了一个新的实例,由于我们之前没有声明,因此会出错。您可以将其改为任何您喜欢的名字,只要之后的名字与其相同就可以了。
(blockID, 0)  
您所传递给BlockTutorial类的信息,就是方块ID。您可以在这里将其替换成您所希望的任何数值。特别提醒您,在最新版本的Forge中,可以自动调整您的方块ID,并将其设置到137到4096中的一个未使用过的数值。您可以在这里查看您的MOD与MOD的兼容性。之后的0稍后会为您详细阐述,现在暂且放过它。
.setHardness(2.5F) 设置该方块的硬度为2.5,您可以随意调整。
.setStepSound(Block.soundWoodFootstep)   
走在上面的声音,如果您喜欢的话,也可以将“soundWoodFootstep”改成“soundClothFootstep”或者任何你喜欢的声音。
.setBlockName("blockName"); 这个变量无关紧要,只是要保证每个的名字不同就可以了。

现在您已经掌握了如何新建一个BlockTutorial类了,当然有可能在之前您就把这个名字改掉了……

现在我们要扩展方块,我们首先需要执行ITextureProvider,当您将如下代码复制进其中时,可以使鼠标悬停在ITextureProvider处并单击导入(import)。

  1. public class BlockTutorial extends Block implements ITextureProvider {
复制代码

现在我们需要为我们之前跳过的那部分创建一个构造函数(可以在java教程中获得更为详实的信息)。

  1. public BlockTutorial(int i, int j)
  2. {
  3.     super(i, j, Material.wood);
  4. }
复制代码

名称
含义
BlockTutorial 由于是构造函数,此处需与类的名字相同。
(int i, int j) 我们在之前使用(blockID, 0)的声明。更为详细的来说,表示该构造函数使用两个整数变量并将其命名为i和j。
super
表示需要使用超类来传递方块信息,这也是问什么我们扩展这个类的缘故。可能难以理解但是请参阅java教程o(∩_∩)o~~
(i, j, Material.wood); 这是由我们的MOD类中继承的将要传给方块的参数,我们同时也传递了Material.wood是因为我希望这个方块在被镐敲击时可以更为容易地被破坏。

好,现在您即将进行的步骤是添加一个Forge的类函数以便我们可以为这个方块设置材质

  1. public String getTextureFile()
  2. {
  3.     return "/Mic'sMods/CrossbowMod/gui/Crossbow.png";
  4. }
复制代码

切记:不要更改类函数的第一行!乱修改可能覆盖或者替换类函数。

这是一个用于十字弓MOD的例子,其中的材质存储在minecraft.jar的相应位置中。您可以很轻松地修改您所使用的材质,但是如果指向一个空位置则无法进行加载。当然也要保证是双引号~

最后还需要一个Forge的类函数将该方块添加至创造模式的物品栏中。

  1. public void addCreativeItems(ArrayList itemList)
  2. {
  3. if(blockID == mod_ YourModName. yourFirstBlock.blockID)
  4.             {
  5.                     itemList.add(new ItemStack(this));
  6.             }
  7. }
复制代码

当鼠标悬停至ArrayList时可以导入。

最后一个类函数可能有些复杂……

名称
含义
void 表示该函数没有返回值
addCreativeItems(ArrayList itemList) 类函数和构造函数的名字。不要进行修改,否则会覆盖Forge的类函数。
if(
根据真假不同返回值也不同,如果不懂请多看看教程
blockID == mod_ YourModName. yourFirstBlock.blockID 逻辑表达式,如果该方块的方块ID与您创建的方块的方块ID则继续
itemList.add(new ItemStack(this));
在创造模式中可以创建和堆叠这一方块,这条语句不懂亦无妨。

之后,我们在load()类函数中添加如下语句

  1. ModLoader.registerBlock(yourFirstBlock);
  2. ModLoader.addName(yourFirstBlock, "Woohoo! My first Block :D");
复制代码

其中:

名称
含义
ModLoader.registerBlock 您所调用的类函数
(yourFirstBlock) 您所使用的方块,确保之前声明过。
ModLoader.addName 调用另一个类函数,用于添加名字
(yourFirstBlock, "Woohoo! My first Block :D"); 这里是为您的方块实例赋予名字的地方,您可以在这里写“红石灯(Redstone Lamp)”,“楼主我要整合包~(LouzhuWoyaoZhengheBao)”等等。

现在要做一件最为重要的事请:
在Eclipse中单击Run运行Minecraft,进入创造模式,去寻找您的方块吧!

您已经为Minecraft制作了一个属于您的MOD,不再是MOD制作小白痴了!无论这个MOD多么粗糙和简陋,但都是您在MOD制作大师之路的一个见证!希望当您在成为大师之时蓦然回首还能记得您的第一份作品,无论如何,恭喜您!!!



作者: g-g-g    时间: 2012-8-22 12:51
最重要的事情给隐藏了
作者: pogox    时间: 2012-8-22 12:52
虽然不懂。。。但还是想看看隐藏的是啥
作者: likeliang    时间: 2012-8-22 12:53
为什么悲催的我看不懂啊
作者: DJXGAME    时间: 2012-8-22 12:53
g-g-g 发表于 2012-8-22 12:51
最重要的事情给隐藏了

隐藏的事情很重要吧~~~
作者: 侠客    时间: 2012-8-22 12:53
表示完全看不懂=v=
作者: 路邊電燈泡    时间: 2012-8-22 12:54
暫時還是先用ModLoader來開發的我悲劇...
作者: DJXGAME    时间: 2012-8-22 12:57
路邊電燈泡 发表于 2012-8-22 12:54
暫時還是先用ModLoader來開發的我悲劇...

一个精通也满好的~~~
作者: yeyaowei    时间: 2012-8-22 13:30
来看看隐藏的是什么!!
作者: yeyaowei    时间: 2012-8-22 13:31
我上当了..........
作者: jianghr    时间: 2012-8-22 13:33
本帖最后由 jianghr 于 2012-8-22 13:34 编辑

我要做坦克~~
我猜隐藏的内容是求回帖。
===
猜错了…
作者: DJXGAME    时间: 2012-8-22 13:38
jianghr 发表于 2012-8-22 13:33
我要做坦克~~
我猜隐藏的内容是求回帖。
===

我不会做那种求回帖的事情的……
作者: qw4wer    时间: 2012-8-22 13:53
学习ing,搞一个最新环境翻了n道墙。。。
作者: DJXGAME    时间: 2012-8-22 14:43
qw4wer 发表于 2012-8-22 13:53
学习ing,搞一个最新环境翻了n道墙。。。

好吧~~人家一会吧需要的软件都传到网盘里~~
作者: diauweb    时间: 2012-8-22 14:48
[gold_ore][wood_pickaxe]
作者: katetem4    时间: 2012-8-22 16:33
其實可以這樣寫嗎?
public void addCreativeItems(ArrayList itemList)
{
if(blockID == mod_ YourModName. yourFirstBlock.blockID)
            {
                    itemList.add(new ItemStack(this));
            }else{
   throw new Exception("An error occured");
}


作者: DJXGAME    时间: 2012-8-22 16:41
katetem4 发表于 2012-8-22 16:33
其實可以這樣寫嗎?

这是在后面添加了一个else~~~应该可以
但是人家是在翻译别人的教程还是要遵循原文~~~
作者: qw4wer    时间: 2012-8-22 18:30
为什么我的项目这么多错误呢,但是不影响编译,游戏,但是很多错误,有时候都不知道是不是真的错误。{:10_503:}(=w=)
然后如果是我的6.2版本就不会这样。。为啥呢{:10_527:}

QQ截图20120822182335.png (36.38 KB, 下载次数: 8)

QQ截图20120822182335.png

作者: qw4wer    时间: 2012-8-22 19:45
qw4wer 发表于 2012-8-22 18:30
为什么我的项目这么多错误呢,但是不影响编译,游戏,但是很多错误,有时候都不知道是不是真的错误。{:10_5 ...

搞定了,工作环境跟以前不一样,orz
作者: 299uipHjk    时间: 2012-8-23 08:59
终于看懂了一点
作者: 448620246    时间: 2012-8-23 20:43
唉 学习一下   
作者: 老李是我    时间: 2012-8-23 21:27
好无耻的回复可见...
作者: S.T.R→刺客    时间: 2012-8-23 21:28
回复可见啊 啊啊 啊
作者: kylexdd    时间: 2012-8-23 22:17
希望學習後可以制作server轉用MOD
作者: 公猫    时间: 2012-8-24 17:15
楼主厉害!

作者: heronger25    时间: 2012-8-24 20:54
现在要做一件最为重要的事请
作者: 994523036    时间: 2012-8-26 12:05
...   你最少要弄个简单的JAVA教程丫 要不然 就相当于 直接开始制作了!!
作者: 863548793    时间: 2012-8-27 14:00
喜欢  喜欢  喜欢 !!!!!!!!!
作者: shiau109    时间: 2012-8-28 19:38
不錯的教學
可惜有些地方似乎有缺漏
作者: yaya    时间: 2012-8-29 11:42
讨厌回复可见
作者: 可乐丸子    时间: 2012-8-30 18:16
……一定要回复……另外:执行ITextureProvider是什么情况……大雾
作者: 1053108088    时间: 2012-9-1 19:03
Mcbbs有你更精彩~
作者: shiau109    时间: 2012-9-2 15:33
這似乎是舊版寫法了
新的1.3.2版更簡潔更給力阿
作者: DJXGAME    时间: 2012-9-2 15:58
shiau109 发表于 2012-9-2 15:33
這似乎是舊版寫法了
新的1.3.2版更簡潔更給力阿

确实如此~~~待全文发完后再行更新~~~请稍后哈 ~~~
作者: nbmahe    时间: 2012-9-4 16:44
隐藏干哈
作者: 49471005    时间: 2012-9-4 19:06
回帖是美德-w-
作者: 1076742624    时间: 2012-9-7 04:31
回复看看 =w=+
作者: Dimaxiya    时间: 2012-9-10 21:22
好东西~
作者: 大腦-格式化    时间: 2012-9-12 01:43
只为了回复看看{:10_512:}
作者: pandaking102    时间: 2012-9-15 01:56
居然隐藏了,我要看——
作者: 398914337    时间: 2012-9-15 10:39
net.minecraft.src不需要经过反翻译就能找到么?
作者: 88771013    时间: 2012-9-16 19:33
有些描述有点问题
作者: case32bfk    时间: 2012-9-18 19:18
正好需要学习MOD的制作法,有这种教学真的太棒了
作者: S寒冰瞬杀S    时间: 2012-9-18 20:05
呵呵,我一直想自己做MOD
作者: DJXGAME    时间: 2012-9-18 20:10
88771013 发表于 2012-9-16 19:33
有些描述有点问题

这个确实是这样子的……我不是很会计算机的,万分抱歉哈~
作者: 901    时间: 2012-9-18 21:29
very good!

作者: lammankai    时间: 2012-9-19 19:22
看看........
作者: dangs456789    时间: 2012-9-20 00:33
正学着  看隐藏
作者: kycy123    时间: 2012-9-21 23:13
{:10_492:}我看看是什么东东

作者: lndexlawet    时间: 2012-9-22 19:05
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK~
作者: lndexlawet    时间: 2012-9-22 19:16
能给一份网盘的下载吗那个国外网站下载不能
作者: lndexlawet    时间: 2012-9-22 19:20
添加“extends BaseMod”这样的代码完成类的声明 extends是继承的意思 BaseMod这个父类并且可以使用他的方法和构造
作者: 神ID    时间: 2012-9-22 20:52
窝就看看隐藏的是神毛0 0
作者: garysh2012    时间: 2012-9-23 12:09
回复支持一下
作者: cwc    时间: 2012-9-23 12:56
fds不错 由你更精彩
作者: beda0912    时间: 2012-9-23 19:29
一步一步慢慢學
感謝翻譯
作者: 136374067    时间: 2012-9-23 19:37
听不懂啊aaaaaaa
作者: l9010    时间: 2012-9-23 21:39
{:10_512:}好贴
作者: 邪恶面具    时间: 2012-9-25 08:44
极为重要的是?

作者: nacnac    时间: 2012-9-25 08:53
诶,我脑子不够使唤啊。
作者: frkthaha    时间: 2012-9-26 22:28
最重要的是。。。。
作者: sdsdsdsdsd23    时间: 2012-10-1 14:05
很棒的作品!
作者: yueou    时间: 2012-10-1 14:10
来学习了~~
作者: roco33    时间: 2012-10-3 02:07
看看隐藏的是啥
作者: h296863785    时间: 2012-10-3 11:08
看看隐藏的东西是什么
作者: xu871676258    时间: 2012-10-3 21:42
e。。。。。。。。。。。。。。。
作者: mr21e    时间: 2012-10-4 00:54
技术贴一定要顶啊
作者: 121955907    时间: 2012-10-5 09:25
看到一半竟然要回复了!
作者: mingl0280    时间: 2012-10-5 21:59
回复可见。。。能不能不要那么多的回复可见。。。
作者: 714979518qq    时间: 2012-10-6 15:35
et.minecraft.src包内右击任意文件,点击New ->Class。
将其命名为“mod_YOURMODNAME”,必须确保其以“mod_”开头,因为只有这样系统才会识别该文件为一个MOD并开始加载。无需在底部选择任何的选项,点击"Finish"完成创建。
作者: Minezeratul    时间: 2012-10-6 15:57
看一看,以后毕业了做个CSOl 的mod
作者: thomasmi    时间: 2012-10-7 11:10
我就说我怎么看不完整
作者: pkljl001    时间: 2012-10-7 11:21
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
作者: jpg456    时间: 2012-10-7 13:50
我看看!!!
作者: 御坂美琴_wzh    时间: 2012-10-7 14:57
好支持顶儿
作者: stlfatboy    时间: 2012-10-7 15:28
.必须顶。。。
作者: stlfatboy    时间: 2012-10-7 15:28
.必须顶。。。
作者: KeuioYan    时间: 2012-10-7 22:21
現在碰到有點小疑惑...

我已經可以製作出一個獨立的MOD,有著自己的礦脈自己的工具

但是我想做出一個"雕像"

我想過製造一個新方塊,把材質替換成人物Skin的png檔。

事後證明我是個智障-3-

我希望可以弄出一個客製化方塊...可以自訂xyz等

簡而言之,我想把人物擺在遊戲中當裝飾。

想請教大神Orz。

作者: myland123456    时间: 2012-10-7 23:17
好!b b b b b b b b b b b b b
作者: SnakeLing    时间: 2012-10-8 21:16
为什么还有隐藏起来的内容……
作者: 汤团    时间: 2012-10-9 02:29
隐藏的是什么
让我看看
作者: hendyzone    时间: 2012-10-9 10:02
教程果断顶(其实是好奇隐藏←_←)
作者: Godfrey.Mao    时间: 2012-10-9 11:37
ggggggggggggggggggggggggggg
作者: liyou    时间: 2012-10-13 13:25
隐藏神马?
不是骗回帖吧?
作者: 1459103511    时间: 2012-10-13 16:15
= =我来看看要做什么
作者: zhukaijun    时间: 2012-10-14 02:50
会点java编程 学习一下啊
作者: lianchengtc    时间: 2012-10-16 15:08
支持楼组~~~
作者: qrqrttyt    时间: 2012-10-16 16:13
你好,我很想向您学习
作者: keith_crazy    时间: 2012-10-18 18:43
隐藏了啥子呦
作者: lhy594250    时间: 2012-10-19 23:19
好厉害,顶!!!
作者: 13510115841aaa    时间: 2012-10-20 00:01
我小学就想学做MOD,我就得太生奥了啊啊啊啊啊啊啊啊啊啊
作者: sylqiuyifeng    时间: 2012-10-20 14:49
好吧居然还有隐藏……我好奇了看看
作者: hyvlarn    时间: 2012-10-20 18:35
感觉还是有好多地方看不懂
作者: wwwfcxz    时间: 2012-10-20 19:41
很像看一下隐藏了什么
作者: 大虫    时间: 2012-10-20 20:59
虽然不是很明白,但是觉得好厉害哦
作者: andylvldd    时间: 2012-10-22 18:32
果然是最重要的东西不见了
作者: liuthou    时间: 2012-10-22 18:52
O(∩_∩)O哈哈~ 学了一个学期java  试试做做[diamond_chestplate]
作者: dute007    时间: 2012-10-23 09:52
回复看隐藏
作者: xmq1991    时间: 2012-10-23 12:18
学习学习~~~~~~~~~~~~
作者: xiaoxiami    时间: 2012-10-24 17:36
支持一下啊