跳到主要内容

自定义物品 (v1)

格式版本 1 (legacy)

注意

format_version: 1 不再接收更新。新功能将仅添加到格式版本 2。

JSON 映射 (v1)

  1. 启动你的服务器,你应该有一个名为 custom_mappings 的文件夹被创建。对于独立版,该文件夹位于 Geyser.jar 文件所在的文件夹中;对于插件版,它位于 Geyser 数据文件夹内。
  2. 创建一个 .json 文件,文件名可以随意,数量也不限。你不需要为每个物品创建一个文件。以下是文件的结构:
{
"format_version": 1,
"items": {

}
}
  1. items 条目中,你可以添加要扩展的 Java 物品:
"minecraft:JAVA_ITEM": [

]
  1. 在这个 Java 物品内,是一个包含所有自定义物品的数组。
{
"name": "my_item"
}
  1. 然后,你需要设置一个或多个物品选项或注册,它们可以堆叠,这样所有指定的类型都需要匹配。
    • 自定义模型数据:custom_model_data (int)
    • 伤害谓词:damage_predicate (int) 这是 damage/max damage 的分数值,而不是 0 到 1 之间的数字。
    • 不可破坏:unbreakable (boolean)
  2. 你还有一些额外的修饰符可以设置来进一步自定义你的物品。请注意,以下修饰符不是必需的。
    • display_name (string) 默认值: 物品名称
    • icon (string) 默认值: 物品名称
    • allow_offhand (boolean) 默认值: false
    • texture_size (int) 默认值: 16
    • creative_category (int) 默认值: 未设置。这可以接受 1-5 之间的值,并定义物品出现的创意模式类别。注意:如果你希望输出此自定义物品的配方显示在配方书中,需要将你的物品添加到创意模式类别!但是,包含它并不意味着你可以从创意模式物品栏中获取自定义物品。
    • creative_group (string) 默认值: 未设置。需要同时设置创意模式类别 - 允许你在子组中对自定义物品进行分组。请参阅此处获取所有类别。
    • render_offsets (object) 工作原理如下。请注意,除了 x、y 和 z 之外,所有子对象都是可选的。例如,你可以只有主手的 position,没有其他内容。默认值: 无渲染偏移
    • tags (array) 默认值: 无标签。允许定义可用于 Molang 查询的标签。示例值: ["test:tag_one", "test:tag_two"]。
    "render_offsets": {
    "main_hand": {
    "first_person": {
    "position": {
    "x": 0,
    "y": 0,
    "z": 0
    },
    "rotation": {
    "x": 0,
    "y": 0,
    "z": 0
    },
    "scale": {
    "x": 0,
    "y": 0,
    "z": 0
    }
    },
    "third_person": {

    }
    },
    "off_hand": {

    }
    }

Geyser 扩展 (v1)

扩展原版物品 (v1)

  1. 创建你的自定义物品选项或注册,你可以添加以下任何内容。它们可以堆叠,这样所有指定的类型都需要匹配,但你不需要所有这些。
CustomItemOptions itemOptions = CustomItemOptions.builder()
.customModelData(1)
.damagePredicate(1) //This is a fractional value of damage/max damage and not a number between 0 and 1.
.unbreakable(true)
.build();
  1. 创建你的自定义物品,并将其存储在某处:
CustomItemData data = CustomItemData.builder()
.name("my_item")
.customItemOptions(itemOptions)
.build();
  1. 你有一些修饰符可以设置来进一步自定义你的物品。请注意,以下修饰符不是必需的。
.displayName("displayName"); //Default: item name
.icon("my_icon"); //Default: item name
.allowOffhand(false); //Default: false
.textureSize(16); //Default: 16
.renderOffsets(new CustomRenderOffsets(...)); //Default: no render offset
  1. 然后,在你的预初始化事件中,你可以注册你的物品:
@Subscribe
public void onGeyserPreInitializeEvent(GeyserDefineCustomItemsEvent event) {
event.registerCustomItem("minecraft:JAVA_ITEM", data);
}

使用 Geyser 扩展的非原版(模组)物品(例如与 Fabric 一起使用)(v1)

  1. 创建你的物品数据:
NonVanillaCustomItemData data = NonVanillaCustomItemData.builder()
.name("my_item")
.identifier("my_mod:my_item")
.javaId(1)
  1. 还有许多其他选项你可以设置以匹配你的物品所需的行为。你可以在此处看到它们
  2. 在 GeyserDefineCustomItems 事件中注册你的物品:
@Subscribe
public void onGeyserDefineCustomItemsEvent(GeyserDefineCustomItemsEvent event) {
event.register(data);
}