加入收藏 | 设为首页 | 会员中心 | 我要投稿 二游网_173173游戏网 (http://www.173173youxi.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 新闻中心 > 攻略战报 > 正文

《我的世界》1.12函数命令系统入门教程 函数命令怎么用

发布时间:2017-06-09 11:09:52 所属栏目:攻略战报 来源:我的世界中文论坛
导读:副标题#e# 《我的世界》1.12版本新增了函数命令这一内容,很多玩家觉得非常复杂,也有玩家发现这个命令可以完全脱离命令方块而存在,那么下面小编就为大家带来《我的世界》1.12函数命令系统入门教程,告诉大家函数命令怎么用,希望大家喜欢。 写在前面的话
副标题[/!--empirenews.page--]

  《我的世界》1.12版本新增了函数命令这一内容,很多玩家觉得非常复杂,也有玩家发现这个命令可以完全脱离命令方块而存在,那么下面小编就为大家带来《我的世界》1.12函数命令系统入门教程,告诉大家函数命令怎么用,希望大家喜欢。

写在前面的话

  1.9的更新为我们带来了三色命令方块,让命令方块脱离了红石成为独立的体系,我们因此可以更好实现一些想法;时隔3个版本,MOJANG再次为我们带来惊人的变革。

  1.12中,函数与进度系统的出现,让命令脱离命令方块——这句曾经说过的玩笑般的预言,正式成为可能。

游民星空

函数系统的构成

函数系统的由来

  函数(function)系统,是 MC 1.12 Pre-1 版本中新增的一个功能,它将原来进度系统中返回指令的部分单独提取出来,做成了现在的函数系统。

函数系统的形式

  函数系统由命名空间函数文件组成,这些文件保存在存档目录/data/functions/下。functions目录下的文件夹,称为命名空间,各个命名空间下存放不同的函数文件。实际上,命名空间就是方便我们编写者分类并管理各种函数文件

  函数文件是以.mcfunction为后缀名的文本文件,建议采用utf-8无BOM编码以防显示错乱。简单来讲,一个函数等价于一个多行命令方块,函数文件里面每一行写一条指令,当执行这个函数时,里面的指令会按行依次执行。如果在一个函数中调用其它函数,那么在同一游戏刻,被调用的函数中所有指令先执行完,再继续当前函数中后续的指令,就像插队一样,我们在后面对比命令方块时还会说到这个。

  请注意:在 1.12 Pre-3 版本中存在一个严重漏洞,即命令执行体不能正确地通过execute传递到被调用的函数中去,这个漏洞有望在后续版本以及正式版修复。

  以下是本文用到的一个函数系统的目录,带有"+"的表示为目录

  + functions
   + say
    hi.mcfunction
    bye.mcfunction
    Text1.mcfunction
    text2.mcfunction
   + system
    + process
     _process.mcfunction
    _main.mcfunction
    player_tick.mcfunction 

如何调用函数

  在 1.12 中,MOJANG新增了function指令和一条名为gameLoopFunction游戏规则来辅助我们使用函数系统。function指令的格式如下:

  function <命名空间:函数名>
  function <命名空间:函数名> <if|unless> <选择器>

  这两条都是可行的。其中,if|unless是在1.12 pre-4加入的功能,后面我会解释到这个。我们先来说说第一种形式。例如上面的目录中,要调用system这个命名空间下的_main文件,就是输入这样的指令:

  function system:_main

  现在,我们来看一个例子例如say命名空间下的Text1.mcfunctiontext2.mcfunction,里面分别写上这些内容

  Text1.mcfunction

  #这是一个范例,在function文件中可以用#来注释行。请注意,不能够使用//来注释!
  say 1
  function say:text2
  say 2

  text2.mcfunction

  say 3
  say 4

  当我在系统后台输入function say:text1时,聊天框会出现这些内容:
  [server] 1
  [server] 3
  [server] 4
  [server] 2

  也就是说,执行function指令的人,会把函数里面的指令依次执行——我在系统后台输入function指令,就是系统在执行,我自己输入function指令,就是我本人在执行。大家可能注意到了,函数中支持使用#进行注释(旧版本支持//注释,当前版本已经不再支持),也就是说被注释行不会作为指令而执行,这一点有多方便相比不比我再说了。同时需要大家注意:函数中所有指令不能够以/开头。例如,你可以这样写:

  say @s

  但是不能这样写:

  /say @s

  最后有一点需要注意的是,在function指令中调用函数时,不区分大小写。例如前面say命名空间下的Text1.mcfunction,我在调用的时候写的是say:text1

  然后是第二种形式,也就是带有if|unless的。我简单举两个例子,大家就知道是什么意思了。

  say:tellraw.mcfunction
  scoreboard objectives add timer dummy 计时器
  scoreboard players add @s timer 1
  function random:title if @s[score_timer_min=1200]
  scoreboard players reset @s[score_timer_min=1200] timer   random:title.mcfunction
  summon area_effect_cloud ~ ~ ~ {Tags:["rnd_title","rnd_title1"]}
  summon area_effect_cloud ~ ~ ~ {Tags:["rnd_title","rnd_title2"]}
  summon area_effect_cloud ~ ~ ~ {Tags:["rnd_title","rnd_title3"]}
  summon area_effect_cloud ~ ~ ~ {Tags:["rnd_title","rnd_title4"]}
  summon area_effect_cloud ~ ~ ~ {Tags:["rnd_title","rnd_title5"]}
  entitydata @r[r=0,type=area_effect_cloud,tag=rnd_title] {CustomName:"rnd_title"}
  execute @e[name=rnd_title,tag=rnd_title1] ~ ~ ~ tellraw @a[r=0,c=1] ["1"]
  execute @e[name=rnd_title,tag=rnd_title2] ~ ~ ~ tellraw @a[r=0,c=1] ["2"]
  execute @e[name=rnd_title,tag=rnd_title3] ~ ~ ~ tellraw @a[r=0,c=1] ["3"]
  execute @e[name=rnd_title,tag=rnd_title4] ~ ~ ~ tellraw @a[r=0,c=1] ["4"]
  execute @e[name=rnd_title,tag=rnd_title5] ~ ~ ~ tellraw @a[r=0,c=1] ["5"]

  将say:tellraw放到主进程中

  execute @a ~ ~ ~ function say:tellraw

(编辑:二游网_173173游戏网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读