Hanssc
本帖最后由 Hanssc 于 2020-8-6 18:52 编辑

前言

目前市场上的随机传送插件若干性能问题:

1. 寻找安全着陆位置
2. 传送后周围的区块如未生成,那么他将被同步生成。


本插件主要对第2种情况进行了优化。


如果要同时对第1种情况优化,那么需要完全重写一个随机传送插件,不是很划算。
具体方法可以是
1. 异步加载区块
2. 等待加载,然后获取区块快照
3. 异步对快照进行着陆点检查
4. 重复直到找到安全着陆位置


插件原理
使用高版本异步区块生成机制,对随机传送后的区块进行预加载,加载完成后再将玩家传送。


总结

也就是说当你使用本插件进行CMI随机传送时,会造成TPS损耗的几乎只有CMI自带的“寻找安全位置”功能。

(CMI自带的“寻找安全位置”在对1.16的地狱使用时,有非常大的失败,非常抵消,但是是CMI的问题不予解决)


对于1.13的服,其实有考虑PaperLib,但是因为本插件主要私用,因此不考虑1.13的支持

简单对比
测试环境:Paper 1.16.1-97
未修改视距等配置。使用LagAssist的LagMap监测TPS变化
主世界:


地狱世界:




第一幅图为使用该插件后随即传送后的效果
第二幅为未使用
图中点1和3都为"寻找安全着陆点"操作,无可避免导致TPS下降。点2点4是区块生成操作。
玩家在传送到一个随机传送点后,一般情况下都会左右看看,那么会导致周围的区块被生成(这个过程是同步的)且生成的区块数量庞大,
如果视距调整为4,那么生成的区块最大将会是:8*8-del(del排除一些边角区块)


以上假设基于玩家传送后的区域的区块未生成。
当然,如果你把服务器全部区块都预生成了,那么影响将会非常小,用不用本插件都无所谓了。但预生成会占用大量的磁盘空间。(1.14~)
RandomTeleport-1.0.0-SNAPSHOT.jar (5.37 KB, 下载次数: 191)

名副其实
标题不合格请修改
不存在叫做“辅助”的插件类型

叁肆.
建议放插件的效果图哦,可以让浏览的人更加清楚的明白这个插件

Hanssc
枫黎秋 发表于 2020-7-17 18:33
建议放插件的效果图哦,可以让浏览的人更加清楚的明白这个插件

已经添加了几个效果图

PixelCloud
正在使用cmi 十分好的插件

asd445
[RandomTeleport] Plugin RandomTeleport v1.0.0-SNAPSHOT generated an exception while executing task 1620
java.lang.NoSuchMethodError: org.bukkit.World.getChunkAtAsync(Lorg/bukkit/Location;Z)Ljava/util/concurrent/CompletableFuture;
        at me.knkm.randomteleport.RandomTeleport.loadNearby(RandomTeleport.java:55) ~[?:?]
        at me.knkm.randomteleport.RandomTeleport.lambda$onCMIPlayerTeleport$1(RandomTeleport.java:40) ~[?:?]
        at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftTask.run(CraftTask.java:81) ~[spigot-1.16.4.jar:git-Spigot-a19903d-5b74714]
        at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:54) [spigot-1.16.4.jar:git-Spigot-a19903d-5b74714]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:?]
        at java.lang.Thread.run(Unknown Source) [?:?]

123456axc
666666666666

第一页 上一页 下一页 最后一页