minecraft mod开发教程-修改最大堆叠

打算开一个新坑。一系列基于minecraft forge的minecraft mod教程。伴随着实践来一系列mod教程。

下面将会来编写一个相当基础mod来修改默认物品的最大堆叠。

我们假设您已经具有了搭建forge开发环境的能力,如果你还不会搭建forge开发环境,你可以去minecraft forge官网下载官方版或者去尝试szszss的fgow(一个针对国内gfw屏蔽的使用国内软件源的forge gradle)

在minecraft里面每一个物品被称作一个item,每一个item的堆叠被称为物品栈(itemstack)。item中有一个方法来获得它的允许的最大的堆叠数:

/**
* Returns the maximum size of the stack for a specific item.
*/
@Deprecated
public int getItemStackLimit()
{
    return this.maxStackSize;
}

当然了这个是mcp的中的名称。原版中的物品都没有覆盖这个方法,但是我们不保证mod中的物品会尝试覆盖这个方法了。如果mod中的物品覆盖了这个方法就只能通过coremod通过asm来修改那些字节码。但是一般不会有脑残的mod作者来这样做,所以只要修改maxStackSize就好了。虽然这个变量是私有的,但是Item里面还是有一个方法来修改:

public Item setMaxStackSize(int p_77625_1_)
{
    this.maxStackSize = p_77625_1_;
    return this;
}

通过这个方法就能修改物品栈的限制了。当然前提还是mod作者没有脑残的覆盖这个方法。
那么我们来一段实例吧:

@EventHandler
public void postInit(FMLPostInitializationEvent evt) {
	Iterator it = GameData.getItemRegistry().iterator();
	for (;it.hasNext();) {
		Item item = (Item)it.next();
		item.setMaxStackSize(64);
	}	
}

minecraft forge推荐mod在preInit的时候进行方块的注册等操作,那样的话我们就能够在Init里面进行修改堆叠的了。但是并不是每一个mod作者都遵守那样的要求,有的mod作者会公然在Init里面注册方块和物品。这个时候为了保险我们监听了PostInit。当然了我这里只是很无节操的修改了所有物品的堆叠限制。如果要修改特定的物品的话minecraft forge提供

GameData.getItemRegistry().getObject(name)

这样的方法来获得Item。
上面就是这篇教程的全部,写的非常的简单。希望起到抛砖引玉的效果。如果大家有愿意投稿的,欢迎来本站投稿

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注