topologycraft吧 关注:879贴子:21,819

【重发】远程永久加载区块原理及实用

只看楼主收藏回复

原视频地址:https://youtu.be/aeq5GZxRH9s


1楼2017-04-11 10:39回复
    gnembon的原存档搬运:http://pan.baidu.com/s/1mhUyCti


    2楼2017-04-11 10:39
    回复
      从1.8开始,所有非出生点区块和非玩家视距内的区块会每45秒卸载1gt。这个卸载会导致某些装置的不完美:伪和平每过45秒会刷最多4只怪,刷沙机每过45秒需要停止运行一次否则会沙子直接掉落为方块。然而这45秒
      卸载也不是完美卸载的,每次只会卸载100个区块,然后剩下的区块在下一个gt被卸载。
      假设下一个gt被卸载的区块中有区块A和区块B。如果A有一个漏斗指向B,那么游戏就会认为B还是一个有用的
      区块,然后将B从卸载列表里删除,也就是说B还可以再保持加载45秒,然后被卸载。但是如果B同时有一个漏斗指向A,那么游戏会同时将A和B从卸载列表里删除,下一个45秒也是,同时达到了永久加载的效果。


      3楼2017-04-11 10:40
      回复
        下一步需要确认的是我们需要永久加载的区块是45秒卸载时留到下一个gt被卸载的。所有区块卸载的先后取决于区块卸载顺序(Chunk Order),卸载顺序越小越先被卸载。

        顺序0和1的区块在前100个区块里,第一次被卸载,剩下的96个区块在下一个gt被卸载,可以用之前提到的漏斗互指来永久加载。
        其中区块卸载顺序也很好计算,只需要去掉负号,把两个数进行异或
        8二进制1000
        7二进制0111
        异或后1111
        十进制也就是15。
        也就是说(8,7)的卸载顺序是15。
        或者直接用Win10自带的计算器计算

        其中最有用的就是卸载顺序0和1的区块,因为这些区块需要用来在100个区块里用来卸载。这些区块也并不难找,实际上0和1的区块就在以(0,0)为中心的斜角和斜角附近,所有两个数字相等的区块卸载顺序都是0。

        区块卸载顺序热度图,颜色越深顺序越大

        深绿代表0,浅绿代表1,橙代表3,紫代表7,黑代表15
        顺带一提,Java7下区块数字正负不同的卸载顺序都是0


        4楼2017-04-11 10:41
        回复
          接下来就是稍微麻烦一点的步骤了,我们需要加载100个区块用来每45秒卸载。我总结了一些比较重要的这100个区块的条件:
          1.不在出生点区块里面;
          2.在(0,0)为中心的斜角上;
          3.在玩家活动范围之外,也就是说平时不会被加载到;
          4.如果要刷动物,那么这100个区块里不能有动物(清除草方块)。
          根据这些条件以及利用Admist,可以很方便地找到一大片区域用来加载。
          找到之后,首先先从一个卸载顺序>2的区块开始(数字越大越稳定,保证不会去加载的话则都稳定),做一个2×2区块的漏斗环

          这个漏斗环是保证这100个区块不被全部卸载掉的关键。每次45秒到来的时候,先是卸载顺序0的区块被卸载,然后下一个gt旁边的这个区块被卸载(因为>2,而前100个区块全都是0和1的区块),但在卸载之前这个区块中的漏斗又把0的区块加载回去,所以当100个区块加载完后,这四个区块会一直保持加载并持续加载100个区块。

          从这4个区块以这个结构加载出去。
          一直加载到最开始的区块+50,比如从(7,7)开始加载的就加载到(57,57),(23,23)开始加载的就加载到(73,73)。
          加载完之后,这100个区块将会一直保持加载,并可以永久远程加载其他区块。
          如果需要一个区块永久加载,那么只需要查询区块是否卸载顺序≥2,然后相邻的的区块是否≥2,如果是的话互指的漏斗就可以了。如需关闭永久加载锁这两个漏斗即可。
          值得一提的是,伪和平只需要用两个漏斗互指,因为是地狱门离开的;如果是其他单个区块加载最好用2×2区块的漏斗环,因为如果离开的方向不对会导致两个区块一起卸载,2×2的话从任何方向离开都不会导致其中一个区块卸载。
          强弱加载等基本知识本贴不会提到
          但是还有一个问题。如果在单人,重进游戏的话,这100个区块全部会被卸载,服务器重启的时候也会。
          最简单的方法就是在出生点强加载区块做一个区块重载检测器(aka CBUD)

          石栅栏下面有根线

          大中的简易版,反应速度一样快(凋灵头换成末地烛的话反应时间会慢1gt)

          然后将输出用0t连到100个区块就可以了。
          (服务器可以不用0t,因为一般来说重启后不会这么快有人进来)


          5楼2017-04-11 10:43
          收起回复
            一些实例
            伪和平:

            利用藤蔓来防止实体窒息,差不多有三四百只怪保证多个人时也完全不刷,挂完怪之后从地狱门离开不能再回来

            两个区块卸载顺序都≥2,嘴对嘴的漏斗来保持永久远程加载,从全物品有红石线过来可锁住漏斗来关闭伪和平,同样的红石线来让服务器重启时加载伪和平
            一般一只怪都不会刷
            刷沙机:


            Ray的设计,用了2×2区块的漏斗环,加载了周围5×5区块
            永久加载后服务器没人的时候也能保持工作


            6楼2017-04-11 10:45
            回复
              goohz的CBUD:https://youtu.be/dbA7gbUXzPk
              Ray的简易刷沙机:https://youtu.be/wfeGyXJOCBw


              7楼2017-04-11 10:46
              回复
                我居然看懂了,猛顶楼主


                IP属地:北京来自Android客户端8楼2017-04-11 11:59
                收起回复


                  IP属地:广东来自Android客户端9楼2017-04-11 13:50
                  回复
                    我居然看懂了,顶萌楼主


                    来自Android客户端10楼2017-04-11 14:13
                    回复

                      突然想起CBUD这样就可以了= =完全不用凋灵头


                      11楼2017-04-11 14:52
                      收起回复
                        那100个先卸载的区块是不是去过一次就可以了?


                        IP属地:广东来自Android客户端12楼2017-04-11 15:42
                        收起回复
                          还在找原来的帖子怎么不见了…原来是多了好多拓展开来的东西


                          IP属地:广东来自Android客户端13楼2017-04-11 19:43
                          收起回复
                            感觉关于CBUD部分写的不是很清楚,这一层楼再补充一下。
                            为什么需要这个CBUD:在这里体现的是检测区块重新加载的作用,因为虽然100区块是自己保持加载的,但是每次单机重进游戏或者服务器重启,所有非玩家加载的区块和非出生点区块的区块都不会被重新加载回来。
                            但是实际上重进或重启时100个区块不需要玩家过去加载,只需要一条红石线过去让这个区块加载一下,这个区块就会一直加载到下一次重进或重启。
                            为了全自动这个重新加载的工作,可以用到这个简易CBUD

                            配合0t可以在重进3gt内加载到100个区块和伪和平(伪和平也是只需要加载一下 就可以永久无限加载了)

                            当然服务器的话0t不怎么必要 直接用中继器就可以了
                            这个CBUD需要做在出生点强加载区块内,查询强加载区块可以用此网站
                            http://chunkbase.com/apps/spawn-chunks-reader
                            (深蓝的区块是强加载)
                            红石线输出需要连到100个区块,结尾不需要任何装置,只要红石线更新到区块就行

                            因为红石线的更新范围很大,所以如果如图放红石线,金块所在的区块也能被更新到


                            14楼2017-04-12 06:55
                            收起回复
                              optifine 对这个有没有影响?另外,水桶服是否也可以用这个?
                              谢谢


                              IP属地:山东15楼2017-04-27 16:07
                              收起回复