Atributos de armas

From DragonMineZ Wiki
This page is a translated version of the page Weapon Attributes and the translation is 100% complete.

Atributos de armas é um sistema de datapacks que diz ao motor de combate do DragonMineZ como um item específico se comporta em combate: alcance de ataque, animação, formato da hitbox, multiplicadores de dano, variantes de ataque condicionais (empunhar duas armas, agachar, estar montado etc.) e estatísticas críticas. Mods de armas de terceiros se conectam a esse sistema para ter um comportamento de combate do DragonMineZ adequado.

Carregador: WeaponRegistry.loadAttributes(resourceManager), em src/main/java/com/dragonminez/common/combat/logic/weapon/WeaponRegistry.java. Ele é recarregado com a recarga de datapacks do vanilla (/reload ou uma reinicialização), não com /dmzreload.

Local do arquivo e mapeamento para o item

data/<namespace>/weapon_attributes/<item_path>.json

O namespace e o caminho formam o id do item de destino: data/dragonminez/weapon_attributes/axe.json se aplica a dragonminez:axe. Um mod de terceiros define suas próprias armas no seu próprio namespace, por exemplo data/mymod/weapon_attributes/great_axe.json para mymod:great_axe.

Datapacks do Better Combat Qualquer namespace bettercombat: encontrado nestes arquivos JSON é reescrito como dragonminez: no carregamento, então os datapacks de atributos de armas feitos para o mod Better Combat funcionam quase sempre como estão.

Esquema de nível superior

Um arquivo contém um objeto attributes:

{
  "attributes": { ... }
}

Ou, para herdar os atributos de outro item e sobrescrever só alguns campos, ele indica um parent:

{
  "parent": "dragonminez:sword",
  "attributes": {
    "crit_chance": 0.10,
    "crit_damage": 0.15
  }
}

As cadeias de parent podem ter vários níveis (um pai pode ter seu próprio pai). Ciclos são detectados: uma arma cuja cadeia de pais volta para ela mesma não pode ser resolvida e é ignorada (registrada como erro), então confira bem suas referências de parent.

Campos dos atributos

Configurado em: Configuração de combatefallbackCompatibility
Campo Tipo O que faz
attack_range Número Alcance em blocos (o padrão do Minecraft, 3.0, se for omitido).
pose Texto Pose de animação do GeckoLib para a arma da mão principal.
off_hand_pose Texto Pose de animação do GeckoLib para a arma da mão secundária.
two_handed Booleano Se for true, a mão secundária não pode ser usada enquanto a arma estiver empunhada.
category Texto Etiqueta de categoria livre. É usada para duas coisas: comparar as condições DUAL_WIELDING_SAME_CATEGORY entre a mão principal e a secundária, e como categoria de destino do sistema de regex fallbackCompatibility em Configuração de combate.
crit_chance Número Chance crítica inata (0.0–1.0), aplicada como modificador de atributo.
crit_damage Número Multiplicador de dano crítico inato, aplicado como modificador de atributo.
attacks Array Obrigatório. Uma ou mais variantes de ataque (veja abaixo).

Entradas de ataque

Cada entrada de attacks descreve uma variante de golpe. O DragonMineZ verifica as conditions de cima para baixo e usa o primeiro ataque cujas condições são todas atendidas.

Campo Tipo O que faz
conditions Lista de textos de condição Todas precisam ser verdadeiras para que esta variante seja usada. Omita para um ataque sem condições.
hitbox Texto FORWARD_BOX (uma caixa que se estende para a frente, o mais próximo do vanilla), VERTICAL_PLANE (um corte vertical de varredura) ou HORIZONTAL_PLANE (uma varredura horizontal ampla).
damage_multiplier Número Multiplicador do dano base da arma (padrão 1.0).
angle Número Arco do golpe em graus.
upswing Número Multiplicador da recarga: cooldownTicks = (1 / (4 - attackSpeed)) * 20 * upswing. Um valor menor significa um golpe seguinte mais rápido. Também define a preparação do golpe (o atraso antes de o golpe acertar): ticks de animação × upswing × 0.95, limitado a 3–7 ticks.
animation Texto Nome de animação do GeckoLib. É comparado com animations/*.json; se não houver correspondência exata, o DragonMineZ escolhe o nome mais parecido (distância de Levenshtein) depois de remover os prefixos conhecidos (dragonminez:, bettercombat:, combat.).
swing_sound / impact_sound { "id", "volume"*, "pitch"*, "randomness"* } Som reproduzido ao golpear ou no impacto. volume e pitch valem 1.0 por padrão, e randomness, 0.1.

Condições de ataque

Esta é a lista completa de condições:

Condição Significado
NOT_DUAL_WIELDING A mão secundária está vazia (ar).
DUAL_WIELDING_ANY As duas mãos seguram algo.
DUAL_WIELDING_SAME As duas mãos seguram exatamente o mesmo id de item.
DUAL_WIELDING_SAME_CATEGORY As duas mãos seguram itens que compartilham a mesma category.
NO_OFFHAND_ITEM A mão secundária está vazia.
OFF_HAND_SHIELD A mão secundária segura um escudo.
MAIN_HAND_ONLY O ataque só se aplica à arma da mão principal.
OFF_HAND_ONLY O ataque só se aplica à arma da mão secundária.
MOUNTED O jogador está montado em uma entidade.
NOT_MOUNTED O jogador não está montado.
SNEAKING O jogador está agachado.
NOT_SNEAKING O jogador está de pé.

Exemplo completo

Uma adaga com vários ataques e uma variante para empunhar duas armas:

{
  "attributes": {
    "attack_range": 2,
    "two_handed": false,
    "category": "dagger",
    "attacks": [
      {
        "hitbox": "HORIZONTAL_PLANE",
        "damage_multiplier": 0.8,
        "angle": 150,
        "upswing": 0.5,
        "animation": "combat.one_handed_slash_horizontal_right_1",
        "swing_sound": { "id": "dragonminez:dagger_slash" }
      },
      {
        "hitbox": "HORIZONTAL_PLANE",
        "damage_multiplier": 0.8,
        "angle": 150,
        "upswing": 0.5,
        "animation": "combat.one_handed_slash_horizontal_right_2",
        "swing_sound": { "id": "dragonminez:dagger_slash" }
      },
      {
        "conditions": ["DUAL_WIELDING_SAME_CATEGORY", "MAIN_HAND_ONLY"],
        "hitbox": "FORWARD_BOX",
        "damage_multiplier": 1.4,
        "angle": 150,
        "upswing": 0.5,
        "animation": "combat.dual_handed_stab",
        "swing_sound": { "id": "dragonminez:dagger_slash" }
      }
    ]
  }
}

Um exemplo de herança (brave_sword.json, que só sobrescreve as estatísticas críticas):

{
  "parent": "dragonminez:sword",
  "attributes": {
    "crit_chance": 0.10,
    "crit_damage": 0.15
  }
}

Arquivos de atributos incluídos

Veja também: Armas especiais

O DragonMineZ inclui estas entradas em data/dragonminez/weapon_attributes/, então você pode usá-las como parent ou como destino de weaponCombo ou do sistema de fallback:

  • Combos base: anchor, axe, battlestaff, claw, claymore, cutlass, dagger, double_axe, fist, giant, glaive, halberd, hammer, katana, lance, mace, pickaxe, rapier, scythe, sickle, soul_knife, spear, staff, sword, trident, twin_blade, wand.
  • Armas características: brave_sword (Espada Valente, pai sword), yajirobe_katana (Katana do Yajirobe, pai katana), z_sword (Espada Z, pai claymore) e power_pole (Bastão Mágico, pai staff, com seu próprio combo de três golpes).

Os itens do DragonMineZ que não têm uma entrada própria (por exemplo a Espada Dimensional e as armas de Tamagami: Espada de Tamagami, Tridente de Tamagami e Martelo de Tamagami) recebem seu combo das regex de fallbackCompatibility em Configuração de combate, assim como as armas de terceiros.

Para mods de armas de terceiros

Se o seu mod adiciona armas e você não inclui uma entrada de Atributos de armas para elas, o DragonMineZ passa a comparar o id de todo item com modificador de dano de ataque com a lista fallbackCompatibility em Configuração de combate (por exemplo, um id de item que contém axe é tratado como dragonminez:axe). Isso dá um padrão razoável, mas uma entrada de datapack de verdade que corresponda ao combo e às animações reais da sua arma é sempre mais precisa, e sempre tem prioridade sobre o palpite do fallback.

Recarregar e validar

  1. Adicione ou edite arquivos em data/<namespace>/weapon_attributes/.
  2. Valide a sintaxe JSON (veja Como usar JSON).
  3. Execute o /reload do vanilla ou reinicie. É um listener de recarga de datapacks comum, não faz parte do /dmzreload (veja Recarregar e atualizar mudanças).
  4. Teste a arma no jogo: alcance, animação, formato da hitbox e quaisquer variantes condicionais (empunhar duas armas, agachar, estar montado).