本帖最后由 土球球 于 2020-11-4 23:24 编辑
Minecraft 1.8.9 FML Mod 开发教程
由于相关代码严重过时,本教程于2020年11月4日正式封存。
如果对教程有疑问,可以通过电邮的方式联系本人:[email protected]。
教程所属的代码仓库的master分支是根据所有维护的patch自动生成的,教程的文字部分由book分支维护,代码部分由patch分支维护。
目录
0 绪论
1 基础部分
2 初级部分
2.1 事件
2.2 高级物品
2.3 生物状态
2.4 玩家体验与系统
2.5 矿物
2.6 流体
3 高级部分
3.1 生物
3.2 高级方块
3.3 附加数据与同步
3.4 GUI
3.5 与其他Mod交互
附录
版权声明
本作品作者为ustc_zzzz。
Infinity Studio小组与本作品作者共有版权。

本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
转载请附上本作品链接: https://fmltutor.ustc-zzzz.net/
另外,本作品同时提供源代码,所有源代码使用MIT协议开源。
感谢Team CovertDragon,鉴于该团队为本教程提供的机房位于中华人民共和国香港特别行政区的阿里云服务器。
来自群组: InfinityStudio
Minecraft 1.8.9 FML Mod 开发教程
由于相关代码严重过时,本教程于2020年11月4日正式封存。
如果对教程有疑问,可以通过电邮的方式联系本人:[email protected]。
教程所属的代码仓库的master分支是根据所有维护的patch自动生成的,教程的文字部分由book分支维护,代码部分由patch分支维护。
目录
0 绪论
1 基础部分
2 初级部分
2.1 事件
2.2 高级物品
2.3 生物状态
2.4 玩家体验与系统
2.5 矿物
2.6 流体
3 高级部分
3.1 生物
3.2 高级方块
3.3 附加数据与同步
3.4 GUI
3.5 与其他Mod交互
附录
版权声明
本作品作者为ustc_zzzz。
Infinity Studio小组与本作品作者共有版权。

本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
转载请附上本作品链接: https://fmltutor.ustc-zzzz.net/
另外,本作品同时提供源代码,所有源代码使用MIT协议开源。
感谢Team CovertDragon,鉴于该团队为本教程提供的机房位于中华人民共和国香港特别行政区的阿里云服务器。
来自群组: InfinityStudio
表示为什么世界生成会是高级
在国内Mod制作教程还是少之又少的,希望楼主能够坚持,这贴必须顶
AFP 发表于 2015-11-2 21:16
表示为什么世界生成会是高级
= =因为世界生成简单的说可能只是生成矿物,而往难的说可以去生成一个世界,所以说这一体系本身就十分庞大、繁杂,这也是我把它放到高级部分的原因。
ustc_zzzz 发表于 2015-11-2 22:35
= =因为世界生成简单的说可能只是生成矿物,而往难的说可以去生成一个世界,所以说这一体系本身就十分庞 ...
好吧,那么lz什么时候更新实体生物那部分,我已经寻找了几个月了……希望lz不要弃坑
AFP 发表于 2015-11-4 17:14
好吧,那么lz什么时候更新实体生物那部分,我已经寻找了几个月了……希望lz不要弃坑 ...
试过szszss触的教程了木有= =还有可以看看MC自带的实体是怎么写的= =
支持你,现在天朝的mod开发者实在太少了
支持吧,觉得lz的教程还不错
lz好久没更了啊……
AFP 发表于 2015-11-6 20:26
lz好久没更了啊……
= =因为下一节是个深坑,我要把所有Forge提供的三位数个数的Minecraft事件一个一个整理出来= =
= =感觉这个周末应该能完成= =
= =仅仅是感觉= =
ustc_zzzz 发表于 2015-11-7 08:23
= =因为下一节是个深坑,我要把所有Forge提供的三位数个数的Minecraft事件一个一个整理出来= =
= =感觉这 ...
。。。我记得他们好像放在一个文件夹里的每一个分文件夹的一个文件里
lz又有几天没更啦,是在做事件列表的代码么……现在我会做生物了,正在研究矿物生成
观摩一下大神!!
加上官方开发wiki会比较好吧。。。。
大赞,基础的教程有很多但大部分都弃坑了,希望楼主不要弃坑。
观摩观摩!
楼主能在合成表这一框,讲一下如何在合成时返回物品吗?用setContainerItem似乎只能返回原版的,可能我用错了也有可能。
秋天007 发表于 2015-11-20 17:59
楼主能在合成表这一框,讲一下如何在合成时返回物品吗?用setContainerItem似乎只能返回原版的,可能我用错 ...
GameRegistry的addRecipe和addShapelessRecipe的第一个参数就是输出的物品啊。。。
本帖最后由 秋天007 于 2015-11-20 19:12 编辑
可能我说的不清楚,我指的是像合成蛋糕后,返回三个空桶那样,在九宫格内返回物品(一般的合成方式当然很简单)。表达的不好加上用词不当,请原谅。
ustc_zzzz 发表于 2015-11-20 18:16
GameRegistry的addRecipe和addShapelessRecipe的第一个参数就是输出的物品啊。。。
可能我说的不清楚,我指的是像合成蛋糕后,返回三个空桶那样,在九宫格内返回物品(一般的合成方式当然很简单)。表达的不好加上用词不当,请原谅。
ustc_zzzz 发表于 2015-11-20 18:16
GameRegistry的addRecipe和addShapelessRecipe的第一个参数就是输出的物品啊。。。
自己研究出来了,不过谢谢楼主教程的基础
支持楼主~我一直看英文的教程~好累~楼主简直造福人类
问一下有没有一个事件是当你靠近方块时怎么样还是必须像信标一样用实体?
AFP 发表于 2015-11-22 11:17
问一下有没有一个事件是当你靠近方块时怎么样还是必须像信标一样用实体? ...
一般我用的TileEntity。。。每次update时检查附近的实体。。。
自定义新的事件类
我们在EventLoader类中新建一个子类,该类就是我们想要的事件类了。
src/main/java/com/github/ustc_zzzz/fmltutor/common/EventLoader.java(部分):
@Cancelable
public static class PlayerClickGrassBlockEvent extends PlayerInteractEvent
{
public PlayerClickGrassBlockEvent(EntityPlayer player, BlockPos pos, World world)
{
super(player, PlayerInteractEvent.Action.LEFT_CLICK_BLOCK, pos, null, world);
}
}
很明显,这个类和玩家右键草块相关。该事件类继承了PlayerInteractEvent,可取消,并且被希望在玩家点击草块时触发。
我复制了一段话,你自己看看哪儿有问题
我们在EventLoader类中新建一个子类,该类就是我们想要的事件类了。
src/main/java/com/github/ustc_zzzz/fmltutor/common/EventLoader.java(部分):
@Cancelable
public static class PlayerClickGrassBlockEvent extends PlayerInteractEvent
{
public PlayerClickGrassBlockEvent(EntityPlayer player, BlockPos pos, World world)
{
super(player, PlayerInteractEvent.Action.LEFT_CLICK_BLOCK, pos, null, world);
}
}
很明显,这个类和玩家右键草块相关。该事件类继承了PlayerInteractEvent,可取消,并且被希望在玩家点击草块时触发。
我复制了一段话,你自己看看哪儿有问题
Deing 发表于 2015-11-22 14:39
自定义新的事件类
我们在EventLoader类中新建一个子类,该类就是我们想要的事件类了。
卧槽写错了。。。已更正(说好的站内信或GitHub Issue呢→_→)
话说,为什么添加了zh_CN.lang文件后,进入游戏显示是乱码捏?是因为编码的原因么?哪种方式编码才能正常显示?
cyd11111509 发表于 2015-11-23 16:41
话说,为什么添加了zh_CN.lang文件后,进入游戏显示是乱码捏?是因为编码的原因么?哪种方式编码才能正常显 ...
需要使用UTF-8编码
当然风格 发表于 2015-11-23 16:50
需要使用UTF-8编码
已解决~谢谢噜
楼主有没有 1.7.10的 forge开发教程
10123482 发表于 2015-11-23 18:00
楼主有没有 1.7.10的 forge开发教程
。。。没有。。。过去没有现在没有将来也不会有。。。放心好啦~
话说怎么样才能将工具作为合成的原料物品捏?就像工业exp里面的锤子,每合成一次就扣一点耐久度,然后合成新物品?
话说,求解释一下这三个参数= =
onBlockClicked(World worldIn, BlockPos pos, EntityPlayer playerIn)
worldIn,pos和playerIn
onBlockClicked(World worldIn, BlockPos pos, EntityPlayer playerIn)
worldIn,pos和playerIn
cyd11111509 发表于 2015-11-28 15:10
话说,求解释一下这三个参数= =
onBlockClicked(World worldIn, BlockPos pos, EntityPlayer playerIn)
wor ...
很显然啊。。。worldIn就是方块所在世界,pos就是方块所在位置,playerIn就是点击该方块的玩家。。。因为方块属于共享元,所以全世界的所有方块用的都是同一个对象,所以在玩家点击方块时需要方块的位置和方块所在的世界=_=||
ustc_zzzz 发表于 2015-11-28 15:54
很显然啊。。。worldIn就是方块所在世界,pos就是方块所在位置,playerIn就是点击该方块的玩家。。。因为 ...
噢~了解~我也是这样猜的= =就是想确认一下
我想问一个问题:
我在Eclipse中运行测试的时候是可以运行的,为什么用Gradle Build出来和RunClient都不能运行呢?
我在Eclipse中运行测试的时候是可以运行的,为什么用Gradle Build出来和RunClient都不能运行呢?
jiangming1399 发表于 2015-12-2 13:00
我想问一个问题:
我在Eclipse中运行测试的时候是可以运行的,为什么用Gradle Build出来和RunClient都不能 ...
。。。可不可以说一下具体的出错信息。。。。。。
本帖最后由 jiangming1399 于 2015-12-2 16:42 编辑
好吧,刚刚问题解决了。
刚刚是示例Mod我删除了源代码后它依旧能编译出东西。。。。
现在的问题是:
在Eclipse中运行的时候,方块和物品的材质都是好的
Build出来后,物品材质就丢失了。。。
直接Runclient,两个材质都丢失了。。。。。
--------------------------操蛋的分割线----------------------
我去!材质文件名大小写问题!
ustc_zzzz 发表于 2015-12-2 13:06
。。。可不可以说一下具体的出错信息。。。。。。
好吧,刚刚问题解决了。
刚刚是示例Mod我删除了源代码后它依旧能编译出东西。。。。
现在的问题是:
在Eclipse中运行的时候,方块和物品的材质都是好的
Build出来后,物品材质就丢失了。。。
直接Runclient,两个材质都丢失了。。。。。
--------------------------操蛋的分割线----------------------
我去!材质文件名大小写问题!
这里ISIS的Lasm,顶一下楼主{:10_521:}
写的很好,这是我见过的最全面的的教程了{:10_509:}
a79990587 发表于 2015-11-19 22:29
加上官方开发wiki会比较好吧。。。。
说实话wiki真心不适合新人
AFP 发表于 2015-12-6 16:49
说实话wiki真心不适合新人
wiki有一些成套的教程,是从零基础开始学起的。感觉还不错= =
ustc_zzzz 发表于 2015-12-11 21:44
wiki有一些成套的教程,是从零基础开始学起的。感觉还不错= =
求网址……我一直找不到什么好的……
顺便问问……怎么实现一把新的弓右键换材质和聚焦视野的那个过程……纠结好久了,另外为什么我做出来的生物当你远离它无论多久再回去它就会消失……你是唯一肯回答我的人了……
AFP 发表于 2015-12-12 14:23
顺便问问……怎么实现一把新的弓右键换材质和聚焦视野的那个过程……纠结好久了,另外为什么我做出来的生物 ...
第一个问题:你试过了重载物品的getItemUseAction方法木有= =
第二个问题:我个人也不太清楚。。。我推测的是MC把你的生物当成怪了= =所以距离一定距离就刷掉了= =
ustc_zzzz 发表于 2015-12-12 14:36
第一个问题:你试过了重载物品的getItemUseAction方法木有= =
第二个问题:我个人也不太清楚。。。我推测 ...
他本来就是怪……不过即使是,像凋灵一样,你离凋灵太远的话他并不会被删掉啊……
AFP 发表于 2015-12-12 14:41
他本来就是怪……不过即使是,像凋灵一样,你离凋灵太远的话他并不会被删掉啊…… ...
= =你这是要做一个Boss么= =
我又来提问了……我做出来的生物(继承 EntityTameble)可以生成但是看不见,会发出声音,也打得到,打死也会出掉落物,但是就是看不见有没有什么关于这方面的示范什么的……源码中的狼我试过学习一下,可是还是失败,问题就是看不见,而且eclipse中会有Skipped spawning Entity -19的提示
这是我的文件(由于没法传Java改成了yml)
这是我的文件(由于没法传Java改成了yml)
本帖最后由 ustc_zzzz 于 2015-12-15 11:06 编辑
你可以打包成zip的。。。。。。另外下面这个:
复制代码这个注册你做了没有→_→
AFP 发表于 2015-12-13 19:35
我又来提问了……我做出来的生物(继承 EntityTameble)可以生成但是看不见,会发出声音,也打得到,打死也 ...
你可以打包成zip的。。。。。。另外下面这个:
- RenderingRegistry.registerEntityRenderingHandler(entityClass, renderer);