• 周年纪念勋章活动已圆满结束,如有已购买但仍未申请的用户,可以通过对应勋章的下载链接申请~

教程 EZ4H —— 让Java版玩家进入基岩版服务器!

从不咕咕的鸽纸

琉璃酱可爱w

开发者
正式会员
注册
2019/10/27
消息
308
金粒
2,882金粒


EZ4H代理使用教程
—— by从不咕咕的鸽纸
未经允许,严禁转载!
(文中服务器信息均已处理,不涉及违规宣传)​
一、前言



相信很多服主都知道Geyser的存在,它可以让Bedrock Edition版(俗称基岩版、BE版等,以下简称BE版)的玩家进入Java Edition版(俗称电脑版、JE版等,以下简称JE版)的服务器,这使得BE玩家可以体验到许多JE服务器的内容,比如一些BE没有的插件等。虽然但是(雾),这也让一些人(好吧其实一些人就是我自己)想到:是否可以反过来,让JE的玩家进BE服务器?虽然这个想法被很多人骂过,但也阻挡不了我探索JE进BE服务器方法的决心。从去年四月份开始我就在探索各种方式,比如Waterdog、Geyser等等,但都没能成功(因为我太菜了呜呜呜),直到琉璃开发的EZ4H给我带来了希望(琉璃,永远滴神!!!)
二、什么是EZ4H

EZ4H的github地址:https://github.com/Project-EZ4H/EZ4H
EZ4H官网:http://ez4h.liulihaocai.gq/
如果看过我的教程就会知道我这个人写教程大多面向基础较浅的人(说白了就是傻瓜式教程),向来不深入写原理(写了大部分人也看不懂可能还会徒增问题),所以依然是老样子,一笔带过。你可以认为EZ4H是Geyser反过来(但其实差别很大),如果用过Geyser你也会明白EZ4H仅仅是一个代理端,这意味着你单独开启EZ4H时你将无法加入任何服务器,你需要通过它来连接到一个BE服务器。EZ4H没有任何插件,它只是将BE的内容翻译给JE玩家,因此这个BE服务器可以是任何类型的。
JE进入BE服务器有什么好处呢?比如,一些BE没有的高端光影材质可以用于拍摄服务器宣传片,一些JE的MOD也可以用在BE的服务器上(还有某些外挂),当然最纯粹最快乐的用途就是拿电脑吊打手搓钢化膜的手机版玩家。
JE玩家还可以体验到BE服务器上的插件(不仅限于Nukkit,BDS、PM等都可以,取决于你指向的服务器)。
部分效果图:
173201uothmt7oumr1thno.jpg

173345b1exuxzi1q0uxuou.jpg

173337bueev2fw9lsejj4u.jpg

三、正式开始教学(视频教程:记得点赞投币关注三连哦)​

首先,去EZ4H的官网下载最新版EZ4H。http://ez4h.liulihaocai.gq/
将它解压,你会得到如下文件:
130603udyy43osp8rzddsr.png

如同大部分由JAVA编写的服务端一样,你需要一个启动bat去启动它,这里提供一个简单的启动文件:
代码:
@echo
java -jar ez4h.jar
pause
复制代码
将其保存为bat文件,放在EZ4H的根目录下,双击运行。
130921ay44ayznuiazluy4.png

当出现“Done"时说明启动成功。接下来在控制台里你基本上不需要什么操作了,我们来看配置文件。
131051msdvtojvg8jdflen.png

如图所示,当你成功启动EZ4H之后,会生成这些个文件。这些文件是干什么的自然都知道,即使你不知道相信你总是会用百度的。我们来看config
131309r66lwbelmbd4z0le.png

为什么config这么奇怪呢?是因为琉璃喜欢用json格式的癖好(敲),好在不怎么妨碍我最喜欢琉璃(划掉)不怎么妨碍我们使用。
这点配置也是一看就懂的东西,我还是稍微说一下。
je_host和je_port顾名思义也就是你想让JE玩家连接服务器时使用的IP和端口(注意是内网ip和内网端口),按照你个人需要来配置。
be_host和be_port指的是你想让JE玩家进入的那个BE服务器的IP和端口。这里注意,EZ4H是支持连接外部服务器的。什么意思呢?你既可以在ip那里填写本地ip,也就是让玩家连到同一台主机上的BE服务器;也可以填写一个其他服务器的ip(比如EaseCation等等)让你可以通过EZ4H进入一个你想玩的BE服务器。(一般这么做是想干什么的就⑧用我多说了吧,懂得都懂
....png

player-list就是玩家按tab显示的内容,

xbox-auth则是是否开启xbox验证(如果设置为false关闭,则你所要连接的BE服务器的xbox验证也必须是关闭状态),开启的话可以防止一些JE玩家用离线登录搞♂事情,但是也会带来一些限制。
按照你的需求来进行配置。配置好了之后,将EZ4H服务端和你想要连接的BE服务端都启动,现在打开你的JE版Minecraft,输入你刚刚在je_host那里填入的内网ip、端口对应的外网ip、端口,然后就能连接你在be_host那里填写的的BE服务器啦!
四、进入BE服务器后的操作

因为JE和BE的差异,JE玩家无法使用BE上的UI,也就是菜单等一类插件JE玩家是用不了的。
BE上的菜单:
140554h5oyr55x9vohr9oq.jpg

JE上看见的:
140623r6awsvllwsl7t2o6.jpg

你可以选择制作一个箱子菜单,然而并不是每个服务器都有箱子菜单。为此,EZ4H提供了一个解决方案。
菜单的内容会发送至聊天栏,每个选项都会标有对应的序号。通过在聊天栏输入`form choose <序号>来选择对应的选项,`form <内容>来向输入框中输入内容。虽然较为繁琐,但基本通用于各大服务器。(啊这,听说有人不会打 ` 这个符号,它在你键盘的左上角,”~“下面那个)​
五、我可以用EZ4H做什么?

①对于BE服主:让JE玩家也能进入你的BE服务器意味着你将拥有更多的玩家。
②对于普通玩家:如果你想用电脑吊打手机玩家,你可以自行搭建一个EZ4H服务端并指向你想玩的BE服务器,如果不是长期使用的话你可以用樱花(Sakura Frp)来搭建一个映射,成本十分低廉。​
六、注意事项

当然,EZ4H并不是那么美好。由于它是由一个人开发的,能力有限,存在很多不足。
①目前EZ4H仅支持JE1.12.2版本连接BE1.16.200版本,请注意选择你的客户端版本。
②目前xbox验证存在一些问题,不建议使用。如果你担心玩家用JE进服搞♂事情,你可以在服务器加一些注册登录插件。
③由于JE和BE某些方块ID不同,因此JE玩家在BE服务器里可能会遇到一些错乱的方块(比如草径变成了末地烛等)
④由于某些特性特性,BE玩家看JE玩家的皮肤可能是一片黑:
140933uwiq92pvafl28pxu.jpg

JE玩家看BE玩家只是一个史蒂夫:
140950mcnl78ll5lwcuwxx.jpg

⑤不可避免的,一些战斗效果无法完美同步。
⑥上面我们说过,JE的一些外挂将可以在BE服务器中使用。如果你决定将你的BE服务器向JE玩家开放,就要做好承受JE外挂侵入的准备,你的服务器最好有一定反作弊能力。
⑦EZ4H仅供娱乐,不建议用于正规用途,可能会对您的服务器造成一些损坏。如果你希望一个更成熟的项目,可以关注TunnelMC项目:https://github.com/THEREALWWEFAN231/TunnelMC
⑧有关于EZ4H的问题,请去github提交issue。​
line9.png

如果您觉得本篇教程对您有帮助,请给点人气叭!
 
0.2版本没法进入
[36m20:46:13[m [[34mINFO [m] mcllaop[223.86.226.253:52041] JOINED. java.lang.IllegalArgumentException: No enum constant com.github.steveice10.mc.protocol.data.game.entity.player.GameMode.DEFAULT at java.lang.Enum.valueOf(Unknown Source) at com.github.steveice10.mc.protocol.data.game.entity.player.GameMode.valueOf(GameMode.java:5) at me.liuli.ez4h.utils.BedrockUtils.convertGameModeToJE(BedrockUtils.java:39) at me.liuli.ez4h.translators.bedrock.play.StartGamePacketTranslator.translate(StartGamePacketTranslator.java:55) at me.liuli.ez4h.managers.TranslatorManager.translateBedrockPacket(TranslatorManager.java:27) at me.liuli.ez4h.minecraft.BedrockBatchHandler.handle(BedrockBatchHandler.java:23) at com.nukkitx.protocol.bedrock.BedrockSession.onWrappedPacket(BedrockSession.java:288) at com.nukkitx.protocol.bedrock.BedrockRakNetSessionListener.onEncapsulated(BedrockRakNetSessionListener.java:32) at com.nukkitx.network.raknet.RakNetSession.onEncapsulatedInternal(RakNetSession.java:300) at com.nukkitx.network.raknet.RakNetSession.onOrderedReceived(RakNetSession.java:427) at com.nukkitx.network.raknet.RakNetSession.checkForOrdered(RakNetSession.java:405) at com.nukkitx.network.raknet.RakNetSession.onRakNetDatagram(RakNetSession.java:393) at com.nukkitx.network.raknet.RakNetSession.onDatagram(RakNetSession.java:272) at com.nukkitx.network.raknet.RakNetClient$ClientDatagramHandler.channelRead(RakNetClient.java:176) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1412) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:943) at io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read(AbstractNioMessageChannel.java:93) at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:645) at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580) at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:497) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459) at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:886) at java.lang.Thread.run(Unknown Source)
 
0.2版本没法进入
[36m20:46:13[m [[34mINFO [m] mcllaop[223.86.226.253:52041] JOINED. java.lang.IllegalArgumentException: No enum constant com.github.steveice10.mc.protocol.data.game.entity.player.GameMode.DEFAULT at java.lang.Enum.valueOf(Unknown Source) at com.github.steveice10.mc.protocol.data.game.entity.player.GameMode.valueOf(GameMode.java:5) at me.liuli.ez4h.utils.BedrockUtils.convertGameModeToJE(BedrockUtils.java:39) at me.liuli.ez4h.translators.bedrock.play.StartGamePacketTranslator.translate(StartGamePacketTranslator.java:55) at me.liuli.ez4h.managers.TranslatorManager.translateBedrockPacket(TranslatorManager.java:27) at me.liuli.ez4h.minecraft.BedrockBatchHandler.handle(BedrockBatchHandler.java:23) at com.nukkitx.protocol.bedrock.BedrockSession.onWrappedPacket(BedrockSession.java:288) at com.nukkitx.protocol.bedrock.BedrockRakNetSessionListener.onEncapsulated(BedrockRakNetSessionListener.java:32) at com.nukkitx.network.raknet.RakNetSession.onEncapsulatedInternal(RakNetSession.java:300) at com.nukkitx.network.raknet.RakNetSession.onOrderedReceived(RakNetSession.java:427) at com.nukkitx.network.raknet.RakNetSession.checkForOrdered(RakNetSession.java:405) at com.nukkitx.network.raknet.RakNetSession.onRakNetDatagram(RakNetSession.java:393) at com.nukkitx.network.raknet.RakNetSession.onDatagram(RakNetSession.java:272) at com.nukkitx.network.raknet.RakNetClient$ClientDatagramHandler.channelRead(RakNetClient.java:176) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1412) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:943) at io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read(AbstractNioMessageChannel.java:93) at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:645) at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580) at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:497) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459) at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:886) at java.lang.Thread.run(Unknown Source)
换1.0正式版https://gezhi.lanzous.com/iLrl8ldxwed
 
进不去 卡在登陆这一步
[CODE lang="java" highlight="1"]java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 1
at me.liuli.ez4h.minecraft.auth.XboxLogin.getAccessToken(XboxLogin.java:66)
at me.liuli.ez4h.minecraft.auth.fakeAuthServer.FakeServer.packetReceived(FakeServer.java:73)
at com.github.steveice10.packetlib.event.session.PacketReceivedEvent.call(PacketReceivedEvent.java:51)
at com.github.steveice10.packetlib.tcp.TcpSession.callEvent(TcpSession.java:143)
at com.github.steveice10.packetlib.tcp.TcpSession$3.run(TcpSession.java:343)
at java.lang.Thread.run(Thread.java:821)[/CODE]
 
进不去 卡在登陆这一步
[CODE lang="java" highlight="1"]java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 1
at me.liuli.ez4h.minecraft.auth.XboxLogin.getAccessToken(XboxLogin.java:66)
at me.liuli.ez4h.minecraft.auth.fakeAuthServer.FakeServer.packetReceived(FakeServer.java:73)
at com.github.steveice10.packetlib.event.session.PacketReceivedEvent.call(PacketReceivedEvent.java:51)
at com.github.steveice10.packetlib.tcp.TcpSession.callEvent(TcpSession.java:143)
at com.github.steveice10.packetlib.tcp.TcpSession$3.run(TcpSession.java:343)
at java.lang.Thread.run(Thread.java:821)[/CODE]
是最新版的EZ4H吗?(20210125)
另外不太建议开启XBOX验证,有一些蜜汁错误
 
噢我的上帝,看这该死的优美的排版,真让人着迷

:滑稽2:
 
好像还是有点问题,JE1.12.2连BE1.16.210.06提示客户端过旧
还有其他的解决方案吗
TunnelMC看起来都不是一个完整的成品。。。。
 
好像还是有点问题,JE1.12.2连BE1.16.210.06提示客户端过旧
还有其他的解决方案吗
TunnelMC看起来都不是一个完整的成品。。。。
基岩版服务器需要是1.16.200的
 

在线管理成员

在线会员

  • mmyddd
  • Fendonacc
  • 慵懒的羊
  • JUYUYU
  • We1st
  • winter0203
  • 刘 芯洋
  • Blue_Ze
  • weather
  • ou150654
  • HansOffice.
  • 塬谱
  • Sh1roCu
  • 玄锐暮
  • anbandun
  • Runaway_21
  • 没钱的山海
  • xie xing
  • lzm231
  • 玄岩
  • YYT
...和 21 更多。
后退
顶部 底部