Minecraft(我的世界)中文论坛
标题: 完全自定义世界生成
作者: (=°ω°)丿 时间: 2020-1-18 13:50
标题: 完全自定义世界生成
本帖最后由 隐退 于 2020-1-18 14:20 编辑
大致目标:编写一个数据包来完全自定义世界生成。
步骤:(以下讨论中将所有 X 轴和 Z 轴坐标相同的区块视为同一区块)
- 创建一个虚空超平坦世界;
- 在玩家出生点区块调用 生成函数 生成地形、建筑等;
- 当玩家所在区块相邻的八个区块未调用过 生成函数 时:
- 在相应区块调用 生成函数;
- 为调用过 生成函数 的区块做上标记。
问题:
自己的方案:
生成函数:
- 调用 随机函数 确定所要生成的地形和建筑等;
- 自下而上使用 fill 指令填充地形,必要时使用结构方块的种子以实现随机性;(暂时无法实现地表的起伏变化)
- 使用 spreadplayers 配合药水云确定建筑的位置并生成建筑。
标记:
使用方块代替药水云,但是 不知道如何检测比较方便 。
希望可以得到更好的解决方案。
作者: Chelover_C60 时间: 2020-1-18 13:50
1、生成函数的生成步骤
旅行风筝的建筑生成思路(部分参考自ruhuasiyu的更多合成)是:
当检测到没有标记时,做标记并激活一个战利品表(只有一个随机池,且拥有指定的启动概率)并spreadplayers,这样检测生成的是什么物品即可,如果没有物品就不生成。
然后针对地形生成,可以一次性先生成一个大概,然后再通过随机marker稍作修饰,这样应该会比一层一层fill少用一些命令。
2、使用何种标记对资源占用最少
基岩就是最好的标记,检测y=0处是否有基岩即可(如果你决定在y=0处生成基岩)
感觉这种东西可以发到别的技术性讨论的板块
作者: ⊙u⊙ 时间: 2020-1-18 18:13
本帖最后由 ⊙u⊙ 于 2020-1-18 00:52 编辑
[ruby=直觉告诉我不ok]我看了一下更多合成的数据包,区块生成标记那里写得不太行。[/ruby]
写之前说一下,方便和更好(特指性能)几乎是相反的两面。
首先,检测区块是否已执行过生成函数。通过检测marker判断。
检测区块y=0里一个角落(或中心)是否存在此marker。
marker可以是方块/实体
方块的话可用如barrier/void_air/cave_air等方块,生成完毕后以后还需要存储/读取数据的可改用jukebox。
*方块的话,该方块上方记得setblock一个基岩
实体的话可用AEC这种超轻量级别的marker。
使用哪种marker就得根据你生成什么来衡量了。我个人是偏向jukebox。
marker的定位
如前面所说,检测区块里固定的一个位置。在此固定点放置marker
计算方面,获取玩家xz坐标,除以16,获取除16的可执行次数,获取余数。之后就可以通过positioned找到这个区块中的固定点。
定位之后就是执行自定义生成,这方面不太懂就不说了。
生成的步骤也和你要生成什么有关,也不说了...
作者: mc3124076548 时间: 2020-1-19 13:47
本帖最后由 mc3124076548 于 2020-1-19 23:48 编辑
那你是真的牛啤(管理员)