33from dataclasses import dataclass , field
44from typing import Dict , Iterable , Set , Any , Mapping , Type , Tuple , Union
55
6- from .feature import booksanity , cropsanity , fishsanity , friendsanity , skill_progression , tool_progression
6+ from .feature import booksanity , cropsanity , fishsanity , friendsanity , skill_progression , building_progression , tool_progression
7+ from ..data .building import Building
78from ..data .fish_data import FishItem
8- from ..data .game_item import GameItem , ItemSource , ItemTag
9+ from ..data .game_item import GameItem , Source , ItemTag
910from ..data .skill import Skill
1011from ..data .villagers_data import Villager
1112
@@ -20,16 +21,17 @@ class StardewContent:
2021 game_items : Dict [str , GameItem ] = field (default_factory = dict )
2122 fishes : Dict [str , FishItem ] = field (default_factory = dict )
2223 villagers : Dict [str , Villager ] = field (default_factory = dict )
24+ farm_buildings : Dict [str , Building ] = field (default_factory = dict )
2325 skills : Dict [str , Skill ] = field (default_factory = dict )
2426 quests : Dict [str , Any ] = field (default_factory = dict )
2527
26- def find_sources_of_type (self , types : Union [Type [ItemSource ], Tuple [Type [ItemSource ]]]) -> Iterable [ItemSource ]:
28+ def find_sources_of_type (self , types : Union [Type [Source ], Tuple [Type [Source ]]]) -> Iterable [Source ]:
2729 for item in self .game_items .values ():
2830 for source in item .sources :
2931 if isinstance (source , types ):
3032 yield source
3133
32- def source_item (self , item_name : str , * sources : ItemSource ):
34+ def source_item (self , item_name : str , * sources : Source ):
3335 item = self .game_items .setdefault (item_name , GameItem (item_name ))
3436 item .add_sources (sources )
3537
@@ -50,6 +52,7 @@ def find_tagged_items(self, tag: ItemTag) -> Iterable[GameItem]:
5052@dataclass (frozen = True )
5153class StardewFeatures :
5254 booksanity : booksanity .BooksanityFeature
55+ building_progression : building_progression .BuildingProgressionFeature
5356 cropsanity : cropsanity .CropsanityFeature
5457 fishsanity : fishsanity .FishsanityFeature
5558 friendsanity : friendsanity .FriendsanityFeature
@@ -70,13 +73,13 @@ class ContentPack:
7073 # def item_hook
7174 # ...
7275
73- harvest_sources : Mapping [str , Iterable [ItemSource ]] = field (default_factory = dict )
76+ harvest_sources : Mapping [str , Iterable [Source ]] = field (default_factory = dict )
7477 """Harvest sources contains both crops and forageables, but also fruits from trees, the cave farm and stuff harvested from tapping like maple syrup."""
7578
7679 def harvest_source_hook (self , content : StardewContent ):
7780 ...
7881
79- shop_sources : Mapping [str , Iterable [ItemSource ]] = field (default_factory = dict )
82+ shop_sources : Mapping [str , Iterable [Source ]] = field (default_factory = dict )
8083
8184 def shop_source_hook (self , content : StardewContent ):
8285 ...
@@ -86,12 +89,12 @@ def shop_source_hook(self, content: StardewContent):
8689 def fish_hook (self , content : StardewContent ):
8790 ...
8891
89- crafting_sources : Mapping [str , Iterable [ItemSource ]] = field (default_factory = dict )
92+ crafting_sources : Mapping [str , Iterable [Source ]] = field (default_factory = dict )
9093
9194 def crafting_hook (self , content : StardewContent ):
9295 ...
9396
94- artisan_good_sources : Mapping [str , Iterable [ItemSource ]] = field (default_factory = dict )
97+ artisan_good_sources : Mapping [str , Iterable [Source ]] = field (default_factory = dict )
9598
9699 def artisan_good_hook (self , content : StardewContent ):
97100 ...
@@ -101,6 +104,11 @@ def artisan_good_hook(self, content: StardewContent):
101104 def villager_hook (self , content : StardewContent ):
102105 ...
103106
107+ farm_buildings : Iterable [Building ] = ()
108+
109+ def farm_building_hook (self , content : StardewContent ):
110+ ...
111+
104112 skills : Iterable [Skill ] = ()
105113
106114 def skill_hook (self , content : StardewContent ):
0 commit comments