From 8dded86058892c62c0d905d5a4b1f9db3289f20a Mon Sep 17 00:00:00 2001 From: Romain Beaumont Date: Fri, 28 Aug 2015 00:53:19 +0200 Subject: [PATCH] improve command handling and expose setGameMode --- doc/api.md | 4 +++ lib/playerPlugins/chat.js | 51 +++++++++++++++++++------------------- lib/playerPlugins/login.js | 8 +++--- 3 files changed, 34 insertions(+), 29 deletions(-) diff --git a/doc/api.md b/doc/api.md index d99b011..361e3b0 100644 --- a/doc/api.md +++ b/doc/api.md @@ -60,6 +60,7 @@ - [player.changeBlock(position,blockType)](#playerchangeblockpositionblocktype) - [player.sendInitialPosition()](#playersendinitialposition) - [player.spawn()](#playerspawn) + - [player.setGameMode(gameMode)](#playersetgamemodegamemode) - [Low level properties](#low-level-properties) - [player._client](#player_client) - [Low level methods](#low-level-methods) @@ -278,6 +279,9 @@ send its initial position to the player tell everybody else that the player spawned +#### player.setGameMode(gameMode) + +set player gameMode to `gameMode` ### Low level properties diff --git a/lib/playerPlugins/chat.js b/lib/playerPlugins/chat.js index 11596d0..8b08a26 100644 --- a/lib/playerPlugins/chat.js +++ b/lib/playerPlugins/chat.js @@ -2,35 +2,34 @@ module.exports=inject; function inject(serv, player, options) { - player._client.on('chat', function (data) { - if(data.message[0]=="/" && options.commands[data.message.slice(1)]) { - player.chat("" + options.commands[data.message.slice(1)]); - } else if(data.message == "/gamemode" || data.message == "/gamemode 0" || data.message == "/gamemode 1") { - - if(data.message == "/gamemode 0") { - player._client.write("game_state_change", { - reason: 3, - gameMode: 0 - }); - player.gameMode = 0; - player.chat("Gamemode changed to 0!"); - } else if(data.message == "/gamemode 1") { - player._client.write("game_state_change", { - reason: 3, - gameMode: 1 - }); - player.gameMode = 1; - player.chat("Gamemode changed to 1!") - } else { - player.chat("Invalid usage! Try using /gamemode 1"); + player._client.on('chat', function (packet) { + if(!handleCommand(packet.message)) { + serv.broadcast('<' + player.username + '>' + ' ' + packet.message); + player.emit("chat",packet.message); } - } else { - - serv.broadcast('<' + player.username + '>' + ' ' + data.message); - player.emit("chat",data.message); - } }); + function handleCommand(message) + { + var command; + if(message[0]=="/") + command=message.slice(1); + else return false; + + if(options.commands[command]) { + player.chat("" + options.commands[command]); + return true; + } + var results; + if(results=command.match(/^gamemode ([0-3])$/)) { + var gameMode=parseInt(results[1]); + player.setGameMode(gameMode); + return true; + } + player.chat("Invalid command."); + return true; + } + function chat(message) { player._client.write('chat', { message: JSON.stringify(message), position: 0 }); } diff --git a/lib/playerPlugins/login.js b/lib/playerPlugins/login.js index 434f40c..0cad3ac 100644 --- a/lib/playerPlugins/login.js +++ b/lib/playerPlugins/login.js @@ -80,12 +80,13 @@ function inject(serv,player) }); } - function updateGameState() + function setGameMode(gameMode) { player._client.write('game_state_change', { reason: 3, - gameMode: player.gameMode + gameMode: gameMode }); + player.gameMode=gameMode; } function fillTabList() @@ -179,7 +180,7 @@ function inject(serv,player) player.emit("spawned"); updateTime(); - updateGameState(); + setGameMode(player.gameMode); fillTabList(); spawnOthers(); spawn(); @@ -188,6 +189,7 @@ function inject(serv,player) } + player.setGameMode=setGameMode; player.login=login; player.sendInitialPosition=sendInitialPosition; player.spawn=spawn;