首页 > 代码库 > 【Forge】Minecraft 1.7.10 Mod开发研究 - 黑猫背包MOD 【05-一个周不更新根本说明不了什么我的字典里就没有太监这两个字不是字典大小的问题你不要说那些没用的】

【Forge】Minecraft 1.7.10 Mod开发研究 - 黑猫背包MOD 【05-一个周不更新根本说明不了什么我的字典里就没有太监这两个字不是字典大小的问题你不要说那些没用的】

然后该给背包添加功能了,背包的功能说起来很简单,无非就是右键打开一个和箱子长得差不多的窗口,然后把东西放进去保存起来。

然后还有一些附加事项,比如不能把自己放进自己里面,最好也不允许把同类放进自己里面,那样容量就以次方倍的速度增加,一个背包里就能放无限个道具了。

 

于是首先处理背包的右键事件。

Item类自带一个方法,名字一看就懂,重写掉:

@Overridepublic ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer entityPlayer) {    return super.onItemRightClick(itemStack, world, entityPlayer);}

返回值是被右键的物品栈。

 

我回忆了一下,我好像没提物品栈这事来着。

暂时理解成一摞东西就行了,就算只有一个物品也是一个物品栈,物品栈可以用物品创建,也可以用物品栈的方法取到物品。

整个游戏过程中物品类只会创建一次,这个有点反直觉,并不是一个物品就是一个实例,一摞64个物品就是64个实例。

方块自然也是一样的,一个区块边长16格,从天到地256格,要是有这么多个实例后果可想而知,是吧说你呢虚拟机。

 

然后就要在这个方法里处理物品栏的打开和背包里物品的存储。

为了不误导人,我就不提我当时走的弯路了。

这个问题看起来简单,其实挺费劲的。

 

先把右键点击事件填上吧。

打开图形界面的接口在玩家类里:

entityPlayer.openGui(NekoBags.instance, NekoBags.GUI_ID_KURONEKO, world,
  (int)entityPlayer.posX, (int)entityPlayer.posY, (int)entityPlayer.posZ);

 

第一个参数是Mod的实例,在主类里加上一个变量:

@Mod.Instance(Constants.MOD_ID)public static NekoBags instance;

这个变量不需要初始化,加上注解之后Forge会处理。

 

第二个参数是图形界面的ID,用于区分各个界面,比如箱子的界面,熔炉的界面,村民交易的界面什么的。

放在之后建的GUI类里比较好,我这就直接放主类里了。

ID随便给个值,别跟别人的重复了就行。

 

第三个参数是世界,直接把方法里的参数拿下来就行。

 

后面三个参数是位置,对我们来说实际上就是玩家的位置,转换一下类型传进去。

 

当然光这样肯定是打不开什么界面的。

而且后面才是最麻烦的地方,我折腾了两天翻了无数个网站才解决问题。

 

歇会。

【Forge】Minecraft 1.7.10 Mod开发研究 - 黑猫背包MOD 【05-一个周不更新根本说明不了什么我的字典里就没有太监这两个字不是字典大小的问题你不要说那些没用的】