Compatibility
Minecraft: Java Edition
Platforms
Supported environments
Tags
Creators
Details
The goal of this mod was to make players think about inventory management and equipment, without being too punishing. By default only potion effects are applied such that the player can visually understand their encumberance, but attributes can be modified as well if desired.
All Items have weight, either by configuration or determined by their crafts. Carry too much and you become encumbered. Highly configurable, almost every feature can be modified or disabled.

Overview
Every item has a unit weight. Stack weight is unit times count, plus contents of shulkers, bundles, and other nested inventories when that option is on. Your total is inventory plus optional armour, offhand, Accessories, and Curios.
Totals map to encumbrance bands (default Unencumbered through Immobile). Capacity can raise those thresholds from player level, armour, equipment overrides, accessory bonuses, and the Burden Bearing / Crushing Load enchantments.
Heavy bands can apply potion effects and attribute modifiers from server config. Creative mode ignores carry weight unless you turn that on.
Client display
- Tooltips: category and numeric weight (Shift for precise values)
- Inventory slots: optional outline or background by item weight band
- HUD: encumbrance icon, optional label and total. The icon can shake from a chosen band upward (default Heavy Load). Custom icons go in
assets/ffitemweight/textures/gui/encumbrance/<name>.png(Heavy Loadbecomesheavy_load.png)
Weights are computed on the server (datapack bases plus optional recipe derivation) and synced. Display is client-only.
Soft compatibility
| Mod | Notes |
|---|---|
| EMI | Weights on item tooltips |
| Accessories / Curios | Equipped slot weight and capacity. Accessories wins if both are loaded so Compatibility Layer does not double-count |
| Create | Default recipe modifiers and filters |
| Universal Sawmill | sawmill:woodcutting ignored by default |
Commands (permission 2): /ffitemweight defaults [page] lists items still on defaultWeight. /ffitemweight help.
Client config: ffitemweight-client.toml (tooltips, slots, HUD). Server config: ffitemweight-server.toml (calculation, nested inventories, tracking, capacity, effects).
Datapack makers
Path: data/<namespace>/item_weights/<name>.json
{
"comment": "optional",
"weights": [
{ "id": "mymod:widget", "weight": 2.5 },
{ "id": "mymod:.*_ore", "weight": 6.0, "regex": true },
{ "id": "mymod:boss_core", "weight": 50.0, "force": true }
]
}
| Field | Default | Meaning |
|---|---|---|
id |
required | Item id, or a Java regex on the full registry id when regex is true |
weight |
required | Unit weight (one item). Clamped by maxUnitWeight |
regex |
false |
Treat id as a regex |
force |
false |
Lock the base. Recipes cannot overwrite it |
Resolution order: forced exact, forced regex (HEAVIEST or LIGHTEST), non-forced exact, longest non-forced regex, recipes, then defaultWeight.
Use force: true for balance anchors and items with bad recipe graphs. Leave normal craft chains unforced so tools and armour can derive from ingredients.
Shipped defaults: data/ffitemweight/item_weights/default.json. Override the same exact id (optional force).
Recipe derivation (server calculation): multi-pass HEAVIEST or LIGHTEST, type modifiers, ignored types, and skip patterns for recycling. Repairs and dyes (result is also an ingredient) are skipped in code. Diamond to netherite smithing still applies unless the result is forced.
ignoredRecipeTypes = ["minecraft:smithing_trim", "sawmill:woodcutting", "mymod:assembler"]
containerContentModifiers = [".*:.*_shulker_box=0.5"]
Encumbrance bands: Name:maxTotal:#RRGGBB. Effects and attributes use the same names (Category=effect:amplifier;... and Category=attr:operation:amount;... with add / multiply_base / multiply_total).
If many items stay on default weight, add JSON bases and use /ffitemweight defaults. If a machine mod inflates materials, ignore its recipe types or force anchors.
Modding API
Package com.fyxe.ffitemweight.api. Prefer ItemWeightAPI over internal classes.
[[dependencies.yourmod]]
modId="ffitemweight"
type="optional"
versionRange="[0,)"
ordering="NONE"
side="BOTH"
ItemWeightAPI.getUnitWeight(item);
ItemWeightAPI.getWeight(stack); // count plus nested contents
ItemWeightAPI.getPlayerTotalWeight(player);
ItemWeightAPI.getPlayerEncumbrance(player);
ItemWeightAPI.isPlayerEncumbranceAtLeast(player, "Heavy Load");
ItemWeightAPI.invalidatePlayerCache(player);
ItemWeightAPI.getEquipmentCapacityBonus(stack);
EncumbranceChangedEvent fires on NeoForge.EVENT_BUS when the player's band name changes (not on first observation after join, not cancellable). Client HUD helpers live in com.fyxe.ffitemweight.api.client.ClientItemWeightAPI.
What's with the FF prefix?
It stands for Fyxe's Features! Its a clean way to easily find all of my mods when changing configs or creating packs. Mods that are a part of the "FF" system are usually smaller and unintrusive.
Feedback
If you have any ideas for improvements, questions, or concerns, I am open to communicating through email: FyxeINCFeedback@gmail.com


