ruhuasiyu
本帖最后由 SHEEP_REALMS 于 2021-10-16 11:25 编辑

战利品表随机数
Random Generator by Loot Table
随机数生成本版已有多种实现方式,之前人们主要使用 https://www.mcbbs.net/thread-706030-1-1.html 中使用随机给药水云加分来实现。然而自从战利品表被增强之后,我们可以使用更为简便的做法来实现。实际上,很多CB玩家都已经使用这个技巧,这也包括 https://www.mcbbs.net/thread-855790-1-1.html 的做法。

然而,实际上我们可以生成一段区域内的浮点随机数,倍乘之后,我们便轻易地得到了一个巨大范围的整随机数。例如在set_attribute这个function中,我们可以设置物品的属性值为至多0-2048范围内的浮点数,然后倍乘1048575。具体见下文。
如何使用
战利品表随机数1.3.zip (2.56 KB, 下载次数: 286) 放入存档datapacks文件夹即可。
使用时,设定好最大最小值之后执行函数random:random即可,分数会存储在#result的random记分板。
  1. scoreboard players set #random_min random [最小值]
  2. scoreboard players set #random_max random [最大值]
  3. function random:random
复制代码
原理简析
0. 创建记分板略。
1. 创建战利品表
random/loot_tables/random.json
2. 生成这个战利品的掉落物,然后将其属性值乘以1048575倍(控制在记分板最大值范围内),我们便得到了0-2048*1048575范围的随机数。
3. 然后我们对随机数范围取同余,并加上最小值即可。
random/functions/random.mcfunction

非常简单,只有8行命令。
更新日志
v1.3 2020/04/09
+ 现在支持1.16版本。

v1.2 2019/09/29
+ 现在分数会被记录在#result的分数上而非执行者。

v1.1 2019/08/13
+ 修复了执行后原本记分板会发生改变的问题。

v1.0 2019/08/11
+ 提交第一个版本。

Chelover_C60
本帖最后由 CHElover_C60 于 2019-8-12 11:43 编辑

没想到用了浮点数之后那么简洁明了
顺便又回去看了一眼我的渣优化

另外,在函数执行后,是不是应该对random_max进行复位?在执行函数后,random_max的值有变化,这就会使execute多个实体执行函数时,部分实体的分数偏小。或者因为一般随机数一次只需要用一个,因此可以忽略execute多个实体执行的情况?

ruhuasiyu
CHElover_C60 发表于 2019-8-12 11:36
没想到用了浮点数之后那么简洁明了
顺便又回去看了一眼我的渣优化

是这样的,我设定的是每次都需要设置最大最小值。也就是上面那三行是由一个实体来一次性执行,所以就没复位了。

不过,加上也行。。

1600947387
学到了,很厉害的随机

MC深坑不回头
好棒的数据包~!请问可用在我的自制地图中吗?

ruhuasiyu
MC深坑不回头 发表于 2019-10-26 14:22
好棒的数据包~!请问可用在我的自制地图中吗?

随便用

sengehehe
可以学到了

12tianxun
非常简单,只有8行命令。
可是战利品表这么长长长长长长长长长长长长长......(太夸张了)



ohnoohno
wow!好厉害

我觉得乏味了
加油!非常不错!

咸鱼_Z
感谢大佬分享!!学到了

掉落物苹果
有点不懂

暴暴小彬
太随机,不会整,但是还是谢谢楼主

1141840659
我说一个数,战利品64个