Skip to content

Commit

Permalink
wild grapes, cap impl for wine bottle contents, changelog
Browse files Browse the repository at this point in the history
  • Loading branch information
eerussianguy committed Jun 21, 2024
1 parent 85fa43b commit f0eb362
Show file tree
Hide file tree
Showing 52 changed files with 544 additions and 48 deletions.
44 changes: 35 additions & 9 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,37 @@
This build fixes a crash bug in the previous build. The previous changelog is reprinted here for your reference.
This update brings a way-too-fully-featured winemaking system to firmalife! So big I didn't have time to write field guide docs for it! Enjoy discovering the new world of wine. The long wait for this update also means that it comes with all the other bugfixes and tweaks that I usually release more regularly in a complete package.

### Changes
### Winemaking Overview

- Allow placing cheese wheels on barrel racks. The cheese model and texture is now smaller to allow this.
- Updated several food and item textures.
- Fixed trapdoor loot tables again.
- Numerous fixes to recipes, including making pasta recipes work.
- Added some tooltips to Jade and JEI integration for Firmalife pot recipes.
- Fix pies and pumpkin pies again. You should be getting the pan back now.
- This update requires the latest TFC Version (v3.2.2)
- Added red and white grape plants. They can be found in the wild looking like berry bushes.
- Grape trellises are formed from grape trellis posts stacked two high. Right click these with jute fiber to string rope between them.
- Click a jute string that is above a dirt-based block to plant a grape plant.
- The grape plant will grow over time over the trellis and then that part can be harvested.
- Grape plants take into account the characteristics of the surrounding environment when made into wine.
- Grapes can be grown in a greenhouse on trellises.
- Grapes can be stomped on in a stomping barrel, fermented in a barrel, and pressed in a barrel press.
- Red grapes = red wine, White grapes = white wine, white grapes + at least one red = Rose, White wine + sugar = dessert wine
- Wine bottles are made of non-silica glass. Wine glasses are made of silica glass.
- You need corks. You can also make bottle labels if you wish.
- Wine begins aging as soon as it is bottled from the barrel press until the cork is popped off with a knife.
- Wine can be stored on wine shelves.

### Beehive Update
- Allow insert/extract without using the GUI
- Completely revamped the GUI to look prettier.
- There are now barrel-like slots in the beehive that can be used to extract honey without leaving the GUI.
- Improved hopper interactivity of the beehive.
- Reduced clutter in jade
- Replaced bee particles with entities

### Other Features
- Added kegs, 2x2x2 barrels that store loads of liquid and items. And also look cool.
- Allow gui-less insert and extract for beehives
- Allow extracting logs from bottom ovens
- Reduced chromite rarity again.

### Fixes
- Fix missing slab/stair/wall tags for rustic and tile blocks, and metal blocks
- Change bee temperature translation key
- Require jar with lid for the Vat
- Run server self tests in dev
- Fix ovens not being extinguishable
9 changes: 9 additions & 0 deletions resources/assets.py
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,15 @@ def generate(rm: ResourceManager):
rm.block_model('grape_fluff_fruiting_red_%s' % i, textures={'all': 'firmalife:block/crop/grape_leaves_red'}, parent='tfc:block/groundcover/fallen_leaves_height%s' % str(i * 2))
rm.block_model('grape_fluff_fruiting_white_%s' % i, textures={'all': 'firmalife:block/crop/grape_leaves_white'}, parent='tfc:block/groundcover/fallen_leaves_height%s' % str(i * 2))

rm.block_model('plant/wild_grapes_dead', parent='tfc:block/plant/stationary_bush_1', textures={'bush': 'firmalife:block/crop/grape_leaves_dead'})
for color in ('red', 'white'):
rm.blockstate('plant/wild_%s_grapes' % color, variants={
'mature=false': {'model': 'firmalife:block/plant/wild_grapes_dead'},
'mature=true': {'model': 'firmalife:block/plant/wild_%s_grapes' % color},
}).with_lang(lang('wild %s grapes', color)).with_tag('tfc:mineable_with_sharp_tool').with_block_loot('1-3 firmalife:seeds/%s_grape' % color, {'name': 'firmalife:food/%s_grapes' % color, 'conditions': loot_tables.block_state_property('firmalife:plant/wild_%s_grapes[mature=true]' % color)})
rm.item_model('plant/wild_%s_grapes' % color, parent='firmalife:block/plant/wild_%s_grapes' % color, no_textures=True)
rm.block_model('plant/wild_%s_grapes' % color, parent='tfc:block/plant/stationary_bush_2', textures={'bush': 'firmalife:block/crop/grape_leaves_%s' % color})

rm.blockstate_multipart('grape_trellis_post',
({'axis': 'x'}, {'model': 'firmalife:block/grape_trellis'}),
({'axis': 'z'}, {'model': 'firmalife:block/grape_trellis', 'y': 90}),
Expand Down
4 changes: 4 additions & 0 deletions resources/generate_book.py
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,10 @@ def make_book(rm: ResourceManager, i18n: I18n, local_instance: bool = False, rev
text('To start chocolate processing, cocoa beans must first be $(thing)roasted$() in an $(l:firmalife/ovens)Oven$() to make $(thing)Roasted Cocoa Beans$(). Then, craft the roasted beans with a $(thing)Knife$() to split the beans into $(thing)Cocoa Powder$() and $(thing)Cocoa Powder$().'),
text('The $(l:firmalife/mixing_bowl)Mixing Bowl$() is used to mix cocoa powder, butter, and sweetener (sugar or honey) to make $(thing)Chocolate Blends$(). The ratio of cocoa butter to powder determines what comes out:$(br)$(li)1 Powder, 1 Butter, 1 Sweetener: Milk Chocolate$()$(li)2 Powder, 1 Sweetener: Dark Chocolate$()$(li)2 Butter, 1 Sweetener: White Chocolate$()'),
drying_recipe('firmalife:drying/dark_chocolate', 'Finally, chocolate is dried on a $(l:firmalife/drying)Drying Mat$() to make $(thing)Chocolate$().')
)),
entry('wine', 'Winemaking', 'firmalife:textures/item/food/white_grapes', pages=(
text('This section will be completed in the next version pending more field guide rewrites. In the meantime please use JEI.'),
empty_last_page(),
))
))

Expand Down
4 changes: 3 additions & 1 deletion resources/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -172,5 +172,7 @@
"$(thing)Chocolate-making$() takes a few processing steps, for not much of a reward. It's important to remember, when playing Firmalife, that being a chocolatier is for your personal enjoyment and pleasure, rather than for trying to extract maximum value from any given input.": "$(thing)Chocolate-making$() takes a few processing steps, for not much of a reward. It's important to remember, when playing Firmalife, that being a chocolatier is for your personal enjoyment and pleasure, rather than for trying to extract maximum value from any given input.",
"To start chocolate processing, cocoa beans must first be $(thing)roasted$() in an $(l:firmalife/ovens)Oven$() to make $(thing)Roasted Cocoa Beans$(). Then, craft the roasted beans with a $(thing)Knife$() to split the beans into $(thing)Cocoa Powder$() and $(thing)Cocoa Powder$().": "To start chocolate processing, cocoa beans must first be $(thing)roasted$() in an $(l:firmalife/ovens)Oven$() to make $(thing)Roasted Cocoa Beans$(). Then, craft the roasted beans with a $(thing)Knife$() to split the beans into $(thing)Cocoa Powder$() and $(thing)Cocoa Powder$().",
"The $(l:firmalife/mixing_bowl)Mixing Bowl$() is used to mix cocoa powder, butter, and sweetener (sugar or honey) to make $(thing)Chocolate Blends$(). The ratio of cocoa butter to powder determines what comes out:$(br)$(li)1 Powder, 1 Butter, 1 Sweetener: Milk Chocolate$()$(li)2 Powder, 1 Sweetener: Dark Chocolate$()$(li)2 Butter, 1 Sweetener: White Chocolate$()": "The $(l:firmalife/mixing_bowl)Mixing Bowl$() is used to mix cocoa powder, butter, and sweetener (sugar or honey) to make $(thing)Chocolate Blends$(). The ratio of cocoa butter to powder determines what comes out:$(br)$(li)1 Powder, 1 Butter, 1 Sweetener: Milk Chocolate$()$(li)2 Powder, 1 Sweetener: Dark Chocolate$()$(li)2 Butter, 1 Sweetener: White Chocolate$()",
"Finally, chocolate is dried on a $(l:firmalife/drying)Drying Mat$() to make $(thing)Chocolate$().": "Finally, chocolate is dried on a $(l:firmalife/drying)Drying Mat$() to make $(thing)Chocolate$()."
"Finally, chocolate is dried on a $(l:firmalife/drying)Drying Mat$() to make $(thing)Chocolate$().": "Finally, chocolate is dried on a $(l:firmalife/drying)Drying Mat$() to make $(thing)Chocolate$().",
"Winemaking": "Winemaking",
"This section will be completed in the next version pending more field guide rewrites. In the meantime please use JEI.": "This section will be completed in the next version pending more field guide rewrites. In the meantime please use JEI."
}
4 changes: 3 additions & 1 deletion resources/lang/ja_jp.json
Original file line number Diff line number Diff line change
Expand Up @@ -172,5 +172,7 @@
"$(thing)Chocolate-making$() takes a few processing steps, for not much of a reward. It's important to remember, when playing Firmalife, that being a chocolatier is for your personal enjoyment and pleasure, rather than for trying to extract maximum value from any given input.": "$(thing)チョコレート$()作りには、大した報酬もないのに、いくつかの加工工程が必要です。$(br2)Firmalifeをプレイする上で重要なことは、ショコラティエになることは個人的な楽しみや喜びのためであり、与えられた入力から最大限の価値を引き出そうとするためではないということです。",
"To start chocolate processing, cocoa beans must first be $(thing)roasted$() in an $(l:firmalife/ovens)Oven$() to make $(thing)Roasted Cocoa Beans$(). Then, craft the roasted beans with a $(thing)Knife$() to split the beans into $(thing)Cocoa Powder$() and $(thing)Cocoa Powder$().": "チョコレート加工を始めるには、まずカカオ豆を$(l:tfc:firmalife/ovens)オーブン$()で$(thing)焙煎$()し、$(thing)焙煎カカオ豆$()を作る必要があります。$(br2)その後、焙煎した豆を$(thing)ナイフ$()で削り、$(thing)ココアパウダー$()と$(thing)ココアバター$()に分けられます。",
"The $(l:firmalife/mixing_bowl)Mixing Bowl$() is used to mix cocoa powder, butter, and sweetener (sugar or honey) to make $(thing)Chocolate Blends$(). The ratio of cocoa butter to powder determines what comes out:$(br)$(li)1 Powder, 1 Butter, 1 Sweetener: Milk Chocolate$()$(li)2 Powder, 1 Sweetener: Dark Chocolate$()$(li)2 Butter, 1 Sweetener: White Chocolate$()": "$(l:tfc:firmalife/mixing_bowl)ミキシングボウル$()は、ココアパウダー、バター、甘味料(砂糖または蜂蜜)を混ぜて$(thing)チョコレートブレンド$()を作るのに使います。$(br)ココアバターとパウダーの割合が、出来上がりを左右します:$(br)$(li)パウダー1個、バター1個、甘味料1個:ミルクチョコレート$()$(li)パウダー2個、甘味料1: ダークチョコレート$()$(li)パウダー2個、甘味料1: ホワイトチョコレート$()",
"Finally, chocolate is dried on a $(l:firmalife/drying)Drying Mat$() to make $(thing)Chocolate$().": "最後にチョコレートを$(l:tfc:firmalife/drying)乾燥マット$()の上で乾燥させ、$(thing)チョコレート$()が完成します。"
"Finally, chocolate is dried on a $(l:firmalife/drying)Drying Mat$() to make $(thing)Chocolate$().": "最後にチョコレートを$(l:tfc:firmalife/drying)乾燥マット$()の上で乾燥させ、$(thing)チョコレート$()が完成します。",
"Winemaking": "Winemaking",
"This section will be completed in the next version pending more field guide rewrites. In the meantime please use JEI.": "This section will be completed in the next version pending more field guide rewrites. In the meantime please use JEI."
}
4 changes: 3 additions & 1 deletion resources/lang/zh_cn.json
Original file line number Diff line number Diff line change
Expand Up @@ -172,5 +172,7 @@
"$(thing)Chocolate-making$() takes a few processing steps, for not much of a reward. It's important to remember, when playing Firmalife, that being a chocolatier is for your personal enjoyment and pleasure, rather than for trying to extract maximum value from any given input.": "$(thing)巧克力制作$()需要经过一些步骤, 对于它的成效来说不算特别麻烦. 在游玩这个MOD时,重要的是要记住做一名巧克力师是为了给你成就感,而不是试图从任何给定的投入中获得最大价值.",
"To start chocolate processing, cocoa beans must first be $(thing)roasted$() in an $(l:firmalife/ovens)Oven$() to make $(thing)Roasted Cocoa Beans$(). Then, craft the roasted beans with a $(thing)Knife$() to split the beans into $(thing)Cocoa Powder$() and $(thing)Cocoa Powder$().": "要开始巧克力加工,可可豆必须首先 $(thing)烘焙$() 在一个 $(l:tfc:firmalife/ovens)烤箱$() 中以制作 $(thing)烤可可豆$(). 然后,将烤可可豆与 $(thing)刀$() 合成以切分这些豆子,使他们变成 $(thing)可可粉$()与 $(thing)可可粉$().",
"The $(l:firmalife/mixing_bowl)Mixing Bowl$() is used to mix cocoa powder, butter, and sweetener (sugar or honey) to make $(thing)Chocolate Blends$(). The ratio of cocoa butter to powder determines what comes out:$(br)$(li)1 Powder, 1 Butter, 1 Sweetener: Milk Chocolate$()$(li)2 Powder, 1 Sweetener: Dark Chocolate$()$(li)2 Butter, 1 Sweetener: White Chocolate$()": " $(l:tfc:firmalife/mixing_bowl)搅拌碗$() 用于混合可可粉、黄油和甜味剂(糖或蜂蜜)以制作 $(thing)巧克力混合物$(). 可可脂与可可粉的比例决定了你做出来的东西是什么样的:$(br)$(li)1 面粉, 1 黄油, 1 甜味剂: 牛奶巧克力$()$(li)2 面粉, 1 甜味剂: 黑巧克力$()$(li)2 黄油, 1 甜味剂: 白巧克力$()",
"Finally, chocolate is dried on a $(l:firmalife/drying)Drying Mat$() to make $(thing)Chocolate$().": "最后,巧克力能在一个 $(l:tfc:firmalife/drying)干燥垫$() 上被晒干以最后制成 $(thing)巧克力$()."
"Finally, chocolate is dried on a $(l:firmalife/drying)Drying Mat$() to make $(thing)Chocolate$().": "最后,巧克力能在一个 $(l:tfc:firmalife/drying)干燥垫$() 上被晒干以最后制成 $(thing)巧克力$().",
"Winemaking": "Winemaking",
"This section will be completed in the next version pending more field guide rewrites. In the meantime please use JEI.": "This section will be completed in the next version pending more field guide rewrites. In the meantime please use JEI."
}
4 changes: 3 additions & 1 deletion resources/lang/zh_tw.json
Original file line number Diff line number Diff line change
Expand Up @@ -172,5 +172,7 @@
"$(thing)Chocolate-making$() takes a few processing steps, for not much of a reward. It's important to remember, when playing Firmalife, that being a chocolatier is for your personal enjoyment and pleasure, rather than for trying to extract maximum value from any given input.": "$(thing)Chocolate-making$() takes a few processing steps, for not much of a reward. It's important to remember, when playing Firmalife, that being a chocolatier is for your personal enjoyment and pleasure, rather than for trying to extract maximum value from any given input.",
"To start chocolate processing, cocoa beans must first be $(thing)roasted$() in an $(l:firmalife/ovens)Oven$() to make $(thing)Roasted Cocoa Beans$(). Then, craft the roasted beans with a $(thing)Knife$() to split the beans into $(thing)Cocoa Powder$() and $(thing)Cocoa Powder$().": "To start chocolate processing, cocoa beans must first be $(thing)roasted$() in an $(l:tfc:firmalife/ovens)Oven$() to make $(thing)Roasted Cocoa Beans$(). Then, craft the roasted beans with a $(thing)Knife$() to split the beans into $(thing)Cocoa Powder$() and $(thing)Cocoa Powder$().",
"The $(l:firmalife/mixing_bowl)Mixing Bowl$() is used to mix cocoa powder, butter, and sweetener (sugar or honey) to make $(thing)Chocolate Blends$(). The ratio of cocoa butter to powder determines what comes out:$(br)$(li)1 Powder, 1 Butter, 1 Sweetener: Milk Chocolate$()$(li)2 Powder, 1 Sweetener: Dark Chocolate$()$(li)2 Butter, 1 Sweetener: White Chocolate$()": "The $(l:tfc:firmalife/mixing_bowl)Mixing Bowl$() is used to mix cocoa powder, butter, and sweetener (sugar or honey) to make $(thing)Chocolate Blends$(). The ratio of cocoa butter to powder determines what comes out:$(br)$(li)1 Powder, 1 Butter, 1 Sweetener: Milk Chocolate$()$(li)2 Powder, 1 Sweetener: Dark Chocolate$()$(li)2 Butter, 1 Sweetener: White Chocolate$()",
"Finally, chocolate is dried on a $(l:firmalife/drying)Drying Mat$() to make $(thing)Chocolate$().": "Finally, chocolate is dried on a $(l:tfc:firmalife/drying)Drying Mat$() to make $(thing)Chocolate$()."
"Finally, chocolate is dried on a $(l:firmalife/drying)Drying Mat$() to make $(thing)Chocolate$().": "Finally, chocolate is dried on a $(l:tfc:firmalife/drying)Drying Mat$() to make $(thing)Chocolate$().",
"Winemaking": "Winemaking",
"This section will be completed in the next version pending more field guide rewrites. In the meantime please use JEI.": "This section will be completed in the next version pending more field guide rewrites. In the meantime please use JEI."
}
3 changes: 2 additions & 1 deletion resources/tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,10 +73,11 @@ def generate(rm: ResourceManager):
rm.entity_tag('drops_rennet', 'tfc:goat', 'tfc:yak')
rm.entity_tag('drops_three_rennet', 'tfc:cow', 'tfc:sheep', 'tfc:musk_ox')

rm.fluid_tag('tfc:alcohols', 'firmalife:pina_colada', 'firmalife:mead', *['firmalife:%s_wine' % r for r in WINES])
rm.fluid_tag('tfc:alcohols', 'firmalife:pina_colada', 'firmalife:mead', '#firmalife:wine')
rm.fluid_tag('tfc:milks', 'firmalife:yak_milk', 'firmalife:goat_milk', 'firmalife:coconut_milk')
rm.fluid_tag('tfc:drinkables', 'firmalife:chocolate')
rm.fluid_tag('tfc:ingredients', *['firmalife:%s' % fluid for fluid in EXTRA_FLUIDS])
rm.fluid_tag('wine', *['firmalife:%s_wine' % r for r in WINES])
rm.fluid_tag('usable_in_mixing_bowl', '#tfc:usable_in_pot')
rm.fluid_tag('usable_in_hollow_shell', '#tfc:usable_in_wooden_bucket')
rm.fluid_tag('usable_in_wine_glass', '#tfc:drinkables')
Expand Down
8 changes: 6 additions & 2 deletions resources/world_gen.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,8 @@ def config(self) -> dict[str, Any]:
return cfg

ORE_VEINS: Dict[str, Vein] = {
'normal_chromite': Vein.new('chromite', 24, 20, 40, 130, 0.25, ('igneous_extrusive', 'metamorphic'), grade=POOR, deposits=True, indicator=14),
'deep_chromite': Vein.new('chromite', 45, 45, -80, 20, 0.6, ('igneous_intrusive', 'metamorphic'), grade=RICH, indicator=0, deep_indicator=(1, 4)),
'normal_chromite': Vein.new('chromite', 40, 20, 40, 130, 0.25, ('igneous_extrusive', 'metamorphic'), grade=POOR, deposits=True, indicator=14),
'deep_chromite': Vein.new('chromite', 60, 45, -80, 20, 0.6, ('igneous_intrusive', 'metamorphic'), grade=RICH, indicator=0, deep_indicator=(1, 4)),
}

def generate(rm: ResourceManager):
Expand Down Expand Up @@ -123,6 +123,10 @@ def generate(rm: ResourceManager):
configured_patch_feature(rm, 'hollow_shell', patch_config('firmalife:hollow_shell[fluid=empty]', 1, 15, 5, 'salt'), decorate_chance(20), decorate_square(), decorate_climate(-30, 20, 150, 500))
placed_feature_tag(rm, 'tfc:feature/shore_decorations', 'firmalife:hollow_shell')

configured_patch_feature(rm, 'wild_red_grapes', patch_config('firmalife:plant/wild_red_grapes', 1, 15, 5), decorate_chance(100), decorate_square(), decorate_climate(0, 30, 125, 500))
configured_patch_feature(rm, 'wild_white_grapes', patch_config('firmalife:plant/wild_white_grapes', 1, 15, 5), decorate_chance(100), decorate_square(), decorate_climate(0, 30, 125, 500))
placed_feature_tag(rm, 'tfc:feature/land_plants', 'firmalife:wild_red_grapes', 'firmalife:wild_white_grapes')

for berry, data in STILL_BUSHES.items():
bush_block = 'firmalife:plant/%s_bush[lifecycle=healthy,stage=0]' % berry
configured_patch_feature(rm, ('plant', berry + '_bush'), patch_config(bush_block, 1, 4, 4, False), decorate_climate(data[2], data[3], data[0], data[1], min_forest='sparse'), decorate_square(), decorate_chance(30), biome_check=False)
Expand Down
Loading

0 comments on commit f0eb362

Please sign in to comment.