minecraft吧 关注:2,531,048贴子:31,677,045
  • 59回复贴,共1

学习了一点点fabric开发有感

只看楼主收藏回复

下面的讨论内容仅限Java版
原版的像一坨胡乱搭起来的积木,虽然有个主干,但还是杂乱无章,有很多重复的逻辑。这坨积木外面套了一层布(混淆),普通人看不穿这层布,只能看到一些能用的接口,最简单的当然是命令了,能修改的内容很少;其次就是资源包,能修改游戏的各种资源,但没法影响服务端;再大一点就是资源包datapack,基本就是原版.jar能做出的最大修改了。这三种方式其实都是在使用官方提供的接口,不容易做出巨大改变(比如加一种新方块/生物,修改游戏UI等等)。
fabric给我的感觉,就是把这层套在积木上的布给去了,然后提供了一些修改积木的工具(主要是fabricAPI和mixin)。这样mod开发者就可以通过fabricAPI 或者mixin增加积木、修改积木。增加积木通常不会产生冲突,但多个mod修改了同一个积木就会导致冲突。可以说fabric不装任何mod的话,和原版几乎毫无差别。但各种mod可以修改原版任意一处细节。因此可以看到mod,上(服务端)有新增群系 生物 方块,下(客户端)有微调UI位置,虽仍然根植于原版,但可谓完全不原版
而spigot等服务端给我的感觉,就是完全造了一堆新积木,只不过长的和原版差不多。这种积木的逻辑更好,卡顿更低,但很可能在个别地方与原版不同。这类服务端提供了plugin插件这种接口来让开发者修改服务器。因此各种插件实际上是在用服务端核心开发者提供的api,可修改内容虽然相较原版的datapack扩大了,但仍然不是全部。
因此如果要我给各种修改玩法的方式做一个排序,由小到大应该是:
命令:只能局限于修改极少内容,比如检测玩家是否站在某种方块上,或者容器内有没有特定物品
数据包:能修改少数物品的用途,比如检测玩家右键了某物品,按下了什么按键
(spigot类服务器)插件:增加一些命令,自动处理游戏文件,读取玩家输入的配置来即时改变游戏
mod:EVERYTHING。增加群系 方块 生物,改变实体运动逻辑等等


IP属地:上海来自Android客户端1楼2024-03-18 17:35回复
    这也是为什么paper等服务端通常不需要玩家安装特定客户端即可进入,因为这种服务器是“兼容”原版的。对原版内置服务端的核心内容之外,就是插件可修改的地方。
    而mod能修改所有地方,必然造成了它和原版的不同步,所以很多mod服(如机械动力)都要求客户端也安装对应的mod


    IP属地:上海来自Android客户端2楼2024-03-18 17:38
    回复
      兄弟能讲解一下minestom吗


      IP属地:吉林来自iPhone客户端3楼2024-03-18 18:55
      收起回复
        我觉得应该在fabric之类的里面加一个跨版本的子项目,只用到这个它而不用到完整内容的模组就可以跨版本运作,而基本不需要针对版本进行更新


        IP属地:江苏来自Android客户端4楼2024-03-18 19:19
        收起回复



          IP属地:浙江通过百度相册上传5楼2024-03-18 19:33
          收起回复
            那forge呐楼主好好奇


            IP属地:江苏来自iPhone客户端6楼2024-03-19 05:12
            收起回复
              如果说数据包是麻将官方给出的mod方案,是否可以说数据包的一切可能内容都已经被麻将预料到了?


              IP属地:上海来自Android客户端7楼2024-03-19 09:55
              收起回复
                你说的fabric的问题Forge通过事件系统解决了,代价是整体运行速度会被某个没写好的mod拖累


                IP属地:福建来自iPhone客户端8楼2024-03-19 13:43
                回复
                  我干基岩版addons制作的,现在已经看不到啥希望了,想进军java版。请问楼主大佬java版应该从那里下手啊,forge版和你说的这个fabric有什么区别啊,我做基岩版addons是解原版apk包拿数据的,java源码要怎么看啊,求科普求科普



                  IP属地:广东来自Android客户端9楼2024-03-23 01:43
                  收起回复
                    数据包也能加群系,地物和新维度,然而因为没法加方块和生物,只能在原版的框架上搞搞缝合...
                    比如做个岩浆块高山群系,水泥群系,加点新遗迹之类的,是可以做的。以前玩整合包有一个全是废弃高楼的新维度,那种也可以做。但是没法做暮色森林。
                    顺带一提我们数据包创作者现在做新方块实际上是用老方块套一层实体壳子做外观,有交互需求再套一层交互实体,或者老方块用木桶一类的mc原本有GUI的东西来做所以效率很低,放五六十个工作台,导线啥的还好一点,拿来整新矿物,新的树叶之类的东西就很致命了。
                    之前看别人数据包做新矿物是用的石化橡木台阶这种生存用不到的方块去修改,以及刷怪笼(刷怪笼本身内部就会渲染一个实体模型,调整一下就能刚好覆盖方块,不用手动套壳了)。
                    另外数据包还能改战利品表(宝箱/生物/钓鱼/猫猫陪睡奖励等),进度一类的。
                    物品的话,也是通过给老物品套壳添加新功能的方法做的。不过目前几个快照mj在大改物品系统,已经能做到药水堆叠99,一口岩浆吃十秒回满饱食饱和这种堪称诡异的操作了,估计没几个快照就能注册新物品了。
                    顺便我们展示一下通过覆盖原版GUI实现的面板
                    图一是五年前做的工作台,版本为1.13。(还有个石头桌面的查分但是没翻到)
                    图二是覆盖背包做的装备栏扩展(原本的背包数据单独存起来了,是可以换回去的)



                    IP属地:上海来自Android客户端10楼2024-03-25 10:20
                    收起回复