Source code for soulfire.selectors
import re
from collections.abc import Iterable
from .inventory_pb2 import ItemSelector
[docs]
def item_selector(value: str | ItemSelector) -> ItemSelector:
if isinstance(value, ItemSelector):
return value
if value.startswith("#"):
return ItemSelector(tags=[resource_id(value[1:])])
return ItemSelector(item_ids=[resource_id(value)])
[docs]
def block_selectors(values: str | Iterable[str]) -> tuple[tuple[str, ...], tuple[str, ...]]:
ids: list[str] = []
tags: list[str] = []
for value in (values,) if isinstance(values, str) else values:
if value.startswith("#"):
tags.append(resource_id(value[1:]))
else:
ids.append(resource_id(value))
return tuple(ids), tuple(tags)
[docs]
def resource_id(value: str) -> str:
normalized = value if ":" in value else f"minecraft:{value}"
if re.fullmatch(r"[a-z0-9_.-]+:[a-z0-9/._-]+", normalized) is None:
raise ValueError(f"Invalid Minecraft resource ID: {value}")
return normalized