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 ConditionList 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 ConditionList of child conditions

epiphany:not (Negation)

Negates a child condition.

FieldTypeRequiredDescription
conditionConditionThe 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
attributeResourceLocationAttribute id, e.g., minecraft:generic.max_health
valuedoubleRight-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
effectResourceLocationEffect 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
valueintRight-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_typeResourceLocationStatistic category. Omit for a custom statistic; examples: minecraft:crafted, minecraft:broken, minecraft:used, minecraft:mined, minecraft:killed, minecraft:killed_by
statResourceLocationCustom statistic id when stat_type is omitted; otherwise the category target id (item, block, or entity type)
valueintRight-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
dimensionResourceLocationDimension id
jsonc
{ "type": "epiphany:dimension", "dimension": "minecraft:the_nether" }

epiphany:biome (Current Biome)

Evaluates the player's current biome.

FieldTypeRequiredDescription
biomeStringBiome 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
structureStringStructure id or "#tag", e.g., minecraft:stronghold / "#minecraft:villages"

epiphany:advancement (Advancement Earned)

FieldTypeRequiredDescription
advancementResourceLocationAdvancement 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
itemStringItem id or "#tag"
countint1Quantity

epiphany:item_used (Has Used an Item)

Cumulative number of times the player has used this item.

FieldTypeRequiredDefaultDescription
itemStringItem 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
itemStringItem 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
itemStringItem 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
blockStringBlock id or "#tag"
countint1Cumulative count

epiphany:kill_entity (Entities Killed)

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

FieldTypeRequiredDefaultDescription
entityStringEntity 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
valuelongRight-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
valueintRight-hand comparison value
comparisonComparison>=Comparison operator

epiphany:module_selected (Module Selected)

FieldTypeRequiredDescription
moduleResourceLocationModule id

epiphany:module_completed (Module Completed)

FieldTypeRequiredDescription
moduleResourceLocationModule id

epiphany:insight_selected (Insight Unlocked)

FieldTypeRequiredDescription
insightResourceLocationInsight id

epiphany:epiphany_selected (Epiphany Activated)

FieldTypeRequiredDescription
epiphanyResourceLocationEpiphany 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
questStringFTBQ quest hex string id

epiphany:ftbq_chapter_started (Chapter Started)

FieldTypeRequiredDescription
chapterStringFTBQ chapter hex string id

epiphany:ftbq_chapter_completed (Chapter Completed)

FieldTypeRequiredDescription
chapterStringFTBQ chapter hex string id

epiphany:ftbq_tag (Has Tag Mark)

FieldTypeRequiredDefaultDescription
tagStringFTBQ 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
stageStringKubeJS 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 / never0No
and / or / not1 (child condition)No
attribute3No
aptitude2No
insight_points2No
experience_level2No
effect2No
statistic3No
dimension1No
biome1YesNo (polling)
structure1YesNo (polling)
advancement1No
item2YesNo
item_used2NoNo
item_crafted2YesYes
item_broken2YesYes
block_broken2YesNo
kill_entity2YesNo
module_selected / module_completed1No
insight_selected1No
epiphany_selected1No
ftbq_quest / ftbq_chapter_started / ftbq_chapter_completed1YesFTB Quests
ftbq_tag2YesFTB Quests
kubejs_stage1NoKubeJS