地形创造数据包可以按方块创造一个自定义的地形。它根据每个方块的坐标来计算Perlin噪声和Worley噪声。将这两种结合,并加上一些后处理步骤,就可以创造一个包含不同生物群系(包括河流、平原、平顶山等)的完整的世界。
这个数据包没有实用价值。下面动图实际生成时间为30分钟。如果有一天你闲的没事做,可以下载数据包,放到一个void预设的超平坦里,随便传送到一个坐标,启动生成,就可以坐着看戏了。


给一个实体或玩家添加一个map_generator的tag,就会自动在这个实体周围开始生成地形。它每tick生成20个方块,每个方块消耗1400条命令。光照更新可能带来很大的卡顿。
同样你可以在perlin:preset中修改一些参数,比如每个生物群系的基础高度,来生成你自定义的地形。
参见perlin:random/number。这个数据包使用了线性同余生成器来生成随机数。数据包内为了使数据不超过int最大数据的限制进行了一些修改,因此该生成器只能生成0-8192之间的数字。
实际上,我一开始准备用游戏内的伪随机数生成器。但是由于bugMC-174435的存在导致loot table seed对/loot命令无效,就此作罢。
参见perlin:random/xy。由三个数字计算哈希码有很多方法。Minecraft使用了乘并异或的方法。但在游戏内计算异或将消耗大量命令,因此这里使用了乘法来计算。
2D Perlin噪声的游戏内实现。和标准的算法不同的是,本算法只在12个随机向量中选择。噪声预览图见下。参见perlin:init和perlin:noise。

2D Worley噪声的游戏内实现。用了一个简单的办法查找不同块之间的边界。噪声预览图见下。参见perlin:noise_wm和这里。

Worley噪声生成的边界为直线,属实没劲。因此添加了一个波浪滤镜让它看起来更加的浪。参见perlin:wave。
使用Worley噪声确定生物群系,再让边界成为河流。使用平滑函数使边界更加平滑(perlin:fade)。最后把Perlin噪声叠加在上方。最终结果是,给perlin:terrain输入一个坐标,它就会返回一个高度和所对应的的生物群系。
每个区块生成一个游标,根据游标位置调用函数生成区块。参见perlin:new_map/。
- [PCD] 如何写一个世界生成器
- SPGoding的DHP和听我胡说八道
- 后面的爷忘了
希望 mc 能有更丰富的功能让做新维度这件事情变得不那么困难吧
https://www.mcbbs.net/thread-942960-1-1.html
很有实用价值
仅仅将地形定义为类似末地岛的有限空岛就可以做到类似完全的新维度(在已有地形的地图上)
我正在想如何做一个新入口,让玩家可以传送到一个新世界(其实就是重置某一地区的生态系统或者地形,但是是有界的),以拓展游戏内容。
Xiao2 发表于 2020-3-24 21:06
刚在想这方面的事就遇到了qaq
很有实用价值
修改现有群系确实是个好想法!之前我做过这么一个地图 月面模拟器,就是把平顶山地形的混凝土全换成白色的了
生成空岛我还没想过 不过感觉可以试试!
kongbaiyo 发表于 2020-3-25 09:59
修改现有群系确实是个好想法!之前我做过这么一个地图 月面模拟器,就是把平顶山地形的混凝土全换成白色的 ...
我看了一下
如果能用现在这个技术的话
就不只是替换而已了
可以完全生成不一样的地形
再加上建筑等等就可以是一个“维度模拟器”了
-------
空岛的意思是:局域的地形生产,而不是全图型的(类似末地更新前的末地岛的局域性)
还有,适应1.16的啥时候更新呢?
Stray79 发表于 2020-4-30 19:59
**** 作者被禁止或删除 内容自动屏蔽 ****
所以你得在距离下课前30分钟打开然后搞出来
拜拜我电脑带不动
Dear-boy 发表于 2020-4-30 18:06
感谢大佬!本来对这方面一直不太懂,看了帖子入门了一些(虽然还是不懂) ...
这种mod仅仅是为了复杂而复杂吧
之前玩的匠魂mod至少还算人性
我是搞不懂这些mod到底图啥,可能有些人喜欢玩吧