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 
6+ from  .feature  import  booksanity , cropsanity , fishsanity , friendsanity , skill_progression , building_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 
@@ -69,13 +72,13 @@ class ContentPack:
6972    # def item_hook 
7073    # ... 
7174
72-     harvest_sources : Mapping [str , Iterable [ItemSource ]] =  field (default_factory = dict )
75+     harvest_sources : Mapping [str , Iterable [Source ]] =  field (default_factory = dict )
7376    """Harvest sources contains both crops and forageables, but also fruits from trees, the cave farm and stuff harvested from tapping like maple syrup.""" 
7477
7578    def  harvest_source_hook (self , content : StardewContent ):
7679        ...
7780
78-     shop_sources : Mapping [str , Iterable [ItemSource ]] =  field (default_factory = dict )
81+     shop_sources : Mapping [str , Iterable [Source ]] =  field (default_factory = dict )
7982
8083    def  shop_source_hook (self , content : StardewContent ):
8184        ...
@@ -85,12 +88,12 @@ def shop_source_hook(self, content: StardewContent):
8588    def  fish_hook (self , content : StardewContent ):
8689        ...
8790
88-     crafting_sources : Mapping [str , Iterable [ItemSource ]] =  field (default_factory = dict )
91+     crafting_sources : Mapping [str , Iterable [Source ]] =  field (default_factory = dict )
8992
9093    def  crafting_hook (self , content : StardewContent ):
9194        ...
9295
93-     artisan_good_sources : Mapping [str , Iterable [ItemSource ]] =  field (default_factory = dict )
96+     artisan_good_sources : Mapping [str , Iterable [Source ]] =  field (default_factory = dict )
9497
9598    def  artisan_good_hook (self , content : StardewContent ):
9699        ...
@@ -100,6 +103,11 @@ def artisan_good_hook(self, content: StardewContent):
100103    def  villager_hook (self , content : StardewContent ):
101104        ...
102105
106+     farm_buildings : Iterable [Building ] =  ()
107+ 
108+     def  farm_building_hook (self , content : StardewContent ):
109+         ...
110+ 
103111    skills : Iterable [Skill ] =  ()
104112
105113    def  skill_hook (self , content : StardewContent ):
0 commit comments