# 我的世界基础概念

# 世界

表示游戏的单位,单个游戏存档、单个网络服务器等都是一个世界。

# 区块

区块是世界里一个大小为16×384×16的部分,是游戏地图加载卸载的基本单位。

当玩家第一次出现在世界时会在其周围生成区块,随着玩家对世界的探索,相邻的区块也会被生成。

区块的X坐标:Floor(X坐标 / 16),区块的Z坐标:Floor(Z坐标 / 16),Floor意为向下取整。

一个区块(X, Z)中坐标最小点的坐标为(X * 16, -64, Z * 16),坐标最大点的坐标为(X * 16 + 15, 320, Z * 16 + 15)。

# 实体

具有可区别性的物体,不一定是物理存在的实体。

包括服务端运算的,会保存到存档的生物实体、物品实体、方块实体、抛射物实体等

以及纯客户端表现,退出游戏后就销毁的特效实体(粒子实体、序列帧实体)、文字面板实体等。

# 生物

指游戏世界中有生命的,可移动的一类实体。其中玩家也属于生物的一种。

# 玩家

玩家所控制的实体对象,同时也属于生物的一种。包括本地玩家和其他玩家,在游戏中,由玩家自己控制的称为本地玩家,否则为其他玩家。

# 物品

物品栏中具有使用属性的物品、地面上的掉落物等都称为物品。其中掉落物也是实体的一种。

# 附魔信息字典

该字典的内容如下

关键字 数据类型 说明
identifier str 自定义附魔id
description str 对于zh_CN.lang中的langStr
primary_slots list[str] 附魔槽位,详见自定义附魔自定义附魔
cost list[int] 附魔威力等级对应的经验消耗,会影响砂轮移除魔咒时返回的经验值以及在附魔台上被附魔到该魔咒的概率(cost越大附魔概率越小);列表内元素数量需与max_level一致,否则注册失败
frequency str 附魔稀有度,影响铁砧结合附魔物品的经验消耗,默认为common,详见自定义附魔自定义附魔
is_treasure_only bool 设为true时为宝藏型魔咒,将影响附魔获取方式,默认为false
is_discoverable bool 设为false时为宝藏型魔咒,将影响附魔获取方式,默认为true
is_lootable bool 设为true时可以通过与图书管理员交易获得,默认为true
is_curse bool 设为true时为诅咒附魔,不可通过砂轮移除,默认为false
max_level int 附魔威力等级,设置后会自动在创造物品栏注册各等级的附魔书,默认为1
incompatible list[str] ["unbreaking"] // 冲突附魔名称

# 物品信息字典

也叫itemDict。是python事件与接口中获取物品信息以及生成物品时使用的dict类型的变量。

该字典的内容如下

关键字 数据类型 说明
newItemName str 必须设置,物品的identifier,即"命名空间:物品名"
newAuxValue int 必须设置,物品附加值
itemName str (废弃)1.22及以前版本的旧identifier,详见1.23版本物品id变更
auxValue int (废弃)1.22及以前版本的旧物品附加值,详见1.23版本物品id变更
count int 必须设置,物品数量。设置为0时为空物品
showInHand bool 可选,是否显示在手上,默认为True
enchantData list(tuple(EnchantType, int)) 可选,附魔数据,tuple中 EnchantType 为附魔类型,int为附魔等级
modEnchantData list(tuple(str, int)) 可选,自定义附魔数据,tuple中str为自定义附魔id,int为自定义附魔等级
customTips str 可选,物品的自定义tips,修改该内容后会覆盖实例的组件netease:customtips的内容
extraId str 可选,物品自定义标识符。可以用于保存数据, 区分物品
userData dict 可选,物品userData,用于灾厄旗帜、旗帜等物品,请勿随意设置该值
durability int 可选,物品耐久度,不存在耐久概念的物品默认值为零

customTips 设置支持自定义格式:包含四种自带格式:

格式字符串 说明
%name% 物品名
%category% 物品类型
%enchanting% 附魔属性
%attack_damage% 攻击伤害

自带格式可以与自定义文本自由组合,顺序可以打乱,物品的自定义格式的文本不存在时不予显示。

自带格式的字符串采用原版的显示格式,物品名前面不带换行符,物品类型、附魔属性前面自带一个换行符,攻击伤害前面自带两个换行符。

举个例子:head%name%after%category%%enchanting%\nnewline%attack_damage%\n\nend,效果如下:

customTips自定义格式示例

# 记分板记分准则信息字典

也叫scoreDict。是python事件与接口中获取的记分准则及其分数

该字典的内容如下

关键字 数据类型 说明
displayName str 记分项显示名称
name str 记分项名称
criteriaName str 记分准则类型名称,目前基岩版只支持(dummy) ,只有获取所有记分项数据时才会有该字段
value int 玩家分数(只有获取玩家分数接口时会有该字段)

# 玩家记分项信息字典

也叫playerScoreDict。是python事件与接口中获取单个玩家所有的记分准则及其分数

该字典的内容如下

关键字 数据类型 说明
playerId str 玩家id
scoreList list(scoreDict) 记分准则及分数列表

# 方块

游戏中场景的基本组成单位,长宽高均为1单位长度的立方体网格,不同的方块具有不同的材质。

# 方块信息字典

也叫blockDict。是python事件与接口中获取方块信息以及生成方块时使用的dict类型的变量。

该字典的内容如下

关键字 数据类型 说明
name str 必须设置,方块identifier,包含命名空间及名称,如minecraft:air
aux int 方块附加值,可缺省,默认为0

# 方块状态

一种方块可能存在多种方块状态,例如不同颜色的羊毛。一个auxvalue实际上也是对应一种方块状态,只是相比于用int来表示的auxvalue,方块状态更为可读。

例如,橙色羊毛的identifier为minecraft:wool,auxvalue为1,而用方块状态则表示为:

{
    "name": "minecraft:wool",
    "states": {
        "color": "orange"
    }
}

可以在游戏内使用GetBlockStates将方块状态打印出来。

也可以在Block_states页面 (opens new window)中查阅,一些没有的可以在方块的页面找到,例如羊毛 (opens new window)泥土 (opens new window)。注意要使用基岩版及Bedrock Edition里的内容。(不排除wiki上有遗漏或错误)

# 方块基本信息字典

也叫blockBasicDict。是python事件与接口中获取方块基本信息时使用的dict类型的变量。

该字典的内容如下

关键字 数据类型 说明
blockLightAbsorption int 方块透光率, 具体见官方wiki (opens new window)
blockLightEmission int 方块亮度, 具体见官方wiki (opens new window)
breathability int 方块的 可呼吸性 (只有定义了"minecraft:breathability"组件的方块有数据,其余默认为solid的枚举值)(需要开启假日创造者功能)
explosionResistance float 方块爆炸抗性
loot str loot table控制掉落物(只有定义了"minecraft:loot"组件的方块有数据,其余默认为空字符串"")
mapColor str 用十六进制颜色定义该方块在地图上显示的颜色(只有定义了"minecraft:map_color"组件的方块以及部分原版方块有数据,其余默认为"#0")
unwalkable bool 生物是否可在上方行走,默认为false(只有定义了"minecraft:unwalkable"组件的方块有数据,其余默认为false)
tier dict/None 与挖掘相关的属性,具体见挖掘属性(只有定义了"netease:tier"组件的方块有数据,其余默认为None)
renderLayer int 方块渲染时使用的 材质
solid bool 方块是否为实心方块,影响生物在方块内是否受到窒息伤害
pathable bool 游戏内AI在进行寻路时,方块是否被当作障碍物(只有定义了"netease:pathable"组件的方块有数据,其余默认为false)
fireResistant bool 方块是否防火(只有定义了"netease:fire_resistant"组件的方块有数据,其余默认为false)
creativeCategory int 方块所在 创造栏目录
destroyTime float 方块摧毁时间

# NBT数据格式

原版方块实体数据、物品userData使用NBT格式 (opens new window)存取,再通过Python接口获取时,会进行一定的转换,具体转换规则如下:

NBT类型 转换后Python数据
Byte {"__type__" : 1, "___value__": True/False}
Short {"__type__" : 2, "___value__": ShortValue}
Int {"__type__" : 3, "__value__": IntValue}
Int64 {"__type__" : 4, "__value__": Int64Value}
Float {"__type__" : 5, "__value__": FloatValue}
Double {"__type__" : 6, "__value__": DoubleValue}
ByteArray {"__type__" : 7, "__value__": IntList}
String {"__type__" : 8, "__value__": String}
List {"__type__" : 9, "__value__": ...(递归转换)}
Compound {"__type__" : 10, "__value__": ...(递归转换)}
IntArray {"__type__" : 11, "__value__": IntList}

# 抛射物

受外力被抛射空中飞行的实体,受重力与摩擦力影响,例如游戏中射出的箭。

# 生物群系

游戏中生成的世界被划分为一个个不同的自然环境,例如森林、丛林、沙漠和针叶林等,这些都是不同的生物群系。

# 骨骼模型

与基岩版原版的基于cube搭建的模型不同,是使用3dmax等建模软件搭建的模型。游戏中的大部分生物都可以被替换为骨骼模型,进而实现不同的表现效果。

# 序列帧

通过一帧帧的图片不断进行切换形成的动画效果,在游戏中为一个平面面片。

# 粒子

通过不断发射多个不同大小规模的平面面片形成的特效效果,通过替换贴图材质等可以模拟丰富的表现。

# 文字面板

本质上为序列帧的文字面板,功能上与文本类似,在游戏中包括伤害飘字,实体头顶名称等内容。

# UI

UI界面,游戏和用户之间进行交互和信息交换的界面。玩家可以通过触发UI来控制对应的游戏逻辑。