本篇教程由作者设定未经允许禁止转载。
const weaponBuffConfig = [
{
// 使用的武器列表,支持原版和模组物品,使用物品ID
weapons: ['basicweapons:wooden_dagger', 'basicweapons:stone_dagger', 'basicweapons:iron_dagger', 'basicweapons:bronze_dagger', 'basicweapons:golden_dagger', 'basicweapons:diamond_dagger', 'basicweapons:netherite_dagger'],
// 触发概率,0.3 = 30%
probability: 0.3,
// 要给予的效果列表 (一个武器可以触发多个效果)
effects: [
{
// 效果的目标: 'attacker' 或 'target'
target: 'attacker',
// 效果ID (使用效果注册名)
effect: 'farmersrespite:caffeinated',
// 效果等级 (0 = 1级, 1 = 2级, 以此类推)
amplifier: 0,
// 效果持续时间 (单位: 游戏刻, 20刻 = 1秒)
duration: 30 // 1.5秒
}
]
},
{
// 使用的武器列表,支持原版和模组物品,使用物品ID
weapons: [
'basicweapons:wooden_quarterstaff',
'basicweapons:stone_quarterstaff',
'basicweapons:iron_quarterstaff',
'basicweapons:bronze_quarterstaff',
'basicweapons:golden_quarterstaff',
'basicweapons:diamond_quarterstaff',
'basicweapons:netherite_quarterstaff'
],
// 触发概率
probability: 0.2,
// 要给予的效果列表 (一个武器可以触发多个效果)
effects: [
{
// 效果的目标: 'attacker' 或 'target'
target: 'target',
// 效果ID (使用效果注册名)
effect: 'yungscavebiomes:buffeted',
// 效果等级 (0 = 1级, 1 = 2级, 以此类推)
amplifier: 0,
// 效果持续时间 (单位: 游戏刻, 20刻 = 1秒)
duration: 20
}
]
},
{
// 另一个配置示例
weapons: ['minecraft:wooden_axe', 'minecraft:stone_axe', 'minecraft:iron_axe', 'bronze:bronze_axe', 'minecraft:golden_axe', 'minecraft:diamond_axe', 'minecraft:netherite_axe'],
probability: 0.15,
effects: [
{
target: 'attacker',
effect: 'minecraft:absorption',
amplifier: 0,
duration: 40
}
]
},
// 可以继续添加更多配置...
];
// 监听实体受伤事件
EntityEvents.hurt(event => {
// 1. 获取攻击源信息
const source = event.source;
// 获取直接造成伤害的实体 (比如箭、投掷物)
const immediateAttacker = source.getImmediate();
// 获取真正的攻击者 (玩家)
const actualAttacker = source.getActual();
// 2. 关键判断: 必须是玩家造成的伤害
// source.actual 代表最终的伤害来源,对于玩家攻击,这就是玩家实体
if (!source.actual || !source.actual.isPlayer()) {
return; // 如果不是玩家造成的伤害,直接退出
}
// 3. 获取玩家使用的物品
const player = source.actual;
// 获取玩家主手的物品
const usedItem = player.getMainHandItem();
// 如果玩家主手没有物品,则退出
if (usedItem.isEmpty()) return;
// 4. 获取被攻击的实体
const targetEntity = event.entity;
// 5. 寻找匹配的武器
weaponBuffConfig.forEach(config => {
// 检查当前使用的武器是否在配置的武器列表中
// usedItem.id 是获取物品ID的标准方法,例如 'minecraft:iron_sword'
if (config.weapons.includes(usedItem.id)) {
// 6. 随机概率判断
// Math.random() 生成 [0, 1) 之间的随机数
if (Math.random() < config.probability) {
// 7. 概率触发,遍历该配置下的所有效果
config.effects.forEach(effectConfig => {
// 确定效果的目标实体
let target;
if (effectConfig.target === 'attacker') {
target = player;
} else if (effectConfig.target === 'target') {
target = targetEntity;
} else {
// 如果配置了未知目标,忽略
console.warn(`未知的效果目标: ${effectConfig.target}`);
return;
}
// 8. 检查目标实体是否存活 (对于给予实体效果是必要的)
if (!target || !target.isLiving()) return;
// 9. 为实体施加状态效果
target.potionEffects.add(
effectConfig.effect, // 效果ID
effectConfig.duration, // 持续时间
effectConfig.amplifier, // 等级
false, // 是否环境效果 (通常false)
true // 是否显示粒子 (true为显示)
);
});
}
}
});
});
文件格式要.js,位置放kubejs的server_scripts文件夹。


