Skip to content

Conversation

@Bloo-dev
Copy link
Member

@Bloo-dev Bloo-dev commented Nov 8, 2025

Introduces the Lavish Livestock module which allows players to gain access to slightly larger versions of livestock via selective breeding.

How it works

When a player breeds one of the supported mobs (chickens, cows, mooshrooms, pigs, rabbits, sheep, and hoglins), there is a 5% chance for the baby to be one-size-up from one of the parents (the parent is picked at random).
Two size variations exist; +12.5% and +25%.

On death, these size variations drop more loot; up to 3×base loot for +12.5% and up to 5×base loot for +25%.

image Pigs of all sizes in a pen. image Chickens of all sizes in a pen.

TODO

  • Compatibility with Gemini (currently load order dependent) Should be done in a separate PR
  • Compatibility with Pig Tractors (larger pigs should til more tiles) Should be done in a separate PR

@Bloo-dev Bloo-dev added the submission Brand new community submitted module label Nov 8, 2025
@Bloo-dev Bloo-dev marked this pull request as draft November 8, 2025 23:57
@Bloo-dev
Copy link
Member Author

Bloo-dev commented Nov 9, 2025

After some back and forth I have discarded the plan to make this work with Gemini.

Gemini needs a more comprehensive update in a separate PR, see #1196.

@Bloo-dev Bloo-dev marked this pull request as ready for review November 9, 2025 21:36
@misode misode added the needs-testing Requires in-game testing label Nov 11, 2025
Copy link
Contributor

@runcows runcows left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm personally a bit hesitant and unconvinced about the use of templates here, as opposed to more traditional mcfunction methods or even just bolt (since I believe this is doable without separate function chains for each animal type).

I'm not necessarily asking for that to be changed though, since this works. And it can always be changed later :P

Here's a bunch of other review comments. Additionally, this has no guidebook entry right now, which probably should be added.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

init should not be in the templates, as this will put it under gm4_lavish_livestock:<animal>/init which is incorrect for a whole host of reasons and I'm actually not sure how/if it was running at all.

Comment on lines +10 to +11
execute unless score $parent_a gm4_lavish_livestock_size matches -2147483648..2147483647 run return run scoreboard players operation $parent_a gm4_lavish_livestock_size = @s gm4_lavish_livestock_size
execute unless score $parent_b gm4_lavish_livestock_size matches -2147483648..2147483647 run return run scoreboard players operation $parent_b gm4_lavish_livestock_size = @s gm4_lavish_livestock_size
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It might be more readable to initialize $parent_a and $parent_b to -1 as a default "uninitialized value" in revoke_advancement and test for that here, rather than testing for any score at all.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, resetting is worst than setting to a known "uninitialized value"

# run from gm4_lavish_livestock:{{ entity_id }}/find_marker

# cache parent size
scoreboard players reset $size gm4_lavish_livestock_size
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Resetting the size is unnecessary when assigning the value one command later.


### Features
- Breeding livestock may result in offspring that is abnormally large
- Larger individuals drop more loot
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it would be more clear to swap "individuals" with "livestock" or "animals". While it's unlikely to cause much confusion, I still think it would be better to be more specific.

@@ -0,0 +1,15 @@
{
"criteria": {
"breed_pigs": {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"breed_pigs": {
"breed_livestock": {

Copy link
Member

@BPR02 BPR02 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Needs some changes as mentioned by @runcows. But looks pretty good. Could use a guidebook entry.

def beet_default(ctx: Context):

# load csv
csv = CSV.from_file(Path('gm4_lavish_livestock', 'raw', 'livestock.csv'))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we need a CSV for this? Why not a json file or even just a list in this python script

# prepare list of supported entities
entity_ids = [e.get('entity_id', "").removeprefix('minecraft:').strip() for e in csv]

# for each wood type in the vanilla doors tag, render a copy of the "templates" directory with the appropriate wood-type
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

comment is copied from double doors

Comment on lines +10 to +11
execute unless score $parent_a gm4_lavish_livestock_size matches -2147483648..2147483647 run return run scoreboard players operation $parent_a gm4_lavish_livestock_size = @s gm4_lavish_livestock_size
execute unless score $parent_b gm4_lavish_livestock_size matches -2147483648..2147483647 run return run scoreboard players operation $parent_b gm4_lavish_livestock_size = @s gm4_lavish_livestock_size
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, resetting is worst than setting to a known "uninitialized value"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-testing Requires in-game testing submission Brand new community submitted module

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants