物品修改 (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)

等级levelmaxDamagedigSpeedattackDamageenchantmentValue
Wood0592015
Stone1131415
Iron22506214
Diamond315618310
Gold03212022
Netherite420319415

attackDamage 是一个受工具类型值修改的奖励,不是最终值。

护甲默认值 (Armor Defaults)

所有包含多个值的框格式为 head | chest | legs | feet

等级maxDamagearmorProtectionarmorToughnessarmorKnockbackResistance
Leather65, 75, 80, 551, 2, 3, 100
Chain95, 225, 240, 1651, 4, 5, 200
Iron195, 225, 240, 1652, 5, 6, 200
Gold91, 105, 112, 771, 3, 5, 200
Diamond429, 495, 528, 3633, 6, 8, 320
Turtle325200
Netherite481, 555, 592, 4073, 6, 8, 330.1
Elytra432000

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/