Atributos de armas
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.
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
fallbackCompatibility| 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
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, paisword),yajirobe_katana(Katana do Yajirobe, paikatana),z_sword(Espada Z, paiclaymore) epower_pole(Bastão Mágico, paistaff, 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
- Adicione ou edite arquivos em
data/<namespace>/weapon_attributes/. - Valide a sintaxe JSON (veja Como usar JSON).
- Execute o
/reloaddo vanilla ou reinicie. É um listener de recarga de datapacks comum, não faz parte do/dmzreload(veja Recarregar e atualizar mudanças). - Teste a arma no jogo: alcance, animação, formato da hitbox e quaisquer variantes condicionais (empunhar duas armas, agachar, estar montado).