本帖最后由 xwjcool 于 2022-7-5 19:50 编辑
基本信息

介绍:
这是一个基于线性同余生成器的伪随机数发生器,用于生成伪随机数序列。
优点
缺点
它是“伪”随机。我可以放心使用它吗?
如果用于游戏或解密地图,为游戏添加随机元素——可以的。这个数据包生成的数对于不知道其背后机理与内部状态的玩家而言看起来是“随机”而“无规律”的(如果不知道原理、不借助工具,就算在屏幕前盯上一整天也找不到规律的)。而且,比起其他基于命令的随机实现方法,它更可控一些。
然而:如果你希望将其用于难以被人破解的用途,如密码学,那么我的建议是——最好不要使用。这个生成器不够安全。可能花个几小时甚至几分钟,一些技术人员就可以暴力破解它。
使用方法:
安装
下载本数据包并将其放在存档目录的datapacks文件夹下。
Not That Random 1.0.2.zip
(6.44 KB, 下载次数: 140)
在游戏中执行/reload
初始化随机实例
本数据包允许每一个实体都拥有一个独立的随机实例。同时,还拥有一个全局实例。这些实例可以相同,也可以不同。
第一次使用前请务必初始化
复制代码
本生成器采用48位的种子与内部状态。种子保存在实体或 _global 的 lcg_seed_hi32 (高32位,范围-2147483648~2147483647)与 lcg_seed_lo16 (低16位,范围0~65535)这两个计分板目标下。
输出伪随机数
复制代码
输出的伪随机数范围在-2147483648~2147483647,覆盖了整个记分板的范围。输出的结果存储在实体或 _global 的 lcg_output 记分板目标下
获取与设置种子
每个实例拥有自己的种子。使用randomize进行初始化时会自动获取一个种子。你也可以指定你想要的种子,然后进行reset
复制代码
应用:
许可协议:
本数据包基于Sam Hocevar的WTFPL2分发。详见:https://wtfpl2.com/
基本信息

介绍:
这是一个基于线性同余生成器的伪随机数发生器,用于生成伪随机数序列。
优点
缺点
它是“伪”随机。我可以放心使用它吗?
如果用于游戏或解密地图,为游戏添加随机元素——可以的。这个数据包生成的数对于不知道其背后机理与内部状态的玩家而言看起来是“随机”而“无规律”的(如果不知道原理、不借助工具,就算在屏幕前盯上一整天也找不到规律的)。而且,比起其他基于命令的随机实现方法,它更可控一些。
然而:如果你希望将其用于难以被人破解的用途,如密码学,那么我的建议是——最好不要使用。这个生成器不够安全。可能花个几小时甚至几分钟,一些技术人员就可以暴力破解它。
使用方法:
安装
下载本数据包并将其放在存档目录的datapacks文件夹下。
在游戏中执行/reload
初始化随机实例
本数据包允许每一个实体都拥有一个独立的随机实例。同时,还拥有一个全局实例。这些实例可以相同,也可以不同。
第一次使用前请务必初始化
本生成器采用48位的种子与内部状态。种子保存在实体或 _global 的 lcg_seed_hi32 (高32位,范围-2147483648~2147483647)与 lcg_seed_lo16 (低16位,范围0~65535)这两个计分板目标下。
输出伪随机数
输出的伪随机数范围在-2147483648~2147483647,覆盖了整个记分板的范围。输出的结果存储在实体或 _global 的 lcg_output 记分板目标下
获取与设置种子
每个实例拥有自己的种子。使用randomize进行初始化时会自动获取一个种子。你也可以指定你想要的种子,然后进行reset
应用:
原理:
这个生成器的核心是一个标准的线性同余生成器。

因为生成器只有48位,所以高于48位的部分将会溢出而被直接舍弃,相当于直接对2^48取余。
准备工作
这里是定义常量和变量的部分。这部分在#minecraft:load里执行。
获得种子
生成一个药水云实体并根据它的UUID获取种子。根据版本的不同,这个数据包会使用不同的命令。这里展示的是20w12a及以后会执行的命令。
初始化
刷新状态并输出随机数
这是本生成器的核心部分。更新一次状态并生成新的随机数。输出的随机数为更新后的状态的高32位。
+ 2021.05.07 修复一个可能会导致错误进位的问题。
基本信息

介绍:
这是一个基于线性同余生成器的伪随机数发生器,用于生成伪随机数序列。
优点
- 高效——生成一个32位的整型伪随机数只需要11条命令,不包含任何递归与循环,也不需要生成任何marker实体——12条命令的纯计算,这比以往逐位生成的随机数模块都要快。不用担心,它看起来就和真正的随机数一样。
- 大范围——它的输出范围覆盖了-2147483648~2147483647的所有整数,是以往随机数模块的两倍。
- 基本可靠——在三维空间未观测到明显的分布平面。这是一个48位的生成器,输出高32位,避免了最低位01交替出现的问题。
- 实用——每个玩家都拥有自己的随机实例。只要两个玩家的种子相同,他们就能生成同样的随机序列。不用去记录整个序列,也不用担心搞丢。
- 跨版本兼容——从1.13到快照,全部都能用。
缺点
- 不够安全——可以被暴力破解。不过如果仅仅用于游戏的话是不用担心这些的。
- 有周期——周期为2^48,之后就会开始重复。不过能用到整个周期的情况几乎不存在。
它是“伪”随机。我可以放心使用它吗?
如果用于游戏或解密地图,为游戏添加随机元素——可以的。这个数据包生成的数对于不知道其背后机理与内部状态的玩家而言看起来是“随机”而“无规律”的(如果不知道原理、不借助工具,就算在屏幕前盯上一整天也找不到规律的)。而且,比起其他基于命令的随机实现方法,它更可控一些。
然而:如果你希望将其用于难以被人破解的用途,如密码学,那么我的建议是——最好不要使用。这个生成器不够安全。可能花个几小时甚至几分钟,一些技术人员就可以暴力破解它。
使用方法:
安装
下载本数据包并将其放在存档目录的datapacks文件夹下。

在游戏中执行/reload
初始化随机实例
本数据包允许每一个实体都拥有一个独立的随机实例。同时,还拥有一个全局实例。这些实例可以相同,也可以不同。
第一次使用前请务必初始化
- #获得一个新的种子并初始化自己的随机实例
- function lcg:randomize
- #获得一个新的种子并初始化全局随机实例
- function lcg:global_randomize
- #初始化自己的随机实例,但不更新种子(使用自定义种子时请使用这个)
- function lcg:reset
- #初始化全局随机实例,但不更新种子(使用自定义种子时请使用这个)
- function lcg:global_reset
本生成器采用48位的种子与内部状态。种子保存在实体或 _global 的 lcg_seed_hi32 (高32位,范围-2147483648~2147483647)与 lcg_seed_lo16 (低16位,范围0~65535)这两个计分板目标下。
输出伪随机数
- #更新自身实例的状态并输出一个伪随机数
- function lcg:rand
- #更新全局实例的状态并输出一个伪随机数
- function lcg:global_rand
输出的伪随机数范围在-2147483648~2147483647,覆盖了整个记分板的范围。输出的结果存储在实体或 _global 的 lcg_output 记分板目标下
获取与设置种子
每个实例拥有自己的种子。使用randomize进行初始化时会自动获取一个种子。你也可以指定你想要的种子,然后进行reset
- #获取自己的种子
- function lcg:getseed
- #获取全局实例的种子
- function lcg:global_getseed
- #设置自己的种子(例)
- scoreboard players set @s lcg_seed_hi32 123456789
- scoreboard players set @s lcg_seed_lo16 12345
- #设置全局实例的种子(例)
- scoreboard players set _global lcg_seed_hi32 123456789
- scoreboard players set _global lcg_seed_lo16 12345
应用:
- 在调试过程(如测试发牌、测试功能)的过程中,反复输出同一“随机”序列。
- 在类似俄罗斯方块的多人对抗中,需要保证各个选手虽然步调不一致,但是获得的随机序列是相同的
- Replay功能回放随机事件
- 在类似“扫雷”的游戏中重新开始同一版面
- 也可以当作普通的随机来用
许可协议:
本数据包基于Sam Hocevar的WTFPL2分发。详见:https://wtfpl2.com/
2021.12 数据,可能有更多内容
基本信息

介绍:
这是一个基于线性同余生成器的伪随机数发生器,用于生成伪随机数序列。
优点
- 高效——生成一个32位的整型伪随机数只需要11条命令,不包含任何递归与循环,也不需要生成任何marker实体——12条命令的纯计算,这比以往逐位生成的随机数模块都要快。不用担心,它看起来就和真正的随机数一样。
- 大范围——它的输出范围覆盖了-2147483648~2147483647的所有整数,是以往随机数模块的两倍。
- 基本可靠——在三维空间未观测到明显的分布平面。这是一个48位的生成器,输出高32位,避免了最低位01交替出现的问题。
- 实用——每个玩家都拥有自己的随机实例。只要两个玩家的种子相同,他们就能生成同样的随机序列。不用去记录整个序列,也不用担心搞丢。
- 跨版本兼容——从1.13到快照,全部都能用。
缺点
- 不够安全——可以被暴力破解。不过如果仅仅用于游戏的话是不用担心这些的。
- 有周期——周期为2^48,之后就会开始重复。不过能用到整个周期的情况几乎不存在。
它是“伪”随机。我可以放心使用它吗?
如果用于游戏或解密地图,为游戏添加随机元素——可以的。这个数据包生成的数对于不知道其背后机理与内部状态的玩家而言看起来是“随机”而“无规律”的(如果不知道原理、不借助工具,就算在屏幕前盯上一整天也找不到规律的)。而且,比起其他基于命令的随机实现方法,它更可控一些。
然而:如果你希望将其用于难以被人破解的用途,如密码学,那么我的建议是——最好不要使用。这个生成器不够安全。可能花个几小时甚至几分钟,一些技术人员就可以暴力破解它。
使用方法:
安装
下载本数据包并将其放在存档目录的datapacks文件夹下。
在游戏中执行/reload
初始化随机实例
本数据包允许每一个实体都拥有一个独立的随机实例。同时,还拥有一个全局实例。这些实例可以相同,也可以不同。
第一次使用前请务必初始化
代码:
- #获得一个新的种子并初始化自己的随机实例
- function lcg:randomize
- #获得一个新的种子并初始化全局随机实例
- function lcg:global_randomize
- #初始化自己的随机实例,但不更新种子(使用自定义种子时请使用这个)
- function lcg:reset
- #初始化全局随机实例,但不更新种子(使用自定义种子时请使用这个)
- function lcg:global_reset
本生成器采用48位的种子与内部状态。种子保存在实体或 _global 的 lcg_seed_hi32 (高32位,范围-2147483648~2147483647)与 lcg_seed_lo16 (低16位,范围0~65535)这两个计分板目标下。
输出伪随机数
代码:
- #更新自身实例的状态并输出一个伪随机数
- function lcg:rand
- #更新全局实例的状态并输出一个伪随机数
- function lcg:global_rand
输出的伪随机数范围在-2147483648~2147483647,覆盖了整个记分板的范围。输出的结果存储在实体或 _global 的 lcg_output 记分板目标下
获取与设置种子
每个实例拥有自己的种子。使用randomize进行初始化时会自动获取一个种子。你也可以指定你想要的种子,然后进行reset
代码:
- #获取自己的种子
- function lcg:getseed
- #获取全局实例的种子
- function lcg:global_getseed
- #设置自己的种子(例)
- scoreboard players set @s lcg_seed_hi32 123456789
- scoreboard players set @s lcg_seed_lo16 12345
- #设置全局实例的种子(例)
- scoreboard players set _global lcg_seed_hi32 123456789
- scoreboard players set _global lcg_seed_lo16 12345
应用:
- 在调试过程(如测试发牌、测试功能)的过程中,反复输出同一“随机”序列。
- 在类似俄罗斯方块的多人对抗中,需要保证各个选手虽然步调不一致,但是获得的随机序列是相同的
- Replay功能回放随机事件
- 在类似“扫雷”的游戏中重新开始同一版面
- 也可以当作普通的随机来用
原理:
这个生成器的核心是一个标准的线性同余生成器。

代码:
- state = (state * 25214903917 + 11) mod (2 ^ 48)
准备工作
这里是定义常量和变量的部分。这部分在#minecraft:load里执行。
代码:
- scoreboard objectives add lcg_timestamp dummy
- scoreboard objectives add lcg_seed_hi32 dummy
- scoreboard objectives add lcg_seed_lo16 dummy
- scoreboard objectives add lcg_state_hi32 dummy
- scoreboard objectives add lcg_state_lo16 dummy
- scoreboard objectives add lcg_output dummy
- scoreboard objectives add data_version dummy
- # LCG parameters (基本参数的定义)
- scoreboard objectives add lcg_multi_lo16 dummy
- scoreboard objectives add lcg_multi_lo32 dummy
- scoreboard objectives add lcg_multi_hi32 dummy
- scoreboard objectives add lcg_increment dummy
- scoreboard objectives add lcg_carry dummy
- scoreboard objectives add lcg_1s dummy
- # 0x5DEECE66D (这个数超过32-bit int上限,所以拆成段以方便计算)
- scoreboard players set _global lcg_multi_hi32 384748
- scoreboard players set _global lcg_multi_lo16 58989
- scoreboard players set _global lcg_multi_lo32 -554899859
- # 0xB
- scoreboard players set _global lcg_increment 11
- # 0x1000
- scoreboard players set _global lcg_1s 65536
获得种子
生成一个药水云实体并根据它的UUID获取种子。根据版本的不同,这个数据包会使用不同的命令。这里展示的是20w12a及以后会执行的命令。
代码:
- #get seed and set initial state from random entity UUID
- execute at @s run summon area_effect_cloud ~ ~ ~ {Tags:[lcg_randomizer]}
- execute store result score @s lcg_seed_hi32 run data get entity @e[tag=lcg_randomizer,limit=1] UUID[1]
- execute store result score @s lcg_seed_lo16 run data get entity @e[tag=lcg_randomizer,limit=1] UUID[3]
- scoreboard players operation @s lcg_seed_lo16 %= _global lcg_1s
- kill @e[tag=lcg_randomizer]
初始化
代码:
- #将当前状态设为种子
- scoreboard players operation @s lcg_state_hi32 = @s lcg_seed_hi32
- scoreboard players operation @s lcg_state_lo16 = @s lcg_seed_lo16
刷新状态并输出随机数
这是本生成器的核心部分。更新一次状态并生成新的随机数。输出的随机数为更新后的状态的高32位。
代码:
- # refresh the state
- # state = (state * 25214903917 + 11) mod (2 ^ 48)
- scoreboard players operation @s lcg_carry = @s lcg_state_lo16
- scoreboard players operation @s lcg_state_lo16 *= _global lcg_multi_lo16
- scoreboard players operation @s lcg_carry *= _global lcg_multi_hi32
- scoreboard players operation @s lcg_state_hi32 *= _global lcg_multi_lo32
- scoreboard players operation @s lcg_state_hi32 += @s lcg_carry
- scoreboard players add @s lcg_state_lo16 11
- execute if score @s lcg_seed_lo16 matches 0..10 run scoreboard players add @s lcg_state_hi32 1
- scoreboard players operation @s lcg_carry = @s lcg_state_lo16
- scoreboard players operation @s lcg_carry /= _global lcg_1s
- scoreboard players operation @s lcg_carry %= _global lcg_1s
- scoreboard players operation @s lcg_state_hi32 += @s lcg_carry
- scoreboard players operation @s lcg_state_lo16 %= _global lcg_1s
- # output (for further modification or ready to use)
- scoreboard players operation @s lcg_output = @s lcg_state_hi32
+ 2021.05.07 修复一个可能会导致错误进位的问题。
not that random 牛头人狂喜,纯爱党正在赶来的路上
可以加点靠随机而经常用的功能(做成前置(划去)
所以随机数真是个生草的东西(悲)
可以加点靠随机而经常用的功能(做成前置(划去)
所以随机数真是个生草的东西(悲)
1dasdasdad
放张随机生成的猫
这个名字有点过头了
不 要 起 擦 边 球 鬼 名 字
不 要 起 擦 边 球 鬼 名 字
牛头人狂喜,纯爱党正在赶来的路上,猎牛人
现在原版模组起名都这么生草的吗?马大哈,牛头人,WTMSB,这都啥名字啊(战术后仰
不过随机数这样很常用的还是挺实用的
不过随机数这样很常用的还是挺实用的
牛头人是真的强
666666666666
滴强!滴强!滴强!
滴强!滴强!滴强
谢谢楼主的分享.
有点意思 支持一下楼主
(=°ω°)丿 发表于 2020-6-6 16:45
理想气体状态方程:PV=nTR,
而分子的热运动是随机的,
所以,我编不下去了(
断言 LT UUID都好
过往整随机的东西都太不可控了
线性同余的优势在帖子的第二条应用里已经很明显了
这个是真的强
现在的取名都这么讲究的嘛,i了i了
→一直不知道牛头人是啥的屑
→一直不知道牛头人是啥的屑
你不是可以吧初始化的内容添加到函数标签#minecraft:load里吗,这样就可以让使用者不用手动初始化了。
本帖最后由 xwjcool123 于 2020-6-15 15:52 编辑
本来刚开始是这么搞的,后来考虑到实际使用的时候可以设置种子再初始化,所以移除了。而且每个玩家拥有自己的随机实例,多人游戏如果在#load初始化的话,不能保证玩家都同时在线
而且直接使用这个数据包的通常不是普通玩家,一般都是其他数据包的作者什么的。手动初始化也方便debug
WYL0zhu 发表于 2020-6-14 13:51
你不是可以吧初始化的内容添加到函数标签#minecraft:load里吗,这样就可以让使用者不用手动初始化了。 ...
本来刚开始是这么搞的,后来考虑到实际使用的时候可以设置种子再初始化,所以移除了。而且每个玩家拥有自己的随机实例,多人游戏如果在#load初始化的话,不能保证玩家都同时在线
而且直接使用这个数据包的通常不是普通玩家,一般都是其他数据包的作者什么的。手动初始化也方便debug
羊驼大战ntr?
太草了

纯爱战士一拳一个牛头人,取这个标题233
这玩意......
单个命令能看懂但放一起就不知道是什么鬼了
一堆运算弄可控随机,em
MCBBS有你更精彩~
nice~~~~~~~~~~~~~~~~
十分实用L)))
好的 很强 就是这个名字牛头人。。。
NTR生成器 现在连这都有了吗
ntr狂喜!纯爱战士正在路上!
牛头人吗 哈哈 第一时间想到的是暮色mod 里的
nt狂喜
这好像和抽奖有的一拼
这好像和抽奖有的一拼
这个厉害了
z楼主流批
好牛逼的感觉,虽然我看不懂2333
666666666666666666666666666
1.16.5的官方端刷报错,不是下载的没动过的官端可以吗
经典牛头人 哈哈哈
ntr可还行
能不能出一个刷铁的教程啊
感谢分享
草,看标题还以为是什么。虽然不太懂但好厉害的样子
这名字起的 有点意思
牛头人 永远滴神

做的好,加油哦!
牛头人,哈哈哈哈,太娱乐了
牛头人!。。。
挺有意思的,支持一下
可以 感谢楼主
神乎其技!6的飞起!
神乎其技!6的飞起!
神乎其技!6的飞起!