144 lines
4.3 KiB
Python
144 lines
4.3 KiB
Python
from Options import Choice, Toggle, DefaultOnToggle, Range, OptionList, DeathLink, PlandoConnections, \
|
|
PerGameCommonOptions
|
|
from .Constants import region_info
|
|
from dataclasses import dataclass
|
|
|
|
|
|
class AdvancementGoal(Range):
|
|
"""Number of advancements required to spawn bosses."""
|
|
display_name = "Advancement Goal"
|
|
range_start = 0
|
|
range_end = 114
|
|
default = 40
|
|
|
|
|
|
class EggShardsRequired(Range):
|
|
"""Number of dragon egg shards to collect to spawn bosses."""
|
|
display_name = "Egg Shards Required"
|
|
range_start = 0
|
|
range_end = 50
|
|
default = 0
|
|
|
|
|
|
class EggShardsAvailable(Range):
|
|
"""Number of dragon egg shards available to collect."""
|
|
display_name = "Egg Shards Available"
|
|
range_start = 0
|
|
range_end = 50
|
|
default = 0
|
|
|
|
|
|
class BossGoal(Choice):
|
|
"""Bosses which must be defeated to finish the game."""
|
|
display_name = "Required Bosses"
|
|
option_none = 0
|
|
option_ender_dragon = 1
|
|
option_wither = 2
|
|
option_both = 3
|
|
default = 1
|
|
|
|
@property
|
|
def dragon(self):
|
|
return self.value % 2 == 1
|
|
|
|
@property
|
|
def wither(self):
|
|
return self.value > 1
|
|
|
|
|
|
class ShuffleStructures(DefaultOnToggle):
|
|
"""Enables shuffling of villages, outposts, fortresses, bastions, and end cities."""
|
|
display_name = "Shuffle Structures"
|
|
|
|
|
|
class StructureCompasses(DefaultOnToggle):
|
|
"""Adds structure compasses to the item pool, which point to the nearest indicated structure."""
|
|
display_name = "Structure Compasses"
|
|
|
|
|
|
class BeeTraps(Range):
|
|
"""Replaces a percentage of junk items with bee traps, which spawn multiple angered bees around every player when
|
|
received."""
|
|
display_name = "Bee Trap Percentage"
|
|
range_start = 0
|
|
range_end = 100
|
|
default = 0
|
|
|
|
|
|
class CombatDifficulty(Choice):
|
|
"""Modifies the level of items logically required for exploring dangerous areas and fighting bosses."""
|
|
display_name = "Combat Difficulty"
|
|
option_easy = 0
|
|
option_normal = 1
|
|
option_hard = 2
|
|
default = 1
|
|
|
|
|
|
class HardAdvancements(Toggle):
|
|
"""Enables certain RNG-reliant or tedious advancements."""
|
|
display_name = "Include Hard Advancements"
|
|
|
|
|
|
class UnreasonableAdvancements(Toggle):
|
|
"""Enables the extremely difficult advancements "How Did We Get Here?" and "Adventuring Time.\""""
|
|
display_name = "Include Unreasonable Advancements"
|
|
|
|
|
|
class PostgameAdvancements(Toggle):
|
|
"""Enables advancements that require spawning and defeating the required bosses."""
|
|
display_name = "Include Postgame Advancements"
|
|
|
|
|
|
class SendDefeatedMobs(Toggle):
|
|
"""Send killed mobs to other Minecraft worlds which have this option enabled."""
|
|
display_name = "Send Defeated Mobs"
|
|
|
|
|
|
class StartingItems(OptionList):
|
|
"""Start with these items. Each entry should be of this format: {item: "item_name", amount: #}
|
|
`item` can include components, and should be in an identical format to a `/give` command with
|
|
`"` escaped for json reasons.
|
|
|
|
`amount` is optional and will default to 1 if omitted.
|
|
|
|
example:
|
|
```
|
|
starting_items: [
|
|
{ "item": "minecraft:stick[minecraft:custom_name=\"{'text':'pointy stick'}\"]" },
|
|
{ "item": "minecraft:arrow[minecraft:rarity=epic]", amount: 64 }
|
|
]
|
|
```
|
|
"""
|
|
display_name = "Starting Items"
|
|
|
|
|
|
class MCPlandoConnections(PlandoConnections):
|
|
entrances = set(connection[0] for connection in region_info["default_connections"])
|
|
exits = set(connection[1] for connection in region_info["default_connections"])
|
|
|
|
@classmethod
|
|
def can_connect(cls, entrance, exit):
|
|
if exit in region_info["illegal_connections"] and entrance in region_info["illegal_connections"][exit]:
|
|
return False
|
|
return True
|
|
|
|
|
|
@dataclass
|
|
class MinecraftOptions(PerGameCommonOptions):
|
|
plando_connections: MCPlandoConnections
|
|
advancement_goal: AdvancementGoal
|
|
egg_shards_required: EggShardsRequired
|
|
egg_shards_available: EggShardsAvailable
|
|
required_bosses: BossGoal
|
|
shuffle_structures: ShuffleStructures
|
|
structure_compasses: StructureCompasses
|
|
|
|
combat_difficulty: CombatDifficulty
|
|
include_hard_advancements: HardAdvancements
|
|
include_unreasonable_advancements: UnreasonableAdvancements
|
|
include_postgame_advancements: PostgameAdvancements
|
|
bee_traps: BeeTraps
|
|
send_defeated_mobs: SendDefeatedMobs
|
|
death_link: DeathLink
|
|
starting_items: StartingItems
|