promotional bannermobile promotional banner

Spice of Life: Classic Edition

Eating the same food will cause the recovery level to decrease.
Back to Files

SoL:Classic_v2.13 (Fabric)

File namespiceoflife_classic-fabric-2.13.jar
Uploader
leopokoleopoko
Uploaded
Sep 7, 2026
Downloads
69
Size
903.6 KB
Mod Loaders
Fabric
File ID
8832189
Type
R
Release
Supported game versions
  • 1.20.1

Curse Maven Snippet

Fabric

modImplementation "curse.maven:foodvariations-1109288:8832189"

Learn more about Curse Maven

What's new

Added

  • Added Chinese (zh_cn) localization. Thanks to @pyf6trb (#53).
  • Added a basketBlacklist config option listing food items that cannot be put into the Basket or the Wicker Basket. Items already inside a basket are never deleted — they can still be taken out, and the Wicker Basket simply skips them when picking the most nutritious food to eat. This is separate from foodBlacklist, which excludes items from decay tracking. Requested in #52.

Changed

  • Food history now caches per-item consumption counts in a Map<Item, Integer> alongside the ItemStack queue, so countFoodEaten() (used by the long-term decay calculation) is O(1) instead of scanning the whole history. Thanks to @DaPlumer (#55).

Fixed

  • Cake now loses hunger recovery like any other food. CakeBlock.eat() calls FoodData.eat(int, float) directly instead of going through Player.eat(Level, ItemStack), so the PlayerMixin redirect never fired and eating cake was neither decayed nor recorded in the food history. Added CakeBlockMixin on both platforms. Cake is the only vanilla food block that takes this path — candle cakes go through the same CakeBlock.eat(). Reported in #3.
  • Fixed a NullPointerException in FoodEventHandlerForge.countFoodEatenRecent() that dereferenced .consumedItems before the null check. Running /resetfoodhistory removes the map entry without re-syncing, so the next meal crashed on Forge.
  • Restored the defensive copy in FoodHistoryComponentFabric.setFood() and added a self-assignment guard. Without it, calling setFood() with the component's own history would clear() it and wipe the player's food history.
  • FoodHistory no longer throws IllegalStateException when the queue and the count cache disagree. It now logs the inconsistency and rebuilds the cache instead of crashing inside Player.eat().
  • Fixed FoodHistory.toString() using the %b format specifier, which printed true instead of the actual contents in diagnostic logs.
  • Fixed a NullPointerException in the Fabric config loader when an array key is missing from an existing solclassic-server.toml. TomlTable#getArray returns null for an absent key, and the previous code called .toList() on it before the null check, so adding any new array key would have broken every existing config file on load.

This mod has no additional files