Minecraft Forge 更新物品图标
需求
我有一个需求:
想要通过使用一个物品之后修改该物品中能力的数据去实时更新物品的textures
例如: 一个瓶子装水,瓶子有一个水的能力,这个能力有着水的数据水的数量,通过每次饮用更改数据从而更改物品textures
思路
但是现在很棘手,若我通过创建多个相同物品但不同的材质,则会造成代码冗余并且写起来十分复杂
那么我们该怎么办呢?
在这之前我们需要了解一下 物品标签谓词 这个名词的含义 Minecraft 中文 Wiki
简单来说这个物品标签谓词中存储着多个键值对,满足键所对应的数值则会替换模型(数值的范围在0-1之间)
我在之前写弓箭物品的时候,我们应该记得 ItemProperties.register() 这个方法
1 | public static void register(Item pItem, ResourceLocation pName, ItemPropertyFunction pProperty) |
他接受几个参数,
- 需要修改的物品
- 一个路径: 这个路径是一个自定义的
- 一个函数式接口(回调函数),并为我们提供了一些参数,我们需要提供一个返回值,这个返回值就是物品标签谓词
1
2
3
4
5
public interface ItemPropertyFunction {
float call(ItemStack pStack, int pSeed); ClientLevel pLevel, LivingEntity pEntity,
}
操作
我们添加 bottle_0.json, bottle_0.png....
这些文件
1 | assets |
先改bottle_0等 带数字的json文件
把parent 改为 "mod:item/bottle"
1 | { |
我们需要修改我们的物品bottle.json模型文件
修改前
1 | { |
修改后
1 | { |
我们添加了overrides,这是一个数组,其中包含着多个对象,每个对象按照特定的方式存储着数据.
这个数组实际可以理解为存储着这个模型的所有子模型和判断方式
而这个predicate中则是满足条件,当mod:item_energy的值为0.1时更新模型为 “mod:item/bottle_5”
1 | { |
下面我们编写自定义的ItemProperties
1 | public class ModItemProperties { |
在FMLClientSetupEvent事件中注册
1 | private void clientSetup(final FMLClientSetupEvent event) |
启动游戏就OK了
总结
- 我们学习了
物品标签谓词Predicate
简单理解了其含义 - 我们学会了从之前学过的知识中提取我们所需要的知识,例如本次通过bow的ItemProperties 举一反三
感谢观看
- Title: Minecraft Forge 更新物品图标
- Author: YouM
- Created at : 2024-02-07 16:11:32
- Updated at : 2024-10-02 13:39:16
- Link: https://github.com/YOM667/2024/02/07/minecraft-custom-item-texture/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments