物品修改 (Item Modification)
预计阅读时间: 3 分钟
修改现有物品
您可以更改现有物品的属性:
ItemEvents.modification(event => {
event.modify('minecraft:ender_pearl', item => {
item.maxStackSize = 64
item.fireResistant = true
item.rarity = 'UNCOMMON'
})
event.modify('minecraft:ancient_debris', item => {
item.rarity = 'RARE'
item.burnTime = 16000
})
event.modify('minecraft:turtle_helmet', item => {
item.rarity = 'EPIC'
item.maxDamage = 481
item.craftingRemainder = Item.of('minecraft:scute').item
})
})
您可以在此处找到 MutableItem 属性的完整列表。
工具默认值 (Tool Defaults)
| 等级 | level | maxDamage | digSpeed | attackDamage | enchantmentValue |
|---|
| Wood | 0 | 59 | 2 | 0 | 15 |
| Stone | 1 | 131 | 4 | 1 | 5 |
| Iron | 2 | 250 | 6 | 2 | 14 |
| Diamond | 3 | 1561 | 8 | 3 | 10 |
| Gold | 0 | 32 | 12 | 0 | 22 |
| Netherite | 4 | 2031 | 9 | 4 | 15 |
attackDamage 是一个受工具类型值修改的奖励,不是最终值。
护甲默认值 (Armor Defaults)
所有包含多个值的框格式为 head | chest | legs | feet。
| 等级 | maxDamage | armorProtection | armorToughness | armorKnockbackResistance |
|---|
| Leather | 65, 75, 80, 55 | 1, 2, 3, 1 | 0 | 0 |
| Chain | 95, 225, 240, 165 | 1, 4, 5, 2 | 0 | 0 |
| Iron | 195, 225, 240, 165 | 2, 5, 6, 2 | 0 | 0 |
| Gold | 91, 105, 112, 77 | 1, 3, 5, 2 | 0 | 0 |
| Diamond | 429, 495, 528, 363 | 3, 6, 8, 3 | 2 | 0 |
| Turtle | 325 | 2 | 0 | 0 |
| Netherite | 481, 555, 592, 407 | 3, 6, 8, 3 | 3 | 0.1 |
| Elytra | 432 | 0 | 0 | 0 |
Turtle 只有头盔槽位,Elytra 只有胸甲槽位。
等级 (Tier)
目前已损坏! 请改用非等级方法。
工具 (Tools)
ItemEvents.modification(event => {
event.modify('minecraft:golden_sword', item => {
item.tier = tier => {
tier.speed = 12
tier.attackDamageBonus = 10
tier.repairIngredient = '#forge:storage_blocks/gold'
tier.level = 3
}
})
event.modify('minecraft:wooden_sword', item => {
item.tier = tier => {
tier.enchantmentValue = 30
}
})
})
您可以在此处找到 MutableToolTier 属性的完整列表。
护甲 (Armor)
目前实际上不存在/不起作用。抱歉。
食物 (Food)
ItemEvents.modification(event => {
event.modify('minecraft:diamond', item => {
item.foodProperties = food => {
food.hunger(2)
food.saturation(3)
food.fastToEat()
// 以下方法在1.21.1中已损坏,请改用ItemEvents.foodEaten。
// 下面提供了一个示例。
food.eaten(foodData => foodData.player.tell('You ate a diamond!'))
}
})
event.modify('minecraft:pumpkin_pie', item => {
item.foodProperties = null // 使南瓜派不可食用
})
})
您可以在此处找到 FoodBuilder 方法的完整列表。
foodEaten 示例 (foodEaten Example)
此示例作为上述部分中提到的损坏的 .eaten() 方法的替代方案。
ItemEvents.FoodEaten() 事件是服务器事件,此示例应放在 server_scripts/ 文件夹中,而不是 startup_scripts/ 文件夹中。
ItemEvents.foodEaten('minecraft:diamond', event => {
const { item, level, player } = event;
const diamondsEaten = (player.persistentData.getInt('diamonds_eaten') ?? 0) + 1;
player.persistentData.putInt('diamonds_eaten', diamondsEaten);
player.tell(`You ate a diamond! You've eaten ${diamondsEaten} so far.`);
});
脚本文件夹:startup_scripts/