因为是随机选择,调皮的lz当然不会放过/spreadplayers的~啦~
/spreadplayers是在一定范围内随机传送的指令,我们可以利用其随机性生成随机选择
(附带说一句,lz之所以不用计分板的高频加/减循环是为了尽可能保证随机,当然使用这种方法也是可以的,后面会具体讲)
比如,我做了24个事件,要利用随机选择,建议通过给盔甲架(带有lucky_block_active标签)某个计分板设置为随机分数来实现
如下,先创建计分板并召唤盔甲架- /scoreboard objectives add random dummy
- /summon ArmorStand ~ ~ ~ {Tags:["random"]}
复制代码 创建之后,根据下图举例说明(可依照自己的想法改动,此处不提供固定的指令):
(带下划线表示可以修改,加粗部分表示重点部分)
红色:
a. /scoreboard players set @e[type=ArmorStand,tag=lucky_block_active] random 1
b. /scoreboard players set @e[type=ArmorStand,tag=lucky_block_active] random 2
c. /scoreboard players set @e[type=ArmorStand,tag=lucky_block_active] random 3
d. /scoreboard players set @e[type=ArmorStand,tag=lucky_block_active] random 4
即:底下一层命令方块为设置盔甲架(带有active标签)在计分板random的分数,依照分数可生成对应事件
注意:正中间(有浮冰的那条线)在红色层(底层)没有命令方块(/spreadplayers不会将盔甲架传送到那里)
蓝色:
a,b,c,d. /tp @e[type=ArmorStand,tag=random] X Y Z
注意:这里的(X,Y,Z)是浮冰顶端命令方块(黄色a)再向上一格的位置(盔甲架召唤位置),即黄色a在(X,Y-1,Z)
黄色:
a. /spreadplayers ~ ~ 1 2 false @e[type=ArmorStand,tag=random]
b. /setblock ~ ~2 ~ minecraft:stone_pressure_plate 0 destroy
b是以前用的,现在加上白色a之后似乎不用黄色b了。。。
白色:
a. /execute @e[type=ArmorStand,tag=random] ~ ~ ~ detect ~ ~ ~ minecraft:stone_pressure_plate 1 /setblock ~ ~ ~ minecraft:stone_pressure_plate 0 destroy
这里是利用了destroy可以使被激活的压力板快速变回未激活的状态,从而快速多次激活底下的命令方块
下面是指令的大致结构:
- 红
- /scoreboard players set @e[type=ArmorStand,tag=lucky_block_active] random [对应事件编号]
- 蓝
- /tp @e[type=ArmorStand,tag=random] [X] [Y] [Z]
- 黄
- /spreadplayers ~ ~ [最小扩散范围] [最大扩散范围] false @e[type=ArmorStand,tag=random]
- 白
- /execute @e[type=ArmorStand,tag=random] ~ ~ ~ detect ~ ~ ~ minecraft:stone_pressure_plate 1 /setblock ~ ~ ~ minecraft:stone_pressure_plate 0
复制代码
至此,我们已经给每个出现的盔甲架(带有lucky_block_active标签)附加上的随机生成的计分板分数
为了使盔甲架在获得分数到生成事件之间分数不发生变化,执行以下指令:
- /scoreboard players tag @e[type=ArmorStand,score_random_min=1,tag=lucky_block_active] remove lucky_block_active
复制代码
表示:所有在random计分板中分数大于等于1(这里表示分数不为0)的盔甲架(lucky_block_active),执行此指令后会消除其lucky_block_active标签
此指令可以在一个独立的循环型命令方块(保持开启)中执行,因为在盔甲架得到分数到消除标签、锁定分数之间,即使分数发生变化,也对整体没有影响
|