CurseForge · Minecraft mod
Ageratum
A guidebook mod for Minecraft NeoForge
Quick answer
Which Ageratum release should I use?
Ageratum For NeoForge v1.21.1-0.0.1+build.111 targets 1.21.1 with NeoForge. The project page does not say whether this file belongs on the client, dedicated server, or both. No extra mods listed for this file.
Where it goes
Is Ageratum required on the client, server, or both?
The project page does not say whether this file belongs on the client, dedicated server, or both.
The source does not explicitly classify this release as client-only or server-only.
What else does Ageratum For NeoForge v1.21.1-0.0.1+build.111 need?
Ageratum For NeoForge v1.21.1-0.0.1+build.111. Change the file and its required mods may change too.
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 mods.
Before you install it
Add Ageratum without breaking your instance.
Built for Ageratum For NeoForge v1.21.1-0.0.1+build.111. Pick another file and the loader, install side or required mods may change.
- 01
Stick to this file
Use Ageratum For NeoForge v1.21.1-0.0.1+build.111. It targets 1.21.1 with NeoForge; another release may have different loader, side or dependency requirements.
- 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.
- 03
Put it on the correct side
The project page does not say whether this file belongs on the client, dedicated server, or both.
- 04
Pick the file you checked
Use the “Get this file” button beside Ageratum For NeoForge v1.21.1-0.0.1+build.111. It opens that exact file at the source.
About this project
What does Ageratum add?
Ageratum
 
A guidebook mod for Minecraft NeoForge, designed to provide in-game guides for other mods. Ageratum offers rich Markdown rendering, i18n localization, and an extensible custom syntax/component system.
Documentation
Features
Core Markdown Support
✅ Block Elements
- ATX headings (
# ~ ######) and Setext headings (underline style) - Paragraphs and line breaks
- Ordered, unordered, and task lists (multi-level nesting)
- Blockquotes (multi-level nesting)
- Fenced code blocks (backticks and tildes) and indented code blocks
- Horizontal rules
- Tables with alignment settings
- Images (namespace-local references)
✅ Inline Elements
- bold, italic,
strikethrough - Inline code spans (multi-backtick support)
- Links and autolinks
- Escape character support
- Custom color tags
- Hover and Click Events (
<hover>and<click>tags)
✅ Advanced Features
- Reference link definitions and reference link syntax
- Automatic link expansion
- Code block line numbers
- Table column alignment (left/center/right)
Internationalization (i18n)
- Documents organized by
ageratum/<language_code>/(e.g.,en_us,zh_cn) - Default fallback to
en_usif localized version missing - Full support for multi-byte characters (Chinese, Japanese, etc.)
Extension Syntax
Two block-level extension syntaxes for custom components:
1. Colon Syntax
::: info
This is an info box.
:::
::: tip
This is a tip.
:::
::: warning
This is a warning.
:::
::: danger
This is a danger warning.
:::
2. Tag Syntax
<namespace:component key="value" param=123>
Block content supports Markdown syntax.
</namespace:component>
<namespace:component/>
Self-closing form without content.
Namespace can be omitted (defaults to ageratum:).
Built-in Extension Components
ageratum:info- Blue info boxageratum:tip- Green tip boxageratum:warning- Orange warning boxageratum:danger- Red danger box
Hover and Click Events
Support interactive text that allows players to hover for tooltips or click to perform actions.
Hover Events (<hover>)
Display tooltip text when hovering over text:
<hover type="SHOW_TEXT" data="This is the tooltip">Hover over me</hover>
Supported Types:
SHOW_TEXT- Display plain text tooltip (datais the tooltip content)
Click Events (<click>)
Execute an action when clicking on text:
<click type="OPEN_URL" data="https://example.com">Click to open link</click>
<click type="COPY_TO_CLIPBOARD" data="Text to copy">Click to copy</click>
<click type="SUGGEST_COMMAND" data="/say hello">Click to suggest command</click>
Supported Types:
OPEN_URL- Open a URL (datais the complete URL)COPY_TO_CLIPBOARD- Copy text to clipboard (datais the text to copy)SUGGEST_COMMAND- Suggest a command in chat (datais the command text)
Combining Styles
You can combine multiple styles in the same text:
<hover type="SHOW_TEXT" data="This is a tooltip"><click type="OPEN_URL" data="https://example.com">Click and hover on me!</click></hover>
Recipe Component (<recipe/>)
Use the recipe extension to render recipes directly inside Markdown documents:
<recipe id="minecraft:acacia_boat"/>
id: required, target recipeResourceLocation- Built-in support:
RecipeType.CRAFTING(crafting table recipes) - Rendering behavior: each input slot displays the first candidate item from its
Ingredient - Fallback behavior: if client level is unavailable, recipe is missing, or no factory matches, the component renders with no visible height
You can register additional recipe component factories through AgeratumRegistries.RECIPE_COMPONENT_FACTORIES:
public static final DeferredHolder<MDRecipeComponent.RecipeComponentFactory<?>, MDRecipeComponent.RecipeComponentFactory<?>> SMELTING =
AgeratumRegistries.RECIPE_COMPONENT_FACTORIES.register(
"smelting",
() -> MDRecipeComponent.RecipeComponentFactory.create(RecipeType.SMELTING, MDSmeltingRecipeComponent::new)
);
Structure NBT Component (<structure/>)
Use the structure extension to render a summary, top-down block preview, and bounded NBT tree for .nbt structure files directly inside documents:
<structure id="minecraft:village/plains/houses/plains_small_house_1"/>
<structure id="./test.nbt"/>
id/path: required, target structure fileResourceLocationmaxDepth: optional, maximum expansion depth, default2maxEntries: optional, maximum number of keys/list entries shown per level, default12- Relative paths are supported and resolved against the current document directory, including
.nbtfiles placed next to the Markdown document inside the resource pack; in preview mode the matching file is loaded fromrun/ageratum_review/ - The component first shows structure metadata such as size, palette, block count, and entity count, then renders a top-down block preview followed by a depth-limited NBT tree
- Hovering a block in the preview shows its block ID, structure coordinates, palette index, and whether it carries block-entity NBT
Preloading & Caching
- Automatically scans and pre-parses Markdown documents to
MDComponentlists on resource load - Opens cached components immediately without parsing delay
- Auto-refreshes cache on resource reload
Cross-side Guide Opening
// Client: open directly
Ageratum.openGuide(ResourceLocation location);
// Server: notify client via network packet
Ageratum.
openGuide(ResourceLocation location);
Project Structure
Directory Layout
src/main/java/dev/anvilcraft/resource/ageratum/
├── Ageratum.java // Main mod class + command registration
├── GuideDocumentLoader.java // Document loading utils
├── GuideDocumentCache.java // Preload cache & reload listener
│
├── client/
│ ├── AgeratumClient.java // Client hooks (reserved)
│ ├── gui/
│ │ └── GuideScreen.java // Guide reading GUI
│ └── feat/markdown/
│ ├── MarkdownParser.java // Markdown block-level parser
│ ├── BuiltinExtensionComponents.java // Built-in extension registration
│ ├── BlockExtensionState.java // Block extension state machine
│ ├── SelfClosingBlockExtensionState.java
│ ├── ExtensionParamParser.java // Parameter parsing utility
│ ├── MDExtensionContext.java // Extension execution context
│ ├── MDExtensionComponentFactory.java // Extension factory interface
│ └── component/
│ ├── MDComponent.java // Base class + inline parsing
│ ├── MDTextComponent.java // Plain text paragraphs
│ ├── MDHeaderComponent.java // Headings
│ ├── MDCodeBlockComponent.java // Code blocks
│ ├── MDListComponent.java // Lists (inc. task lists)
│ ├── MDQuoteComponent.java // Blockquotes
│ ├── MDTableComponent.java // Tables
│ ├── MDImageComponent.java // Images
│ ├── MDHorizontalRuleComponent.java
│ └── MDNoticeBoxComponent.java // Notice box container
│
└── network/
├── AgeratumNetwork.java // Network registration & dispatch
└── OpenGuidePayload.java // Guide open network packet
Design Principles
- Separation of Concerns: Each class handles a single responsibility
- No Oversized Classes: Longest files ~400 lines, all inner classes extracted
- Comprehensive Documentation: Chinese Javadoc for all public APIs, inline comments for complex logic
- Extensibility: Register custom block types via
registerExtensionComponent()
Usage Guide
Players
Open guides with client command:
/ageratum <namespace> [file]
Examples:
/ageratum ageratum # Opens ageratum:en_us/index.md
/ageratum mymod guide # Opens mymod:en_us/guide.md
/ageratum mymod zh_cn/tutorial # Opens mymod:zh_cn/tutorial.md
Tab completion supported for namespaces and file names.
Developers
Register Custom Extension
Use registration methods described in NeoForge docs:
DeferredRegister(recommended)RegisterEvent(advanced usage)
public static final DeferredRegister<MDExtensionComponentFactory> EXT_COMPONENT_FACTORIES =
AgeratumRegistries.createExtensionComponentFactoryRegister("your_modid");
public static final DeferredHolder<MDExtensionComponentFactory, MDExtensionComponentFactory> CUSTOM =
EXT_COMPONENT_FACTORIES.register(
"custom", () ->
context -> new MyComponent(context.renderedContent(), context.params())
);
// In your mod constructor
EXT_COMPONENT_FACTORIES.
register(modEventBus);
Register Custom Inline Style Parser
Inline style parsers are registered through INLINE_STYLE_PARSER_REGISTRY_KEY. MDComponent queries this registry and resolves matches by position + parser priority.
package com.example.mymod.client.markdown;
import dev.anvilcraft.resource.ageratum.client.feat.markdown.component.MDInlineStyleParser;
import dev.anvilcraft.resource.ageratum.client.registries.AgeratumRegistries;
import net.minecraft.network.chat.Style;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.registries.DeferredRegister;
import java.util.regex.Pattern;
public final class MyInlineStyleParsers {
// Use your own modid here, not ageratum
public static final DeferredRegister<MDInlineStyleParser> INLINE_STYLE_PARSERS = DeferredRegister.create(
AgeratumRegistries.INLINE_STYLE_PARSER_REGISTRY_KEY,
"mymod"
);
// Example tag: <rainbow>text</rainbow>
public static final DeferredHolder<MDInlineStyleParser, MDInlineStyleParser> RAINBOW =
INLINE_STYLE_PARSERS.register(
"rainbow",
() -> MDInlineStyleParser.create(
100, // smaller value = higher precedence at same position
Pattern.compile("<rainbow>"),
"</rainbow>",
(Style parentStyle, java.util.regex.Matcher matcher) -> parentStyle.withColor(0xFF55FF)
)
);
private MyInlineStyleParsers() {
}
}
Register it in your client init:
public class MyModClient {
public MyModClient(IEventBus modEventBus) {
MyInlineStyleParsers.INLINE_STYLE_PARSERS.register(modEventBus);
}
}
Markdown usage:
normal text <rainbow>colored text</rainbow> normal text
See full guide: docs/inline-style-parser-example.en.md.
Add Documentation
Create in resource pack:
assets/<namespace>/ageratum/<language>/index.md
assets/<namespace>/ageratum/en_us/index.md
assets/<namespace>/ageratum/zh_cn/index.md
License
- Code unless otherwise stated default to our LICENSE file(LGPL-3.0)
- Non-Code assets (Located here) go by our ASSET_LICENSE file(ARR)
Project description from CurseForge.
Pick your setup
Ageratum by Minecraft version and loader
Choose the version and loader you play, then open the matching release.
1.21.1
1 loader buildCheck the dependencies, then try the file in a copied instance before changing a world you care about.
Recent files
Ageratum versions and loaders
Ageratum For NeoForge v1.21.1-0.0.1+build.111
ageratum-neoforge-1.21.1-0.0.1+build.111.jar
4 Aug 2026
Ageratum For NeoForge v1.21.1-0.0.1+build.110
ageratum-neoforge-1.21.1-0.0.1+build.110.jar
27 Jul 2026
Ageratum For NeoForge v26.1.2-0.0.1+build.109
ageratum-neoforge-26.1.2-0.0.1+build.109.jar
13 Jul 2026
Ageratum For NeoForge v26.1.2-0.0.1+build.108
ageratum-neoforge-26.1.2-0.0.1+build.108.jar
12 Jul 2026
Ageratum For NeoForge v26.1.2-0.0.1+build.107
ageratum-neoforge-26.1.2-0.0.1+build.107.jar
12 Jul 2026
Ageratum For NeoForge v1.21.1-0.0.1+build.106
ageratum-neoforge-1.21.1-0.0.1+build.106.jar
12 Jul 2026
Ageratum For NeoForge v26.1.2-0.0.1+build.105
ageratum-neoforge-26.1.2-0.0.1+build.105.jar
23 Jun 2026
Ageratum For NeoForge v1.21.1-0.0.1+build.104
ageratum-neoforge-1.21.1-0.0.1+build.104.jar
31 May 2026
Ageratum For NeoForge v1.21.1-0.0.1+build.103
ageratum-neoforge-1.21.1-0.0.1+build.103.jar
28 May 2026
Ageratum For NeoForge v1.21.1-0.0.1+build.102
ageratum-neoforge-1.21.1-0.0.1+build.102.jar
23 May 2026
Ageratum For NeoForge v1.21.1-0.0.1+build.101
ageratum-neoforge-1.21.1-0.0.1+build.101.jar
23 May 2026
Ageratum For NeoForge v1.21.1-0.0.1+build.100
ageratum-neoforge-1.21.1-0.0.1+build.100.jar
23 May 2026
Looking for an older file? The official CurseForge project page is in Resources.