Module scute.tags
Submodule for creating and managing tags - function tags, block tags, item tags, etc.
Expand source code Browse git
"""
Submodule for creating and managing tags - function tags, block tags, item tags, etc.
"""
import atexit
from scute import _function_namespaces, pack
from scute.internal.utils import create_json_file, format_text, create_function
# Dict of function tags, {"namespace:mytag": ["namespace:function", ...]}
_tags = {}
_scute_init = {"commands": [], "scoreboard_needed": False}
def _create_function_tag_files():
    if _scute_init["commands"]:
        namespace = pack.namespace + ":scute_init"
        if "minecraft:load" in _tags:
            _tags["minecraft:load"].append(namespace)
        else:
            _tags["minecraft:load"] = [namespace]
        if _scute_init["scoreboard_needed"]:
            _scute_init["commands"].append("scoreboard objectives add scute dummy")
        create_function(pack.namespace, "scute_init", _scute_init["commands"])
    for tag, functions in _tags.items():
        namespace, name = tag.split(":")
        create_json_file(
            namespace, name, r"tags\functions", {"values": [func for func in functions]}
        )
        print(format_text(f"Successfully created function tag {namespace}:{name}", 32))
    print(format_text("Built!", 42, 30))
atexit.register(_create_function_tag_files)
def _add_func_to_tag(func, tag, decoratorName):
    try:
        name = _function_namespaces[func.unwrapped]
        if tag in _tags:
            _tags[tag].append(name)
        else:
            _tags[tag] = [name]
    except KeyError:
        raise RuntimeError(f"@{decoratorName} decorators must be put above @func")
def load(func):
    """
    Adds your function to load.json when used as a decorator
    """
    _add_func_to_tag(func, "minecraft:load", "load")
    return func
def tick(func):
    """
    Adds your function to tick.json when used as a decorator
    """
    _add_func_to_tag(func, "minecraft:tick", "tick")
    return func
def functionTag(namespace, name):
    """
    Adds your function to a function tag of your choosing when used as a decorator
    """
    def decorator(func):
        _add_func_to_tag(func, f"{namespace}:{name}", "tag")
        return func
    return decorator
class BlockTag:
    def __init__(self, namespace: str, name: str, entries: list[str] = None):
        """
        Creates or references a block tag. When called with two arguments, it references an existing tag. When called with three, it creates one with the given entries.
        Args:
            namespace: The namespace of the tag being created or referenced
            name: The name of the tag
            entries: The item ids of the tag if it's being created
        """
        self.reference = f"{namespace}:{name}"
        if entries:
            create_json_file(namespace, name, r"tags\blocks", {"values": entries})
class ItemTag:
    def __init__(self, namespace: str, name: str, entries: list[str] = None):
        """
        Creates or references an item tag. When called with two arguments, it references an existing tag. When called with three, it creates one with the given entries.
        Args:
            namespace: The namespace of the tag being created or referenced
            name: The name of the tag
            entries: The item ids of the tag if it's being created
        """
        self.reference = f"{namespace}:{name}"
        if entries:
            create_json_file(namespace, name, r"tags\items", {"values": entries})
Functions
- 
Adds your function to a function tag of your choosing when used as a decorator
Expand source code Browse git
def functionTag(namespace, name): """ Adds your function to a function tag of your choosing when used as a decorator """ def decorator(func): _add_func_to_tag(func, f"{namespace}:{name}", "tag") return func return decorator - 
Adds your function to load.json when used as a decorator
Expand source code Browse git
def load(func): """ Adds your function to load.json when used as a decorator """ _add_func_to_tag(func, "minecraft:load", "load") return func - 
Adds your function to tick.json when used as a decorator
Expand source code Browse git
def tick(func): """ Adds your function to tick.json when used as a decorator """ _add_func_to_tag(func, "minecraft:tick", "tick") return func 
Classes
- 
Creates or references a block tag. When called with two arguments, it references an existing tag. When called with three, it creates one with the given entries.
Args
namespace- The namespace of the tag being created or referenced
 name- The name of the tag
 entries- The item ids of the tag if it's being created
 
Expand source code Browse git
class BlockTag: def __init__(self, namespace: str, name: str, entries: list[str] = None): """ Creates or references a block tag. When called with two arguments, it references an existing tag. When called with three, it creates one with the given entries. Args: namespace: The namespace of the tag being created or referenced name: The name of the tag entries: The item ids of the tag if it's being created """ self.reference = f"{namespace}:{name}" if entries: create_json_file(namespace, name, r"tags\blocks", {"values": entries}) - 
Creates or references an item tag. When called with two arguments, it references an existing tag. When called with three, it creates one with the given entries.
Args
namespace- The namespace of the tag being created or referenced
 name- The name of the tag
 entries- The item ids of the tag if it's being created
 
Expand source code Browse git
class ItemTag: def __init__(self, namespace: str, name: str, entries: list[str] = None): """ Creates or references an item tag. When called with two arguments, it references an existing tag. When called with three, it creates one with the given entries. Args: namespace: The namespace of the tag being created or referenced name: The name of the tag entries: The item ids of the tag if it's being created """ self.reference = f"{namespace}:{name}" if entries: create_json_file(namespace, name, r"tags\items", {"values": entries})