本文章介绍附魔的机制。

附魔基础

当把一件可附魔的物品放上附魔台时,可用的附魔等级将会依据以下公式随机生成。附魔等级由附近书架的数量(最多15个)及附魔等级在附魔列表中所在的行数决定。
以下是可用附魔等级的计算步骤:
可用附魔等级基数(base) = (1..8 + (b/2) + 0..b)
其中b是附近书架的数量(≤15),“x..y”表示在[x,y]闭区间内产生一个随机数。产生基数后,游戏会根据附魔等级所在的行数,进行第二步计算:
第一行等级 = max (base/ 3, 1)
第二行等级 = (base× 2) / 3 + 1
第三行等级 = max (base,b× 2)
在正式版 1.3 前,可用附魔等级基数计算公式为base= (1..5 + (b/2) + 0..b) ,并乘以“行列因数”(第一行为⁄3,第二行为⁄3,第三行为1)得到。最小的附魔等级与附魔台周围有效书架数目的一半相同。
在正式版 1.1 前,上式的“(b/2)”项曾是“0..(b/2)”,这使得附魔等级随机性变大,刷出高等级附魔选项会耗费大量时间。同时,可用附魔等级的最低级固定在1,不会受书架数目的影响。

书架数目0123456789101112131415
最小等级(第一行)1111111111222222
最大等级(第三行)891112141517182021232426272930

在创造模式中,附魔不需要经验等级。

书架的放置

附魔台附近的书架可以提高可用的附魔等级。在预览版12w22a中,若附魔台周围没有书架,则可用附魔等级最高只会到8级。 有效的书架必须距离附魔台2个方块远,且必须与附魔台处于同一或高1个方块的高度。书架和附魔台之间的空间必须是空气(火把与雪也不允许),而该“之间”则是如下图所示(空格代表空气,而 不影响):

俯视:或
侧视:或

由于只需要15个书架即可达到最大附魔等级,所以书架的排列有很多种方法。

方法1

一种最简单的方法是用一层书架围着附魔台绕上一圈:

方法2

另外一种方法则是做一个“图书角”。这种方法使用了16个书架,比需要的还要多一个。

第一层第二层

方法3

另外一个“图书角”,书架放两层。这种方法使用了16个书架,比需要的还要多。
如果需要限制最大附魔等级,一种简单的方法就是往附魔台与书架之间的空间中插火把禁用部分书架。把火把拿下可以重新恢复最大的附魔等级。
另外要注意的是,要检查附魔区域的环境,并保证书架与附魔台之间的绝对空隙。例如在覆雪生物群系中,雪可以把所有书架都无效化。因此,除非你希望得到较小的附魔等级,否则在附魔前要进行仔细的检查和清理(或在有屋顶的房子里进行附魔)。

魔咒是如何选择出来的

“魔咒等级”是某一魔咒所需的经验级别(在按钮上的绿色数字)。
“魔咒威力”是某一特定魔咒的力量。例如,“锋利IV”有4点威力。
魔咒的挑选有三个步骤。

第一步:对附魔等级加入调节值

首先游戏会把两个调节值加入到被选的附魔等级中。每个调节值会被限制在一定的范围内,数字接近范围中央的会比靠近两端的更常见。
第一调节值是基于附魔对象的“附魔能力”,这取决于该物品的材料和类型(见下表)。游戏会在0至附魔能力的一半(实际上,游戏会先将附魔能力除以4,四舍五入为整数后再乘以2)之间随机挑选一个数字,然后将这个数字和1加到附魔等级里。此时,弓的附魔能力是1。然后,这个随机数会经过三角形分布处理,使得最终结果靠近附魔能力一半的几率远大于靠近极值的几率。

修改后的附魔等级 = 附魔等级 + 随机值(0, 附魔能力 / 4 * 2) + 1
(每步计算完毕后四舍五入)
材料对应盔甲的附魔能力对应剑/工具的附魔能力
木不可用15
皮革15不可用
石不可用5
铁914
链(链甲)12不可用
钻石1010
金2522

接着,Minecraft会在0.85和1.15之间挑选一个值,并再次经过三角形分布处理。修改后的附魔等级会乘以这个值(因此它可以增加或减少最多15%),然后四舍五入至整数,得到最终的等级调节值。
伪代码
// 返回一个区间为[0,n-1)的随机整数 function randomInt(n); // 返回一个区间为[0,1)的一个随机实数 function randomFloat(); // 利用三角随机分布,生成一个区间为[1,1+(附魔能力/2))的随机数 enchantability_2 = enchantability / 2; int rand_enchantability = 1 + randomInt(enchantability_2 / 2 + 1) + randomInt(enchantability_2 / 2 + 1); // 选择附魔能级 int k = chosen_enchantment_level + rand_enchantability; // 0.85至1.15之间的附魔奖励 float rand_bonus_percent = (randomFloat() + randomFloat() - 1) * 0.15 + 1; // 最终计算得到等级 int final_level = (int)(k * (1 + rand_bonus_percent) + 0.5);