跳转至

BlocksData解析

本教程由百度贴吧-销锋镝铸大王派freeze丶果果编写

本教程对应游戏版本2.1,表格部分建议手机用户横屏查看

前言

在之前的Content解析中,提到:

BlocksData.txt存储了所有方块的大部分属性的类csv文件(以纯文本形式存储表格数据,使用特定的符号分隔字段),可直接用文本编辑器打开并编辑

csv文件

以纯文本形式存储表格数据,使用特定的符号(该文件;)分隔字段
可使用Office Excel打开

本教程将详细讲解该文件的文件结构和内容

文件结构

该csv文件可以看作是一张表格,以文本行分割表格横行,以;分割表格纵列
:现有部分文件内容如下:

Class Name;DefaultDisplayName;DefaultCategory
;;
AirBlock;Air;Terrain
BedrockBlock;Bedrock;Terrain

可以看作是以下表格:

Class Name
(类名)
DefaultDisplayName
(默认显示名称)
DefaultCategory
(默认类别)
(空白)(空白)(空白)
AirBlockAirTerrain
BedrockBlockBedrockTerrain

其中第一行是表头,指明表格每一列是方块的什么属性,之后每一非空行是一个个方块的具体数据,而非空白行一般用来分开DefaultCategory(默认类别)不同的方块

翻译软件无法翻译方块属性名称?

属性名称使用的命名法叫做驼峰式命名法,以首字母大写来开始新单词,在使用翻译软件翻译时。需要手动在大写字母前加上空格,例如DefaultDisplayNameDefault Display Name,才能被翻译软件识别为单词进行翻译

数据类型

在游戏的“源代码”中指定了方块的每一个属性的数据类型,使用到的数据类型如下:

数据类型中文名数据范围
bool布尔值TRUE(是)、FALSE(否)
int整数-2147483648 到 2147483647的整数,或Infinity(无穷大)
float浮点数±3.40282 * 10^38之间的整数和小数,或Infinity(无穷大)
string字符串任意文本,除;
Vector3三维向量逗号分隔的三个float(浮点数)
BlockDig
Method
方块挖掘方法None(无)、Shovel(铲子)、Quarry(镐子)、Hack(斧头)
FoodType食物类型None(无)、Meat(肉)、Fish(鱼肉)、Fruit(水果)、Grass(草)、Bread(面包)

方块属性

说明

如要修改DirtBlock(泥土方块)MaxStacking(最大背包堆叠),此属性在下表中序号是37;在文本编辑器中打开Blocksdata.txt后搜索DirtBlock,修改其所在行的第37个分号之前的数值即可
要快速定位分号位置和批量修改多个方块的属性,可参考正则表达式教程,或使用Blocksdata编辑器
为方便表格中自动换行,属性名中的大写字母前加上了空格

点击表头展开/收起表格

数据类型属性名中文名说明
stringClass Name类名“源代码”中该方块的[Class(类)](http://www.runoob.com/csharp/csharp-class.html){: target="\_blank" }的名称,例如方块被破坏和动物死亡时的掉落方块使用该属性,建议不要修改现存方块的该属性
stringDefault Display Name默认显示名称游戏中玩家能够看到的方块名字
stringDefault Category默认类别帮助和创造模式物品栏中的方块类别,可自定义新类别
stringBehaviors行为方块行为,多个行为需用逗号,隔开,详情见本章方块行为
intDisplay Order显示顺序创造模式物品栏中该方块的显示顺序,越小越靠前
Vector3Default Icon Block Offset默认图标方块偏移方块图标的位置偏移
Vector3Default Icon View Offset默认图标视角偏移在物品栏显示的位置偏移
floatDefault Icon View Scale默认图标视角大小缩放在物品栏里显示的大小缩放倍数
floatFirst Person Scale第一人称大小缩放第一人称视角下手持物品的大小缩放倍数
Vector3First Person Offset第一人称位置偏移第一人称视角下手持物品的位置偏移
Vector3First Person Rotation第一人称物品旋转第一人称视角下手持物品的旋转角度
floatIn Hand Scale在手里的大小缩放第三人称视角下手持物品的大小缩放倍数
Vector3In Hand Offset在手里的位置偏移第三人称视角下手持物品的位置偏移
Vector3In Hand Rotation在手里时旋转角度第三人称视角下手持物品的旋转角度
stringCrafting Id合成标识CraftingRecipes.xml中作为合成原料时方块标识
intDefault Creative Data默认创造模式数据小于0不提供,反之创造模式提供data为该属性值的方块。data通常包含方块朝向、染色等数据
boolIs Collidable是否可碰撞主角或动物等是否可碰撞该方块,为False时则可穿过
boolIs Placeable是否可放置通常将该属性原本为FALSE的方块的该属性改成TRUE后虽然可以放置,但需要修改“源代码”才能显现
boolIs Digging Transparent被挖掘时是否穿过向该方块挖掘时是否穿过它挖掘它后面的方块
boolIs Placement Transparent放置时是否穿过将方块指向该方块放置时是否穿过它放置到它后面的方块上
boolDefault Is Interactive默认是否可交互Electrics(电器)类方块此项为TRUE,但改了没任何效果
boolIs Editable是否可编辑例如MemoryBankBlock(内存条)TruthTableCircuitBlock(真值表)该属性值为TRUE
boolIs Non Duplicable是否不可复制此项为TRUE时,创造模式一个该方块占用一个背包格子,例如例如MemoryBankBlock(内存条)TruthTableCircuitBlock(真值表)
boolIs Gatherable是否可收集是否可被走过的玩家捡起来
boolHas Collision Behavior是否有碰撞动作是否触发该方块所有行为中的OnCollide(当碰撞)函数
boolKills When Stuck卡住时杀死“源码”中未发现该属性被使用,可能已被废弃
boolIs Fluid Blocker能否阻挡流体流体包括水和岩浆。空气此属性为TRUE时它们就不会乱流了
boolIs Transparent是否透明决定多个功能:方块材质本身透明部分绘制成透明或黑色;是否被下落方块压碎。还会影响地形生成,例如应该玄武岩层生成的方块此属性为”TRUE”时会刷新到地面、WaterBlock(水)的此属性为“FALSE”时大海表面覆盖满GrassBlock(草)
intDefault Shadow Strength阴影强度IsTransparent(是否透明)属性关联,IsTransparent为TRUE时该属性需为非负整数,为FALSE时该属性应为-1
intLight Attenuation光衰减IsTransparent(是否透明)为TRUE时生效,光透过方块时的亮度衰减
intEmitted Light Amount发光强度测试发现9时照亮一格,15时照亮7格,以上虽然照亮更大范围,但会出现bug,最大23
floatObject Shadow Strength物体阴影强度0到1的小数,设置里启用Object Shadows(物体阴影)后32格半径内实体投影到时该方块上的阴影浓度
stringDefault Drop Content默认掉落内容写#号开头的要掉落的方块的Class Name(类名)。若掉落自己本身,只需填#
floatDefault Drop Count默认掉落数量整数部分为最少掉落数量,小数部分为额外掉落一个的概率
floatDefault Experience Count默认经验数量整数部分为最少掉落经验量,小数部分为额外掉落一个经验的概率
intRequired Tool Level需求工具等级挖掘时需求的装备等级,例如DiamondOreBlock(钻石矿)为3
intMax Stacking最大背包堆叠该方块在一个背包格子中的最大堆叠数量,除背包外,还包括箱子、合成台
intMax In Hand Stacking最大手持堆叠该方块在一个底栏格子中的最大堆叠数量
floatSleep Suitability适合睡觉数值范围0到1,一般为0.5,家具地毯该属性值为1,为0时不能睡
floatFriction Factor(行走)摩擦系数越小越滑,越大走得越慢,为0时无法在该方块上走动
floatDensity密度单位g/cm³,决定处于掉落物状态的方块在水中的沉浮速度
boolNo Auto Jump不自动跳跃决定会自动跳跃的实体前进方向上有一格高此方块时停住或自动跳上,还会影响自动寻路系统的结果
boolNo Smooth Rise不流畅上升其中栅栏此属性为TRUE所以动物不会跳过去
intFuel Heat Level燃料等级只有CoalChunk(煤)块的此属性是2, 烧铁块需求的等级是2
floatFuel Fire Duration燃料燃烧时长FurnaceBlock(熔炉)中作为燃料的燃烧时长
stringDefault Sound Material Name默认声音材料名称对应到Content.pak/Audio里的文件
floatShovel Power铲子效率破坏方块速度(不含反应/识别时间),单位每秒。例如手持QuarryPower(镐子效率)是20的方块挖DigMethod(挖掘方法)Quarru(镐)DigResilience是60的方块要60/20=3
floatQuarry Power镐子效率
floatHack Power斧头效率
floatDefault Melee Power近战攻击力
floatDefault Melee Hit Probability默认近战命中率数值范围0到1
floatDefault Projectile Power投掷攻击力投掷出去的方块造成的攻击力
intTool Level工具等级木工具该属性为1,石为2,铁、铜为3,钻石为4
intPlayer Level Required需求玩家等级使用该方块需要的最低玩家等级
intDurability工具耐久度即使用次数(超过65535报错,实际最大值4095),留空或-1将无(限)耐久度
boolIs Aimable是否可瞄准可投掷方块及弓此属性都为TRUE
boolIs Stickable是否卡住被投掷出的方块是否会卡在ProjectileStickProbability(卡住投掷物可能性)大于0的方块上。若该方块具有BombBlockBehavior(手雷方块行为)则按一定概率穿过上述方块
boolAlign To Velocity成直线速率该属性值为TRUE时方块被抛出看起来是横向的(例如矛),不建议给无3D模型的方块调成TRUE(实在不知如何翻译)
floatProjectile Speed投掷速度用于计算方块投掷出手时的速度,会被主角力量大小影响
floatProjectile Damping投掷速度衰减一秒后投掷方块移动速度和转速变为此时速度的该属性值倍;例如此时速度100,该属性值0.8,1秒后速度变成80;改为零出现超时空现象
floatProjectile Tip Offset扔出点偏移用于计算投掷物与地形和实体的碰撞,具体效果待研究
boolDisintegrates On Hit撞击时碎裂SnowballBlock(雪球)、EggBlock(蛋)的此属性为TRUE
floatProjectile Stick Probability卡住投掷物可能性使被投掷到它上面IsStickable()为TRUE的方块卡住的可能性;若被投掷方块具有BombBlockBehavior(手雷方块行为)则此属性实为投掷物穿过可能性
floatDefault Heat默认热量数值范围0到1,大于0时会影响周围温度
floatFire Duration露天点火时长单位秒,这个值若为小数会向下取整
floatExplosion Resilience爆炸抗性此属性越大越耐炸,伤害会累积,可为Infinity(无限)
floatDefault Explosion Pressure默认爆炸压力该属性值影响爆炸直径和威力。对于一种方块,爆炸直径和该属性值的常用对数成正比,例如想要2倍直径,那么该属性值需要乘100。爆炸威力和该属性值成正比,是每秒的伤害
boolDefault Explosion Incendiary默认爆炸燃烧FALSE时正常爆炸,TRUE时带有燃烧效果
boolIs Explosion Transparent是否爆炸透明该属性值为TRUE时该方块可被炸飞
BlockDig
Method
Dig Method挖掘方法一个方块Is Digging Transparent(被挖掘时是否穿过)为False时此处应有一个非None(无)
floatDig Resilience挖掘抗性该属性值越大需要挖得越久,BedrockBlock(基岩)的此属性是Infinity(无限)
floatProjectile Resilience弹射物抗性数值范围0到1,越大越不容易被投掷物破坏
floatDefault Nutritional Value营养价值大于0时可以食用,数值范围0-1,食用增加等量饱食度
floatDefault Sickness Probability默认生病概率食用该方块后将生病的概率,数值范围0-1,通常Rotten(腐败)的食物方块的该属性值大于0
FoodTypeFood Type食物类型Database.xml中规定了每种动物对不同食物类型的喜好程度
intDefault Rot Period默认腐败时间具有该属性的方块经该属性值时长后腐败,单位分钟(游戏内一天相当于现实20分钟)
intDefault Texture Slot默认材质位置材质图上从左向右,从上向下排列顺序,第一个(草地顶面)是0,第二个(花岗岩)是1,第x横行第y纵列对应数字是x-1+(y-1)*16
floatDestruction Debris Scale破坏碎片大小缩放方块被破坏时爆出的一堆碎片一样的东西的大小缩放倍数
stringDefault Description默认描述会在游戏帮助的方块说明界面出现,可随意删改内容

启发例子

方块发光

要让放置在地图的方块像火把一样发光,需要修改该方块的EmittedLightAmount(发光强度)为9~22,LightAttenuation(光衰减)大于0

铁砂掌

修改所有方块的DigResilience为0,。可参考正则表达式教程教程批量替换,或者使用Blocksdata编辑器

基岩综合

基岩可挖掘,拾取,创造模式提供
修改BedrockBlock(基岩)IsPlaceable(是否可放置)IsGatherable(是否可收集)为TRUE,DefaultCreativeData(默认创造模式数据)DigResilience(挖掘抗性)为0

撸树

破坏树干时上面的树干也会被破坏
OakWoodBlock(橡木)BirchWoodBlock(桦木)SpruceWoodBlock(杉木)Behaviors加上, GraveBlockBehavior

方块行为

为方便说明,以下是SubsystemBlockBehavior(子系统方块行为)的简要“源码”,先看看方块行为能做些什么

abstract class SubsystemBlockBehavior : Subsystem
{
    abstract int[] HandledBlocks { get; } //直接从“源码”掌控的方块Value列表(Value,常被称作ID)
    void OnChunkInitialized(){} //当区块初始化时处于该区块内的该方块执行
    void OnChunkDiscarding(){} //当区块从视野消失时处于该区块内的该方块执行
    void OnBlockGenerated(){} //当方块从地图中加载时执行
    void OnBlockAdded(){} //当方块被添加到地图时执行
    void OnBlockRemoved(){} //当方块从地图中被移除时执行
    void OnBlockModified(){} //当方块被编辑\/改变时执行
    void OnNeighborBlockChanged(){} //当该方块的周边方块被改变时执行
    bool OnUse(){} //当方块被使用时执行
    bool OnInteract(){} //当方块被交互时执行
    bool OnAim(){} //当方块要被投掷处于瞄准状态时执行
    bool OnEditBlock(){} //当在地图中的(电路)方块被编辑时执行
    bool OnEditInventoryItem(){} //当编辑在背包中的(电路)方块时执行
    void OnItemPlaced(){} //当可编辑方块被添加到地图时执行
    void OnItemHarvested(){} //当流体方块冲击方块时执行(注:不是被冲击)
    void OnCollide(){} //当实体与方块发生碰撞时执行
    void OnExplosion(){} //当方块被炸时执行
    void OnFiredAsProjectile(){} //当方块作为投掷物被发射时执行
    bool OnHitAsProjectile(){} //当方块作为投掷物击中方块或实体时执行
    void OnHitByProjectile(){} //当方块被投掷物击中时执行
    int GetProcessInventoryItemCapacity(){} //用于获取例如枪弓弩需要按顺序填装的方块此时应被填装的方块
    void ProcessInventoryItem(){} //当例如枪弓弩的方块被填装时执行
    void Load(){} //当进入世界时执行
}

各种方块行为inherits(继承)以上SubsystemBlockBehavior(子系统方块行为)后,override(重写)其中的Method(方法),最后让指定方块拥有对应的方块行为,就能在游戏中起作用了
让方块拥有方块行为有两种方式:

  • 一种是本节提到的在“源码”中方块行为的HandledBlocks方法中写入方块的Value(常被称作ID)
  • 另一种是在上一节提到的,在Blocksdata.txt里方块的Behaviors属性中写入方块行为,多个方块行为需要用英文逗号,分开。但是很多方块行为无法通过此方法赋予给该方块,可能仍要采用第一种方法

方块行为列表

以下是从Database.xmlDatabase/DatabaseObjects/Folder Name="Abstract"/ProjectTemplate Name="Project"提取的方块行为列表,对应游戏版本2.1

注:以下方块行为名称和“源代码”中类名称不全一致,部分“源代码”中存在的方块行为也不在下表

表一

可写入方块Behaviors属性的方块行为,以及方块加上该行为后效果

  • FertilizerBlockBehavior此方块可作为肥料使用,同时将导致不可放置。发现:TallGrassBlock有此属性时,地形生成时该方块下方的土块会一同消失
  • FireBlockBehavior此方块将自燃并消失,并引燃其他可燃物,也可直接点可燃物上表面点燃该物品
  • MatchBlockBehavior此方块成为火柴,可点燃可燃物,将不可放置
  • RakeBlockBehavior此方块可作为耙子使用
  • SaplingBlockBehavior此方块放置到土地上如果条件适合,将长成Oak树,若条件不允许将直接消失。用途示例:让杂草长成树木
  • CactusBlockBehavior此方块将从上面长出仙人掌,如果此方块不是沙子,长出的仙人掌将直接破坏并掉落,此方块也将只能放置在沙子和仙人掌上表面。用途示例:长满仙人掌沙漠,沙滩;刷仙人掌机
  • RotBlockBehavior此方块将腐败成“源代码”中该方块类GetDamageDestructionValue(受伤破坏后Value)方法中设置的方块,默认0(AirBlock(空气)
  • MagmaBlockBehavior此方块将点燃周围可燃物如果该物品可燃则自己也会燃烧。不一定对所有方块有效
  • GraveBlockBehavior将可导致方块只能放到一个方块上表面,下方方块被破坏后上面的此方块将破坏(原版GraveBlock会向下掉落)。用途示例:撸树mod
  • SoilBlockBehavior此方块上表面放置实心方块后变成DirtBlock
  • GrassBlockBehavior此方块上表面放置实心方块后变成DirtBlock
  • IvyBlockBehavior此方块若透明将只能挂在树上(未知原因经常挂不上),并向下长出此方块。用途示例:刷物品机
  • BottomSuckerBlockBehavior此方块将使方块变得难以放置(?),海胆、海星具有该属性
  • TreasureGeneratorBlockBehavior此方块将在周围有方块变为空气时随机掉落宝物
  • WaterPlantBlockBehavior此方块将只能像海胆、海星一样放置在水中
  • SaddleBlockBehavior此方块将可作为马鞍使用
  • BowBlockBehavior有此属性后该方块在物品栏放一个弓箭到上面会变成弓
  • BulletBlockBehavior此方块将像子弹一样投掷出后破碎
  • WhistleBlockBehavior此方块将可作为哨子使用,并将不可放置
  • ThrowableBlockBehavior此方块将可投掷,需要调整其他和投掷有关属性
  • FireworksBlockBehavior此方块将像烟花一样投掷出后带火焰尾迹,撞击到方块或动物后破碎,或飞行一段距离后消失
  • MagnetBlockBehavior此方块被放置后将相当于一个磁铁
  • ExplosivesBlockBehavior此方块将可爆炸,需要调整其他和爆炸有关属性
  • ImpactExplosivesBlockBehavior炸弹都有此属性,当该方块作为投掷物撞击到方块或动物时爆炸
  • BombBlockBehavior此方块投掷出后可爆炸,附带燃烧引线,同时也会影响Is Stickable
  • HammerBlockBehavior此方块将可作为锤子使用

表二

不确定

SignBlockBehavior
BatteryBlockBehavior
ElectricBlockBehavior
CampfireBlockBehavior
MusketBlockBehavior
FurnitureBlockBehavior
BucketBlockBehavior
MetersBlockBehavior
CrossbowBlockBehavior
PistonBlockBehavior
MemoryBankBlockBehavior
FenceGateBlockBehavior
FenceBlockBehavior
ArrowBlockBehavior
InWaterBlockBehavior
StairsBlockBehavior
AdjustableDelayGateBlockBehavior
DispenserBlockBehavior
CarpetBlockBehavior
EggBlockBehavior
CollapsingBlockBehavior
BoatBlockBehavior
TruthTableCircuitBlockBehavior
LedBlockBehavior
LadderBlockBehavior
WoodBlockBehavior