(=°ω°)丿
版本:1.15.2,已知运行命令 data get storage foo:example List 可以获得一个列表,那么如何打乱这个列表内元素的顺序?请简述你的方法,效率高的答案优先。

Wudji
https://www.mcbbs.net/thread-993805-1-1.html

HangBack_
Wudji 发表于 2020-4-5 16:38
https://www.mcbbs.net/thread-993805-1-1.html

(=°ω°)丿:我回答我自己

Wudji
DoYo_GZ 发表于 2020-4-5 17:14
(=°ω°)丿:我回答我自己

额。。。。。。

Y制杖杖
首先定义一个谓词minecraft:random

代码:

  1. {
  2.   "condition":"minecraft:random_chance"
  3.   "chance":0.5
  4. }

再定义一个函数minecraft:a

代码:

  1. scoreboard objective add t dummy
  2. scoreboard players set #system t 0
  3. execute if predicate minecraft:random run scoreboard players set #system t 1
  4. execute if score #system t matches 0 run data modify storage foo:copy List append from storage foo:example List[0]
  5. execute if score #system t matches 1 run data modify storage foo:copy List prepend from storage foo:example List[0]
  6. data remove storage foo:example List[0]
  7. execute if storage foo:example List[0] run function minecraft:a
原理:
先将foo:example.List的0号元素取出,接着有50%的几率被放在foo:copy.List的首项,有50%的几率被放在foo:copy.List的末项
然后将foo:example.List的0号元素删除
接着判断
foo:example.List的0号元素是否存在(也就是判断是否还有余下的元素
若还有,则进行递归
最后得到的
foo:copy.List即为打乱后的foo:example.List建议连续打乱两次,否则有些组合不会出现或者不固定取出0号,而是有50%取出0号,50%取出-1号

第一页 上一页 下一页 最后一页