chyx
本帖最后由 chyx 于 2018-11-4 14:27 编辑

使用1.14的延迟指令(schedule)做的音乐。




这个指令简直天生就是为了音乐做的。
因为不能传递任何指令上下文,也不能重复执行同一个指令,所以做系统时很鸡肋。
但做音乐就很舒服了。
我注意到这个指令再level.dat文件里做的标记的格式,照着做,把把乐谱转成音符和游戏刻对应的形式写入文件,即可在指定的游戏刻播放音乐。
进入游戏什么都不用做。
我还发现 只有schedule自己限制了不能有重复的,但其实真写进去完全没有问题。
先建立一些函数 每个里面就一个playsound不提
我稍微写了点代码:
  1. import nbtlib
  2. from nbtlib.tag import *
  3. import re
  4. x=nbtlib.load("level.dat")
  5. p="5353531 24325   5353531 24321   2244315 24325   5353531 24321"
  6. p= re.findall("( |(?:\.+|-+)?\ds?)",p)
  7. def trig(name,function,time):
  8.     return Compound({'Callback': Compound({'Type': String('minecraft:function'), 'Name': String(function)}), 'Name': String(name), 'TriggerTime': Long(time)})
  9. #
  10. x.root["Data"]["Time"]=Long(0)
  11. x.root["Data"]['ScheduledEvents']=List[Compound]()


  12. for i,j in enumerate(p):
  13.     if j !=" ":
  14.         x.root["Data"]['ScheduledEvents'].append(trig(f"{i}",f'chyx:{j}',4*i+200))
  15. x.save()
复制代码
把乐谱写进去。里面可以改每个音符多少游戏刻 进入游戏多久开始播。

效果:https://vc.bilibili.com/video/1912714

注 使用了@Soma-Komeiji的资源包。自己转成了1.14版本

langyo
http://www.mcbbs.net/thread-827808-1-1.html

有个人比你还快

其实,我更在意你那个音乐资源包……

xiaowei233v
所以说1.13没有这个schedule
得靠记分板一个一个加变量
然后playsound还得联动function疯狂@e[...]awa

Abraham511
看来1.14以后的音乐地图会多很多~~

xiaowei233v
Abraham511 发表于 2018-11-4 15:28
看来1.14以后的音乐地图会多很多~~

因该可能会配合1.13的tp-rotation做出音乐风景欣赏的地图awa

⭐✔️
本帖最后由 贰逼 于 2018-11-4 21:50 编辑

这个schedule的延迟是按刻计时的吗
我现在正在向A2M添加基于scoreboard的数据包音乐生成功能,如果这个schedule也是按刻即时,那我也可以基于它来制作了
它目前看起来是这样的:
https://www.bilibili.com/html/player.html?aid=34814375&wmode=transparent&as_wide=1&page=1


chyx
本帖最后由 chyx 于 2018-11-4 22:33 编辑
贰逼 发表于 2018-11-4 21:49
这个schedule的延迟是按刻计时的吗
我现在正在向A2M添加基于scoreboard的数据包音乐生成功能,如果这个sche ...

是按游戏刻计时的。
不过和方块刻不同 他在存档里记录的是执行时的总时间
就是time query gametime的那个

=============
这个的好处就是不用搞一个记分板 并且检查分数来做了。

shaofei
66666666666

⭐✔️
最后还是用计分板作为datapack音乐的timer,软件已经实装了该功能:
http://www.mcbbs.net/thread-799862-1-1.html
测试过感觉schedule操作起来不太方便,毕竟要遍历每个乐器的每个音符
虽然用的是计分板,但一个乐曲独立一个计分板独立一个命名空间,就没什么问题
而且计分板还能做到暂停和快进,随时重置,比schedule更实际一点

runckey
流批,兄弟