Список изменений
1. Spell Attributes
1.1 Spell Damage & Spell Power
| Attribute ID | Display Name | Default | Description |
|---|---|---|---|
salinity:spell_damage | Spell Damage | 0.0 | Direct bonus to spell damage (modifiable) |
salinity:spell_power | Spell Power | 0.0 | Secondary multiplier to all spells (modifiable) |
1.2 Spell Resistance
| Attribute ID | Display Name | Default | Description |
|---|---|---|---|
salinity:spell_resistance | Spell Resistance | 0.0 | Reduces incoming spell damage; higher = more reduction |
All attributes support vanilla modifiers (ADD_VALUE, ADD_MULTIPLIED_BASE, ADD_MULTIPLIED_TOTAL) for flexible configuration.
2. Damage Calculation Flow
2.1 Overall Flow
Base Damage → [Spell Damage Bonus] → [Spell Power Bonus] → [Spell Resistance Reduction] → Final Damage
2.2 Spell Damage Bonus
Apply the caster's spell_damage attribute to the base damage, processing all modifiers in order:
- Sum all
ADD_VALUEmodifiers →add - Sum all
ADD_MULTIPLIED_BASEmodifiers →mult_base - Sum all
ADD_MULTIPLIED_TOTALmodifiers →mult_total
Formula:
after_spell_damage = (base_damage + add) × (1 + mult_base) × (1 + mult_total)
2.3 Spell Power Bonus
Apply the caster's spell_power attribute to the result above, using the same modifier order:
after_spell_power = (after_spell_damage + add_power) × (1 + mult_base_power) × (1 + mult_total_power)
2.4 Spell Resistance Reduction
Apply the target's spell resistance, also considering the target's vanilla armor toughness (minecraft:armor_toughness):
final_damage = after_spell_power × 200 / ( resistance × (1 + toughness/10) × √(after_spell_power) + 200 )
Where:
resistance: target'ssalinity:spell_resistancevaluetoughness: target'sminecraft:armor_toughnessvalue (0 if absent)√(after_spell_power): square root of the damage after spell power bonus
Note: If resistance is 0, the reduction step is skipped and
final_damage = after_spell_power.
3. Spell Resistance Reduction Example Tables
The tables below assume the caster's spell_damage and spell_power are both 0 (i.e., no bonus, after_spell_power = base damage), showing only the effect of resistance and toughness.
3.1 Toughness = 0
| Base Damage | Res=5 | Res=10 | Res=20 |
|---|---|---|---|
| 10 | 9.27 | 8.63 | 7.60 |
| 20 | 17.99 | 16.35 | 13.82 |
| 40 | 34.54 | 30.39 | 24.50 |
3.2 Toughness = 3
| Base Damage | Res=5 | Res=10 | Res=20 |
|---|---|---|---|
| 10 | 9.07 | 8.30 | 7.09 |
| 20 | 17.46 | 15.50 | 12.65 |
| 40 | 33.18 | 28.35 | 21.95 |
3.3 Toughness = 6
| Base Damage | Res=5 | Res=10 | Res=20 |
|---|---|---|---|
| 10 | 8.88 | 7.98 | 6.64 |
| 20 | 16.97 | 14.73 | 11.66 |
| 40 | 31.93 | 26.56 | 19.88 |
3.4 Toughness = 12
| Base Damage | Res=5 | Res=10 | Res=20 |
|---|---|---|---|
| 10 | 8.52 | 7.42 | 5.90 |
| 20 | 16.05 | 13.41 | 10.08 |
| 40 | 29.68 | 23.59 | 16.73 |
All values are rounded to two decimals; actual in-game values are floating point.
4. Damage Type
- Damage Type ID:
salinity:spell - Characteristics:
- Ignores armor
- Not affected by vanilla Protection enchantments
- Does not trigger vanilla magic damage related effects (e.g., potion protection)
5 Adding Spell Attributes to Items (API Example)
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.entity.ai.attributes.AttributeModifier;
ItemStack staff = new ItemStack(ModItems.DOOM_STAFF.get());
// Add +5 spell damage (ADD_VALUE)
SalinityAPI.addModifier(staff, ModAttributes.SPELL_DAMAGE, "staff_damage", 5.0, AttributeModifier.Operation.ADD_VALUE);
// Add +20% spell power (ADD_MULTIPLIED_BASE)
SalinityAPI.addModifier(staff, ModAttributes.SPELL_POWER, "staff_power", 0.2, AttributeModifier.Operation.ADD_MULTIPLIED_BASE);
6. Notes
- The square root in the resistance formula ensures weaker reduction for low damage and significant reduction for high damage.
- If the target's spell resistance is 0, the reduction step is skipped entirely.
- The caster's
spell_damageandspell_powercan be dynamically modified via equipment, potion effects, etc.
1. 法术属性
1.1 法术伤害与法术强度
| 属性ID | 显示名称 | 默认值 | 说明 |
|---|---|---|---|
salinity:spell_damage | 法术伤害 | 0.0 | 直接对法术伤害加成(可受修饰符影响) |
salinity:spell_power | 法术强度 | 0.0 | 对所有法术进行二次加成(可受修饰符影响) |
1.2 法术抗性
| 属性ID | 显示名称 | 默认值 | 说明 |
|---|---|---|---|
salinity:spell_resistance | 法术抗性 | 0.0 | 减免所受法术伤害,值越高减伤越强 |
所有属性均支持原版修饰符(ADD_VALUE, ADD_MULTIPLIED_BASE, ADD_MULTIPLIED_TOTAL),可灵活配置。
2. 伤害计算流程
2.1 总流程
原始伤害 → [法术伤害加成] → [法术强度加成] → [法术抗性减伤] → 最终伤害
2.2 法术伤害加成
对原始伤害应用施法者的 spell_damage 属性,按以下顺序处理所有修饰符:
- 累加所有
ADD_VALUE修饰符 →add - 累加所有
ADD_MULTIPLIED_BASE修饰符 →mult_base - 累加所有
ADD_MULTIPLIED_TOTAL修饰符 →mult_total
计算公式:
after_spell_damage = (原始伤害 + add) × (1 + mult_base) × (1 + mult_total)
2.3 法术强度加成
对上述结果应用施法者的 spell_power 属性,同样按上述顺序处理所有修饰符:
after_spell_power = (after_spell_damage + add_power) × (1 + mult_base_power) × (1 + mult_total_power)
2.4 法术抗性减伤
对加成后的伤害应用目标的法术抗性,同时考虑目标的原版盔甲韧性(minecraft:armor_toughness),公式如下:
最终伤害 = after_spell_power × 200 / ( 法抗 × (1 + 韧性/10) × √(after_spell_power) + 200 )
其中:
法抗:目标的salinity:spell_resistance属性值韧性:目标的minecraft:armor_toughness属性值(若无则为 0)√(after_spell_power):加成后伤害的平方根
注意:当法抗为 0 时,跳过减伤步骤,最终伤害 = after_spell_power。
3. 法术抗性减伤效果表(示例)
以下表格假设施法者的 spell_damage 和 spell_power 均为默认值 0(即无加成,after_spell_power = 原始伤害),仅展示抗性和韧性对伤害的影响。
3.1 无韧性(韧性 = 0)
| 原始伤害 | 法抗=5 | 法抗=10 | 法抗=20 |
|---|---|---|---|
| 10 | 9.27 | 8.63 | 7.60 |
| 20 | 17.99 | 16.35 | 13.82 |
| 40 | 34.54 | 30.39 | 24.50 |
3.2 韧性 = 3
| 原始伤害 | 法抗=5 | 法抗=10 | 法抗=20 |
|---|---|---|---|
| 10 | 9.07 | 8.30 | 7.09 |
| 20 | 17.46 | 15.50 | 12.65 |
| 40 | 33.18 | 28.35 | 21.95 |
3.3 韧性 = 6
| 原始伤害 | 法抗=5 | 法抗=10 | 法抗=20 |
|---|---|---|---|
| 10 | 8.88 | 7.98 | 6.64 |
| 20 | 16.97 | 14.73 | 11.66 |
| 40 | 31.93 | 26.56 | 19.88 |
3.4 韧性 = 12
| 原始伤害 | 法抗=5 | 法抗=10 | 法抗=20 |
|---|---|---|---|
| 10 | 8.52 | 7.42 | 5.90 |
| 20 | 16.05 | 13.41 | 10.08 |
| 40 | 29.68 | 23.59 | 16.73 |
表格中所有数值保留两位小数,实际游戏内为浮点数。
4. 伤害类型
- 伤害类型 ID:
salinity:spell - 特性:
- 无视护甲
- 不受原版保护附魔影响
- 不触发原版魔法伤害相关效果(如药水保护)
5. 为物品添加法术属性(API 示例)
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.entity.ai.attributes.AttributeModifier;
ItemStack staff = new ItemStack(ModItems.DOOM_STAFF.get());
// 添加 +5 法术伤害(基础值)
SalinityAPI.addModifier(staff, ModAttributes.SPELL_DAMAGE, "staff_damage", 5.0, AttributeModifier.Operation.ADD_VALUE);
// 添加 +20% 法术强度(乘法)
SalinityAPI.addModifier(staff, ModAttributes.SPELL_POWER, "staff_power", 0.2, AttributeModifier.Operation.ADD_MULTIPLIED_BASE);
6.法术功能注意事项
- 法术抗性减伤公式中的平方根确保低伤害时减伤较弱,高伤害时减伤显著。
- 若目标法术抗性为 0,则不进行减伤计算,直接应用加成后伤害。
- 施法者的
spell_damage和spell_power属性可以通过装备、药水效果等动态修改。