跳到主要内容

6-5 运行和测试

胜利的曙光终于到来,也许编写监听器是有些水深火热,不过做好的插件可以让你玩上半个钟头!这或许也是 RPG 插件的最大魅力之一。现在,构建并安装插件,通过客户端加入服务器,拿出一把铁剑,开始疾跑的同时按下右键:

Charge

为了让 GIF 文件能在可接受的时间内加载,我们不得不大幅降低了图像质量,读者可在自己的游戏中测试,不必受制于我们网站的表现效果。

你还可以通过修改 config.yml 调整插件的威力,例如直接把冷却时间设为 0,那么拥有刺刀的你就会无比强大(笑)!下次探索远古城市的时候,不妨试试这个技能。

如果你觉得只是击杀实体还不过瘾,想要更多的艺术的话,可以修改击杀实体的代码:

if (target != null) {
    // 删除这些行
    // ev.player.attack(target)
    // target.health = 0.0
    // ev.player.sendMessage(Component.text(killMsg.replace("{name}", target.name)))
    
    // 增加这一行
    ev.player.world.createExplosion(target.location, 4f)
    
    endCharge()
    return
}

现在再试试看,效果会如何呢?什么?这不叫艺术?艺术不就是爆炸吗(笑)?


好啦,你的第一个 RPG 插件到这里也就完工啦。虽然感觉上无论是本书的介绍还是代码本身都长了不少,但我们其实仍然只是在使用 Bukkit 的事件系统,以及一点点额外的与 Bukkit 和玩家的交互而已:

  • 使用映射表将玩家与需要的数据关联。
  • 利用已有的对象存储数据,避免创建不必要的新结构。
  • 在多次触发的事件处理函数中追踪玩家的状态(例如剩余冲锋距离)。
  • 想要的事件不存在时,需要寻找其它事件代替(例如右键单击可以通过玩家交互加上对 action 的筛选实现)。
  • 创建和修改 BOSS 状态条。
  • 创建和使用状态效果。
  • 让插件功能与玩家体验保持一致(例如增加攻击动作)。

RPG 插件几乎是插件世界中最复杂的那一类之一了,虽然这个项目实现的只是非常简单的功能,但也牵涉到 Bukkit 中多个功能的使用,因此有什么不明白的地方都是非常正常的 —— 你可以通过阅读这个插件的 源代码 来了解更多内容。希望大家能够着重于理解事件的选取在多个事件间追踪玩家状态这两个核心思想的实现原理,而其它的功能,比如施加药水效果之类,不过只是简单的方法调用罢了。