Lonewolfi
生成发包实体A, 发包实体A所在区块命名为区块A
发包实体A生成时, 需要将实体A发包给【加载区块A的所有玩家】
主要问题【如何获取加载区块A的所有玩家】

我个人的(笨比)解决方案是protocol插件的PacketType.Play.Server.MAP_CHUNK与PacketType.Play.Server.UNLOAD_CHUNK
玩家加载区块时记录,离开(不再加载这个区块)时删除记录

有没有什么方法可以直接获取到加载区块A的玩家

在spigotmc翻了好久没翻到...

美味的曲奇
bukkit 没发现好的方法

paper 存在 PlayerChunkLoadEvent 和 PlayerChunkUnloadEvent
可以实现

Lonewolfi
美味的曲奇 发表于 2022-6-9 16:45
bukkit 没发现好的方法

paper 存在 PlayerChunkLoadEvent 和 PlayerChunkUnloadEvent

这个和我那个解决方案是一样的 都是需要自己来记录

美味的曲奇
Lonewolfi 发表于 2022-6-9 16:49
这个和我那个解决方案是一样的 都是需要自己来记录

目前没看过能直接获取的方案
Chuck并没有存储玩家,也不太可能储存玩家

名副其实
其实直接获取玩家设置内区块视距并且判断玩家在哪个区块就可以实现了(

Lonewolfi
名副其实 发表于 2022-6-9 17:13
其实直接获取玩家设置内区块视距并且判断玩家在哪个区块就可以实现了(

好像也可以 获取玩家所在区块的xz +- 区块视距,然后判断实体区块的xz是否这两个区间内就是不知道这个和我说的那个 哪个性能消耗少点(可能要经常生成/删除发包实体)

Lonewolfi
美味的曲奇 发表于 2022-6-9 16:52
目前没看过能直接获取的方案
Chuck并没有存储玩家,也不太可能储存玩家

就比如原版,玩家放置方块,服务端肯定要给加载方块所在区块的玩家发包这个方块,翻了一下net.minecraft.server没翻到相关代码

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