Data-driven item tier system for Minecraft 1.20.1 / Forge. No Java required to configure tiers — only JSON files.
Languages: English · Português
Tier Engine assigns classification labels (tiers) to items — like Common, Rare, Epic, Legendary. When a player crafts, fishes, smelts, uses an anvil, loots a chest, etc., the mod can roll a tier and store it on the item (NBT + tooltip).
You define tiers in datapacks and/or config/tiermod/ (config overrides datapack by id).
Datapack (base, ship with modpack):
data/<namespace>/tiermod/tiers/*.json
data/<namespace>/tiermod/groups/*.json
Config override (per server / local tweaks):
<game instance>/
└── config/
└── tiermod/
├── tiers/ ← one or more *.json files (tier definitions)
└── groups/ ← one or more *.json files (tier groups)
run/config/tiermod/ when using ./gradlew runClient<server folder>/config/tiermod/createDefaultsOnFirstRun=true (default), the mod copies built-in examples from defaults/tiers/ and defaults/groups/data/tiermod/tiers/global_tiers.json and data/tiermod/groups/rarity.json/reload or /tiermod reload rebuilds tiers; multiplayer clients receive display sync for tooltips (S2C)Each tier file accepts any of these shapes:
{ "id": "my_tier", "display": { ... }, "behavior": { ... } }
[ { "id": "tier_a", ... }, { "id": "tier_b", ... } ]
{ "tiers": [ { "id": "tier_a", ... } ] }
Tier ids default to namespace tiermod (e.g. "common" → tiermod:common).
Create config/tiermod/tiers/my_first_tier.json:
{
"id": "starter",
"display": {
"name": "Starter",
"tooltip": "Your first custom tier!",
"baseColor": "#55FF55",
"shadowColor": "#228822"
},
"assignment": {
"allowItems": ["minecraft:wooden_sword"]
},
"behavior": {
"weight": 100,
"triggers": ["COMMAND"]
}
}
Test in-game (OP level 2):
/tiermod set starter — force-assign the tier/tiermod get — confirm tier on item/tiermod reloadBelow is one test object showing every major mechanism. Field guide:
| Section | Field | Meaning |
|---|---|---|
| Root | id |
Unique tier id (required) |
inherit |
Copy display/assignment/behavior/effects from parent tier, then merge overrides | |
| display | name, tooltip |
Shown in tooltip |
baseColor, shadowColor |
Hex colors for tooltip text | |
| assignment | allowItems |
Exact item ids (minecraft:diamond_sword) |
allowMods |
All items from a mod namespace (aquaculture) |
|
allowTags |
Item tags (#minecraft:pickaxes) |
|
| behavior | always |
If true, always wins over weighted roll in its group |
weight |
Roll weight (higher = more common) | |
exclusiveGroup |
Only one tier from this group per item | |
triggers |
When this tier can be rolled (see table below) | |
conditions |
Must be true at roll time or tier is skipped | |
specialConditions |
Extra weight multipliers when sub-conditions match | |
| effects | attributeModifiers |
Stat bonuses on the item |
enchantments |
Applied enchantments | |
visual.glint |
Enchantment glint on item | |
custom |
Payload for script/addon hooks |
{
"id": "masterwork_pickaxe",
"inherit": "legendary",
"display": {
"name": "Masterwork Pickaxe Tier",
"tooltip": "Forged by a veteran miner.",
"baseColor": "#FFD700",
"shadowColor": "#996600"
},
"assignment": {
"allowItems": ["minecraft:diamond_pickaxe"],
"allowMods": ["create"],
"allowTags": ["#minecraft:pickaxes"]
},
"behavior": {
"always": false,
"weight": 5,
"exclusiveGroup": "rarity",
"triggers": [
"ITEM_CRAFTED",
"ITEM_LOOTED",
"ITEM_FISHED",
"ITEM_SMELTED",
"ITEM_SMITHING",
"ITEM_ANVIL",
"ENTITY_DROP",
"BLOCK_BREAK",
"COMMAND"
],
"conditions": {
"and": [
{ "dimension": "minecraft:overworld" },
{ "player_level": { "greater_or_equal": 20 } }
]
},
"specialConditions": [
{
"condition": { "isNight": true },
"weightMultiplier": 2.0
},
{
"condition": { "biome": "minecraft:deep_dark" },
"weightMultiplier": 3.0
}
]
},
"effects": {
"attributeModifiers": [
{
"attribute": "minecraft:generic.attack_damage",
"amount": 1.0,
"operation": "add",
"slot": "mainhand"
}
],
"enchantments": [
{ "id": "minecraft:efficiency", "level": 3, "allowUnsafe": false }
],
"visual": {
"glint": true,
"particles": ["minecraft:enchant"]
},
"custom": [
{ "id": "tiermod:example_hook", "payload": { "bonus": "mining" } }
]
}
}
Each tier only rolls when its triggers list includes that event and the item matches assignment.
| Trigger | When it fires | Example use |
|---|---|---|
ITEM_CRAFTED |
Crafting table | Crafted gear |
ITEM_FISHED |
Fishing rod catch | Fishing loot |
ITEM_SMELTED |
Furnace / blast furnace output | Smelted ingots |
ITEM_ANVIL |
Anvil combine/repair output | Repaired/enchanted tools |
ITEM_SMITHING |
Smithing table output | Netherite upgrade |
ITEM_LOOTED |
Chest / structure loot tables | Dungeon loot |
ENTITY_DROP |
Mob death drops | Mob farming |
BLOCK_BREAK |
Block break loot (with tool) | Ore drops |
COMMAND |
/tiermod roll <trigger> |
Testing / admin |
ITEM_CRAFTED)config/tiermod/tiers/craft_tiers.json:
{
"id": "crafted_fine",
"display": {
"name": "Fine Craft",
"baseColor": "#88CCFF",
"shadowColor": "#446688"
},
"assignment": {
"allowTags": ["#minecraft:tools"]
},
"behavior": {
"weight": 30,
"exclusiveGroup": "rarity",
"triggers": ["ITEM_CRAFTED"]
}
}
Try it: Craft any tool at a crafting table (tier rolls automatically if other tiers in the group also match).
ITEM_FISHED){
"id": "anglers_prize",
"display": {
"name": "Angler's Prize",
"tooltip": "A lucky catch.",
"baseColor": "#00AAAA",
"shadowColor": "#005555"
},
"assignment": {
"allowMods": ["minecraft"],
"allowTags": ["#minecraft:fishes"]
},
"behavior": {
"weight": 10,
"exclusiveGroup": "rarity",
"triggers": ["ITEM_FISHED"],
"conditions": { "biome": "#minecraft:is_ocean" }
}
}
Try it: Fish in an ocean biome.
ITEM_SMELTED){
"id": "refined_ingot",
"display": {
"name": "Refined",
"tooltip": "Purified by heat.",
"baseColor": "#FFAA00",
"shadowColor": "#884400"
},
"assignment": {
"allowItems": ["minecraft:iron_ingot", "minecraft:gold_ingot", "minecraft:copper_ingot"]
},
"behavior": {
"weight": 25,
"triggers": ["ITEM_SMELTED"]
}
}
Try it: Smelt raw ore in a furnace.
ITEM_ANVIL){
"id": "reinforced",
"display": {
"name": "Reinforced",
"tooltip": "Hammered into perfection.",
"baseColor": "#CCCCCC",
"shadowColor": "#666666"
},
"assignment": {
"allowTags": ["#minecraft:tools", "#minecraft:weapon"]
},
"behavior": {
"weight": 15,
"exclusiveGroup": "rarity",
"triggers": ["ITEM_ANVIL"]
}
}
Try it: Combine or repair a tool at an anvil.
ITEM_SMITHING){
"id": "netherforged",
"display": {
"name": "Netherforged",
"baseColor": "#4A0808",
"shadowColor": "#220404"
},
"assignment": {
"allowItems": ["minecraft:netherite_sword", "minecraft:netherite_pickaxe"]
},
"behavior": {
"weight": 50,
"triggers": ["ITEM_SMITHING"],
"conditions": { "dimension": "minecraft:the_nether" }
}
}
ITEM_LOOTED){
"id": "dungeon_spoil",
"display": {
"name": "Dungeon Spoil",
"baseColor": "#AA55FF",
"shadowColor": "#552288"
},
"assignment": {
"allowTags": ["#minecraft:swords"]
},
"behavior": {
"weight": 20,
"exclusiveGroup": "rarity",
"triggers": ["ITEM_LOOTED"]
}
}
ENTITY_DROP){
"id": "hunter_mark",
"display": {
"name": "Hunter's Mark",
"baseColor": "#FF5555",
"shadowColor": "#882222"
},
"assignment": {
"allowItems": ["minecraft:bone", "minecraft:rotten_flesh"]
},
"behavior": {
"weight": 40,
"triggers": ["ENTITY_DROP"]
}
}
BLOCK_BREAK){
"id": "vein_lucky",
"display": {
"name": "Vein Lucky",
"baseColor": "#55FFAA",
"shadowColor": "#228855"
},
"assignment": {
"allowItems": ["minecraft:coal", "minecraft:raw_iron"]
},
"behavior": {
"weight": 12,
"triggers": ["BLOCK_BREAK"]
}
}
COMMAND){
"id": "debug_tier",
"display": {
"name": "Debug Tier",
"baseColor": "#FFFFFF",
"shadowColor": "#888888"
},
"assignment": {
"allowTags": ["#minecraft:tools"]
},
"behavior": {
"weight": 100,
"triggers": ["COMMAND"]
}
}
Try it: Hold a tool → /tiermod roll COMMAND
Only one tier from the group applies per item. Higher weight = more likely.
config/tiermod/groups/rarity.json:
{
"id": "rarity",
"exclusive": true,
"tiers": ["common", "rare", "epic", "legendary"]
}
Each tier sets "exclusiveGroup": "rarity" and different weight values (e.g. 100 / 50 / 15 / 1).
"behavior": {
"always": true,
"weight": 0,
"triggers": ["ITEM_CRAFTED"]
}
When eligible, this tier always wins over weighted rolls in the same exclusive group.
inherit)Child tier reuses parent fields and overrides only what you specify:
{
"id": "legendary_nether",
"inherit": "legendary",
"display": {
"name": "Nether Legendary",
"baseColor": "#FF4500",
"shadowColor": "#662200"
},
"effects": {
"visual": { "glint": true }
}
}
Tier only enters the roll pool if conditions pass:
"conditions": { "dimension": "minecraft:the_nether" }
"conditions": {
"and": [
{ "biome": "minecraft:swamp" },
{ "isNight": true }
]
}
"conditions": { "player_level": { "greater_than": 30 } }
Condition keys: biome, dimension, isNight, player_level — combine with and, or, not.
specialConditions)Does not block the tier — multiplies weight when extra conditions match:
"specialConditions": [
{
"condition": { "dimension": "minecraft:the_nether" },
"weightMultiplier": 3.0
}
]
Effective weight = baseWeight × (product of matching multipliers).
When tier is assigned, effects apply to the item:
All commands require OP level 2. Hold the target item in your main hand unless noted.
| Command | Description |
|---|---|
/tiermod get |
Show tier on held item |
/tiermod set <tierId> |
Force-set tier (legendary or tiermod:legendary) |
/tiermod roll <trigger> |
Roll tier using trigger (e.g. ITEM_CRAFTED) |
/tiermod reload |
Reload datapacks + config, rebuild registry, sync clients |
/tiermod list |
List all loaded tiers |
/tiermod triggers |
Show which triggers have tiers |
/tiermod info <tierId> |
Detailed tier debug view |
/tiermod groups |
List tier groups |
heldItemTier)Full scenario: 4 rod tiers affect 7 fish tier roll chances; legendary fish guaranteed in Deep Dark at night with the best rod.
Copy from examples/fishing/ into config/tiermod/ (see examples/fishing/README.md), then /tiermod reload.
Quick test:
/tiermod set rod_t4fish_tier_7)How rod quality affects fish: fish tiers use specialConditions with heldItemTier:
"specialConditions": [
{ "condition": { "heldItemTier": "rod_t4" }, "weightMultiplier": 5.0 }
]
Legendary gate (always wins when eligible):
"conditions": {
"and": [
{ "biome": "minecraft:deep_dark" },
{ "isNight": true },
{ "heldItemTier": "rod_t4" }
]
}
Automated tests: FishingScenarioTest in the project test suite.
| Problem | Fix |
|---|---|
| Tier not rolling | Check triggers, assignment (item/tag/mod), and conditions |
| Fish tier ignores rod | Player must hold the rod in main hand while fishing; set rod tier with /tiermod set rod_tN |
| Tier never appears in Nether | Condition may require Overworld — check conditions.dimension |
| Changes not applied | Run /tiermod reload after editing JSON |
| No config folder | Start game once; defaults copy if createDefaultsOnFirstRun=true |
| Need debug details | Set debugLogging=true in Forge config for tiermod |
Fail-closed: If a condition needs player position/biome but context is missing, it evaluates to false (tier skipped).
Separate jars — install only what you need:
| Addon | Mod id | Purpose |
|---|---|---|
| KubeJS | tiermod_kubejs |
Script events & API bindings |
| CraftTweaker | tiermod_crafttweaker |
ZenScript helpers |
| LootJS | tiermod_lootjs |
Loot script tier helper |
| Apotheosis | tiermod_apotheosis |
Affix conditions |
| FTB Quests | tiermod_ftbquests |
tiermod:tier_item quest task |
Details: .cursor/specs/integrations.md
O Tier Engine atribui rótulos de classificação (tiers) aos itens — como Comum, Raro, Épico, Lendário. Quando o jogador crafta, pesca, funde na fornalha, usa a bigorna, abre baús, etc., o mod pode sortear um tier e gravá-lo no item (NBT + tooltip).
Tudo é configurado em JSON dentro de config/tiermod/. Não precisa de Java.
<instância do jogo>/
└── config/
└── tiermod/
├── tiers/ ← um ou mais arquivos *.json (definições de tier)
└── groups/ ← um ou mais arquivos *.json (grupos de tier)
run/config/tiermod/ ao usar ./gradlew runClient<pasta do servidor>/config/tiermod/config/tiermod/ estiver vazio e createDefaultsOnFirstRun=true (padrão), o mod copia exemplos para configdata/tiermod/tiers/global_tiers.json e data/tiermod/groups/rarity.json/reload vanilla ou /tiermod reload; em multiplayer, clientes recebem sync S2C para tooltipsCada arquivo de tier aceita qualquer destes formatos:
{ "id": "meu_tier", "display": { ... }, "behavior": { ... } }
[ { "id": "tier_a", ... }, { "id": "tier_b", ... } ]
{ "tiers": [ { "id": "tier_a", ... } ] }
Ids de tier usam namespace tiermod por padrão ("common" → tiermod:common).
Crie config/tiermod/tiers/meu_primeiro_tier.json:
{
"id": "starter",
"display": {
"name": "Iniciante",
"tooltip": "Seu primeiro tier customizado!",
"baseColor": "#55FF55",
"shadowColor": "#228822"
},
"assignment": {
"allowItems": ["minecraft:wooden_sword"]
},
"behavior": {
"weight": 100,
"triggers": ["COMMAND"]
}
}
Teste no jogo (OP nível 2):
/tiermod set starter — força o tier no item/tiermod get — confirma o tier/tiermod reloadObjeto de teste com cada mecanismo. Guia de campos:
| Seção | Campo | Significado |
|---|---|---|
| Raiz | id |
Id único do tier (obrigatório) |
inherit |
Herda display/assignment/behavior/effects do pai e mescla overrides | |
| display | name, tooltip |
Texto no tooltip |
baseColor, shadowColor |
Cores hex do tooltip | |
| assignment | allowItems |
Ids exatos de item |
allowMods |
Todos os itens de um mod (aquaculture) |
|
allowTags |
Tags de item (#minecraft:pickaxes) |
|
| behavior | always |
Se true, sempre vence o sorteio no grupo |
weight |
Peso no sorteio (maior = mais comum) | |
exclusiveGroup |
Só um tier deste grupo por item | |
triggers |
Quando o tier pode ser sorteado | |
conditions |
Deve ser verdadeiro no momento do roll | |
specialConditions |
Multiplicadores extras de peso | |
| effects | attributeModifiers |
Bônus de atributo no item |
enchantments |
Encantamentos aplicados | |
visual.glint |
Brilho de encantamento | |
custom |
Payload para scripts/addons |
{
"id": "masterwork_pickaxe",
"inherit": "legendary",
"display": {
"name": "Tier Picareta Obra-prima",
"tooltip": "Forjada por um minerador veterano.",
"baseColor": "#FFD700",
"shadowColor": "#996600"
},
"assignment": {
"allowItems": ["minecraft:diamond_pickaxe"],
"allowMods": ["create"],
"allowTags": ["#minecraft:pickaxes"]
},
"behavior": {
"always": false,
"weight": 5,
"exclusiveGroup": "rarity",
"triggers": [
"ITEM_CRAFTED",
"ITEM_LOOTED",
"ITEM_FISHED",
"ITEM_SMELTED",
"ITEM_SMITHING",
"ITEM_ANVIL",
"ENTITY_DROP",
"BLOCK_BREAK",
"COMMAND"
],
"conditions": {
"and": [
{ "dimension": "minecraft:overworld" },
{ "player_level": { "greater_or_equal": 20 } }
]
},
"specialConditions": [
{
"condition": { "isNight": true },
"weightMultiplier": 2.0
},
{
"condition": { "biome": "minecraft:deep_dark" },
"weightMultiplier": 3.0
}
]
},
"effects": {
"attributeModifiers": [
{
"attribute": "minecraft:generic.attack_damage",
"amount": 1.0,
"operation": "add",
"slot": "mainhand"
}
],
"enchantments": [
{ "id": "minecraft:efficiency", "level": 3, "allowUnsafe": false }
],
"visual": {
"glint": true,
"particles": ["minecraft:enchant"]
},
"custom": [
{ "id": "tiermod:example_hook", "payload": { "bonus": "mining" } }
]
}
}
O tier só entra no sorteio se triggers incluir o evento e o item bater com assignment.
| Trigger | Quando dispara | Exemplo |
|---|---|---|
ITEM_CRAFTED |
Mesa de craft | Ferramentas craftadas |
ITEM_FISHED |
Pesca | Peixes / loot de pesca |
ITEM_SMELTED |
Saída da fornalha | Lingotes fundidos |
ITEM_ANVIL |
Saída da bigorna | Reparo/combine |
ITEM_SMITHING |
Mesa de ferraria | Upgrade netherite |
ITEM_LOOTED |
Loot de baús | Dungeons |
ENTITY_DROP |
Drop de mobs | Farm de mobs |
BLOCK_BREAK |
Quebra de bloco | Minérios |
COMMAND |
/tiermod roll |
Testes / admin |
ITEM_CRAFTED){
"id": "crafted_fine",
"display": {
"name": "Craft Fino",
"baseColor": "#88CCFF",
"shadowColor": "#446688"
},
"assignment": {
"allowTags": ["#minecraft:tools"]
},
"behavior": {
"weight": 30,
"exclusiveGroup": "rarity",
"triggers": ["ITEM_CRAFTED"]
}
}
Teste: Crafte qualquer ferramenta na mesa de craft.
ITEM_FISHED){
"id": "anglers_prize",
"display": {
"name": "Prêmio do Pescador",
"tooltip": "Uma pesca de sorte.",
"baseColor": "#00AAAA",
"shadowColor": "#005555"
},
"assignment": {
"allowMods": ["minecraft"],
"allowTags": ["#minecraft:fishes"]
},
"behavior": {
"weight": 10,
"exclusiveGroup": "rarity",
"triggers": ["ITEM_FISHED"],
"conditions": { "biome": "#minecraft:is_ocean" }
}
}
Teste: Pesque em bioma oceânico.
ITEM_SMELTED){
"id": "refined_ingot",
"display": {
"name": "Refinado",
"tooltip": "Purificado pelo calor.",
"baseColor": "#FFAA00",
"shadowColor": "#884400"
},
"assignment": {
"allowItems": ["minecraft:iron_ingot", "minecraft:gold_ingot", "minecraft:copper_ingot"]
},
"behavior": {
"weight": 25,
"triggers": ["ITEM_SMELTED"]
}
}
Teste: Funda minério cru na fornalha.
ITEM_ANVIL){
"id": "reinforced",
"display": {
"name": "Reforçado",
"tooltip": "Martelado à perfeição.",
"baseColor": "#CCCCCC",
"shadowColor": "#666666"
},
"assignment": {
"allowTags": ["#minecraft:tools", "#minecraft:weapon"]
},
"behavior": {
"weight": 15,
"exclusiveGroup": "rarity",
"triggers": ["ITEM_ANVIL"]
}
}
Teste: Combine ou repare uma ferramenta na bigorna.
ITEM_SMITHING){
"id": "netherforged",
"display": {
"name": "Forjado no Nether",
"baseColor": "#4A0808",
"shadowColor": "#220404"
},
"assignment": {
"allowItems": ["minecraft:netherite_sword", "minecraft:netherite_pickaxe"]
},
"behavior": {
"weight": 50,
"triggers": ["ITEM_SMITHING"],
"conditions": { "dimension": "minecraft:the_nether" }
}
}
ITEM_LOOTED){
"id": "dungeon_spoil",
"display": {
"name": "Espólio de Dungeon",
"baseColor": "#AA55FF",
"shadowColor": "#552288"
},
"assignment": {
"allowTags": ["#minecraft:swords"]
},
"behavior": {
"weight": 20,
"exclusiveGroup": "rarity",
"triggers": ["ITEM_LOOTED"]
}
}
ENTITY_DROP){
"id": "hunter_mark",
"display": {
"name": "Marca do Caçador",
"baseColor": "#FF5555",
"shadowColor": "#882222"
},
"assignment": {
"allowItems": ["minecraft:bone", "minecraft:rotten_flesh"]
},
"behavior": {
"weight": 40,
"triggers": ["ENTITY_DROP"]
}
}
BLOCK_BREAK){
"id": "vein_lucky",
"display": {
"name": "Veio Sortudo",
"baseColor": "#55FFAA",
"shadowColor": "#228855"
},
"assignment": {
"allowItems": ["minecraft:coal", "minecraft:raw_iron"]
},
"behavior": {
"weight": 12,
"triggers": ["BLOCK_BREAK"]
}
}
COMMAND){
"id": "debug_tier",
"display": {
"name": "Tier Debug",
"baseColor": "#FFFFFF",
"shadowColor": "#888888"
},
"assignment": {
"allowTags": ["#minecraft:tools"]
},
"behavior": {
"weight": 100,
"triggers": ["COMMAND"]
}
}
Teste: Segure uma ferramenta → /tiermod roll COMMAND
Só um tier do grupo por item. weight maior = mais provável.
config/tiermod/groups/rarity.json:
{
"id": "rarity",
"exclusive": true,
"tiers": ["common", "rare", "epic", "legendary"]
}
always (garantido)"behavior": {
"always": true,
"weight": 0,
"triggers": ["ITEM_CRAFTED"]
}
Quando elegível, sempre vence o sorteio no mesmo grupo exclusivo.
inherit){
"id": "legendary_nether",
"inherit": "legendary",
"display": {
"name": "Lendário do Nether",
"baseColor": "#FF4500",
"shadowColor": "#662200"
},
"effects": {
"visual": { "glint": true }
}
}
"conditions": { "dimension": "minecraft:the_nether" }
"conditions": {
"and": [
{ "biome": "minecraft:swamp" },
{ "isNight": true }
]
}
Chaves: biome, dimension, isNight, player_level — combine com and, or, not.
specialConditions)"specialConditions": [
{
"condition": { "dimension": "minecraft:the_nether" },
"weightMultiplier": 3.0
}
]
Peso efetivo = pesoBase × (produto dos multiplicadores que bateram).
Atributos, encantamentos, brilho visual e payload custom para integrações — ver integrations.md.
Todos exigem OP nível 2. Item na mão principal.
| Comando | Descrição |
|---|---|
/tiermod get |
Mostra tier do item |
/tiermod set <tierId> |
Define tier (legendary ou tiermod:legendary) |
/tiermod roll <trigger> |
Sorteia tier (ex.: ITEM_CRAFTED) |
/tiermod reload |
Recarrega datapacks + config, reconstrói registry, sincroniza clientes |
/tiermod list |
Lista tiers carregados |
/tiermod triggers |
Cobertura de triggers |
/tiermod info <tierId> |
Detalhes de um tier |
/tiermod groups |
Lista grupos |
heldItemTier)Cenário completo: 4 tiers de vara influenciam as chances dos 7 tiers de peixe; peixe lendário garantido no Deep Dark à noite com a melhor vara.
Copie de examples/fishing/ para config/tiermod/ (veja examples/fishing/README.md), depois /tiermod reload.
Teste rápido:
/tiermod set rod_t4fish_tier_7)Vara melhora o peixe: specialConditions com heldItemTier:
"specialConditions": [
{ "condition": { "heldItemTier": "rod_t4" }, "weightMultiplier": 5.0 }
]
Peixe lendário (sempre vence quando elegível):
"conditions": {
"and": [
{ "biome": "minecraft:deep_dark" },
{ "isNight": true },
{ "heldItemTier": "rod_t4" }
]
}
Testes automatizados: FishingScenarioTest na suíte de testes do projeto.
| Problema | Solução |
|---|---|
| Tier não sorteia | Verifique triggers, assignment e conditions |
| Peixe ignora tier da vara | Vara na mão principal ao pescar; use /tiermod set rod_tN na vara |
| Tier nunca no Nether | conditions.dimension pode exigir Overworld |
| Mudanças não aplicam | /tiermod reload após editar JSON |
| Pasta config não existe | Inicie o jogo; defaults copiam se createDefaultsOnFirstRun=true |
| Precisa de debug | debugLogging=true na config Forge do tiermod |
Fail-closed: condição sem contexto (bioma, dimensão, etc.) = false (tier ignorado).
Jars separados — instale só o que precisar. Detalhes: .cursor/specs/integrations.md
| Addon | Mod id | Função |
|---|---|---|
| KubeJS | tiermod_kubejs |
Eventos e bindings |
| CraftTweaker | tiermod_crafttweaker |
Helpers ZenScript |
| LootJS | tiermod_lootjs |
Helper em loot scripts |
| Apotheosis | tiermod_apotheosis |
Condições de affix |
| FTB Quests | tiermod_ftbquests |
Task tiermod:tier_item |
For AI agents: see AGENTS.md for machine-readable schema, decision rules, and validation checklists.