Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 27 additions & 16 deletions gm4_guidebook/generate_guidebooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -882,26 +882,37 @@ def item_to_display(item: str, components: dict[str, Any] | None, ctx: Context)


"""
Recursively reads vanilla item tags to find a single item to use
Recursively reads item tags to find a single item to use
"""
def get_item_from_tag(item_tag: str, vanilla: Vanilla) -> str:
def get_item_from_tag(ctx: Context, item_tag: str, vanilla: Vanilla, searched: list[str] = []) -> str:
# prepare item tag for searching
if "minecraft" in item_tag:
if "#" in item_tag:
item_tag = item_tag[11:]
else:
item_tag = item_tag[10:]
elif item_tag.split(":")[0] != "minecraft":
raise ValueError("Only vanilla item tags are supported")
if ":" in item_tag:
prefix, tag_target = item_tag.split(":", maxsplit=1)
prefix = prefix.removeprefix("#")
else:
prefix = ""
tag_target = item_tag.removeprefix("#")

# open item tag
item_tags = vanilla.mount("data/minecraft/tags").data["minecraft"].item_tags
items = item_tags[item_tag].data["values"]
if prefix == "minecraft" or prefix == "":
item_tags = vanilla.mount("data/minecraft/tags").data["minecraft"].item_tags
else:
item_tags = ctx.data[prefix].item_tags
items: list[str|dict[str, Any]] = item_tags[tag_target].data["values"]

# get first item
if isinstance(items[0], str):
res: str = items[0]
else:
res: str = items[0]["id"]
Comment thread
Bloo-dev marked this conversation as resolved.

# if first value is another tag, recursively search until an item is found
if "#" not in items[0]:
return items[0]
return get_item_from_tag(items[0], vanilla)
if "#" not in res:
return res
if res in searched:
raise ValueError("Cycle found in item tag")
searched.append(res)
return get_item_from_tag(ctx, res, vanilla, searched)



Expand Down Expand Up @@ -936,7 +947,7 @@ def generate_recipe_display(recipe: str, ctx: Context) -> list[TextComponent]:
elif ingr.startswith("#"):
vanilla = ctx.inject(Vanilla)
vanilla.minecraft_version = '1.21.11'
ingr = get_item_from_tag(ingr, vanilla)
ingr = get_item_from_tag(ctx, ingr, vanilla)
ingredients.append(ingr)

elif r["type"].removeprefix("minecraft:") == "crafting_shapeless":
Expand Down Expand Up @@ -969,7 +980,7 @@ def generate_recipe_display(recipe: str, ctx: Context) -> list[TextComponent]:
elif ingr.startswith("#"):
vanilla = ctx.inject(Vanilla)
vanilla.minecraft_version = '1.21.11'
ingr = get_item_from_tag(ingr, vanilla)
ingr = get_item_from_tag(ctx, ingr, vanilla)
ingredients.append(ingr)
while len(ingredients) < 9:
ingredients.append("air")
Expand Down
Loading