Skip to main content

Library to parse BlazeAndCavesAdvancementsPack and Addons for it

Project description

BACAP_Parser

A Python library to parse BlazeAndCavesAdvancementsPack and its Addons

Requirements

  • Python version 3.12 or higher
  • BACAP or addon for minecraft 1.21+

Installing

pip install BACAP-Parser

Configuration

To use the library, you first need to configure the parsing parameters, specifically the possible advancement types for each datapack and the list of these datapacks. Example configuration:

from pathlib import Path # All paths must be pathlib.Path classes

task = AdvType(name="task", frames="task", colors=Color("green"))
goal = AdvType(name="goal", frames="goal", colors=Color("#75E1FF"))
# Challenges can also be hidden, so configure default color for hidden advancement in BACAP
challenge = AdvType(name="challenge", frames="challenge", 
                    colors=Color("dark_purple"), hidden_color=BACAP_Parser.DEFAULT_BACAP_HIDDEN_COLOR)
super_challenge = AdvType(name="super_challenge", frames="challenge", colors=Color("#FF2A2A"))
root = AdvType(name="root", frames=("task", "challenge"), colors=Color("#CCCCCC"))
milestone = AdvType(name="milestone", frames="goal", colors=Color("yellow"), tabs="bacap")
advancement_legend = AdvType(name="advancement_legend", frames="challenge", colors=Color("gold"), tabs="bacap")
manager = AdvTypeManager([task, goal, challenge, super_challenge, root, milestone, advancement_legend])


bacap = Datapack(name="bacap", path=Path("datapacks/bacap"), 
                 adv_type_manager=manager, reward_namespace="bacap_rewards", technical_tabs="technical")

# You can use the one AdvTypeManager for many datapacks if they have the same advancement types

bacaped = Datapack(name="bacaped", path=Path("datapacks/bacaped"), 
                   adv_type_manager=manager, reward_namespace="bacaped_rewards", technical_tabs="technical")
bacaped_hardcore = Datapack(name="bacaped_hardcore", path=Path("datapacks/bacaped_hardcore"), 
                            adv_type_manager=manager, reward_namespace="bacaped_rewards", technical_tabs="technical")

parser = Parser(bacap, bacaped, bacaped_hardcore)

Examples

Get Advancements Data

bacap_advs: list[Advancement | TechnicalAdvancement | InvalidAdvancement] = parser.get_datapack(
    "bacap").advancement_manager.filtered_list() # Get all advancements except technical and invalid
for adv in bacap_advs:
    print(adv.title)
    if adv.type.name == "super_challenge": 
        print(adv.description)

    if adv.type.name == "milestone":
        print(adv.criteria_list)
  • Note: Each datapack has its own advancement_manager

Filtering

There are three ways to filter advancements.

filtered_iterator allows searching while ignoring or keeping technical advancements, invalid advancements, and normal advancements.

manager: AdvancementManager = parser.get_datapack("bacap").advancement_manager
only_technical: Iterator[TechincalAdvancement] = manager.filtered_iterator(
    skip_normal=True, skip_invalid=True, skip_technical=False)

find provides a more flexible setup with the ability to pass filtering parameters.

manager: AdvancementManager = parser.get_datapack("bacap").advancement_manager
parent = manager.find(criteria={"mc_path": adv.parent}, skip_technical=False, skip_invalid=False, limit=1)[0]

deep_find differs from find in three key ways:

  • Support for nested attributes.
  • Ability to use functions as criteria values.
  • Checks for partial matches.
manager = parser.get_datapack("bacap").advancement_manager
advs_with_item_rewards = [adv for adv in manager.deep_find({"reward": lambda reward: bool(trophy)})]

Get trophy with description, item color and components

manager = parser.get_datapack("bacap").advancement_manager
advancements = manager.deep_find(
    {"trophy": lambda trophy: bool(trophy)})

random_advancement: Advancement = random.choice(advancements)  # Get random advancement class

trophy = random_advancement.trophy  # Trophy of the advancement

trophy_item: TrophyItem = trophy.item  # Item id of the trophy
description: str = trophy.item.description  # String with trophy description
name_color: Color = trophy.item.color  # Color class of the trophy color

Add custom tabs

If your datapack has its own tabs with advancements, you can add them by specifying a custom TabNameMapper when creating the datapack.

...
tab_mapper = TabNameMapper({"ultimate_challenges": "The Ultimate Challenges Ever"})
bacap = Datapack(name="custom", path=Path(r"datapacks/custom"),adv_type_manager=manager,
                 reward_namespace="bacap_rewards", technical_tabs="technical", tab_name_mapper=tab_mapper)
...

Now, when accessing the tab_display attribute of advancements from the ultimate_challenges tab, it will correctly display its display name.

Get HEX/RGB/INT color codes from Minecraft Text Colors

color = Color('light_purple') # Will be converted to HEX representation
rgb_c: tuple[int, int, int] = color.as_rgb  # RGB representation of the color
int_c: int = color.as_int  # Integer representation of the color

# The Color class also provides static methods for converting between these color storage types.
clr = (100, 150, 200)
new_clr = Color.rgb_to_int(clr) # Will return an Integer representation of RGB color

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bacap_parser-0.5.4.1.tar.gz (34.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bacap_parser-0.5.4.1-py3-none-any.whl (38.3 kB view details)

Uploaded Python 3

File details

Details for the file bacap_parser-0.5.4.1.tar.gz.

File metadata

  • Download URL: bacap_parser-0.5.4.1.tar.gz
  • Upload date:
  • Size: 34.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for bacap_parser-0.5.4.1.tar.gz
Algorithm Hash digest
SHA256 b3a59fc5c9f3ac514d49312cd99edb16501f11b6a5ecc6098dc6d85357cb0488
MD5 037f7c18971654fa0c4f67bd6170b460
BLAKE2b-256 e1c8a2f31248d3b82ee1aaed742d19eb036cf562287d692811474fdd90a77b59

See more details on using hashes here.

Provenance

The following attestation bundles were made for bacap_parser-0.5.4.1.tar.gz:

Publisher: python-publish.yml on ItzSkyReed/BACAP_Parser

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file bacap_parser-0.5.4.1-py3-none-any.whl.

File metadata

  • Download URL: bacap_parser-0.5.4.1-py3-none-any.whl
  • Upload date:
  • Size: 38.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for bacap_parser-0.5.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ee40ffb71ecaff83da6135d6d3175d6335234a675c1eafad76d309f1a6214717
MD5 43f7cbc642836c6e43336a35f8925ca3
BLAKE2b-256 922d93644bb82e967d28820ed6c108f3e5b157caf705ede995a6fddfe61b7d1a

See more details on using hashes here.

Provenance

The following attestation bundles were made for bacap_parser-0.5.4.1-py3-none-any.whl:

Publisher: python-publish.yml on ItzSkyReed/BACAP_Parser

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page