MC Toolkit

Guias / Comandos e dados

Encantamentos personalizados sem mods: o formato de encantamento orientado por dados

Os encantamentos viraram JSON de datapack, então um encantamento personalizado não precisa de mod. Veja o formato do arquivo, os componentes de efeito que realmente fazem algo e como torná-lo obtenível.

Os encantamentos costumavam ser fixos no código. Agora são dados de datapack, o que significa que um encantamento genuinamente personalizado — novo nome, novo efeito, nova curva de custo — é um arquivo JSON.

Onde ele fica

data/<namespace>/enchantment/lightning_strike.json

No singular enchantment/, como toda outra categoria de datapack desde a renomeação.

O arquivo mínimo

{
  "description": { "translate": "enchantment.my_pack.lightning_strike" },
  "supported_items": "#minecraft:enchantable/melee_weapon",
  "weight": 2,
  "max_level": 3,
  "min_cost": { "base": 10, "per_level_above_first": 10 },
  "max_cost": { "base": 50, "per_level_above_first": 10 },
  "anvil_cost": 4,
  "slots": ["mainhand"]
}

Só isso já dá um encantamento de verdade, que carrega e aparece no item. Ele ainda não faz nada — o comportamento é separado — e a mesa não vai oferecê-lo até que ele seja marcado com a tag (abaixo).

  • weight é a raridade na Mesa de Encantamentos. O vanilla usa 10 para comum e 1 para muito raro. É relativo, não uma porcentagem.
  • slots decide onde o encantamento fica ativo: mainhand, offhand, armor, head, e assim por diante. É obrigatório: se você omitir, o arquivo não carrega.
  • supported_items aceita uma tag de item ou uma lista. As tags #minecraft:enchantable/* já existem para os grupos que fazem sentido — melee_weapon, sharp_weapon, mining, armor e assim por diante. Não existe enchantable/sword; uma tag que não existe faz o arquivo falhar.

Fazendo ele fazer algo

effects anexa comportamento:

"effects": {
  "minecraft:post_attack": [{
    "enchanted": "attacker",
    "affected": "victim",
    "effect": { "type": "minecraft:run_function", "function": "my_pack:strike" },
    "requirements": { "condition": "minecraft:random_chance", "chance": 0.25 }
  }]
}

post_attack precisa saber de quem é o encantamento (enchanted) e em quem o efeito cai (affected) — os dois são obrigatórios. run_function é a saída de emergência — tudo o que uma função pode fazer, o encantamento pode fazer. Os tipos de efeito nativos cobrem dano, repulsão, durabilidade, drops de itens e atributos sem precisar de função nenhuma, e são mais baratos.

requirements aceita qualquer predicate, então condicionar ao tipo do alvo, ao clima ou a uma chance aleatória é um bloco de JSON.

Dando um nome a ele

description é um componente de texto, então um nome fixo no código funciona:

"description": { "text": "Lightning Strike", "color": "gold" }

mas uma chave translate mais um arquivo de idioma em um pacote de recursos é o que faz ele ser lido corretamente por jogadores de outros idiomas — o mesmo motivo pelo qual este site tira os termos de jogo das próprias traduções da Mojang.

Tornando-o obtenível

Três caminhos, e você normalmente vai querer mais de um:

  • Mesa de Encantamentos — depois que weight e a curva de custo estiverem definidos e o encantamento estiver em #minecraft:in_enchanting_table.
  • Tabelas de loot — enchant_randomly com o seu encantamento listado, ou enchant_with_levels se ele deve competir por custo.
  • Aldeão troca — um Livro Encantado com o seu encantamento no item da troca.

Adicioná-lo a #minecraft:in_enchanting_table é o que faz a mesa oferecê-lo; é fácil esquecer a tag e acabar com um encantamento que existe, mas nunca aparece.

Monte o JSON do encantamento e o equivalente dele para enfeite de armadura, com as tags e os slots definidos, no Custom Enchantment & Trim Builder.

Construtor de encantamentos e enfeites →

Mais guias

Ver todos →