Back to mods
TagCore project artwork

CurseForge · Hytale mod

TagCore

A unified tagging API for items, blocks, and entities, enabling cross-mod compatibility

Choose a version Pick your version below, then grab the matching file.

Quick answer

Which TagCore release should I use?

Updated yesterday
Latest stable file TagCore 1.2.0
Game version Not listed
Mod system Built-in Hytale mod system

TagCore 1.2.0 targets Hytale. Do not install it as a separate client mod. Enable it on the world host—the local server in singleplayer or the dedicated server in multiplayer. No required dependencies listed for this file.

Where it goes

Where should TagCore be installed in Hytale?

Do not install it as a separate client mod. Enable it on the world host—the local server in singleplayer or the dedicated server in multiplayer.

Separate client mod Not supported
World host / dedicated server Required
Mod system for this release Built-in Hytale mod system
Required install it here Optional supported, not mandatory Not supported do not install here Source doesn’t say do not assume

Put Hytale mods on the world host or dedicated server. Singleplayer runs a local server too; Hytale does not use separate client mods.

What else does TagCore 1.2.0 need?

TagCore 1.2.0. Change the file and its required mods may change too.

No required dependencies listed for this file

This file does not list any required mods. Do not add a library just because a different file uses it.

This file does not list any required or optional project dependencies. Check the creator notes before changing an existing world.

Before you install it

Add TagCore without breaking your instance.

Built for TagCore 1.2.0. Pick another file and the loader, install side or required mods may change.

  1. 01

    Stick to this file

    Use TagCore 1.2.0. It targets Hytale; another release may target a different game build or dependency set.

  2. 02

    Bring the mods it needs

    This file does not list any required mods. Do not add a library just because a different file uses it.

  3. 03

    Enable it on the world host

    Do not install it as a separate client mod. Enable it on the world host—the local server in singleplayer or the dedicated server in multiplayer.

  4. 04

    Pick the file you checked

    Use the “Get this file” button beside TagCore 1.2.0. It opens that exact file at the source.

About this project

What does TagCore add?

Header

TagCore is a Hytale server mod/plugin that adds a simple, reusable tag system for game content.

It lets you define named groups of IDs such as items, blocks, entities, biomes, effects, fluids, and damage types, then query those groups through a clean Java API.

Features

  • Define tags in JSON
  • Support for these tag types:
    • item
    • block
    • entity
    • biome
    • effect
    • fluid
    • damage_type
  • Reference one tag from another with #namespace:path
  • Resolve fully flattened tag contents at startup
  • Detect invalid values, missing references, wrong-type references, and circular references
  • Load tags from:
    • bundled classpath resources under tags/
    • external .zip and .jar packs from the server mods/ directory
  • Easy-to-use TagService API for other mods/plugins

How Tag IDs Work

Tag IDs use a namespace:path format.

Examples:

  • hytale:logs
  • tagcore:starter_weapons
  • mymod:undead

If a tag ID is written without a namespace, TagCore normalizes it to the default namespace:

hytale

So a bare tag like:

starter_weapons

is treated as:

hytale:starter_weapons

Defining Tags

Tag files are JSON files placed under a tags/ directory.

A tag definition contains:

  • id - the tag ID
  • type - the tag type
  • values - a list of concrete IDs and/or tag references

Example item tag

{
  "id": "tagcore:starter_weapons",
  "type": "item",
  "values": [
    "Weapon_Sword_Wood",
    "Weapon_Shortbow_Crude",
    "#tagcore:starter_ammo"
  ]
}

Example block tag

{
  "id": "tagcore:logs",
  "type": "block",
  "values": [
    "Wood_Amber_Trunk",
    "Wood_Ash_Trunk",
    "Wood_Aspen_Trunk"
  ]
}

Example entity tag

{
  "id": "tagcore:undead",
  "type": "entity",
  "values": [
    "Zombie",
    "Skeleton",
    "#tagcore:boss_undead"
  ]
}

Referencing Other Tags

You can include one tag inside another by prefixing the referenced tag ID with #.

{
  "id": "tagcore:all_logs",
  "type": "block",
  "values": [
    "#tagcore:logs",
    "#tagcore:modded_logs"
  ]
}

Rules:

  • referenced tags must exist
  • referenced tags must be the same type
  • circular references are rejected

Where Tags Are Loaded From

TagCore loads tags from two places, in this order:

  1. Classpath resources under tags/
  2. External .zip or .jar packs in the server mods/ directory

External packs can override built-in tags with the same ID.

Using the API

TagCore exposes a shared TagService for querying tags.

Get the shared service

import com.azuredoom.tagcore.api.TagService;

var tagServiceOptional = TagService.getTagService();
if (tagServiceOptional.isEmpty()) {
    return;
}

TagService tagService = tagServiceOptional.get();

Check whether a tag exists

boolean exists = tagService.hasTag("tagcore:starter_weapons");

Resolve a typed tag

var result = tagService.resolveItemTag("tagcore:starter_weapons");

if (result.isSuccess()) {
    for (String itemId : result.value()) {
        System.out.println(itemId);
    }
} else {
    System.out.println("Failed to resolve tag: " + result.status());
    for (var issue : result.issues()) {
        System.out.println(issue.detail());
    }
}

Check membership in a tag

var result = tagService.isInItemTag("tagcore:starter_weapons", "Sword_Wooden");

if (result.isSuccess() && result.value()) {
    System.out.println("Sword_Wooden is in the tag.");
}

Resolve a block tag

var logs = tagService.resolveBlockTag("tagcore:logs");

if (logs.isSuccess()) {
    System.out.println("Resolved block IDs: " + logs.value());
}

Generic membership check

var result = tagService.isInTag("tagcore:starter_weapons", "Sword_Wooden");

if (result.isSuccess()) {
    System.out.println("Contained: " + result.value());
}

Understanding Query Results

Most TagCore API calls return a TagQueryResult<T>.

This gives you:

  • status() - overall outcome
  • value() - returned value
  • definition() - matching tag definition, when available
  • issues() - validation or resolution issues

Common statuses:

  • SUCCESS
  • EMPTY
  • NOT_FOUND
  • WRONG_TYPE
  • INVALID_TAG_ID
  • INVALID_CONTENT
  • CIRCULAR_REFERENCE

Example:

var result = tagService.resolveBlockTag("tagcore:logs");

switch (result.status()) {
    case SUCCESS, EMPTY -> {
        System.out.println("Resolved values: " + result.value());
    }
    case NOT_FOUND -> {
        System.out.println("Tag not found.");
    }
    default -> {
        System.out.println("Tag resolution failed: " + result.status());
        for (var issue : result.issues()) {
            System.out.println(issue.type() + ": " + issue.detail());
        }
    }
}

Recommended Folder Layout

Example bundled resource layout:

src/main/resources/
└── tags/
    ├── items/
    │   └── starter_weapons.json
    ├── blocks/
    │   └── logs.json
    └── entities/
        └── undead.json

The exact subfolder structure under tags/ is flexible. What matters is that the files are discoverable under the tags/ root.

Example Pack Override

You can ship a default tag in your mod, then override it from an external pack in mods/.

Bundled tag:

{
  "id": "tagcore:starter_weapons",
  "type": "item",
  "values": [
    "Sword_Wooden"
  ]
}

External override:

{
  "id": "tagcore:starter_weapons",
  "type": "item",
  "values": [
    "Sword_Wooden",
    "Bow_Basic",
    "Dagger_Rusty"
  ]
}

Notes

  • Values must be valid IDs for the declared type.
  • References must point to tags of the same type.
  • TagCore resolves references eagerly so configuration problems show up early.
  • Bare tag IDs are normalized to the default namespace hytale.

Hosting Partner

Looking for a reliable server to run LevelingCore and other Hytale mods?

BisectHosting offers pre-configured game servers, fast setup, and solid performance for modded environments.

Use code azuredoom for 25% off your first month.

BisectHosting

Project description from CurseForge.

Recent files

TagCore releases and Hytale builds

11 of 11 releases match

Looking for an older file? The official CurseForge project page is in Resources.