Compatibility
Minecraft: Java Edition
Platforms
Supported environments
Links
Tags
Creators
Details
š About
Food API is a developer-focused library that removes the hardcoded limitations of Minecraft's vanilla hunger system. It exposes hunger capacity and drain speed as proper entity attributes, adds multi-row food bar rendering, and provides a clean provider-based system for replacing food icons ā all with optional compatibility for popular HUD mods.
⨠Features
ā¶ Dynamic hunger capacity ā max hunger is now an attribute, supports up to 2 rows (40 units).
ā¶ Configurable drain speed ā control how fast hunger depletes via a multiplier attribute.
ā¶ Multi-row food bar ā second row renders seamlessly above the first, fully synced with vanilla shake animation.
ā¶ Icon provider system ā replace any food icon (empty, half, full, hunger, overlay, saturation) per-player, per-row, per-slot with a simple registration API.
ā¶ Optional mod compat ā native support for Overflowing Bars and AppleSkin when present.
š¼ļø Screenshots
Vanilla rendering ā single row, standard icons
With Overflowing Bars ā row counter, overlay icons stacked on top
š¦ New Attributes
Two new player attributes are registered automatically when Food API is loaded:
| Attribute | ID | Default | Range | Description |
|---|---|---|---|---|
| Max Hunger | food_api:max_hunger |
20 |
1 ā 40 |
Maximum hunger capacity. 20 = one row, 40 = two rows. |
| Hunger Rate | food_api:hunger_rate |
1.0 |
0.0 ā 10.0 |
Hunger drain speed multiplier. 0 = no drain, 2 = twice as fast. |
Both attributes are synced to the client and can be modified via commands, other mods, or directly in code:
// Example: give a player double hunger capacity
player.getAttribute(AttributeRegistries.MAX_HUNGER)
.setBaseValue(40);
// Example: slow hunger drain to half speed
player.getAttribute(AttributeRegistries.HUNGER_RATE)
.setBaseValue(0.5);
š§ API Usage
Replacing food icons
Register a provider with an ID and priority. Higher priority wins. Return null to fall through to the next provider.
FoodIconRegistry.register(
ResourceLocation.fromNamespaceAndPath("mymod", "my_provider"),
10, // priority ā higher = checked first (vanilla = 0)
(player, iconIndex, row, type) -> {
// iconIndex: 0 = rightmost icon, 9 = leftmost
// row: 0 = bottom row, 1 = top row
return switch (type) {
case FULL -> ResourceLocation.fromNamespaceAndPath("mymod", "hud/my_food_full");
case HALF -> ResourceLocation.fromNamespaceAndPath("mymod", "hud/my_food_half");
case EMPTY -> ResourceLocation.fromNamespaceAndPath("mymod", "hud/my_food_empty");
default -> null; // let other providers or vanilla handle the rest
};
}
);
Icon types
| Type | Description |
|---|---|
EMPTY |
Background (empty slot) |
HALF |
Half-filled icon |
FULL |
Fully filled icon |
EMPTY_HUNGER |
Background during Hunger effect |
HALF_HUNGER |
Half icon during Hunger effect |
FULL_HUNGER |
Full icon during Hunger effect |
HALF_OVERLAY |
Half icon on top row (Overflowing Bars only) |
FULL_OVERLAY |
Full icon on top row (Overflowing Bars only) |
SATURATION |
Saturation overlay texture (AppleSkin only) |
Registering at the right time
Call FoodIconRegistry.register(...) during FMLClientSetupEvent or earlier:
@SubscribeEvent
public static void onClientSetup(FMLClientSetupEvent event) {
FoodIconRegistry.register(...);
}
š Optional Dependencies
Food API works standalone. These mods unlock extra features when present:
- Overflowing Bars ā enables row counter display and overlay icon rendering on the top row
- AppleSkin ā enables saturation overlay icon replacement via
FoodIconType.SATURATION
Made with š©· by ArimoV2


