fallingCB
本帖最后由 SHEEP_REALMS 于 2021-10-18 08:49 编辑

1.15+ 谓词随机数生成器




来自作者的一些爱看不看的话






使用方法

载入数据包: random.zip (2.61 KB, 下载次数: 6)

将此文件放入存档的datapacks文件夹中,无需解压

在游戏中输入指令/reload以重新加载数据包

在函数、命令方块中依次执行:

  1. scoreboard players set #random_min value 【随机数最小值】
  2. scoreboard players set #random_max value 【随机数最大值】
  3. function random:random
复制代码
生成的随机数将会储存在#random的value计分板下



原理讲解

1.在random/functions/load.mcfunction创建一个value计分板
  1. scoreboard objectives add value dummy
复制代码

2.创建random/predicates/random.json的随机谓词(让谓词有50%的几率成功)
  1. {
  2.     "condition": "minecraft:random_chance",
  3.     "chance": 0.5
  4. }
复制代码
3.创建random/functions/random.mcfunction和循环函数random/functions/random_add.mcfunction
  1. #random/functions/random.mcfunction

  2. scoreboard players set #random value 0
  3. scoreboard players set #random_add value 1
  4. execute if predicate random:random run scoreboard players operation #random random += #random_add random
  5. function random:random_add
  6. scoreboard players operation #random_interval value = #random_max value
  7. scoreboard players operation #random_interval value -= #random_min value
  8. scoreboard players add #random_interval value 1
  9. scoreboard players operation #random value %= #random_interval value
  10. scoreboard players operation #random value += #random_min value
复制代码
  1. #random/functions/random_add.mcfunction

  2. scoreboard players operation #random_add value += #random_add value
  3. execute if predicate random:random run scoreboard players operation #random value += #random_add value
  4. execute unless score #random_add value matches 1073741824 run function random:random_add
复制代码


此处是将二进制的一堆1分解,
如果此处是谓词判断成功,则该位设为1(在原有的基础加2位数-1

比如判断30次,就会有230的随机数可以生成

例:0101 1101 1101 0110 0111 1111 0101 1001 -> 1,574,338,393


优点&缺点
优点:你可以不用了解战利品表(参考ruhuasiyu的帖子),只要懂一点点的谓词就可以了
缺点:代码太多(有可能影响到最大每tick函数限制)

为什么我总觉得缺点比优点多多了呢

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