Pondus Inventory [Sable]

The mod allows you to add the calculation of items in storage on ships to the Sable physics calculations.

Pondus Inventory FI

An addon for Sable that makes every block, item, and fluid pull its weight—literally.

⚠️ I warn you: this mod is still under active development. To make it work with other mods, you will need to manually adjust the settings. You have been warned!

ℹ️ If you want to help with the blanks for the weights of items, blocks, and liquids from various mods, write about it in the channel ⌬・synthesis-of-ideas. All whose configs will be listed on this mod page and in the mod description.


What does it all mean?

Pondus Inventory FI is a companion mod for the Sable physics engine. It provides an incredibly detailed system for determining how much blocks, items, and fluids actually weigh.

You can change the mass of a block, item, or fluid on the fly using settings or in-game commands. The mod also looks inside chests, barrels, fluid tanks, and any other containers and adds weight to whatever is holding them up — so your airship suddenly becomes much heavier when the cargo hold is full of oil, or your portable water tank tips the scales when filled.

Ideal for builds using TerraFirmaCraft, Create, Sable, or anything else where realistic mass, balance, and fluid dynamics are important.


What can it do?

⚖️ Mess with block & fluid mass any way you like

Set a custom base weight for almost any block or fluid using the config or the /pondus mass command. You can even target entire groups with tags like #minecraft:planks, #tfc:ores, or #forge:water. The config supports math expressions — write things like "2.5 * stack_size" directly in the JSON file.

📦 Count the weight of everything inside containers

Any container (chest, barrel, Create's moving contraption, fluid tank, etc.) automatically adds the total weight of all items and fluids stored inside. You can tweak an inventory_multiplier to balance things out (maybe only 80% of the contents count), and decide whether the container block's own mass is included.

💧 Fluid mass calculations

Pondus now supports fluids via the NeoForge Fluid Handler capability. Define mass per bucket for any fluid, and the mod automatically calculates the weight based on the actual amount in millibuckets (mB). Perfect for realistic water towers, fuel tanks, lava reservoirs, or chemical processing setups.

🌍 Global mass modifiers

Need to make the entire world 20% heavier without editing hundreds of individual entries? Use global.json! This file contains three multipliers — block_mass_modifier, item_mass_modifier, and fluid_mass_modifier — that are applied to every block, item, and fluid in the game. Perfect for fine-tuning the overall physics balance of a modpack with a single number change.

🗂️ Namespace‑based configuration storage

Config files are now organised per mod inside config/pondus_inventory_fi/. Each mod (e.g. minecraft, create, tfc) gets its own subfolder, and inside that folder you place the standard blocks.json, items.json, and fluids.json. Benefits:

  • No more ID collisions between mods.
  • Easier to manage, share, or version-control configs for each mod separately.
  • The mod automatically migrates old flat config files (if present) into the new structure and backs them up in _migrated_backup.

Example folder structure:

config/pondus_inventory_fi/
├── global.json                # global multipliers for all blocks/items/fluids
├── minecraft/
│   ├── blocks.json
│   ├── items.json
│   └── fluids.json
├── tfc/
│   ├── blocks.json
│   ├── items.json
│   └── fluids.json
├── create/
│   ├── blocks.json
│   └── items.json
└── _migrated_backup/        # created automatically if old configs existed
    ├── blocks.json
    ├── items.json
    └── fluids.json

⚙️ Configs that actually make sense

Each JSON file uses a clean, simple format. Expressions like "base_mass": "2.5 * stack_size" or "mass_per_bucket": "0.8 + density_factor" are fair game. And you can reload everything on the fly with /pondus reload — no server restart needed.

🚀 First‑launch import helper

When you start the game for the first time after installing Pondus, a screen will appear asking whether you want to import masses from the external physics engine data. This saves you from manually entering masses for hundreds of blocks and items. If you skip it, you can always run /pondus import_external later (requires OP).

📥 Auto‑populate missing entries

Running /pondus populate will scan all registered blocks, items, and fluids and add any missing ones to the config files with default masses (0.5 for blocks, 0.01 for items, 1.0 for fluids per bucket). Existing entries are left untouched, so it's safe to run at any time. Perfect for quickly bootstrapping a mass database for a new modpack or after adding many new mods.


Getting it set up

Requirements

You need Sable. That's it.

(Fluid support requires mods/blocks that implement NeoForge's IFluidHandler capability)

Config files

All configs live in config/pondus_inventory_fi/<mod_namespace>/.

global.json – global mass multipliers. Example:

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

These values multiply the final calculated mass of all blocks, items, and fluids respectively. Change one number to scale the entire physics system up or down.

blocks.json – sets the rules for blocks. Example:

{
  "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 – item weights. Example:

{
  "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 – fluid weights. Example:

{
  "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"
  }
}

Quick rundown of the parameters:

Parameter Description
base_mass / mass A number or an expression ("2.5", "0.5 * stack_size", "1.0 + nbt_power").
mass_per_bucket Mass in kg for 1000 mB (1 bucket). Supports expressions.
per_stack If true, the mass is multiplied by the number of items in the stack.
inventory_multiplier Multiplier for the total weight of contents inside a container (e.g. 0.8 = 80%).
include_container_mass Whether the container block's own mass counts on top of its contents.
block_mass_modifier Global multiplier applied to all blocks' final mass.
item_mass_modifier Global multiplier applied to all items' final mass.
fluid_mass_modifier Global multiplier applied to all fluids' final mass.

💡 Fluid math note: Mass is calculated as mass_per_bucket × (millibuckets / 1000.0). So 500 mB of water (mass_per_bucket: 1.0) weighs exactly 0.5 kg.


In-game commands

All commands need operator-level permissions (level 2). Here's what you can do:

Command What it does Example
/pondus mass <value> block [storage_modifier] Set the mass of the block you're looking at. Optional storage_modifier sets the inventory multiplier (how much the contents weigh). /pondus mass 5.0 block or /pondus mass 10.0 block 0.8
/pondus mass <value> item Set the mass of the item you're holding. /pondus mass 0.3 item
/pondus mass <value> fluid <fluid_id> Set the mass per bucket for a fluid. /pondus mass 1.0 fluid minecraft:water
/pondus mass <value> tag <id> Apply a mass to every block/item/fluid with that tag. /pondus mass 1.0 tag #tfc:ores
/pondus populate [block_mass] [item_mass] [fluid_mass] Automatically scans all registered blocks, items, and fluids and adds any missing entries to the config files with the given default masses.
• If a mass is omitted, sensible defaults are used: 0.5 for blocks, 0.01 for items, and 1.0 for fluids (kg per bucket).
• Existing entries are skipped – only missing ones are added.
• The config is saved automatically after the scan.
Use case: Perfect for quickly bootstrapping a mass database for a new modpack or after adding many mods – you get a baseline for everything without manual editing.
/pondus populate (uses defaults)
/pondus populate 2.5 0.1 1.5 (custom masses)
/pondus import_external Import masses from the external physics engine's data (such as Sable) into Pondus config files. Useful if you skipped the first‑launch confirmation screen. /pondus import_external
/pondus reload Hot-reload all configs (including global.json) and clear caches. /pondus reload
/pondus sync Rebuilds physics for all SubLevels (use after mass changes). /pondus sync
/pondus config showmass <true/false> Toggle whether the mass of items is shown in tooltips. /pondus config showmass true
/pondus config showblockmass <true/false> Toggle whether the mass of blocks is shown in tooltips (for BlockItems). /pondus config showblockmass true

For mod & pack developers

Register masses straight from code:

// Register a block
MassRegistry.registerBlock("minecraft:stone", 
    new BlockMassEntry("minecraft:stone", "3.0", 1.0, true));

// Register an item
MassRegistry.registerItem("minecraft:diamond", 
    new ItemMassEntry("minecraft:diamond", "0.3", true));

// Register a fluid
MassRegistry.registerFluid("minecraft:water", 
    new FluidMassEntry("minecraft:water", "1.0"));

// Register by tag
MassRegistry.registerBlock("#minecraft:logs", 
    new BlockMassEntry("#minecraft:logs", "0.8", 1.0, false));

Work with custom NBT data:

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

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

Fluid mass calculation internals:

// FluidMassEntry handles millibucket → kg conversion automatically
FluidMassEntry water = new FluidMassEntry("minecraft:water", "1.0");
double massFor500mb = water.getMass(500); // Returns 0.5 kg

// Expressions are supported too
FluidMassEntry oil = new FluidMassEntry("tfc:olive_oil", "0.92 * density_mod");

Runtime config changes:

If you change configs at runtime, don't forget to invalidate caches:

ModConfig.CONFIG.reload();
InventoryMassCache.clear();
// Then run /pondus sync on the server

💡 Note on global modifiers: The block_mass_modifier, item_mass_modifier, and fluid_mass_modifier from global.json are applied automatically during mass calculation. You don't need to handle them in your code — just register the base values, and the global multipliers will scale them appropriately.


Found a bug?

Great! (Well, not great, but you know what I mean.) Here's what helps me the most:

  1. Grab the log from logs/latest.log and search for pondus_inventory_fi.
  2. Tell me the mod version, Minecraft version, NeoForge version, and Sable version.
  3. Describe exactly what you did, what you expected, and what happened instead. If there's an error, paste the relevant part of the log.
  4. For fluid-related issues: Include which fluid tank/block you tested with and whether it implements IFluidHandler.

License: MIT. Use it, remix it, share it — just keep the credit.

Developer: CatCosYT & Fractal Interactive Discord: https://discord.gg/pZ42QYZTD6

The Pondus Inventory [Sable] Team

profile avatar
  • 3
    Followers
  • 4
    Projects
  • 86.8K
    Downloads

More from CatCosYT