分享 · 2020年12月1日 1 746  

使用Geyser(间歇泉)实现Minecraft基岩版/JAVA版互通

前言

虽然近一年多来,Minecraft基岩版的服务端在众多第三方开发者的努力下有了一些发展,如BDX以及ElementZero等服务端让基岩版玩家也能玩上具有完整特性并支持插件的基岩版服务器,有了更加丰富的游戏体验。但是基岩版的社区始终比不上JAVA版那么活跃,开发者也不多,而Mojang又三天两头大幅变动服务端内容,给第三方服务端的开发与维护带来了巨大的困难。以前我就想着,要是能让基岩版的玩家进入JAVA版的服务器该多好,JAVA版已经有了成熟的插件方案,以及活跃的社区,并且可以让JAVA版玩家和基岩版玩家一起愉快的玩耍。 很早之前就有人尝试过这种操作了,通过协议转换的方式搭建一个服务端用来进行基岩版的UDP到JAVA版的TCP协议的转换,并对数据进行一些处理,比如以前的DragonProxy,当时我也试过,不过当时存在着很多问题,基本只能玩玩小游戏服,而我一直希望这项技术能用在生存服上。近日得知跨服的方案Geyser间歇泉有了可喜的进展,去朋友搭建的服务器体验了一下,确实已经达到了可以进行生存模式游玩的程度。因为现在基岩版和JAVA版的内容基本同步了,所以跨服之后也能有近乎完整的体验,并且开发者也很活跃,未来的发展很乐观,所以我也决定使用Geyser来搭建一个跨平台的服务器,写下此文来记录与分享。 我的操作环境如下: 1. Ubuntu20.04

  • openjdk-11-jre
    1. JAVA版服务端使用的Paper 1.16.4
    2. Geyser #502号构建 未来将要适配的功能:
  • The Following Inventories
    • Enchantment Table (as a proper GUI)
    • Beacon
    • Cartography Table
    • Stonecutter
    • Structure Block
    • Horse Inventory
    • Loom
    • Smithing Table
  • Some Entity Flags

安装JAVA版服务端

Geyser是一个转换软件,相当于连接基岩版客户端与JAVA版服务端的桥梁,所以我们首先需要有一个JAVA版服务端,我使用的是Paper服务端他在Spigot的基础上对性能表现进行了进一步的优化(虽然我个人没有对比过),详情可以看他们官网的介绍。 Paper推荐使用JAVA11,所以首先安装环境 apt install openjdk-11-jre-headless,然后前往官网下载页获取服务端并上传到服务器上,当然直接wget -O paper.jar https://papermc.io/api/v1/paper/1.16.4/298/download也行。 下载完毕之后使用java -jar paper.jar看看是否可以正常运行,首次运行还会下载一些必要的文件。如果卡在Downloading vanilla jar…,只能说国内下载国外的资源有时候真的是太慢了,自行想办法加速下载。我直接在国外的VPS上下载好并压缩后再传回来。 首次运行的时候会自动生成server.properties服务器配置文件,以及一个eula提示。我们需要根据自己的需要编辑好配置文件,并把eula里面改成eula=true,即可重新运行。 再次运行便能够成功启动## 安装Geyser间歇泉

Geyser有两种运行方式——插件版和独立版,独立运行版相当于单独运行一个转换器,适用于纯原版的JAVA服务器,而我们已经使用了Paper,可以直接使用插件版,将Geyser当作一个插件来运行。前往构建页面下载与你的服务端对应版本的插件,paper使用的是Geyser-Spigot.jar,在paper的plugins文件夹中使用wget https://ci.nukkitx.com/job/GeyserMC/job/Geyser/job/master/lastSuccessfulBuild/artifact/bootstrap/spigot/target/Geyser-Spigot.jar下载最新版的Geyser插件,并重新运行Paper,可以看到下面的提示。 image-20201201205721701启动之后plugins里面多了一个Geyser的文件夹,修改里面有配置文件config.yml,根据我们的需求修改即可,如基岩版显示的服务器名字,基岩版对应的端口,以及语言(locale我改成了zh_cn)。然后重新运行服务器。 首次进入首次进入,成功进入服务器提示需要正版账号,光把设置改成online-mod=false也不行,我们还另外需要一个插件,可以让基岩版玩家不使用正版账户进入游戏,使用Geyser的配套插件Floodgate,同样下载floodgate-bukkit.jar到plugins文件夹中,并重启,如果Geyser是独立运行版本的话,可以查看官方的教程,之后我们便成功进入了JAVA版MC的世界! 成功进入!相对于半年多以前还是个半成品的Geyser,现在的Geyser各种特性的完成度都很高了。有破坏动画,有粒子效果,有背景音乐,人物动作自然,还做出了攻击冷却效果……迫不及待开始一场新的生存。 ## 我使用的插件

由于跨版本互通服还是比较特殊,为了两边玩家的体验,我们需要一些插件来优化。 ### 优化互通体验类

  1. Floodgate上文提到的,让基岩版无需JAVA版账号进入服务器的插件。除此之外,他还提供了一些API,帮助和Geyser配套使用的插件判断玩家是基岩版玩家还是JAVA版玩家,以此来实现一些效果(如反作弊)。
  2. BedrockPlayerManager> With this plugin you can execute custom commands when your players join your server network depending on the client of the player. You can issue commands independently for Java, Bedrock or all players. Usecase eamples
    • Add custom pre- or suffixes to Bedrock or Java players. For example via Luckperms prefix.
    • Bypass anti cheat checks for Bedrock players. Most anti cheat plugins allow bypassing checks via permissions.
    • Allow or deny features, commands, game types or worlds based on the client type.
    • Give items on start or move Bedrock players to another spawn.
    • You can do litterly anything by using custom commands or assigning permissions based on the client type of a player.

    MCBBS上也有这个插件的介绍,这个插件提供了对基岩版玩家的管理功能,能够给与基岩版玩家特定的权限组,或者执行特殊的指令,基岩版玩家会有一个专门的权限组。 这个插件还能给不同平台的玩家一个前/后缀,让反作弊插件跳过对基岩版玩家的一些属性的检查等等……

  3. Spartan这是一个付费的反作弊插件,相对于其他的JAVA版插件,这个插件可以区分JAVA版玩家和基岩版玩家的行为检测。

完善服务器功能类

  1. Authme Reloaded老牌的注册/登陆插件
  2. LuckPerms权限,权限组管理插件
  3. ClearLag自动清理,优化插件。
  4. EssentialsX这是一系列的插件,提供了大量的扩展指令以及特性
  5. Vault提供经济API的插件。
  6. WorldEdit for Bukkit大名鼎鼎的创世神插件。
  7. ProtocolLib接着几个都是基础前置插件
  8. PlaceholderAPI
  9. Residence领地插件,虽然页面显示付费购买,但是官方也提供了免费使用的版本,有能力的话可以支持一下开发者。
  10. 另外一些扩展
    • Miaochat
    • YUM
    • MiniMOTD

后记

这半年来Geyser发展真的相当的迅速,Minecraft也正是因为众多开发者的贡献才能历经十年依旧吸引着源源不断的玩家(如果光靠Mojang大概这游戏早就凉了吧)。