《我的世界》1.8刷怪机制(源码解析)
发布时间:2019-02-07 作者:悟饭小编 954 人看过 已有[0+ ]人评论

《我的世界》中如何刷怪?今天给大家带来玩家“etflly”总结分享的1.8刷怪机制(源码解析),感兴趣的一起来看看吧。 

昨天把MC中刷怪的源码过了一遍,主要部分是net.minecraft.world.SpawnerAnimals中的findChunksForSpawning函数。有些刷怪机制还是wiki上没有涉及或描述不准(精)确的。明确刷怪机制对刷怪塔制作还是很有帮助的,这里把刷怪的流程简述一下。


刷怪机制

*注:循环嵌套比较乱,我将几个循环从大到小定义为刷怪循环(每种生物类型进行1次),区块刷怪(每个可行区块进行1次),刷怪(每次区块刷怪进行3次,每次刷怪只会刷一种生物),刷怪尝试(每次刷怪进行4次刷怪尝试)

findChunksForSpawning在每个游戏刻运行一次,其参数是(WorldServer world, boolean

spawnHostileMobs, boolean spawnPeacefulMobs, boolean

isAnimaltick),world不需多说,spawnHostileMobs表示是否生成攻击性生物,spawnPeacefulMobs表示是否生成和平生物,isAnimaltick表示这个tick(游戏刻)是否应该生成动物。其中isAnimaltick的算法是在游戏的总时间

% 400 == 0,即20s一次

如果spawnHostileMobs和spawnPeacefulMobs均为false,直接退出

统计应该刷怪的区块及其数量。即每个玩家(非观察者)所在区块东南西北四个方向各延伸8个区块,共1717区块(不是圆形区域),但是边界的区块是只计入刷怪区块个数,并不会进行刷怪的*。当多个玩家的刷怪区块重叠时,重复区块只会记录一次。(这里有一个bug,如果一个玩家的刷怪边界区块在另一个玩家刷怪区块内部,那么这个区块会在计算区块数时被统计两次,会使刷怪上限不准确,不过刷怪时还是只会对这个区块刷一次,所以影响不是特别大)

对每一种生物类型(怪物、动物、水生、环境):如果当前类型可以刷(取决于spawnHostileMobs,

spawnPeacefulMobs,isAnimaltick三个参数),则进行一次刷怪循环(5 -

12)。(这里有一个非常严重的bug,豹猫的生成在怪物的刷怪循环里! ,见附2)

计算刷怪上限和已有怪物数量。实际刷怪上限为刷怪单位上限(见**附1**) * 刷怪区块数 /

(17*17)。怪物数量统计的部分还没看(TODO),根据已有说法,应该是已加载区块中生物总数,具体生物类型见附1。如果已经到达刷怪上限,则退出本次刷怪循环。

对每一个刷怪区块进行一次区块刷怪(7 - 12)。

在区块中随机选取一个中心方块,先随机选X,Z,之后选Y,Y不会高于当前(X,Z)的最高值+16(应该是这样,没太仔细看,这样一来刷怪的高度限制就没有了,即可能刷在玩家128格外,不过可能刷出后会直接despawn,待细读TODO)。如果选中的方块是一个NormalCube(见附5),则放弃在此区块刷怪,否则进行3次刷怪(8

- 12),每次只刷一种生物。

每次刷怪的初始化工作:将刷怪坐标(x,y,z)初始化为中心方块,重置要刷出的生物。然后进行4次刷怪尝试(9 - 12)。

每次刷怪尝试的初始化工作:将现在的刷怪坐标(x,y,z)的x,z坐标随机加减0~5(4次最多加减20,事实上是可能超出当前区块的),如果当前位置半径24米的圆内有玩家(非观察者)或spawn

point,放弃本次刷怪尝试进行下一次。

如果还没有确定本次刷怪的怪物,则根据当前坐标可以刷出的怪物,随机确定一个,随机算法为权值随机。具体每种生物群系(建筑)可刷怪物及其权值见附2。

如果当前位置允许刷出这种怪物,且当前位置满足生物刷怪要求,则进行刷怪。

判断此种生物在当前区块是否已达到上限(见附4),若是,则退出本次区块刷怪(不会再去进行本区块其他生物的刷怪)。

附1. 怪物类型及刷怪单位上限(17 * 17为单位)

注:本节表示括号内的怪物被统计在相应类别的怪物数量中,并不一定会在相应刷怪循环中刷出

注2:骑士生物(如僵尸鸡骑士)的坐骑也算作单独的生物

怪物:上限70(骷髅,僵尸,巨人僵尸,蜘蛛,洞穴蜘蛛,爬行者,女巫,史莱姆,蠹虫,恶魂,岩浆怪,僵尸猪人,烈焰人,凋灵骷髅,末影螨,末影人,守卫者,远古守卫者,龙,凋零)

动物:上限10(鸡,牛,哞菇,豹猫,猪,兔子,羊,狼,马)

环境:上限15(蝙蝠)

水生:上限5(鱿鱼)

附2. 每种生物群系(建筑)可刷怪物及其权值

TODO

附3. 各种生物刷怪要求

(脚下方块为当前方块y坐标-1,头顶方块为当前方块y坐标+1)

鱿鱼和守卫者:当前方块是液体,脚下方块是液体,头顶方块不是NormalCube

其他:脚下方块有完整的上表面,且不是基岩、屏障;当前方块不是NormalCube且不是液体;头顶方块不是NormalCube(头顶方块没有液体判断)

每种生物还有更具体的要求,待补充TODO

附4. 每种生物单个区块刷怪上限

TODO

附5. NormalCube定义及列表

TODO

云标签
使用悟饭游戏厅下载
一站畅玩经典电玩
超强联机对战平台
发现海量精品游戏
千万粉丝品质信赖
使用悟饭游戏厅下载
一站畅玩经典电玩
超强联机对战平台
发现海量精品游戏
千万粉丝品质信赖
使用悟饭游戏厅下载

扫一扫安装

使用悟饭游戏厅下载
1. 下载悟饭手机客户端
2. 安装悟饭手机客户端到手机中
3. 在手机客户端中找到游戏并下载
4. 下载游戏完成后开始游戏
使用悟饭游戏厅下载
一站畅玩经典电玩
超强联机对战平台
发现海量精品游戏
千万粉丝品质信赖
微信扫码免费玩
支持各类经典游戏金手指功能
立即下载