(for now) only collect ER hint info for LttP
Optimize Entrance
This commit is contained in:
@@ -24,11 +24,11 @@ class AutoWorldRegister(type):
|
||||
class AutoLogicRegister(type):
|
||||
def __new__(cls, name, bases, dct):
|
||||
new_class = super().__new__(cls, name, bases, dct)
|
||||
for function_name, function in dct.items():
|
||||
if hasattr(function, "__call__"): # callable
|
||||
if hasattr(CollectionState, function_name):
|
||||
raise Exception(f"Name conflict on Logic Mixin {name} trying to overwrite {function_name}")
|
||||
setattr(CollectionState, function_name, function)
|
||||
for item_name, function in dct.items():
|
||||
if not item_name.startswith("__"):
|
||||
if hasattr(CollectionState, item_name):
|
||||
raise Exception(f"Name conflict on Logic Mixin {name} trying to overwrite {item_name}")
|
||||
setattr(CollectionState, item_name, function)
|
||||
return new_class
|
||||
|
||||
def call_single(world: MultiWorld, method_name: str, player: int):
|
||||
@@ -115,7 +115,8 @@ class World(metaclass=AutoWorldRegister):
|
||||
Warning: this may be called with self.world = None, for example by MultiServer"""
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# any methods attached to this can be used as part of CollectionState,
|
||||
# please use a prefix as all of them get clobbered together
|
||||
class LogicMixin(metaclass=AutoLogicRegister):
|
||||
pass
|
||||
pass
|
||||
|
||||
@@ -23,7 +23,6 @@ class MinecraftWorld(World):
|
||||
item_name_to_id = {name: data.code for name, data in item_table.items()}
|
||||
location_name_to_id = {name: data.id for name, data in advancement_table.items()}
|
||||
|
||||
|
||||
def _get_mc_data(self):
|
||||
exits = ["Overworld Structure 1", "Overworld Structure 2", "Nether Structure 1", "Nether Structure 2",
|
||||
"The End Structure"]
|
||||
@@ -37,7 +36,6 @@ class MinecraftWorld(World):
|
||||
'structures': {exit: self.world.get_entrance(exit, self.player).connected_region.name for exit in exits}
|
||||
}
|
||||
|
||||
|
||||
def generate_basic(self):
|
||||
|
||||
# Generate item pool
|
||||
@@ -61,21 +59,17 @@ class MinecraftWorld(World):
|
||||
completion = self.create_item("Victory")
|
||||
self.world.get_location("Ender Dragon", self.player).place_locked_item(completion)
|
||||
itempool.remove(completion)
|
||||
|
||||
self.world.itempool += itempool
|
||||
|
||||
|
||||
def set_rules(self):
|
||||
set_rules(self.world, self.player)
|
||||
|
||||
|
||||
def create_regions(self):
|
||||
def MCRegion(region_name: str, exits=[]):
|
||||
ret = Region(region_name, None, region_name, self.player)
|
||||
ret.world = self.world
|
||||
ret.locations = [ MinecraftAdvancement(self.player, loc_name, loc_data.id, ret)
|
||||
ret = Region(region_name, None, region_name, self.player, self.world)
|
||||
ret.locations = [MinecraftAdvancement(self.player, loc_name, loc_data.id, ret)
|
||||
for loc_name, loc_data in advancement_table.items()
|
||||
if loc_data.region == region_name ]
|
||||
if loc_data.region == region_name]
|
||||
for exit in exits:
|
||||
ret.exits.append(Entrance(self.player, exit, ret))
|
||||
return ret
|
||||
@@ -83,7 +77,6 @@ class MinecraftWorld(World):
|
||||
self.world.regions += [MCRegion(*r) for r in mc_regions]
|
||||
link_minecraft_structures(self.world, self.player)
|
||||
|
||||
|
||||
def generate_output(self):
|
||||
import json
|
||||
from base64 import b64encode
|
||||
@@ -94,7 +87,6 @@ class MinecraftWorld(World):
|
||||
with open(output_path(filename), 'wb') as f:
|
||||
f.write(b64encode(bytes(json.dumps(data), 'utf-8')))
|
||||
|
||||
|
||||
def fill_slot_data(self):
|
||||
slot_data = self._get_mc_data()
|
||||
for option_name in minecraft_options:
|
||||
@@ -102,7 +94,6 @@ class MinecraftWorld(World):
|
||||
slot_data[option_name] = int(option.value)
|
||||
return slot_data
|
||||
|
||||
|
||||
def create_item(self, name: str) -> Item:
|
||||
item_data = item_table[name]
|
||||
return MinecraftItem(name, item_data.progression, item_data.code, self.player)
|
||||
|
||||
Reference in New Issue
Block a user