我是李君子 发表于 2024-1-20 20:35:18

Mc 函数从入门到入坟 ( 7 - 实例: 生成空岛 )

前言
今天带来一个很有意思的示例
生成一个空岛
树 ✓
土 ✓
矿物以及石头 ✓

准备
这是本期作品的包

包内的code文件夹里存放了生成mcfunction的smcf源码
( SMCFJS是我的一个项目 是一个便于开发的JS框架 也是mcfunction的超集 后缀为smcf )
给你们生成了三个空岛 快说谢谢楼主[贴吧_滑稽][贴吧_滑稽][贴吧_滑稽]

教程
创建manifest.json和functions文件夹
Manifest.jaon↓↓↓
{
    "format_version": 2,
    "header": {
      "description": "介绍",
      "name": "生成空岛",
      "uuid": "51a9d87c-4e9f-4980-88c5-5ae3ce341c63",
      "version": [ 0, 0, 1 ],
      "min_engine_version": [ 1, 16, 40 ]
    },
    "modules": [
      {
            "description": "...",
            "type": "data",
            "uuid": "43fd031e-a32c-494c-8e3a-36076d810d15",
            "version":
      }
    ]
}
在functions目录下创建sb1.mcfunction
注: SB是skyblock的缩写

要想制作空岛生成函数,我们得先弄明白这两个问题
1. 命令执行顺序
2. 相对坐标的使用

首先是命令执行的顺序 在mcfunction中 所有命令都是从上往下执行的
也就是说会先执行写在前面的指令

所谓相对坐标
即相对于命令执行者的坐标 格式一般为 ~数字

代码↓↓↓
#填充~0 ~95 ~0到~5 ~95 ~5的所有方块为minecraft:grass
fill ~0 ~95 ~0 ~5 ~95 ~5 minecraft:grass
#填充~0 ~90 ~0到~5 ~94 ~5的所有方块为minecraft:stone
fill ~0 ~90 ~0 ~5 ~94 ~5 minecraft:stone
#生成minecraft:gold_ore在~2 ~93 ~0
setblock ~2 ~93 ~0 minecraft:gold_ore
#生成minecraft:iron_ore在~2 ~90 ~1
setblock ~2 ~90 ~1 minecraft:iron_ore
#生成minecraft:gold_ore在~2 ~93 ~1
setblock ~2 ~93 ~1 minecraft:gold_ore
#生成minecraft:gold_ore在~2 ~94 ~3
setblock ~2 ~94 ~3 minecraft:gold_ore
#生成minecraft:gold_ore在~0 ~93 ~0
setblock ~0 ~93 ~0 minecraft:gold_ore
#生成minecraft:iron_ore在~2 ~90 ~1
setblock ~2 ~90 ~1 minecraft:iron_ore
#生成minecraft:iron_ore在~1 ~90 ~3
setblock ~1 ~90 ~3 minecraft:iron_ore
#生成minecraft:gold_ore在~1 ~91 ~0
setblock ~1 ~91 ~0 minecraft:gold_ore
#生成minecraft:gold_ore在~1 ~90 ~2
setblock ~1 ~90 ~2 minecraft:gold_ore
#生成minecraft:gold_ore在~2 ~91 ~1
setblock ~2 ~91 ~1 minecraft:gold_ore
#生成minecraft:iron_ore在~0 ~91 ~2
setblock ~0 ~91 ~2 minecraft:iron_ore
#生成minecraft:coal_ore在~0 ~93 ~2
setblock ~0 ~93 ~2 minecraft:coal_ore
#生成minecraft:iron_ore在~1 ~93 ~2
setblock ~1 ~93 ~2 minecraft:iron_ore
#生成minecraft:gold_ore在~1 ~91 ~1
setblock ~1 ~91 ~1 minecraft:gold_ore
#生成minecraft:gold_ore在~2 ~90 ~0
setblock ~2 ~90 ~0 minecraft:gold_ore
#生成minecraft:coal_ore在~0 ~94 ~3
setblock ~0 ~94 ~3 minecraft:coal_ore
#生成minecraft:coal_ore在~3 ~92 ~1
setblock ~3 ~92 ~1 minecraft:coal_ore
#生成minecraft:gold_ore在~2 ~93 ~2
setblock ~2 ~93 ~2 minecraft:gold_ore
#生成minecraft:iron_ore在~0 ~94 ~2
setblock ~0 ~94 ~2 minecraft:iron_ore
#填充~1~99~1到~3~102~3的所有方块为minecraft:leaves
fill ~1~99~1 ~3~102~3 minecraft:leaves
#填充~2~96~2到~2~100~2的所有方块为minecraft:log
fill ~2~96~2 ~2~100~2 minecraft:log
#将玩家传送到~1 ~100 ~1
tp ~1 ~100 ~1

一些内容讲解
将空岛生成在相对目前y90以上是为了防止生成平地岛
最后再传送是因为执行顺序的原理
其他的都很好理解


对于矿物的随机分布 可能会让一些人头疼
我们可以借助代码来完成随机数的计算
生成0-5随机数
Python↓↓↓
import random
import math
print(math.floor(random.random()*5))
JS↓↓↓
console.log(Math.floor(Math.random()*5))
PHP↓↓↓
$random = rand()%6;
echo $random;
然后逐个写入就行了
当然也可以联系我使用Smcf进行开发或者帮助我们开发smcfjs
扔个qq: 1983997053
废话有点多[贴吧_滑稽]

然后等制作好了后进入游戏就可以使用

进行生成了

结语
很简单吧,mcfunction就是这么厉害
学好mcfunction就像学好材质包的ui一样重要[贴吧_勉强]

花冈柚子 发表于 2024-1-20 23:39:45

其实在生成空岛的时候function可以靠structure来执行,不用一个个fill来堆,矿物随机分布有structure的完整度生成,这样的话就不会太臃肿

我是李君子 发表于 2024-1-20 23:44:56

小屿风er 发表于 2024-1-20 23:39
其实在生成空岛的时候function可以靠structure来执行,不用一个个fill来堆,矿物随机分布有structure的完整度 ...

那就不是纯mcfunction了[贴吧_吐舌]
还有你头像是不是我女儿小希

花冈柚子 发表于 2024-1-20 23:49:00

我是李君子 发表于 2024-1-20 23:44
那就不是纯mcfunction了
还有你头像是不是我女儿小希

纯function那确实不能用其他的(

我这个方法挺适合那些喜欢偷懒的人食用((

(对啊,是我家希希(●'◡'●) )

TYXH4244 发表于 2024-1-21 17:28:23

我是李君子 发表于 2024-1-20 23:44
那就不是纯mcfunction了
还有你头像是不是我女儿小希

话说可以用一个生物走动的路径来生成随机数吗?
scoreboard很简单

我是李君子 发表于 2024-1-21 17:37:34

TYXH4244 发表于 2024-1-21 17:28
话说可以用一个生物走动的路径来生成随机数吗?
scoreboard很简单

嗯,可以
页: [1]
查看完整版本: Mc 函数从入门到入坟 ( 7 - 实例: 生成空岛 )