⊙v⊙ 发表于 2018-12-8 04:28
是不是结合一下就好了?...
丢药水,创一个丢药水的记分板判据
第一个问题算是回答的很好了,多谢老哥。原来NBT是可以读写的!这下子以后做东西就开窍了。
不过这个原理我似乎不敢妄言懂了。
档位是通过一个超精确的浮点数高度检测配合type检测判断玩家扔药水了(要是我想当然的推测对的话,这个指令能检测发出位置半格子内的),然后读取这个药水的motion再根据当前潜行分修改,做到换挡效果?
我想如果这样的话,把这个motion记录下来,再生成一个生物(在这个手雷情景下就是creeper)并赋予motion给它就得了。档位也可以做成跟潜行分做成一个函数关系,做出更好的蓄力投掷效果。
但是这里面的基本机制我不是很懂。第一段的那个function部分,它可以监听诸如药水扔出这类的事件时启动吗?如果不是的话,要怎么触发呢?旧思路可以通过高频检测药水实体有无某个tag——》有则不管没有就进行motion运算并加tag做到,但要是能不用高频就太好了。
望能赐教万分感谢。
⊙v⊙ 发表于 2018-12-8 04:28
是不是结合一下就好了?...
丢药水,创一个丢药水的记分板判据
版本自然是1.13.啊呀缓降药水配鞘翅烟花爽的爆炸,沉迷和小伙伴们玩自制pvp中,才想弄一个爆破职业的。
本帖最后由 ⊙v⊙ 于 2018-12-8 12:07 编辑
scoreboard的判据,有些是自动帮你计算的。物品的使用就是如此。
我又想了一下,不是太讲究的话还是利用原版已有的功能更好,也能让操作更简便。按蹲下时间控制力度太蠢了...
复制代码复制代码复制代码最后就是按个人喜好进行调整,做爆破处理了...
比如
execute as @e[tag=boom,nbt={OnGround:1b}] run data merge entity @s {NoAI:1b}
execute as @e[tag=boom,nbt={OnGround:1b}] run data merge entity @s {NoAI:1b,ignited:1b,ExplosionRadius:1b,Fuse:5s}
execute as @e[tag=boom,nbt={OnGround:1b}] run data merge entity @s {ignited:1b,Fuse:20s,ExplosionRadius:3b}
execute as @e[tag=boom] run data merge entity @s {ignited:1b,Fuse:100s,ExplosionRadius:1b,powered:1b}
execute as @e[tag=boom,nbt={OnGround:1b}] run data merge entity @s {NoAI:1b,Fuse:5s,powered:1b,ignited:1b}
...
也可以制作根据持有的手切换模式。比如,左手发出着陆后数秒爆炸的creeper,
右手则是发出后立刻爆炸的强大威力creeper...
另外,还要做一个手持物的检测,比如只当玩家手持的弓有特殊tag时才执行function...
C:// 发表于 2018-12-8 05:45
第一个问题算是回答的很好了,多谢老哥。原来NBT是可以读写的!这下子以后做东西就开窍了。
不过这个原理 ...
scoreboard的判据,有些是自动帮你计算的。物品的使用就是如此。
我又想了一下,不是太讲究的话还是利用原版已有的功能更好,也能让操作更简便。按蹲下时间控制力度太蠢了...
- #设立判据
- #可以使用/scoreboard objectives setdisplay sidebar helloworld 查看此分数
- #但是后面弄了分数reset,游戏里可能并不会看到...(因为不会显示没有的分数)
- scoreboard objectives add helloworld minecraft.used:minecraft.bow
- #持续执行这条,可放在紫色命令块里
- #能放在mcfunction里的话就在好不过了
- #~ ~1.52 ~是弓发出的起始位置
- execute as @a[scores={helloworld=1..}] at @s positioned ~ ~1.52 ~ as @e[type=arrow,distance=..0.5,limit=1] at @s run function world:foo
- #生成丢出物
- summon minecraft:creeper ~ ~ ~ {Tags:["boom","bar"],DeathLootTable:"empty",Invulnerable:1b}
- #获取Motion
- execute store result entity @e[tag=bar,distance=..0.5,limit=1] Motion[0] double 0.000006 run data get entity @s Motion[0] 100000
- execute store result entity @e[tag=bar,distance=..0.5,limit=1] Motion[1] double 0.000006 run data get entity @s Motion[1] 100000
- execute store result entity @e[tag=bar,distance=..0.5,limit=1] Motion[2] double 0.000006 run data get entity @s Motion[2] 100000
- #结束处理
- tag @e[tag=bar] remove bar
- kill @s
- scoreboard players reset @a[scores={helloworld=1..}] helloworld
比如
execute as @e[tag=boom,nbt={OnGround:1b}] run data merge entity @s {NoAI:1b}
execute as @e[tag=boom,nbt={OnGround:1b}] run data merge entity @s {NoAI:1b,ignited:1b,ExplosionRadius:1b,Fuse:5s}
execute as @e[tag=boom,nbt={OnGround:1b}] run data merge entity @s {ignited:1b,Fuse:20s,ExplosionRadius:3b}
execute as @e[tag=boom] run data merge entity @s {ignited:1b,Fuse:100s,ExplosionRadius:1b,powered:1b}
execute as @e[tag=boom,nbt={OnGround:1b}] run data merge entity @s {NoAI:1b,Fuse:5s,powered:1b,ignited:1b}
...
也可以制作根据持有的手切换模式。比如,左手发出着陆后数秒爆炸的creeper,
右手则是发出后立刻爆炸的强大威力creeper...
另外,还要做一个手持物的检测,比如只当玩家手持的弓有特殊tag时才执行function...
⊙v⊙ 发表于 2018-12-9 05:51
scoreboard的判据,有些是自动帮你计算的。物品的使用就是如此。
我又想了一下,不是太讲究的话还是利用 ...
非常感谢。不过我还是想问,触发只能依靠高频命令方块或者function内置的高频检测了吗?我去自学了一下发现MC似乎现在还没有直接检测当什么事情发生的功能。
本帖最后由 ⊙v⊙ 于 2018-12-8 18:25 编辑
把高频的命令数量和所需要的检测尽可能限制到最少吧...
execute if entity @a[scores={helloworld=1..}] run function world:main
对进度并不是很了解,甚至不知道这样做是否和在minecraft:tick内tag mcfunction一样,所以...
进度里面有个minecraft:tick的trigger。这个tick等同于高频,然后reward run function...
@SPGoding 快来救我!
C:// 发表于 2018-12-8 18:05
非常感谢。不过我还是想问,触发只能依靠高频命令方块或者function内置的高频检测了吗?我去自学了一下发 ...
把高频的命令数量和所需要的检测尽可能限制到最少吧...
execute if entity @a[scores={helloworld=1..}] run function world:main
对进度并不是很了解,甚至不知道这样做是否和在minecraft:tick内tag mcfunction一样,所以...
进度里面有个minecraft:tick的trigger。这个tick等同于高频,然后reward run function...
@SPGoding 快来救我!