EnchantmentAPI提供了一个简单方便的API,让你创建自己的自定义附魔。
创建一个附魔:
创建一个新的附魔需要做的第一件事是创建一个自定义附魔的新类。
别忘了"构建路径"导入插件本体。
新的附魔类需要继承CustomEnchantment类,你可以像这样写:
- public class LifestealEnchantment extends CustomEnchantment
复制代码 构造函数需要以下参数:
String参数 | 附魔的名字。(对于其他自定义附魔必须是唯一的名称,否则它可能不会被注册) | String参数 | 附魔的详细介绍。 |
其他的设置:
CustomEnchantment类提供了许多Setter来设置你的自定义附魔,你可以在你的构造函数中调用以下任何一个方法:
普通物品 | addNaturalItems(Material...) | 哪些类型的物品可以得到这个附魔。 | 附魔难度 | setWeight(double)
setWeight(Material, double) | 你可以设置物品能够得到这个附魔的难度。
方法一默认所有物品,方法二可指定物品。
| 附魔组别 | setGroup(String) | 设置附魔的组别,同一个组别的附魔在同一
个物品上无法同时存在多个。
| 叠加使用 | setCanStack(Boolean) | 拥有多个附魔效果的物品的附魔效果是否能
同时发动。
| 附魔台使用 | setTableEnabled(Boolean) | 是否可以通过附魔台进行附魔获得。 | 最大等级 | setMaxLevel(int)
setMaxLevel(int, int) | 可以通过附魔台或铁毡附魔到的最高等级。
方法一同时设置两者,方法二分别是附魔台、铁毡。
| 铁毡耗费 | setCombineCostPerLevel(int) | 设置附魔等级每一级的铁毡经验耗费。 | 最低等级 | setMinEnchantingLevel(double) | 设置通过附魔台附魔的最低等级需求。 | 增长因子 | setEnchantLevelScaleFactor(double) | 每增加一个附魔等级额外需要的附魔等级。 | 最大延展数 | setEnchantLevelBuffer(double) | 最大附魔因子增长数。 |
附魔效果设置:
接下来,您可以通过重写一个或多个方法来为你的自定义附魔创建任何效果。
- //攻击实体
- applyOnHit(LivingEntity, LivingEntity, int, EntityDamageByEntityEvent)
- //被实体攻击
- applyDefense(LivingEntity, LivingEntity, int, EntityDamageEvent)
- //破坏方块
- applyBreak(Player, Block, int BlockEvent)
- //方块交互
- applyInteractBlock(Player, int, PlayerInteractEvent)
- //装备物品
- applyEquip(Player, int)
- //卸下物品
- applyUnequip(Player, int)
- //实体交互
- applyInteractEntity(Player, int, PlayerInteractEntityEvent)
- //弹射物发射
- applyProjectile(LivingEntity, int, ProjectileLaunchEvent)
复制代码 每种方法都是可选的,但您可以根据需要使用尽可能多的方法(例如,胸甲在攻击时会召唤闪电,在受到攻击时会反弹伤害,并且会使你破坏的每一个方块都掉落钻石,这些都可以通过一个附魔实现)。 我们使用其中的一个,只需重写它并抛出所需的任何效果,下面是详细示例:
- //一个攻击时的附魔效果示例
- @Override
- public void applyOnHit(LivingEntity user, LivingEntity target, int enchantLevel, EntityDamageByEntityEvent, event) {
- //根据附魔等级,偷取生命值
- user.setHealth(Math.max(user.getMaxHealth(), user.getHealth() + enchantLevel));
- }
复制代码 每种类型的附魔都带有激活附魔的事件,所以你可以改变事件的结果,比如造成的伤害或者立即破坏一个方块。
更多的示例,请参考基于本API所写的插件:EnchantmentPack
|