ResearchItem and ResearchPage
These are the core classes for defining research entries and their associated documentation/crafting pages in the Thaumonomicon.
ResearchItem
Package: thaumcraft.api.research
Defines a single research entry. Created via one of three constructors, then configured with builder-style setters, and finally registered by calling registerResearchItem().
Key Fields
| Field | Type | Description |
|---|---|---|
key |
String |
Unique identifier for this research |
category |
String |
Key of the category this belongs to |
tags |
AspectList |
Aspect costs required to complete the research |
parents |
String[] |
Research keys that must be completed first (visible connection line) |
parentsHidden |
String[] |
Same as parents, but no visible line in the Thaumonomicon |
siblings |
String[] |
Research keys unlocked automatically when this is completed |
displayColumn |
int |
Horizontal grid position |
displayRow |
int |
Vertical grid position |
icon_item |
ItemStack |
Item icon for this research |
icon_resource |
ResourceLocation |
Texture-based icon for this research |
itemTriggers |
ItemStack[] |
Items that may reveal hidden knowledge when scanned |
entityTriggers |
String[] |
Entity names that may reveal hidden knowledge when scanned |
aspectTriggers |
Aspect[] |
Aspects that may reveal hidden knowledge when studied |
pages |
ResearchPage[] |
The pages displayed in the Thaumonomicon |
Constructors
// Stub research (minimal, no position)
public ResearchItem(String key, String category)
// Full research with texture icon
public ResearchItem(String key, String category, AspectList tags, int col, int row, int complex, ResourceLocation icon)
// Full research with item icon
public ResearchItem(String key, String category, AspectList tags, int col, int row, int complex, ItemStack icon)
Flags
All flags return this for chaining.
| Method | Effect |
|---|---|
setSpecial() |
Spiky border — marks important milestones |
setRound() |
Circular icon border — passive/auto-unlock research |
setSecondary() |
Can be purchased directly with RP in normal difficulty |
setStub() |
Cannot be discovered normally; only via sibling unlocking |
setVirtual() |
Completely hidden; recipes never show in Thaumonomicon |
setConcealed() |
Hidden until parent research is discovered |
setHidden() |
Discoverable only via scanning or knowledge fragments |
setLost() |
Discoverable only via scanning (not fragments) |
setAutoUnlock() |
Unlocks automatically for all players at game start |
Setters
| Method | Parameter | Description |
|---|---|---|
setParents(String... par) |
Research keys | Prerequisites with visible connecting line |
setParentsHidden(String... par) |
Research keys | Prerequisites with no connecting line |
setSiblings(String... sib) |
Research keys | Auto-unlocked when this research completes |
setPages(ResearchPage... par) |
ResearchPage array | Thaumonomicon pages for this entry |
setItemTriggers(ItemStack... par) |
ItemStacks | Items that may unlock hidden knowledge when scanned |
setEntityTriggers(String... par) |
Entity names | Entities that may unlock hidden knowledge when scanned |
setAspectTriggers(Aspect... par) |
Aspects | Aspects that may unlock hidden knowledge when studied |
setComplexity(int complexity) |
1–3 | Size of the research grid (clamped) |
Getters
| Method | Returns | Description |
|---|---|---|
getName() |
String |
Translated name via tc.research_name.<key> |
getText() |
String |
Translated description via tc.research_text.<key> |
getPages() |
ResearchPage[] |
The configured pages |
getItemTriggers() |
ItemStack[] |
Item scan triggers |
getEntityTriggers() |
String[] |
Entity scan triggers |
getAspectTriggers() |
Aspect[] |
Aspect study triggers |
getComplexity() |
int |
Grid size (1–3) |
getResearchPrimaryTag() |
Aspect |
Aspect with highest tag value (used for scroll color) |
Registration
public ResearchItem registerResearchItem()
Adds the item to ResearchCategories. Must be called after all configuration is complete. Returns this for chaining.
ResearchPage
Package: thaumcraft.api.research
Represents a single page in the Thaumonomicon for a ResearchItem. Different constructors create different page types.
PageType Enum
| Value | Description |
|---|---|
TEXT |
Plain text page |
TEXT_CONCEALED |
Text page only shown after a specific research is completed |
IMAGE |
Image with caption |
NORMAL_CRAFTING |
Vanilla crafting recipe |
ARCANE_CRAFTING |
Arcane workbench recipe |
CRUCIBLE_CRAFTING |
Crucible (alchemical) recipe |
INFUSION_CRAFTING |
Infusion enchantment recipe |
INFUSION_ENCHANTMENT |
Infusion enchantment on an item |
COMPOUND_CRAFTING |
Multiple recipes displayed together |
ASPECTS |
Aspect list display (internal use) |
SMELTING |
Furnace smelting recipe |
Fields
| Field | Type | Description |
|---|---|---|
type |
PageType |
The page type |
text |
String |
Text content or caption |
research |
String |
Research key for concealed pages |
image |
ResourceLocation |
Image texture |
aspects |
AspectList |
Aspects to display |
recipe |
Object |
Recipe object (IRecipe, CrucibleRecipe, InfusionRecipe, etc.) |
recipeOutput |
ItemStack |
Output itemstack of the recipe |
Constructors
| Signature | Page Type | Notes |
|---|---|---|
ResearchPage(String text) |
TEXT |
Text; may be a localization key |
ResearchPage(String research, String text) |
TEXT_CONCEALED |
Only visible after player has research |
ResearchPage(ResourceLocation image, String caption) |
IMAGE |
Image with caption |
ResearchPage(IRecipe recipe) |
NORMAL_CRAFTING |
Single vanilla recipe |
ResearchPage(IRecipe[] recipe) |
NORMAL_CRAFTING |
Multiple vanilla recipes |
ResearchPage(IArcaneRecipe recipe) |
ARCANE_CRAFTING |
Single arcane recipe |
ResearchPage(IArcaneRecipe[] recipe) |
ARCANE_CRAFTING |
Multiple arcane recipes |
ResearchPage(CrucibleRecipe recipe) |
CRUCIBLE_CRAFTING |
Single crucible recipe |
ResearchPage(CrucibleRecipe[] recipe) |
CRUCIBLE_CRAFTING |
Multiple crucible recipes |
ResearchPage(InfusionRecipe recipe) |
INFUSION_CRAFTING |
Single infusion recipe |
ResearchPage(InfusionRecipe[] recipe) |
INFUSION_CRAFTING |
Multiple infusion recipes |
ResearchPage(InfusionEnchantmentRecipe recipe) |
INFUSION_ENCHANTMENT |
Infusion enchantment |
ResearchPage(List recipe) |
COMPOUND_CRAFTING |
Compound crafting list |
ResearchPage(ItemStack input) |
SMELTING |
Furnace recipe; output looked up automatically |
Method
public String getTranslatedText()
Returns the localized text if text is a localization key, otherwise returns text as-is.
Example
new ResearchItem("MYMOD_ALCHEMY", "ALCHEMY",
new AspectList().add(Aspect.WATER, 2).add(Aspect.FIRE, 2),
2, 3, 1,
new ItemStack(Items.blaze_powder))
.setParents("BASICS")
.setPages(
new ResearchPage("research.mymod.alchemy.text"),
new ResearchPage(new CrucibleRecipe(
new AspectList().add(Aspect.FIRE, 1),
new ItemStack(Items.glowstone_dust),
new ItemStack(Items.blaze_powder)
))
)
.registerResearchItem();
ResearchItem Flags Summary
| Flag | Meaning |
|---|---|
isSpecial |
Spiky border — major milestone |
isRound |
Circular border — passive/auto research |
isSecondary |
Purchasable with RP in normal mode |
isStub |
Not auto-discoverable; only sibling-unlocked |
isVirtual |
Completely hidden; recipes invisible |
isConcealed |
Hidden until parent research complete |
isHidden |
Found only via scan or fragments |
isLost |
Found only via scanning |
isAutoUnlock |
Unlocked for all players at world start |