Right-clicking a composter with wheat (or any compostable item) did
nothing: ComposterBlock.useItemOn wasn't implemented, only emptying a
full composter. Hoppers and droppers didn't see the composter as a
container either, and a hopper under one sucked items through it.
- useItemOn: below level 7 a compostable item adds a layer with the
chance of its compostable component's provider (evaluated in the
block-interaction loot context, drawing from the level random), then
level event 1500, the used statistic and one item consumed (none in
creative); level 7 still consumes the action; a full composter falls
through to useWithoutItem and empties.
- Level event 1500 (handleFill): composter.fill(_success) and ten
composter particles above the compost.
- getContainer: the input container takes one compostable item from
above (hoppers, droppers, crafters), the output container gives a
hopper below the bone meal of a full composter, emptying it twice as
vanilla's setChanged calls do (and losing it when the hopper is full);
levels 7 and other faces refuse.
tools/test_composter_parity.py runs right-clicks, hoppers above and
below, and droppers into composters at every level through
VanillaDispenserOracle (new "use" and "hopper" actions) and the game's
dispense fixture.
Fixes#70
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>