Skip to content

feat: grind sugar cane into sugar, ladle beetroot soup as Borscht, convert sweet berries - #119

Merged
JustinasLa merged 1 commit into
mainfrom
feat/berries-cane-beet
Nov 1, 2026
Merged

JustinasLa merged 1 commit into
mainfrom
feat/berries-cane-beet

Conversation

@JustinasLa

Copy link
Copy Markdown
Contributor

Gives sweet berries, sugar cane and beetroot (crops.yml crops with few or no Cooking uses) real uses.

What was already there

  • Beetroot already turns into Cooking food on pickup, gets cut on the cutting board (vegetable_cut), boils in the pot and mashes into soup. A pot of it was ladled as "Beetroot Soup" by the generic {fillers}Soup name. This PR only gives it a proper dish name.
  • Vanilla sugar converts on pickup to sweetener(type=sweetener_1;origin=Sugar), with a pickup quality roll. Milled sugar is that same food.
  • Jam comes from Dev's juicer (Dev-only config: juicer station, press_jam takes any fruit_1/fruit_2). Once sweet berries are fruit_1, the juicer already presses them into jam. Dev only needs the jam's look and name (applied by the Dev script, not part of this repo).

Changes

Milling stone, several recipes per stone. Before, MillingRecipeRegistry kept one recipe per furniture, and the handler hard-coded wheat in the loading message, the display, the refund and the origin.

  • The first recipe whose input matches the held stack loads. Its id is saved on the stone (milling.recipe), so the right result and refund survive reloads. Stones loaded before this change fall back to the stone's first recipe (flour).
  • New optional keys: category, origin, output-amount, input-name, input-display, output-display, refund. Every default keeps flour exactly as it was, and the existing tests pass unchanged.
  • New recipe sugar: 8 v.sugar_cane grind into 8 sugar (1:1, as at the crafting table). Cane stays vanilla on pickup because it's also used for paper. A broken loaded stone gives the cane back. Shows a new sugar_pile heap.
  • This also covers the chocolate thread's cocoa powder: it only needs a recipe entry.

Pot kinds. pot.yml gets kinds:, using SaladKind's rules, with each boiled piece's category as its layer. Seasonings and add-ons (salt, pepper, spices) don't count. A matching kind sets the soup's origin, and its name replaces "{fillers}Soup" after the colour and prefixes. Shipped kind: Borscht (mostly: Beetroot, so at least half the pieces are beetroot). Other threads (pumpkin soup) only need a config entry.

Sweet berries. Added v.sweet_berries → fruit(type=fruit_1;origin=Sweet Berries) on pickup, plus a sweet_berries model with a mouldy icon (APPLE, so a rotten one can't be planted). That makes them a salad fruit, a pie filling (the existing Mixed Berry kind already lists them) and juicer jam. Jam sandwiches name it "Sweet Berry Jam".

Assets come from tf-minecraft/scratch/new-foods/berries-cane-beet/bin/gen.py: mouldy berries, Sweet Berry Jam icons (Dev's cherry jam jar recoloured with vanilla sweet-berry colours) and the sugar heap. The juicer piles, pressed jam and salad heap the same script makes go to Dev only, alongside the Dev-only juicer and salad bowl items. Offline preview: bin/preview.js.

Tests

mvn -o -B clean verify: 1445 tests, JaCoCo 100% line coverage met. New tests cover:

  • the sugar recipe next to flour on one stone (load, count message, display after a lost display, take 8, refund, missing refund item)
  • key defaults and the saved-recipe fallback
  • Borscht and non-Borscht soups, salt and spice not counting, a kind without a name
  • loading the shipped pot.yml and milling-recipes.yml

🤖 Generated with Claude Code

…nvert sweet berries

- Milling stone: milling-recipes.yml can hold several recipes per stone. The first
  whose input matches the held stack loads, and its id is saved on the stone
  (`milling.recipe`; older stones fall back to the first recipe). New optional keys:
  category, origin, output-amount, input-name, input-display, output-display, refund.
  Defaults keep flour exactly as it was.
- Sugar: 8 sugar cane grind into 8 sugar (sweetener_1, origin Sugar, the same food
  vanilla sugar becomes on pickup), with a pickup quality roll as for vanilla sugar.
  A broken loaded stone gives the cane back. New sugar_pile heap model.
- Pot kinds: pot.yml `kinds` (SaladKind rules, a piece's category as its layer;
  seasonings and add-ons don't count) give a ladled soup its origin and name.
  Borscht = at least half beetroot pieces.
- Sweet berries: pickup conversion to fruit_1 (origin Sweet Berries), model with a
  mouldy icon, "Sweet Berry Jam" in jam sandwiches; IA jam icons for Dev's juicer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Nov 1, 2026

Copy link
Copy Markdown

Important

  • Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: f13500e0-76d4-43d7-915b-17ca86a76f38
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@github-actions github-actions Bot added the size:XXL 1,000+ effective changed lines (tests excluded in mixed PRs). label Nov 1, 2026
@JustinasLa
JustinasLa merged commit 5b2afa7 into main Nov 1, 2026
3 checks passed
@JustinasLa
JustinasLa deleted the feat/berries-cane-beet branch November 1, 2026 18:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL 1,000+ effective changed lines (tests excluded in mixed PRs).

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant