 9b22458f44
			
		
	
	9b22458f44
	
	
	
		
			
			Focus of the Update: Compatibility with Stardew Valley 1.6 Released on March 19th 2024 This includes randomization for pretty much all of the new content, including but not limited to - Raccoon Bundles - Booksanity - Skill Masteries - New Recipes, Craftables, Fish, Maps, Farm Type, Festivals and Quests This also includes a significant reorganisation of the code into "Content Packs", to allow for easier modularity of various game mechanics between the settings and the supported mods. This improves maintainability quite a bit. In addition to that, a few **very** requested new features have been introduced, although they weren't the focus of this update - Walnutsanity - Player Buffs - More customizability in settings, such as shorter special orders, ER without farmhouse - New Remixed Bundles
		
			
				
	
	
		
			61 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from functools import cached_property
 | |
| from typing import Union, List
 | |
| 
 | |
| from Utils import cache_self1
 | |
| from .base_logic import BaseLogic, BaseLogicMixin
 | |
| from .building_logic import BuildingLogicMixin
 | |
| from .has_logic import HasLogicMixin
 | |
| from .received_logic import ReceivedLogicMixin
 | |
| from .region_logic import RegionLogicMixin
 | |
| from ..locations import LocationTags, locations_by_tag
 | |
| from ..options import ExcludeGingerIsland, Shipsanity
 | |
| from ..options import SpecialOrderLocations
 | |
| from ..stardew_rule import StardewRule
 | |
| from ..strings.ap_names.event_names import Event
 | |
| from ..strings.building_names import Building
 | |
| 
 | |
| 
 | |
| class ShippingLogicMixin(BaseLogicMixin):
 | |
|     def __init__(self, *args, **kwargs):
 | |
|         super().__init__(*args, **kwargs)
 | |
|         self.shipping = ShippingLogic(*args, **kwargs)
 | |
| 
 | |
| 
 | |
| class ShippingLogic(BaseLogic[Union[ReceivedLogicMixin, ShippingLogicMixin, BuildingLogicMixin, RegionLogicMixin, HasLogicMixin]]):
 | |
| 
 | |
|     @cached_property
 | |
|     def can_use_shipping_bin(self) -> StardewRule:
 | |
|         return self.logic.building.has_building(Building.shipping_bin)
 | |
| 
 | |
|     @cache_self1
 | |
|     def can_ship(self, item: str) -> StardewRule:
 | |
|         return self.logic.received(Event.can_ship_items) & self.logic.has(item)
 | |
| 
 | |
|     def can_ship_everything(self) -> StardewRule:
 | |
|         shipsanity_prefix = "Shipsanity: "
 | |
|         all_items_to_ship = []
 | |
|         exclude_island = self.options.exclude_ginger_island == ExcludeGingerIsland.option_true
 | |
|         exclude_qi = not (self.options.special_order_locations & SpecialOrderLocations.value_qi)
 | |
|         mod_list = self.options.mods.value
 | |
|         for location in locations_by_tag[LocationTags.SHIPSANITY_FULL_SHIPMENT]:
 | |
|             if exclude_island and LocationTags.GINGER_ISLAND in location.tags:
 | |
|                 continue
 | |
|             if exclude_qi and LocationTags.REQUIRES_QI_ORDERS in location.tags:
 | |
|                 continue
 | |
|             if location.mod_name and location.mod_name not in mod_list:
 | |
|                 continue
 | |
|             all_items_to_ship.append(location.name[len(shipsanity_prefix):])
 | |
|         return self.logic.building.has_building(Building.shipping_bin) & self.logic.has_all(*all_items_to_ship)
 | |
| 
 | |
|     def can_ship_everything_in_slot(self, all_location_names_in_slot: List[str]) -> StardewRule:
 | |
|         if self.options.shipsanity == Shipsanity.option_none:
 | |
|             return self.can_ship_everything()
 | |
| 
 | |
|         rules = [self.logic.building.has_building(Building.shipping_bin)]
 | |
| 
 | |
|         for shipsanity_location in locations_by_tag[LocationTags.SHIPSANITY]:
 | |
|             if shipsanity_location.name not in all_location_names_in_slot:
 | |
|                 continue
 | |
|             rules.append(self.logic.region.can_reach_location(shipsanity_location.name))
 | |
|         return self.logic.and_(*rules)
 |