MCBBS Wiki欢迎您共同参与编辑!在参与编辑之前请先阅读Wiki方针

如果在编辑的过程中遇到了什么问题,可以去讨论板提问。

为了您能够无阻碍地参与编辑 未验证/绑定过邮箱的用户,请尽快绑定/验证

MCBBS Wiki GitHub群组已上线!

您可以在回声洞中发表吐槽!

服务器状态监控。点击进入

本站由MCBBS用户自行搭建,与MCBBS及东银河系漫游指南(北京)科技有限公司没有从属关系。点此了解 MCBBS Wiki 不是什么>>

用户:MashKJo/1.12.2模组开发教程/7.自定义创造模式物品栏:修订间差异

来自MCBBS Wiki
跳到导航 跳到搜索
(创建页面,内容为“读者可能已经注意到了:之前笔者添加的新物品,都是放在“杂项”这一创造模式物品栏中的——那么我们可不可以自定义我们的Mod的独有创造模式物品栏呢?当然可以。 所有创造模式物品栏都是<code>net.minecraft.creativetab.CreativeTabs<code>的实例,这个类是抽象类,且只有一个抽象方法:<code>ItemStack getTabIconItem()</code>,这个方法用于决定该创造模式物品…”)
 
(// Edit via Wikiplus)
 
(未显示同一用户的1个中间版本)
第1行: 第1行:
读者可能已经注意到了:之前笔者添加的新物品,都是放在“杂项”这一创造模式物品栏中的——那么我们可不可以自定义我们的Mod的独有创造模式物品栏呢?当然可以。
读者可能已经注意到了:之前笔者添加的新物品,都是放在“杂项”这一创造模式物品栏中的——那么我们可不可以自定义我们的Mod的独有创造模式物品栏呢?当然可以。


所有创造模式物品栏都是<code>net.minecraft.creativetab.CreativeTabs<code>的实例,这个类是抽象类,且只有一个抽象方法:<code>ItemStack getTabIconItem()</code>,这个方法用于决定该创造模式物品栏的显示的图标,它返回一个ItemStack实例。另外,CreativeTabs还有2个构造方法:<code>(String label)</code>和<code>(int index, String label)</code>,我们应该用前者,而后者是给原版的CreativeTabs用的——毕竟后者可以显式指定CreativeTabs的数字ID,显然Modder不该用这个,否则兼容性会被搞得一塌糊涂。
所有创造模式物品栏都是<code>net.minecraft.creativetab.CreativeTabs</code>的实例,这个类是抽象类,且只有一个抽象方法:<code>ItemStack getTabIconItem()</code>,这个方法用于决定该创造模式物品栏的显示的图标,它返回一个ItemStack实例。另外,CreativeTabs还有2个构造方法:<code>(String label)</code>和<code>(int index, String label)</code>,我们应该用前者,而后者是给原版的CreativeTabs用的——毕竟后者可以显式指定CreativeTabs的数字ID,显然Modder不该用这个,否则兼容性会被搞得一塌糊涂。


如果你没什么特殊的需求,只需要弄个匿名内部类就可以了:
如果你没什么特殊的需求,只需要弄个匿名内部类就可以了:
第15行: 第15行:


另外,CreativeTabs类中还有一些方法可以覆写,借此你可以控制:是否有搜索框、搜索框宽度、创造模式物品栏背景图,等等。这里笔者再讲一下设定背景图的方法:setBackgroundImageName。这个方法传入一个String——没错,不是ResourceLocation,很意外吧?这个String中应该包含材质文件的扩展名——其实只能是.png。如,笔者传入<code>"tutorial_mod.png"</code>,那么该文件的实际路径为<code>assets/[modid]/textures/gui/container/creative_inventory/tabs_tutorial_mod.png</code>。没错,Mojang在这里不仅硬编码了该文件的父级目录,甚至还包括文件名本身——这是什么离谱的设计??最后,该文件的尺寸,只能是256×256,但其实际显示的地方没这么大,其右下角的部分是透明,这块你根据原版的相关材质改就行。
另外,CreativeTabs类中还有一些方法可以覆写,借此你可以控制:是否有搜索框、搜索框宽度、创造模式物品栏背景图,等等。这里笔者再讲一下设定背景图的方法:setBackgroundImageName。这个方法传入一个String——没错,不是ResourceLocation,很意外吧?这个String中应该包含材质文件的扩展名——其实只能是.png。如,笔者传入<code>"tutorial_mod.png"</code>,那么该文件的实际路径为<code>assets/[modid]/textures/gui/container/creative_inventory/tabs_tutorial_mod.png</code>。没错,Mojang在这里不仅硬编码了该文件的父级目录,甚至还包括文件名本身——这是什么离谱的设计??最后,该文件的尺寸,只能是256×256,但其实际显示的地方没这么大,其右下角的部分是透明,这块你根据原版的相关材质改就行。

== 向创造模式物品栏中手动添加ItemStack ==
很简单,只需要覆写displayAllRelevantItems这个方法即可,该方法的默认实现为:遍历物品的注册表,并调用所有已经注册的Item实例的getSubItems方法。如果我们想把原版的某个东西加个特殊的附加NBT,塞进我们的Mod的创造模式物品栏里,该怎么做?虽然是个特别奇怪的需求,但真的可以做到。注意覆写该方法的时候,先调用super.displayAllRelevantItems这个方法。

2024年12月9日 (一) 16:37的最新版本

读者可能已经注意到了:之前笔者添加的新物品,都是放在“杂项”这一创造模式物品栏中的——那么我们可不可以自定义我们的Mod的独有创造模式物品栏呢?当然可以。

所有创造模式物品栏都是net.minecraft.creativetab.CreativeTabs的实例,这个类是抽象类,且只有一个抽象方法:ItemStack getTabIconItem(),这个方法用于决定该创造模式物品栏的显示的图标,它返回一个ItemStack实例。另外,CreativeTabs还有2个构造方法:(String label)(int index, String label),我们应该用前者,而后者是给原版的CreativeTabs用的——毕竟后者可以显式指定CreativeTabs的数字ID,显然Modder不该用这个,否则兼容性会被搞得一塌糊涂。

如果你没什么特殊的需求,只需要弄个匿名内部类就可以了:

public static final CreativeTabs TUTORIAL_MOD_TAB = new CreativeTabs("tutorial_mod"){
    @Override
    public ItemStack getTabIconItem(){
        return new ItemStack(TutorialModItems.RUBY);
    }
};

此外,创造模式物品栏名称的本地化键名为"itemGroup." + label,例如,上述代码定义的创造模式物品栏,其名称的本地化键名为itemGroup.tutorial_mod

另外,CreativeTabs类中还有一些方法可以覆写,借此你可以控制:是否有搜索框、搜索框宽度、创造模式物品栏背景图,等等。这里笔者再讲一下设定背景图的方法:setBackgroundImageName。这个方法传入一个String——没错,不是ResourceLocation,很意外吧?这个String中应该包含材质文件的扩展名——其实只能是.png。如,笔者传入"tutorial_mod.png",那么该文件的实际路径为assets/[modid]/textures/gui/container/creative_inventory/tabs_tutorial_mod.png。没错,Mojang在这里不仅硬编码了该文件的父级目录,甚至还包括文件名本身——这是什么离谱的设计??最后,该文件的尺寸,只能是256×256,但其实际显示的地方没这么大,其右下角的部分是透明,这块你根据原版的相关材质改就行。

向创造模式物品栏中手动添加ItemStack

很简单,只需要覆写displayAllRelevantItems这个方法即可,该方法的默认实现为:遍历物品的注册表,并调用所有已经注册的Item实例的getSubItems方法。如果我们想把原版的某个东西加个特殊的附加NBT,塞进我们的Mod的创造模式物品栏里,该怎么做?虽然是个特别奇怪的需求,但真的可以做到。注意覆写该方法的时候,先调用super.displayAllRelevantItems这个方法。