我的世界1.12.2如何修改锋利附魔伤害?现有实现代码不知如何继续
Minecraft 1.12.2 锋利附魔伤害修改完整实现方案
你当前已经完成了自定义附魔类的伤害计算逻辑重写,只需要补全注册替换、配置加载、兼容处理三个部分的逻辑即可生效。
1. 补全配置默认值
在你的插件/mod主类RubySharpnessFixer的初始化方法中加入配置默认值,避免空配置报错:
// Forge mod 写在preInit阶段,Spigot插件写在onEnable阶段 getConfig().addDefault("damage-per-level", 1.25); // 原版默认每级加1.25伤害,可自行调整 getConfig().options().copyDefaults(true); saveConfig();
2. 完成附魔替换逻辑
你当前的hook方法只实例化了自定义附魔,还需要操作附魔注册表替换原版锋利附魔,1.12.2版本注册表操作逻辑如下:
public boolean hook() { ResourceLocation sharpnessKey = new ResourceLocation("minecraft", "sharpness"); int originSharpnessId = Enchantment.REGISTRY.getIDForObject(Enchantments.SHARPNESS); // 移除原版锋利的注册映射 Enchantment.REGISTRY.remove(sharpnessKey); // 实例化自定义附魔,构造参数第二个0对应附魔类型为锋利,和原版逻辑对齐 EnchantmentWeaponDamageCustom customSharpness = new EnchantmentWeaponDamageCustom(plugin, Rarity.COMMON, 0, EnumItemSlot.MAINHAND); // 将自定义附魔注册到原锋利的ID和命名空间,保证已有物品的兼容性 Enchantment.REGISTRY.register(originSharpnessId, sharpnessKey, customSharpness); return true; }
注意:该hook方法需要在附魔注册表初始化完成后、游戏逻辑加载前执行,Forge mod请放在preInit阶段调用。Spigot端不支持直接修改底层注册表,建议用事件监听方案实现,代码如下:
// Spigot插件实现方案,无需修改底层附魔 @EventHandler public void onEntityDamage(EntityDamageByEntityEvent event) { if (!(event.getDamager() instanceof Player)) return; Player attacker = (Player) event.getDamager(); ItemStack weapon = attacker.getInventory().getItemInMainHand(); if (weapon.getType() == Material.AIR || !weapon.hasItemMeta()) return; ItemMeta meta = weapon.getItemMeta(); if (!meta.hasEnchant(Enchantment.DAMAGE_ALL)) return; int sharpnessLevel = meta.getEnchantLevel(Enchantment.DAMAGE_ALL); // 移除原版锋利的默认伤害加成,避免重复计算 double originExtra = sharpnessLevel * 1.25; double customExtra = sharpnessLevel * getConfig().getDouble("damage-per-level"); event.setDamage(event.getDamage() - originExtra + customExtra); }
3. 验证生效
进入游戏后给武器附魔指定等级的锋利,攻击生物查看伤害数值是否符合配置的每级伤害加成即可。
内容的提问来源于stack exchange,提问作者pietro bacigalupi
相关产品推荐
相关产品推荐

