简易交易器

简易交易器

随身交易工具

简易交易装置

简易交易装置为Minecraft/NeoForge添加了便携式交易物品。交易装置存储一个数字交易值,接收配置好的物品或流体输入,并允许玩家消耗存储的值来购买配置好的输出。

该模组内置了原版Minecraft交易组,并支持JSON驱动的扩展。您可以:

  • 向现有的内置持有者添加条目
  • 创建全新的持有者
  • 注册使用该持有者的新交易装置物品

主要特性

  • 便携式交易装置,具有独立的存储值。
  • 按物品主题分组的原版交易持有者。
  • 物品和流体输入转换。
  • 物品和流体输出购买。
  • 耐久度感知的装备定价。
  • JSON加载额外交易条目。
  • JSON加载额外交易装置物品。
  • 可选的自定义持有者空白额外装置。

交易机制

右键点击交易装置打开其UI。

  • 中央条显示存储值。
  • 左侧显示可接受的输入。
  • 插入可接受的物品或流体将其转换为存储值。
  • 右侧显示可购买的输出。
  • 点击输出条目消耗存储值,并将结果移至输出槽。

购买倍数按键:

  • 无修饰键:购买1个单位
  • Shift:购买4个单位
  • Ctrl:购买8个单位
  • Alt:购买64个单位

物品按单个计价和交易。流体按1000 mB单位计价和交易。

配置

模组使用YAML配置文件:

config/simple_trading_device/simple_trading_device.yaml

默认值:

general:
  enableTradingHolderJsonConfig: true
  enableTradingDeviceJsonConfig: false
  enableAdditionalTradingDevice: false

enableTradingHolderJsonConfig

从以下位置加载额外交易条目:

config/simple_trading_device/trading_holder_entries.json

默认值:true

enableTradingDeviceJsonConfig

从以下位置加载额外交易装置物品:

config/simple_trading_device/trading_devices.json

默认值:false

enableAdditionalTradingDevice

注册十个额外的空白装置:

  • additional_trading_device_0
  • additional_trading_device_1
  • additional_trading_device_2
  • additional_trading_device_3
  • additional_trading_device_4
  • additional_trading_device_5
  • additional_trading_device_6
  • additional_trading_device_7
  • additional_trading_device_8
  • additional_trading_device_9

这些装置使用持有者键 additional_0 到 additional_9。

默认值:false

JSON工作流程

有两个JSON文件:

  • trading_holder_entries.json:定义交易内容
  • trading_devices.json:定义额外的交易装置物品

使用以下规则:

  1. 如果您只想向现有的内置装置添加交易,请编辑trading_holder_entries.json。
  2. 如果您想要一个全新的装置,请在trading_holder_entries.json中创建一个新的持有者,然后在trading_devices.json中为该持有者注册一个装置。
  3. JSON注册的装置还需要来自资源包或生成资产的模型文件和语言条目。

交易持有者键

内置持有者键:

持有者键 装置物品 内容主题
common simple_trading_device:common_trading_device 泥土、石头、沙子、沙砾、粘土、冰、黑曜石、原木、木板、木棍
building simple_trading_device:building_trading_device 砖块、抛光石、玻璃、陶瓦、混凝土、羊毛
minerals simple_trading_device:minerals_trading_device 煤炭、铜、铁、金、红石、青金石、石英、紫水晶、钻石、绿宝石、下界合金
farming simple_trading_device:farming_trading_device 种子、作物、树苗、蘑菇、水果、皮革、羽毛、蜂蜜
food simple_trading_device:food_trading_device 面包、鱼、肉、炖菜、金制食物
mob_drops simple_trading_device:mob_drops_trading_device 腐肉、骨头、线、火药、粘液球、烈焰棒掉落物、末影珍珠、恶魂之泪
redstone simple_trading_device:redstone_trading_device 红石粉、开关、铁轨、比较器、中继器、活塞、漏斗、TNT
utility simple_trading_device:utility_trading_device 火把、容器、工作站、桶、矿车、指南针、时钟、铁砧、附魔台、船
equipment simple_trading_device:equipment_trading_device 工具、武器、盔甲、弓、盾牌、钓鱼竿、剪刀、三叉戟、马铠
nether simple_trading_device:nether_trading_device 下界方块、下界木、下界疣、荧石、熔岩、烈焰棒、远古残骸
end simple_trading_device:end_trading_device 末地石、紫珀块、紫颂果物品、末影之眼、龙息、潜影壳、鞘翅
treasure simple_trading_device:treasure_trading_device 鞍、鹦鹉螺壳、海洋之心、潮涌核心、不死图腾、下界之星、信标、音乐唱片、锻造模板
additional_0 到 additional_9 可选的额外装置 为JSON内容准备的空白持有者

您也可以在JSON中创建一个全新的持有者键。只有某个交易装置使用该持有者键时,新持有者才会在游戏中可见。

trading_holder_entries.json

路径:

config/simple_trading_device/trading_holder_entries.json

该文件必须是一个JSON数组。

每个对象必须包含一个holder字段。之后,您可以使用:

  • 同一对象上的单个直接条目
  • 一个entries数组

支持的字段

字段 必需 描述
holder 是 持有者键,例如 mob_drops、nether、additional_0 或自定义键
entries 否 条目对象数组
type 每个条目必需 必须为 input、output 或 both
item 仅物品条目 由Minecraft编解码器解析的原版 ItemStack JSON
fluid 仅流体条目 由NeoForge编解码器解析的NeoForge FluidStack JSON
yield 是 交易值
baseYield yield的可选替代 与 yield 含义相同
tooltip 否 单行工具提示
tooltips 否 工具提示行数组

规则:

  • type 仅接受 input、output 或 both
  • item 或 fluid 中必须恰好存在一个
  • yield 必须大于 0
  • 物品ID和流体ID应使用完整名称,例如 minecraft:diamond
  • 对于物品堆栈,count 是可选的,默认为原版编解码器的结果
  • 对于流体堆栈,amount 是可选的,模组填入 1000
  • 无效条目会被记录并跳过

数量和组件说明

  • JSON物品输入按Item匹配,并按单个物品定价。item.count由编解码器解析,但不影响输入匹配或单位价值计算。
  • JSON流体输入按Fluid匹配,并按1000 mB定价。fluid.amount由编解码器解析,但输入匹配和单位价值计算仍使用流体类型和1000 mB的交易单位。
  • JSON物品输出每单位购买1个物品。因此购买修饰键购买1、4、8或64个物品。
  • JSON流体输出每单位购买1000 mB。因此购买修饰键购买1000、4000、8000或64000 mB。
  • JSON输出条目保留购买资源上的物品或流体组件,但输出数量仍遵循上述固定单位规则。
  • JSON输入条目不区分组件。如果您需要依赖于完整物品或流体组件的输入匹配或定价,请在Java中注册该交易并提供自定义TradingHolder.YieldCalculator。参见TradingHolderRegistry.registerItem(...)、TradingHolderRegistry.registerFluid(...)和TradingHolder.YieldCalculator。

类型含义

  • input:可以转换为存储值
  • output:可以从存储值购买
  • both:既可作为输入也可作为输出

最小单条目示例

[
  {
    "holder": "mob_drops",
    "type": "output",
    "item": {
      "id": "minecraft:creeper_spawn_egg"
    },
    "yield": 2048
  }
]

持有者块示例

[
  {
    "holder": "spawn_eggs",
    "entries": [
      {
        "type": "input",
        "item": {
          "id": "minecraft:rotten_flesh"
        },
        "yield": 8,
        "tooltip": "用于刷怪蛋交易的输入货币"
      },
      {
        "type": "input",
        "item": {
          "id": "minecraft:bone"
        },
        "yield": 12
      },
      {
        "type": "output",
        "item": {
          "id": "minecraft:zombie_spawn_egg"
        },
        "yield": 2048
      },
      {
        "type": "output",
        "item": {
          "id": "minecraft:skeleton_spawn_egg"
        },
        "yield": 2048
      },
      {
        "type": "output",
        "item": {
          "id": "minecraft:creeper_spawn_egg"
        },
        "yield": 4096
      }
    ]
  }
]

流体示例

[
  {
    "holder": "fluid_supplies",
    "entries": [
      {
        "type": "both",
        "fluid": {
          "id": "minecraft:water"
        },
        "yield": 16,
        "tooltip": "每交易单位 1000 mB"
      },
      {
        "type": "both",
        "fluid": {
          "id": "minecraft:lava"
        },
        "yield": 64
      }
    ]
  }
]

trading_devices.json

路径:

config/simple_trading_device/trading_devices.json

该文件仅在 enableTradingDeviceJsonConfig 为 true 时加载。

该文件必须是一个JSON数组。每个对象注册一个额外的交易装置物品。

支持的字段

字段 必需 描述
id 是 仅物品ID路径,例如 spawn_egg_trading_device
holder 是 装置使用的持有者键
maxStorage 是 最大存储交易值

规则:

  • id 不得包含命名空间
  • holder 可以指向内置持有者或新的自定义持有者
  • maxStorage 必须大于 0

示例:

[
  {
    "id": "spawn_egg_trading_device",
    "holder": "spawn_eggs",
    "maxStorage": 5000000
  },
  {
    "id": "fluid_supplies_trading_device",
    "holder": "fluid_supplies",
    "maxStorage": 1000000
  }
]

JSON装置所需的资产

JSON装置注册会创建物品并将其绑定到持有者。它不会自动为您提供最终的分布式客户端资产。

对于每个JSON装置ID,同时提供:

  • assets/simple_trading_device/models/item/<id>.json
  • assets/simple_trading_device/lang/en_us.json
  • 可选 assets/simple_trading_device/lang/zh_cn.json

模型示例

如果您的装置ID是 spawn_egg_trading_device,创建:

assets/simple_trading_device/models/item/spawn_egg_trading_device.json

模型示例:

{
  "parent": "simple_trading_device:item/trading_device",
  "textures": {
    "layer0": "simple_trading_device:item/trading_device_shell",
    "layer1": "minecraft:item/zombie_spawn_egg"
  }
}

共享父模型为:

assets/simple_trading_device/models/item/trading_device.json

它渲染外壳作为基础层,居中的8x8叠加层作为顶层。

语言示例

添加翻译条目:

{
  "item.simple_trading_device.spawn_egg_trading_device": "Spawn Egg Trading Device"
}

没有模型或语言条目,装置仍可注册,但不会有预期的客户端展示。

完整示例:创建一个新的自定义装置

  1. 启用JSON装置加载:
general:
  enableTradingHolderJsonConfig: true
  enableTradingDeviceJsonConfig: true
  1. 在 trading_holder_entries.json 中注册持有者及其交易内容:
[
  {
    "holder": "spawn_eggs",
    "entries": [
      {
        "type": "input",
        "item": {
          "id": "minecraft:bone"
        },
        "yield": 12
      },
      {
        "type": "output",
        "item": {
          "id": "minecraft:zombie_spawn_egg"
        },
        "yield": 2048
      }
    ]
  }
]
  1. 在 trading_devices.json 中注册装置:
[
  {
    "id": "spawn_egg_trading_device",
    "holder": "spawn_eggs",
    "maxStorage": 5000000
  }
]
  1. 添加模型文件:
{
  "parent": "simple_trading_device:item/trading_device",
  "textures": {
    "layer0": "simple_trading_device:item/trading_device_shell",
    "layer1": "minecraft:item/zombie_spawn_egg"
  }
}
  1. 添加语言条目:
{
  "item.simple_trading_device.spawn_egg_trading_device": "Spawn Egg Trading Device"
}

之后,该装置应出现在交易装置创造标签中,并打开您定义的持有者。

内置装置存储

装置 最大存储值
通用交易装置 100,000
建筑交易装置 150,000
矿物交易装置 2,000,000
农业交易装置 100,000
食物交易装置 100,000
生物掉落交易装置 250,000
红石交易装置 500,000
实用交易装置 500,000
装备交易装置 5,000,000
下界交易装置 2,000,000
末地交易装置 5,000,000
宝藏交易装置 10,000,000
额外交易装置 100,000,000
JSON交易装置 由 maxStorage 定义

开发

源代码仓库:

环境要求:

  • Java 25
  • Gradle 9.x
  • Minecraft 26.1.2
  • NeoForge 26.1.2.71+

许可证

GNU宽通用公共许可证v3。