本站文本内容除另有声明外,均在知识共享 署名-非商业性使用-相同方式共享 3.0 协议下提供。(详情…本站文本内容除另有声明外,均在知识共享 署名-非商业性使用-相同方式共享 3.0 协议下提供。(详情…中文Minecraft Wiki是完全公开的。请勇于扩充与修正内容!中文Minecraft Wiki是完全公开的。请勇于扩充与修正内容!Minecraft中文Wiki微博正在更新!或许有兴趣去看看Minecraft中文Wiki微博正在更新!或许有兴趣去看看想与其他用户进行编辑上的沟通?社区专页正是为此创建的。想与其他用户进行编辑上的沟通?社区专页正是为此创建的。翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。需要管理员的协助?在管理员告示板留言也许可以帮到您。需要管理员的协助?在管理员告示板留言也许可以帮到您。

故事模式已不受支持。如果您已购买了故事模式,请在6月25日服务器关闭之前下载,否则您将不能下载故事模式。点击此处查看详情。

教程/WebSocket

来自Minecraft Wiki
跳转至: 导航搜索


Information icon.svg
此特性为教育版基岩版独有。

本页面是指MCPE/connect命令连接的WebSocket。 本教程展示的是客户端与服务端的数据包,不涉及WebSocket服务端的开发,但您可以参考底部的链接来进行服务端的开发。

数据包[编辑 | 编辑源代码]

Websocket服务器需要向mcpe发送数据包来进行交互。
这里有几个示例数据包。

subscribe[编辑 | 编辑源代码]

{
	"body": {
		"eventName": "PlayerMessage"
	},
	"header": {
		"requestId": "00000000-0000-0000-0000-000000000000",
		"messagePurpose": "subscribe",
		"version": 1,
		"messageType": "commandRequest"
	}
}

这将对PlayerMessage事件进行监听,玩家说的话将被通过数据包发回。

unsubscribe[编辑 | 编辑源代码]

Unsubscribe包是用来在监听事件之后取消监听。

{
	"body": {
		"eventName": "PlayerMessage"
	},
	"header": {
		"requestId": "00000000-0000-0000-0000-000000000000",
		"messagePurpose": "unsubscribe",
		"version": 1,
		"messageType": "commandRequest"
	}
}

这是一个对PlayerMessage事件进行unsubscribe的包。

CommandRequest[编辑 | 编辑源代码]

{
			"body": {
				"origin": {
					"type": "player"
				},
				"commandLine": "say Hello",
				"version": 1
			},
			"header": {
				"requestId": "00000000-0000-0000-0000-000000000000",
				"messagePurpose": "commandRequest",
				"version": 1,
				"messageType": "commandRequest"
			}
		}

这将在客户端执行commandLine项(say Hello)的命令,执行结果会被发回。

  • commandRequest能执行一些游戏内无法执行的命令,例如: /agent create(创建agent)

返回数据包[编辑 | 编辑源代码]

event包[编辑 | 编辑源代码]

标准Event包示例[编辑 | 编辑源代码]

{
"body": {"eventName": 事件名称,"measurements": null,"properties": {/*信息*/}},
"header": {"meesagePurpose": "event","requestId": "xxx","version":1}}

PlayerMessage event示例[编辑 | 编辑源代码]

示例:

{"body":{"eventName":"PlayerMessage","measurements":null,"properties":{"AccountType":1,"ActiveSessionID":"(这里是一个uuid)","AppSessionID":"(一个uuid)","Biome":43,"Build":"1.8.0","BuildPlat":2,"Cheevos":false,"ClientId":"(32位16进制数据)","CurrentInput":2,"CurrentNumPlayers":1,"DeviceSessionId":"(一个uuid)","Dim":0,"GlobalMultiplayerCorrelationId":"(一个uuid)","Message":"233","MessageType":"chat","Mode":0,"MultiplayerCorrelationId":"(一个uuid)","NetworkType":0,"Plat":"iOS 12.1.3","PlayerGameMode":1,"Sender":"LNSSPsd","Seq":57,"ServerId":"raknet:11310020921574762398","Treatments":"","UserId":"十六位数字","WorldSessionId":"(一个uuid)","locale":"en_CN","vrMode":false}},"header":{"messagePurpose":"event","requestId":"00000000-0000-0000-0000-000000000000","version":1}}

这是一个playermessage返回包示例。

  • body.properties.Message是用户发出的消息
  • body.properties.MessageType是消息类型(say,me,chat等)
  • body.properties.Sender是发送者名称
  • body.properties.locale是设备使用的语言

CommandResponse (CommandRequest返回)[编辑 | 编辑源代码]

示例:

list命令[编辑 | 编辑源代码]

 {"body":{"currentPlayerCount":1,"maxPlayerCount":5,"players":"LNSSPsd","statusCode":0,"statusMessage":"There are 1/5 players online:\nLNSSPsd"},"header":{"messagePurpose":"commandResponse","requestId":"(一个uuid)","version":1}}
  • body.currentPlayerCount,body.maxPlayerCount,body.players 是/list命令特有的,在执行其他命令时不存在.

say命令[编辑 | 编辑源代码]

本示例使用了/say oh命令

{"body":{"message":"oh","statusCode":0},"header":{"messagePurpose":"commandResponse","requestId":"00000000-0001-0000-000000000000","version":1}}
  • body.message 是/say命令特有的。

注释[编辑 | 编辑源代码]

  • body.statusCode 是命令完成状态,完成是为0。
  • body.statusMessage 是状态消息,相当于执行命令后聊天里的命令返回。
  • 返回请求的 header.requestId 与发送请求时附带的 header.requestId 相同。

事件表[编辑 | 编辑源代码]

事件名称 触发条件
AdditionalContentLoaded
AgentCommand
AgentCreated
ApiInit
AppPaused
AppResumed
AppSuspended
AwardAchievement
BlockBroken 在玩家破坏方块时触发
BlockPlaced 在玩家放置方块时触发
BoardTextUpdated
BossKilled
CameraUsed
CauldronUsed
ChunkChanged
ChunkLoaded
ChunkUnloaded
ConfigurationChanged
ConnectionFailed
CraftingSessionCompleted
EndOfDay
EntitySpawned
FileTransmissionCancelled
FileTransmissionCompleted
FileTransmissionStarted
FirstTimeClientOpen
FocusGained
FocusLost
GameSessionComplete
GameSessionStart
HardwareInfo
HasNewContent
ItemAcquired
ItemCrafted
ItemDestroyed
ItemDropped 在玩家扔出物品时触发
ItemEnchanted
ItemSmelted 在玩家取出熔炉内物品时触发
ItemUsed
JoinCanceled
JukeboxUsed
LicenseCensus
MascotCreated
MenuShown
MobInteracted
MobKilled
MultiplayerConnectionStateChanged
MultiplayerRoundEnd
MultiplayerRoundStart
NpcPropertiesUpdated
OptionsUpdated
performanceMetrics
PackImportStage
PlayerBounced
PlayerDied
PlayerJoin
PlayerLeave
PlayerMessage 在玩家收到一条消息时触发
PlayerTeleported 在玩家被传送时触发
PlayerTransform
PlayerTravelled 在玩家移动时触发
PortalBuilt
PortalUsed
PortfolioExported
PotionBrewed
PurchaseAttempt
PurchaseResolved
RegionalPopup
RespondedToAcceptContent
ScreenChanged
ScreenHeartbeat
SignInToEdu
SignInToXboxLive
SignOutOfXboxLive
SpecialMobBuilt
StartClient
StartWorld
TextToSpeechToggled
UgcDownloadCompleted
UgcDownloadStarted
UploadSkin
VehicleExited
WorldExported
WorldFilesListed
WorldGenerated
WorldLoaded
WorldUnloaded

你知道吗[编辑 | 编辑源代码]

  • WebSocket在执行/say命令时,国际版显示的发送者名称是外部
  • 教育版中,WebSocket发送的消息,发送者会被显示为教师

历史[编辑 | 编辑源代码]

携带版(Alpha)
0.16.0 build 1 加入了/connect命令,可以连接WebSocket了。
基岩版
1.2 commandRequest包格式发生改变。

参考[编辑 | 编辑源代码]

  1. https://github.com/mcpews/MyAgent
  2. https://github.com/CAIMEOX/FastBuilder