Skip to content

Condition Types ​

Conditions are Epiphany's condition types, used to determine under what player state a Module or Epiphany should auto-unlock.

INFO

This page is aimed at datapack authors, explaining the JSON fields of all built-in condition types. For registering new condition types, see Registering a New Condition.

Usage ​

Conditions are used in the condition field of Module / Epiphany JSON, selecting a specific type via dispatch codec:

jsonc
"condition": {
    "type": "epiphany:advancement",     // ← type determines subsequent fields
    "advancement": "minecraft:story/mine_stone"
}

The type field corresponds to one of the 30 built-in types. type is the condition type's registry ID (epiphany:<key>); third-party mods can register new keys.

Graceful Degradation on Parse Failure

If type references an unregistered condition type, JSON parsing fails and the system automatically falls back to epiphany:always (always true). This means your datapack won't crash due to a typo, but the condition will silently become always-true. Please double-check your type names carefully.

Logical Operators ​

epiphany:always (Always True) ​

Always true — has no JSON body fields. This is the default fallback when dispatch parsing fails.

jsonc
{ "type": "epiphany:always" }

epiphany:never (Always False) ​

Always false. Useful for "this should never auto-unlock; only commands/API can unlock it."

jsonc
{ "type": "epiphany:never" }

epiphany:and (All Must Be True) ​

True when all child conditions are true.

FieldTypeRequiredDescription
conditionslist of Condition✅List of child conditions
jsonc
{
    "type": "epiphany:and",
    "conditions": [
        { "type": "epiphany:experience_level", "value": 30 },
        { "type": "epiphany:advancement", "advancement": "minecraft:story/mine_diamond" }
    ]
}

epiphany:or (Any Must Be True) ​

True when any child condition is true.

FieldTypeRequiredDescription
conditionslist of Condition✅List of child conditions

epiphany:not (Negation) ​

Negates a child condition.

FieldTypeRequiredDescription
conditionCondition✅The child condition to negate
jsonc
{
    "type": "epiphany:not",
    "condition": {
        "type": "epiphany:dimension",
        "dimension": "minecraft:the_nether"
    }
}

Conditions ​

epiphany:attribute (Attribute Comparison) ​

Evaluates the relationship between a player's current attribute value (base + all modifiers) and a given value.

FieldTypeRequiredDefaultDescription
attributeResourceLocation✅—Attribute id, e.g., minecraft:generic.max_health
valuedouble✅—Right-hand comparison value
comparisonComparison>=Comparison operator
jsonc
{
    "type": "epiphany:attribute",
    "attribute": "minecraft:generic.max_health",
    "value": 30.0,
    "comparison": ">="
}

epiphany:effect (Has Status Effect) ​

Evaluates whether the player has a specified effect with an amplifier no less than the given minimum.

FieldTypeRequiredDefaultDescription
effectResourceLocation✅—Effect id, e.g., minecraft:regeneration
min_amplifierint0Minimum amplifier (level − 1)
jsonc
{ "type": "epiphany:effect", "effect": "minecraft:strength", "min_amplifier": 0 }

epiphany:experience_level (Experience Level) ​

FieldTypeRequiredDefaultDescription
valueint✅—Right-hand comparison value (player's experience level)
comparisonComparison>=Comparison operator

epiphany:statistic (Statistic Value) ​

Checks a player's cumulative value in a vanilla statistic. Use this condition for custom statistics such as distance walked, or for typed statistics such as crafted, broken, used, mined, and killed.

FieldTypeRequiredDefaultDescription
stat_typeResourceLocation—Statistic category. Omit for a custom statistic; examples: minecraft:crafted, minecraft:broken, minecraft:used, minecraft:mined, minecraft:killed, minecraft:killed_by
statResourceLocation✅—Custom statistic id when stat_type is omitted; otherwise the category target id (item, block, or entity type)
valueint✅—Right-hand comparison value
comparisonComparison>=Comparison operator

Custom Statistics ​

Omit stat_type for values in Minecraft's custom statistic registry, such as walk_one_cm, jump, or play_time:

jsonc
{
    "type": "epiphany:statistic",
    "stat": "minecraft:walk_one_cm",
    "comparison": ">=",
    "value": 100000
}

Typed Statistics ​

For statistics with a category and target, provide them separately. A value such as minecraft:crafted:minecraft:iron_pickaxe is not a valid ResourceLocation and must not be placed in stat.

jsonc
{
    "type": "epiphany:statistic",
    "stat_type": "minecraft:crafted",
    "stat": "minecraft:iron_pickaxe",
    "comparison": ">=",
    "value": 2
}

For example, require the player to both craft and break two iron pickaxes:

jsonc
{
    "type": "epiphany:and",
    "conditions": [
        {
            "type": "epiphany:statistic",
            "stat_type": "minecraft:crafted",
            "stat": "minecraft:iron_pickaxe",
            "comparison": ">=",
            "value": 2
        },
        {
            "type": "epiphany:statistic",
            "stat_type": "minecraft:broken",
            "stat": "minecraft:iron_pickaxe",
            "comparison": ">=",
            "value": 2
        }
    ]
}

Unknown statistic categories or target IDs evaluate to false and produce a warning in the log.

epiphany:dimension (Current Dimension) ​

FieldTypeRequiredDescription
dimensionResourceLocation✅Dimension id
jsonc
{ "type": "epiphany:dimension", "dimension": "minecraft:the_nether" }

epiphany:biome (Current Biome) ​

Evaluates the player's current biome.

FieldTypeRequiredDescription
biomeString✅Biome id or "#tag" reference (e.g., minecraft:cherry_grove / "#minecraft:is_ocean")

Auto-Unlock & Polling

This condition is evaluated by the 10-tick polling system and is immediately satisfied when the player enters the target biome.

epiphany:structure (Inside Structure) ​

Evaluates whether the player is inside a specified structure (requires the chunk to have generated the structure start).

FieldTypeRequiredDescription
structureString✅Structure id or "#tag", e.g., minecraft:stronghold / "#minecraft:villages"

epiphany:advancement (Advancement Earned) ​

FieldTypeRequiredDescription
advancementResourceLocation✅Advancement id, e.g., minecraft:story/mine_stone

epiphany:item (Holds a Certain Item) ​

Evaluates whether the player has at least count of a specified item across their inventory + equipment + hotbar.

FieldTypeRequiredDefaultDescription
itemString✅—Item id or "#tag"
countint1Quantity

epiphany:item_used (Has Used an Item) ​

Cumulative number of times the player has used this item.

FieldTypeRequiredDefaultDescription
itemString✅—Item id (note: only plain id; tags are not supported)
countint1Cumulative count

epiphany:item_crafted (Items Crafted) ​

Checks the cumulative number of a specified item that the player has crafted, using the vanilla Stats.ITEM_CRAFTED statistic. Supports an item id or an item tag prefixed with #; tag conditions sum the crafted counts of every item in the tag.

FieldTypeRequiredDefaultDescription
itemString✅—Item id or "#tag"
countint1Minimum cumulative crafted count
jsonc
{ "type": "epiphany:item_crafted", "item": "minecraft:iron_pickaxe", "count": 2 }

Auto-unlock is checked immediately when the player crafts an item; statistics earned before the condition was added also count.

epiphany:item_broken (Items Broken by Durability) ​

Checks the cumulative number of a specified item that the player has broken through durability loss, using the vanilla Stats.ITEM_BROKEN statistic. Supports an item id or an item tag prefixed with #; tag conditions sum the broken counts of every item in the tag.

FieldTypeRequiredDefaultDescription
itemString✅—Item id or "#tag"
countint1Minimum cumulative broken count
jsonc
{ "type": "epiphany:item_broken", "item": "#yourmod:durable_tools", "count": 3 }

Auto-unlock is checked immediately when a player's item breaks. This condition does not count manually dropped, cleared, or otherwise removed items that did not break through durability loss.

epiphany:block_broken (Blocks Mined) ​

Cumulative number of times the player has mined this block.

FieldTypeRequiredDefaultDescription
blockString✅—Block id or "#tag"
countint1Cumulative count

epiphany:kill_entity (Entities Killed) ​

Cumulative number of times the player has killed this entity type.

FieldTypeRequiredDefaultDescription
entityString✅—Entity id or "#tag"
countint1Cumulative count

FakePlayer Exclusion

Both kill_entity and block_broken exclude FakePlayers, so kills/mining contributed by automation mods (e.g., Create) are not counted in the statistics.

epiphany:aptitude (Aptitude Value) ​

FieldTypeRequiredDefaultDescription
valuelong✅—Right-hand comparison value
comparisonComparison>=Comparison operator

epiphany:insight_points (Insight Points) ​

The player's current available Insight Points (not counting spent ones). Note: this is the current balance, not the cumulative total.

FieldTypeRequiredDefaultDescription
valueint✅—Right-hand comparison value
comparisonComparison>=Comparison operator

epiphany:module_selected (Module Selected) ​

FieldTypeRequiredDescription
moduleResourceLocation✅Module id

epiphany:module_completed (Module Completed) ​

FieldTypeRequiredDescription
moduleResourceLocation✅Module id

epiphany:insight_selected (Insight Unlocked) ​

FieldTypeRequiredDescription
insightResourceLocation✅Insight id

epiphany:epiphany_selected (Epiphany Activated) ​

FieldTypeRequiredDescription
epiphanyResourceLocation✅Epiphany id

FTB Quests Integration (Soft Dependency) ​

Soft Dependency

The following 4 types require FTB Quests to be installed to actually function. When absent, they always return false, but the datapack will still load.

Since FTBQ conditions are event-driven (isEventDriven() == true), auto-unlock skips polling evaluation for these types and only checks them when the corresponding FTBQ event fires.

epiphany:ftbq_quest (Quest Completed) ​

FieldTypeRequiredDescription
questString✅FTBQ quest hex string id

epiphany:ftbq_chapter_started (Chapter Started) ​

FieldTypeRequiredDescription
chapterString✅FTBQ chapter hex string id

epiphany:ftbq_chapter_completed (Chapter Completed) ​

FieldTypeRequiredDescription
chapterString✅FTBQ chapter hex string id

epiphany:ftbq_tag (Has Tag Mark) ​

FieldTypeRequiredDefaultDescription
tagString✅—FTBQ tag string
countint1Minimum tag count required

KubeJS Integration (Soft Dependency) ​

epiphany:kubejs_stage (Has Stage) ​

Evaluates whether the player has the specified KubeJS stage.

FieldTypeRequiredDescription
stageString✅KubeJS stage name

When KubeJS is not installed, this condition always returns false.

Comparison Operators ​

Comparison ​

Several condition types use comparison operators. Write the operator as a JSON string:

SyntaxMeaning
>=Greater than or equal to (default)
<=Less than or equal to
==Equal to
>Greater than
<Less than

Invalid Operators

An unrecognized operator silently falls back to >=.

Built-in Type Reference ​

TypeFieldsTag supportEvent-drivenSoft dependency
always / never0—No—
and / or / not1 (child condition)—No—
attribute3—No—
aptitude2—No—
insight_points2—No—
experience_level2—No—
effect2—No—
statistic3—No—
dimension1—No—
biome1YesNo (polling)—
structure1YesNo (polling)—
advancement1—No—
item2YesNo—
item_used2NoNo—
item_crafted2YesYes—
item_broken2YesYes—
block_broken2YesNo—
kill_entity2YesNo—
module_selected / module_completed1—No—
insight_selected1—No—
epiphany_selected1—No—
ftbq_quest / ftbq_chapter_started / ftbq_chapter_completed1—YesFTB Quests
ftbq_tag2—YesFTB Quests
kubejs_stage1—NoKubeJS