88 lines
2.5 KiB
JavaScript
88 lines
2.5 KiB
JavaScript
/*************************************************************************
|
|
## NumberGuess mini-game:
|
|
|
|
### Description
|
|
This is a very simple number guessing game. Minecraft will ask you to
|
|
guess a number between 1 and 10 and you will tell you if you're too
|
|
hight or too low when you guess wrong. The purpose of this mini-game
|
|
code is to demonstrate use of Bukkit's Conversation API.
|
|
|
|
### Example
|
|
|
|
/js Game_NumberGuess.start(self)
|
|
|
|
Once the game begins, guess a number by typing the `/` character
|
|
followed by a number between 1 and 10.
|
|
|
|
***/
|
|
var bkPrompt = org.bukkit.conversations.Prompt,
|
|
bkConversationFactory = org.bukkit.conversations.ConversationFactory,
|
|
bkConversationPrefix = org.bukkit.conversations.ConversationPrefix,
|
|
bkBukkit = org.bukkit.Bukkit;
|
|
|
|
var sb = function( cmd ) {
|
|
bkBukkit.dispatchCommand( server.consoleSender, 'scoreboard ' + cmd ) ;
|
|
};
|
|
|
|
exports.Game_NumberGuess = {
|
|
start: function( sender ) {
|
|
|
|
var guesses = 0;
|
|
|
|
sb( 'objectives add NumberGuess dummy Guesses' );
|
|
sb( 'players set ' + sender.name + ' NumberGuess ' + guesses );
|
|
sb( 'objectives setdisplay sidebar NumberGuess' );
|
|
|
|
var number = Math.ceil( Math.random() * 10 );
|
|
|
|
var prompt = new bkPrompt( ) {
|
|
|
|
getPromptText: function( ctx ) {
|
|
var hint = '';
|
|
var h = ctx.getSessionData( 'hint' );
|
|
if ( h ) {
|
|
hint = h;
|
|
}
|
|
return hint + 'Think of a number between 1 and 10';
|
|
},
|
|
|
|
acceptInput: function( ctx, s ) {
|
|
s = s.replace( /^[^0-9]+/, '' ); // strip leading non-numeric characters (e.g. '/' )
|
|
s = parseInt( s );
|
|
if ( s == number ) {
|
|
setTimeout(function( ) {
|
|
ctx.forWhom.sendRawMessage( 'You guessed Correct!' );
|
|
sb( 'objectives remove NumberGuess' );
|
|
}, 100 );
|
|
return null;
|
|
} else {
|
|
if ( s < number ) {
|
|
ctx.setSessionData( 'hint', 'too low\n' );
|
|
}
|
|
if ( s > number ) {
|
|
ctx.setSessionData( 'hint', 'too high\n' );
|
|
}
|
|
guesses++;
|
|
sb( 'players set ' + sender.name + ' NumberGuess ' + guesses );
|
|
|
|
return prompt;
|
|
}
|
|
},
|
|
|
|
blocksForInput: function( ctx ) {
|
|
return true;
|
|
}
|
|
};
|
|
var convPrefix = new bkConversationPrefix( ) {
|
|
getPrefix: function( ctx ) {
|
|
return '[1-10] ';
|
|
}
|
|
};
|
|
new bkConversationFactory( __plugin )
|
|
.withModality( true )
|
|
.withFirstPrompt( prompt )
|
|
.withPrefix( convPrefix )
|
|
.buildConversation( sender )
|
|
.begin( );
|
|
}
|
|
};
|