mirror of
				https://github.com/MarioSpore/Grinch-AP.git
				synced 2025-10-21 20:21:32 -06:00 
			
		
		
		
	Minecraft updates (#13)
* Minecraft locations, items, and generation without logic * added id lookup for minecraft * typing import fix in minecraft/Items.py * fix 2 * implementing Minecraft options and hard/postgame advancement exclusion * first logic pass (75/80) * logic pass 2 and proper completion conditions * added insane difficulty pool, modified method of excluding item pools for easier extension * bump network_data_package version * minecraft testing framework * switch Ancient Debris to Netherite Scrap to avoid advancement triggering on receiving that item * Testing now functions, split tests up by advancement pane, added some story tests * Newer testing framework: every advancement gets its own function, for ease of testing * fixed logic for The End... Again... * changed option names to "include_hard_advancements" etc. * village/pillager-related advancements now require can_adventure: weapon + food * a few minecraft tests * rename "Flint & Steel" to "Flint and Steel" for parity with in-game name * additional MC tests * more tests, mostly nether-related tests * more tests, removed anvil path for Two Birds One Arrow * include Minecraft slot data, and a world seed for each Minecraft player slot * Added new items: ender pearls, lapis, porkchops * All remaining Minecraft tests * formatting of Minecraft tests and logic for better readability * require Wither kill for Monsters Hunted * properly removed 8 Emeralds item from item pool * enchanting required for wither; fishing rod required for water breathing; water breathing required for elder guardian kill * Added 12 new advancements (ported from old achievement system) * renamed "On a Rail" for consistency with modern advancements * tests for the new advancements * moved slot_data generation for minecraft into worlds/minecraft/__init__.py, added logic_version to slot_data * output minecraft options in the spoiler log * modified advancement goal values for new advancements * make non-native Minecraft items appear as Shovel in ALttP, and unknown-game items as Power Stars * fixed glowstone block logic for Not Quite Nine Lives * setup for shuffling MC structures: building ER world and shuffling regions/entrances * ensured Nether Fortresses can't be placed in the End * finished logic for structure randomization * fixed nonnative items always showing up as Hammers in ALttP shops * output minecraft structure info in the spoiler * generate .apmc file for communication with MC client * fixed structure rando always using the same seed * move stuff to worlds/minecraft/Regions.py * make output apmc file have consistent name with other files * added minecraft bottle macro; fixed tests imports * generalizing MC region generation * restructured structure shuffling in preparation for structure plando * only output structure rando info in spoiler if they are shuffled * Force structure rando to always be off, for the stable release * added Minecraft options to player settings * formally added combat_difficulty as an option * Added Ender Dragon into playthrough, cleaned up goal map * Added new difficulties: Easy, Normal, Hard combat * moved .apmc generation time to prevent outputs on failed generation * updated tests for new combat logic * Fixed bug causing generation to fail; removed Nether Fortress event since it should no longer be needed with the fix * moved all MC-specific functions into gen_minecraft * renamed "logic_version" to "client_version" * bug fixes properly flagged event locations/items with id None moved generation back to Main.py to fix mysterious generation failures * moved link_minecraft_regions into minecraft init, left create_regions in Main for caching * added seed_name, player_name, client_version to apmc file * reenabled structure shuffle * added entrance tests for minecraft * Minecraft logic updates Wither kill now considers nether fortresses as a valid source of soul sand A Furious Cocktail now requires beacons for resistance and village access for carrots Uneasy Alliance now requires fishing rod to pull the ghast through the portal On a Rail now requires iron pickaxe to make powered rails Overkill now may require strength II without stone axe, which needs nether access * embed all apmc info into slot_data * updated MC tests for logic changes * put apmc into zipfile Co-authored-by: achuang <alexander.w.chuang@gmail.com>
This commit is contained in:
		| @@ -9,12 +9,9 @@ from Options import minecraft_options | ||||
|  | ||||
| client_version = (0, 3) | ||||
|  | ||||
| def generate_mc_data(world: MultiWorld, player: int): | ||||
|     import base64, json | ||||
|     from Utils import output_path | ||||
|  | ||||
| def get_mc_data(world: MultiWorld, player: int): | ||||
|     exits = ["Overworld Structure 1", "Overworld Structure 2", "Nether Structure 1", "Nether Structure 2", "The End Structure"] | ||||
|     data = { | ||||
|     return { | ||||
|         'world_seed': Random(world.rom_seeds[player]).getrandbits(32), # consistent and doesn't interfere with other generation | ||||
|         'seed_name': world.seed_name, | ||||
|         'player_name': world.get_player_names(player), | ||||
| @@ -23,16 +20,20 @@ def generate_mc_data(world: MultiWorld, player: int): | ||||
|         'structures': {exit: world.get_entrance(exit, player).connected_region.name for exit in exits} | ||||
|     } | ||||
|  | ||||
| def generate_mc_data(world: MultiWorld, player: int):  | ||||
|     import base64, json | ||||
|     from Utils import output_path | ||||
|  | ||||
|     data = get_mc_data(world, player) | ||||
|     filename = f"AP_{world.seed_name}_P{player}_{world.get_player_names(player)}.apmc" | ||||
|     with open(output_path(filename), 'wb') as f:  | ||||
|         f.write(base64.b64encode(bytes(json.dumps(data), 'utf-8'))) | ||||
|  | ||||
| def fill_minecraft_slot_data(world: MultiWorld, player: int):  | ||||
|     slot_data = {} | ||||
|     slot_data = get_mc_data(world, player) | ||||
|     for option_name in minecraft_options: | ||||
|         option = getattr(world, option_name)[player] | ||||
|         slot_data[option_name] = int(option.value) | ||||
|     slot_data['client_version'] = client_version | ||||
|     return slot_data | ||||
|  | ||||
| # Generates the item pool given the table and frequencies in Items.py.  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 espeon65536
					espeon65536