node-minecraft-protocol/doc/README.md

211 lines
5.8 KiB
Markdown
Raw Normal View History

# Documentation
## mc.createServer(options)
2015-09-23 17:26:50 -04:00
Returns a `Server` instance and starts listening. All clients will be
automatically logged in and validated against mojang's auth.
`options` is an object containing the properties :
* port : default to 25565
* host : default to localhost
* kickTimeout : default to `10*1000` (10s), kick client that doesn't answer to keepalive after that time
* checkTimeoutInterval : default to `4*1000` (4s), send keepalive packet at that period
* online-mode : default to true
* beforePing : allow customisation of the answer to ping the server does.
It takes a function with argument response and client, response is the default json response, and client is client who sent a ping.
It can take as third argument a callback. If the callback is passed, the function should pass its result to the callback, if not it should return.
* motd : default to "A Minecraft server"
* maxPlayers : default to 20
* keepAlive : send keep alive packets : default to true
* version : 1.8 or 1.9 : default to 1.8
## mc.Server(version)
Create a server instance for `version` of minecraft.
2015-09-23 17:26:50 -04:00
### server.onlineModeExceptions
This is a plain old JavaScript object. Add a key with the username you want to
be exempt from online mode or offline mode (whatever mode the server is in).
Make sure the entries in this object are all lower case.
2015-09-23 17:26:50 -04:00
### server.clients
Javascript object mapping a `Client` from a clientId.
2015-09-23 17:26:50 -04:00
### server.playerCount
The amount of players currently present on the server.
2015-09-23 17:26:50 -04:00
### server.maxPlayers
The maximum amount of players allowed on the server.
2015-09-23 17:26:50 -04:00
### server.motd
The motd that is sent to the player when he is pinging the server
2015-09-23 17:26:50 -04:00
### server.favicon
A base64 data string representing the favicon that will appear next to the server
on the mojang client's multiplayer list.
2015-09-23 17:26:50 -04:00
### `connection` event
Called when a client connects, but before any login has happened. Takes a
`Client` parameter.
### `login` event
Called when a client is logged in against server. Takes a `Client` parameter.
## mc.createClient(options)
Returns a `Client` instance and perform login.
`options` is an object containing the properties :
* username
* port : default to 25565
* password : can be omitted (if the tokens are also omitted then it tries to connect in offline mode)
* host : default to localhost
* clientToken : generated if a password is given
* accessToken : generated if a password is given
* keepAlive : send keep alive packets : default to true
2015-11-19 14:45:02 -05:00
* checkTimeoutInterval : default to `10*1000` (10s), check if keepalive received at that period, disconnect otherwise.
* version : 1.8 or 1.9 : default to 1.8
## mc.createClientAuto(options)
2016-01-24 21:53:34 -05:00
Pings the server and attempts to call `createClient(options)` with the appropriate protocol version.
## mc.Client(isServer,version)
Create a new client, if `isServer` is true then it is a server-side client, otherwise it's a client-side client.
Takes a minecraft `version` as second argument.
2015-09-23 17:26:50 -04:00
### client.state
The internal state that is used to figure out which protocol state we are in during
packet parsing. This is one of the protocol.states.
2015-09-23 17:26:50 -04:00
### client.isServer
True if this is a connection going from the server to the client,
False if it is a connection from client to server.
2015-09-23 17:26:50 -04:00
### client.socket
Returns the internal nodejs Socket used to communicate with this client.
2015-09-23 17:26:50 -04:00
### client.uuid
A string representation of the client's UUID. Note that UUIDs are unique for
each players, while playerNames, as of 1.7.7, are not unique and can change.
2015-09-23 17:26:50 -04:00
### client.username
The user's username.
2015-09-23 17:26:50 -04:00
### client.session
The user's session, as returned by the Yggdrasil system. (only client-side)
### client.profile
The player's profile, as returned by the Yggdrasil system. (only server-side)
2015-12-21 18:07:27 -05:00
### client.latency
The latency of the client, in ms. Updated at each keep alive.
2015-09-23 17:26:50 -04:00
### `packet` event
Called with every packet parsed. Takes two params, the JSON data we parsed,
and the packet metadata (name, state)
2015-09-23 17:26:50 -04:00
### `raw` event
Called with every packet, but as a buffer. Takes two params, the buffer
and the packet metadata (name, state)
2015-09-23 17:26:50 -04:00
### `state` event
Called when the protocol changes state. Takes the new state and old state as
parameters.
### per-packet events
Check out the [minecraft-data docs](https://prismarinejs.github.io/minecraft-data/?v=1.8&d=protocol) to know the event names and data field names.
## Not Immediately Obvious Data Type Formats
Note : almost all data formats can be understood by looking at
[minecraft-data docs](https://prismarinejs.github.io/minecraft-data/?v=1.8&d=protocol)
or [minecraft-data protocol.json](https://github.com/PrismarineJS/minecraft-data/blob/master/data/1.8/protocol.json)
### entityMetadata
Value looks like this:
```js
[
2015-09-23 17:26:50 -04:00
{type: 1, value: 2, key: 3},
{type: 2, value: 3, key: 4},
...
]
```
2015-09-23 17:26:50 -04:00
Where the key is the numeric metadata key and the value is the value of the
correct data type. You can figure out the types [here](http://wiki.vg/Entities#Entity_Metadata_Format)
## mc.ping(options, callback)
`callback(err, pingResults)`
`pingResults`:
## Old version
* `prefix`
* `protocol`
* `version`
* `motd`
* `playerCount`
* `maxPlayers`
## New version
* `description`
* `players`
* `max`
* `online`
* `sample`
* `id`
* `name`
* `version`
* `name`
* `protocol`
* `favicon`
* `latency`
## mc.states
The minecraft protocol states.
## mc.supportedVersions
The supported minecraft versions.
## mc.createSerializer({ state = states.HANDSHAKING, isServer = false , version})
Returns a minecraft protocol [serializer](https://github.com/roblabla/ProtoDef#serializerprotomaintype) for these parameters.
## mc.createDeserializer({ state = states.HANDSHAKING, isServer = false, packetsToParse = {"packet": true}, version })
Returns a minecraft protocol [deserializer](https://github.com/roblabla/ProtoDef#parserprotomaintype) for these parameters.