Pondus Inventory [Sable]

Pondus Inventory [Sable]

该模组允许你将船只仓库中物品的计算添加到Sable的物理计算中。

Pondus Inventory FI

一款 Sable 的附属模组,让每个方块、物品和流体都名副其实地“有份量”。

⚠️ 警告: 此模组仍在积极开发中。要使其与其他模组兼容,您需要手动调整设置。您已被警告!

ℹ️ 如果您想帮忙 填补来自各种模组的物品、方块和流体重量的空白,请在此频道中留言:⌬・synthesis-of-ideas。其配置将被列在此模组页面和模组描述中。


这一切意味着什么?

Pondus Inventory FI 是 Sable 物理引擎的伴侣模组。它提供了一套极其详细的系统,用于确定方块、物品 和流体 的实际重量。

您可以使用设置或游戏内命令动态更改方块、物品或流体的质量。该模组还会检查箱子、桶、流体储罐和任何其他容器内部,并将重量添加到支撑它们的物体上——因此,当货舱装满石油时,您的飞艇会突然变得沉重许多,或者当您的便携式水箱被注满时,它也会增加重量。

非常适合使用 TerraFirmaCraft、Create、Sable 或任何其他重视真实质量、平衡和流体动力学的建筑。


它能做什么?

⚖️ 随心所欲地调整方块和流体的质量

使用配置文件或 /pondus mass 命令,可以为几乎任何方块 或流体 设置自定义基础重量。您甚至可以使用标签(如 #minecraft:planks、#tfc:ores 或 #forge:water)来定位整个组。配置文件支持数学表达式——您可以直接在 JSON 文件中编写类似 "2.5 * stack_size" 的内容。

📦 计算容器内所有物品的总重量

任何容器(箱子、桶、Create 的运动装置、流体储罐等)都会自动添加内部存储的所有物品 和流体 的总重量。您可以调整 inventory_multiplier 来平衡效果(也许只计算 80% 的内容物),并决定是否包含容器方块自身的质量。

💧 流体质量计算

Pondus 现在通过 NeoForge 流体处理器能力支持流体。为任何流体定义每桶质量,模组会根据实际数量(以毫桶 mB 为单位)自动计算重量。非常适合真实的水塔、燃料箱、熔岩库或化学处理装置。

🌍 全局质量修正器

需要让整个世界变重 20%,但又不想编辑数百个独立条目?使用 global.json!这个文件包含三个乘数——block_mass_modifier、item_mass_modifier 和 fluid_mass_modifier——它们会应用于游戏中的 每一个 方块、物品和流体。非常适合通过更改一个数字来微调整合包的整体物理平衡。

🗂️ 基于命名空间的配置存储

配置文件现在按 模组 组织在 config/pondus_inventory_fi/ 目录下。每个模组(例如 minecraft、create、tfc)都有自己的子文件夹,并且在该文件夹中放置标准的 blocks.json、items.json 和 fluids.json 文件。 优点:

  • 不再有模组之间的 ID 冲突。
  • 更容易为每个模组单独管理、共享或进行版本控制配置文件。
  • 模组会自动将旧的平面配置文件(如果存在)迁移到新的结构中,并在 _migrated_backup 中备份它们。

示例文件夹结构:

config/pondus_inventory_fi/
├── global.json                # 所有方块/物品/流体的全局乘数
├── minecraft/
│   ├── blocks.json
│   ├── items.json
│   └── fluids.json
├── tfc/
│   ├── blocks.json
│   ├── items.json
│   └── fluids.json
├── create/
│   ├── blocks.json
│   └── items.json
└── _migrated_backup/        # 如果存在旧配置文件则自动创建
    ├── blocks.json
    ├── items.json
    └── fluids.json

⚙️ 真正有意义的配置

每个 JSON 文件都使用简洁、简单的格式。像 "base_mass": "2.5 * stack_size" 或 "mass_per_bucket": "0.8 + density_factor" 这样的表达式都是允许的。您可以使用 /pondus reload 随时重新加载所有内容——无需重启服务器。

🚀 首次启动导入助手

当您在安装 Pondus 后首次启动游戏时,会出现一个界面,询问您是否要从外部物理引擎数据导入质量。这可以省去您手动输入数百个方块和物品质量的麻烦。如果您跳过了这一步,之后随时可以运行 /pondus import_external(需要 OP 权限)。

📥 自动填充缺失条目

运行 /pondus populate 将扫描所有已注册的方块、物品和流体,并将任何缺失的条目添加到配置文件中,并赋予默认质量(方块为 0.5,物品为 0.01,流体每桶为 1.0)。现有条目保持不变,因此随时运行都是安全的。非常适合为新整合包或添加了许多新模组后快速引导构建质量数据库。


安装设置

要求

您需要 Sable。仅此而已。

(流体支持需要实现 NeoForge 的 IFluidHandler 能力的模组/方块)

配置文件

所有配置文件都位于 config/pondus_inventory_fi/<mod_namespace>/ 目录下。

global.json – 全局质量乘数。示例:

{
  "block_mass_modifier": 1.0,
  "item_mass_modifier": 1.0,
  "fluid_mass_modifier": 1.0
}

这些值会分别乘以 所有 方块、物品和流体的最终计算质量。更改一个数字即可缩放整个物理系统。

blocks.json – 设置方块的规则。示例:

{
  "minecraft:chest": {
    "block_id": "minecraft:chest",
    "base_mass": "2.5",
    "inventory_multiplier": 0.8,
    "include_container_mass": true
  },
  "tfc:sand/red": {
    "block_id": "tfc:sand/red",
    "base_mass": "0.1",
    "inventory_multiplier": 1.0,
    "include_container_mass": false
  },
  "#minecraft:planks": {
    "block_id": "#minecraft:planks",
    "base_mass": "0.5",
    "inventory_multiplier": 1.0,
    "include_container_mass": false
  }
}

items.json – 物品重量。示例:

{
  "minecraft:iron_ingot": {
    "item_id": "minecraft:iron_ingot",
    "mass": "0.5",
    "per_stack": true
  },
  "tfc:metal/ingot/cast_iron": {
    "item_id": "tfc:metal/ingot/cast_iron",
    "mass": "1.2",
    "per_stack": true
  }
}

fluids.json – 流体重量。示例:

{
  "minecraft:water": {
    "fluid_id": "minecraft:water",
    "mass_per_bucket": "1.0"
  },
  "minecraft:lava": {
    "fluid_id": "minecraft:lava",
    "mass_per_bucket": "3.5"
  },
  "tfc:olive_oil": {
    "fluid_id": "tfc:olive_oil",
    "mass_per_bucket": "0.92"
  },
  "#forge:crude_oil": {
    "fluid_id": "#forge:crude_oil",
    "mass_per_bucket": "0.85"
  }
}

参数快速说明:

参数 描述
base_mass / mass 一个数字或表达式("2.5"、"0.5 * stack_size"、"1.0 + nbt_power")。
mass_per_bucket 1000 mB(1桶)的质量,单位为千克。支持表达式。
per_stack 如果为 true,则质量会乘以堆叠中的物品数量。
inventory_multiplier 容器内容物总重量的乘数(例如 0.8 = 80%)。
include_container_mass 容器方块自身的质量是否计入其内容物之上。
block_mass_modifier 应用于 所有 方块最终质量的全局乘数。
item_mass_modifier 应用于 所有 物品最终质量的全局乘数。
fluid_mass_modifier 应用于 所有 流体最终质量的全局乘数。

💡 流体计算说明: 质量计算公式为 mass_per_bucket × (millibuckets / 1000.0)。因此,500 mB 的水(mass_per_bucket: 1.0)正好重 0.5 千克。


游戏内命令

所有命令都需要操作员级别(2级)权限。以下是您可以执行的操作:

命令 功能 示例
/pondus mass <value> block [storage_modifier] 设置您所看向方块的质量。可选的 storage_modifier 设置库存乘数(内容物有多重)。 /pondus mass 5.0 block 或 /pondus mass 10.0 block 0.8
/pondus mass <value> item 设置您手持物品的质量。 /pondus mass 0.3 item
/pondus mass <value> fluid <fluid_id> 设置流体的每桶质量。 /pondus mass 1.0 fluid minecraft:water
/pondus mass <value> tag <id> 将质量应用于具有该标签的每个方块/物品/流体。 /pondus mass 1.0 tag #tfc:ores
/pondus populate [block_mass] [item_mass] [fluid_mass] 自动扫描所有已注册的方块、物品和流体,并将任何缺失的条目添加到配置文件中,并赋予给定的默认质量。
• 如果省略了质量参数,则使用合理的默认值:方块为 0.5,物品为 0.01,流体为 1.0(千克/桶)。
• 现有条目会被 跳过——仅添加缺失的条目。
• 扫描后会自动保存配置。
• 用例: 非常适合为新整合包或添加了许多模组后快速引导构建质量数据库——无需手动编辑即可为所有内容获得基线。
/pondus populate (使用默认值)
/pondus populate 2.5 0.1 1.5 (自定义质量)
/pondus import_external 从外部物理引擎(如 Sable)的数据导入质量到 Pondus 配置文件中。如果您跳过了首次启动确认界面,这很有用。 /pondus import_external
/pondus reload 热重载所有配置文件(包括 global.json)并清除缓存。 /pondus reload
/pondus sync 重建所有子世界的物理(在质量更改后使用)。 /pondus sync
/pondus config showmass <true/false> 切换是否在物品提示中显示质量。 /pondus config showmass true
/pondus config showblockmass <true/false> 切换是否在方块提示中显示质量(针对 BlockItem)。 /pondus config showblockmass true

给模组与整合包开发者

直接从代码中注册质量:

// 注册一个方块
MassRegistry.registerBlock("minecraft:stone", 
    new BlockMassEntry("minecraft:stone", "3.0", 1.0, true));

// 注册一个物品
MassRegistry.registerItem("minecraft:diamond", 
    new ItemMassEntry("minecraft:diamond", "0.3", true));

// 注册一个流体
MassRegistry.registerFluid("minecraft:water", 
    new FluidMassEntry("minecraft:water", "1.0"));

// 通过标签注册
MassRegistry.registerBlock("#minecraft:logs", 
    new BlockMassEntry("#minecraft:logs", "0.8", 1.0, false));

使用自定义 NBT 数据:

// 读取
double power = InventoryMassCalculator.getCustomDataValue(stack, "power", 1.0);

// 写入
InventoryMassCalculator.setCustomDataValue(stack, "power", 2.5);

流体质量计算内部结构:

// FluidMassEntry 会自动处理毫桶到千克的转换
FluidMassEntry water = new FluidMassEntry("minecraft:water", "1.0");
double massFor500mb = water.getMass(500); // 返回 0.5 千克

// 也支持表达式
FluidMassEntry oil = new FluidMassEntry("tfc:olive_oil", "0.92 * density_mod");

运行时配置更改:

如果您在运行时更改配置,不要忘记使缓存失效:

ModConfig.CONFIG.reload();
InventoryMassCache.clear();
// 然后在服务器上运行 /pondus sync

💡 关于全局修正器的说明: global.json 中的 block_mass_modifier、item_mass_modifier 和 fluid_mass_modifier 会在质量计算期间自动应用。您无需在代码中处理它们——只需注册基础值,全局乘数会自动缩放它们。


发现了一个错误?

太好了!(好吧,不是很好,但您明白我的意思。)以下是对我最有帮助的信息:

  1. 获取 logs/latest.log 中的日志,并搜索 pondus_inventory_fi。
  2. 告诉我模组版本、Minecraft 版本、NeoForge 版本和 Sable 版本。
  3. 准确描述您做了什么、期望发生什么以及实际发生了什么。如果有错误,请粘贴日志的相关部分。
  4. 对于流体相关问题: 请说明您测试时使用的是哪个流体储罐/方块,以及它是否实现了 IFluidHandler。

许可证: MIT。使用、混编、分享——只需保留署名。

开发者: CatCosYT & Fractal Interactive Discord: https://discord.gg/pZ42QYZTD6