reorg
This commit is contained in:
parent
d0da034fb7
commit
b2761d29e3
27 changed files with 516 additions and 536 deletions
|
@ -1,4 +1,7 @@
|
||||||
plugin("alias", {
|
|
||||||
|
var _store = {players: {}};
|
||||||
|
|
||||||
|
var alias = plugin("alias", {
|
||||||
help: function(){
|
help: function(){
|
||||||
return [
|
return [
|
||||||
"/jsp alias set <alias> <commands> : Set a shortcut/alias for one or more commands (separated by ';')\n" +
|
"/jsp alias set <alias> <commands> : Set a shortcut/alias for one or more commands (separated by ';')\n" +
|
||||||
|
@ -10,30 +13,30 @@ plugin("alias", {
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
set: function(player, alias, commands){
|
set: function(player, alias, commands){
|
||||||
var aliases = this.store.players;
|
var aliases = _store.players;
|
||||||
var name = player.name;
|
var name = player.name;
|
||||||
if (typeof aliases[name] == "undefined")
|
if (typeof aliases[name] == "undefined")
|
||||||
aliases[name] = {};
|
aliases[name] = {};
|
||||||
aliases[name][alias] = commands;
|
aliases[name][alias] = commands;
|
||||||
},
|
},
|
||||||
remove: function(player, alias){
|
remove: function(player, alias){
|
||||||
var aliases = this.store.players;
|
var aliases = _store.players;
|
||||||
if (aliases[player.name])
|
if (aliases[player.name])
|
||||||
delete aliases[player.name][alias];
|
delete aliases[player.name][alias];
|
||||||
},
|
},
|
||||||
list: function(player){
|
list: function(player){
|
||||||
var result = [];
|
var result = [];
|
||||||
var aliases = this.store.players[player.name];
|
var aliases = _store.players[player.name];
|
||||||
for (var a in aliases)
|
for (var a in aliases)
|
||||||
result.push(a + " = " + aliases[a].join(";"));
|
result.push(a + " = " + aliases[a].join(";"));
|
||||||
return result;
|
return result;
|
||||||
}
|
},
|
||||||
|
store: _store
|
||||||
},true);
|
},true);
|
||||||
|
|
||||||
if (typeof alias.store.players == "undefined")
|
exports.alias = alias;
|
||||||
alias.store.players = {};
|
|
||||||
|
|
||||||
command("alias",function(params){
|
command("alias", function ( params ) {
|
||||||
/*
|
/*
|
||||||
this function also intercepts command options for /jsp
|
this function also intercepts command options for /jsp
|
||||||
*/
|
*/
|
||||||
|
@ -59,7 +62,7 @@ command("alias",function(params){
|
||||||
if (params.length == 0)
|
if (params.length == 0)
|
||||||
return self.sendMessage(alias.help());
|
return self.sendMessage(alias.help());
|
||||||
|
|
||||||
var playerHasAliases = alias.store.players[self.name];
|
var playerHasAliases = _store.players[self.name];
|
||||||
if (!playerHasAliases)
|
if (!playerHasAliases)
|
||||||
return false;
|
return false;
|
||||||
// is it an alias?
|
// is it an alias?
|
||||||
|
|
|
@ -1,25 +1,33 @@
|
||||||
/*
|
/*************************************************************************
|
||||||
|
|
||||||
The arrows mod adds fancy arrows to the game.
|
## The arrows mod adds fancy arrows to the game.
|
||||||
|
|
||||||
Usage:
|
### Usage:
|
||||||
|
|
||||||
/js arrows.sign() turns a targeted sign into a Arrows menu
|
/js var arrows = require('./arrows/arrows')
|
||||||
/js arrows.normal() sets arrow type to normal.
|
|
||||||
/js arrows.explosive() - makes arrows explode.
|
* `/js arrows.sign()` turns a targeted sign into a Arrows menu
|
||||||
/js arrows.teleport() - makes player teleport to where arrow has landed.
|
* `/js arrows.normal()` sets arrow type to normal.
|
||||||
/js arrows.flourish() - makes a tree grow where the arrow lands.
|
* `/js arrows.explosive()` - makes arrows explode.
|
||||||
/js arrows.lightning() - lightning strikes where the arrow lands.
|
* `/js arrows.teleport()` - makes player teleport to where arrow has landed.
|
||||||
/js arrows.firework() - A firework launches where the the arrow lands.
|
* `/js arrows.flourish()` - makes a tree grow where the arrow lands.
|
||||||
|
* `/js arrows.lightning()` - lightning strikes where the arrow lands.
|
||||||
|
* `/js arrows.firework()` - A firework launches where the the arrow lands.
|
||||||
|
|
||||||
All of the above functions can take an optional player object or name as
|
All of the above functions can take an optional player object or name as
|
||||||
a parameter. E.g.
|
a parameter. E.g.
|
||||||
|
|
||||||
/js arrows.explosive('player23') makes player23's arrows explosive.
|
`/js arrows.explosive('player23')` makes player23's arrows explosive.
|
||||||
|
|
||||||
*/
|
***/
|
||||||
|
|
||||||
var arrows = arrows || plugin("arrows",{
|
var signs = require('signs');
|
||||||
|
var events = require('events');
|
||||||
|
var fireworks = require('fireworks');
|
||||||
|
|
||||||
|
var _store = {players: {}};
|
||||||
|
|
||||||
|
var arrows = plugin("arrows",{
|
||||||
/*
|
/*
|
||||||
turn a sign into a menu of arrow choices
|
turn a sign into a menu of arrow choices
|
||||||
*/
|
*/
|
||||||
|
@ -48,91 +56,88 @@ var arrows = arrows || plugin("arrows",{
|
||||||
/*
|
/*
|
||||||
launch a firework where the arrow lands
|
launch a firework where the arrow lands
|
||||||
*/
|
*/
|
||||||
explosiveYield: 2.5
|
explosiveYield: 2.5,
|
||||||
|
|
||||||
|
store: _store
|
||||||
|
|
||||||
},true);
|
},true);
|
||||||
/*
|
|
||||||
initialize data
|
|
||||||
*/
|
|
||||||
arrows.store.players = arrows.store.players || {};
|
|
||||||
|
|
||||||
/*
|
exports.arrows = arrows;
|
||||||
private implementation of normal, explosive, teleport, flourish and lightning functions
|
|
||||||
*/
|
//
|
||||||
(function(){
|
// setup functions for the arrow types
|
||||||
//
|
//
|
||||||
// setup functions for the arrow types
|
var _types = {normal: 0, explosive: 1, teleport: 2, flourish: 3, lightning: 4, firework: 5};
|
||||||
//
|
for (var type in _types)
|
||||||
var _types = {normal: 0, explosive: 1, teleport: 2, flourish: 3, lightning: 4, firework: 5};
|
|
||||||
for (var type in _types)
|
|
||||||
{
|
|
||||||
arrows[type] = (function(n){
|
|
||||||
return function(player){
|
|
||||||
if (typeof player == "undefined")
|
|
||||||
player = self;
|
|
||||||
var playerName = null;
|
|
||||||
if (typeof player == "string")
|
|
||||||
playerName = player;
|
|
||||||
else
|
|
||||||
playerName = player.name;
|
|
||||||
arrows.store.players[playerName] = n;
|
|
||||||
};
|
|
||||||
})(_types[type]);
|
|
||||||
}
|
|
||||||
}());
|
|
||||||
/*
|
|
||||||
Arrows depends on 2 other modules: 'signs' and 'events' so the following code
|
|
||||||
can't execute until all modules have loaded (ready).
|
|
||||||
*/
|
|
||||||
ready(function()
|
|
||||||
{
|
{
|
||||||
/*
|
arrows[type] = (function(n){
|
||||||
called when the player chooses an arrow option from a menu sign
|
return function(player){
|
||||||
*/
|
if (typeof player == "undefined")
|
||||||
var _onMenuChoice = function(event){
|
player = self;
|
||||||
arrows.store.players[event.player.name] = event.number;
|
var playerName = null;
|
||||||
};
|
if (typeof player == "string")
|
||||||
arrows.sign = signs.menu("Arrow",
|
playerName = player;
|
||||||
["Normal","Explosive","Teleport","Flourish","Lightning","Firework"],
|
else
|
||||||
_onMenuChoice );
|
playerName = player.name;
|
||||||
|
arrows.store.players[playerName] = n;
|
||||||
|
};
|
||||||
|
})(_types[type]);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
event handler called when a projectile hits something
|
called when the player chooses an arrow option from a menu sign
|
||||||
*/
|
*/
|
||||||
var _onArrowHit = function(listener,event)
|
var _onMenuChoice = function(event){
|
||||||
|
arrows.store.players[event.player.name] = event.number;
|
||||||
|
};
|
||||||
|
arrows.sign = signs.menu("Arrow",
|
||||||
|
["Normal","Explosive","Teleport","Flourish","Lightning","Firework"],
|
||||||
|
_onMenuChoice );
|
||||||
|
|
||||||
|
/*
|
||||||
|
event handler called when a projectile hits something
|
||||||
|
*/
|
||||||
|
var _onArrowHit = function(listener,event)
|
||||||
|
{
|
||||||
|
var projectile = event.entity;
|
||||||
|
var world = projectile.world;
|
||||||
|
var shooter = projectile.shooter;
|
||||||
|
var fireworkCount = 5;
|
||||||
|
if (projectile instanceof org.bukkit.entity.Arrow &&
|
||||||
|
shooter instanceof org.bukkit.entity.Player)
|
||||||
{
|
{
|
||||||
var projectile = event.entity;
|
var arrowType = arrows.store.players[shooter.name];
|
||||||
var world = projectile.world;
|
|
||||||
var shooter = projectile.shooter;
|
switch (arrowType){
|
||||||
if (projectile instanceof org.bukkit.entity.Arrow &&
|
case 1:
|
||||||
shooter instanceof org.bukkit.entity.Player)
|
projectile.remove();
|
||||||
{
|
world.createExplosion(projectile.location,arrows.explosiveYield);
|
||||||
var arrowType = arrows.store.players[shooter.name];
|
break;
|
||||||
switch (arrowType){
|
case 2:
|
||||||
case 1:
|
projectile.remove();
|
||||||
projectile.remove();
|
var teleportCause =org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
||||||
world.createExplosion(projectile.location,arrows.explosiveYield);
|
shooter.teleport(projectile.location,
|
||||||
break;
|
teleportCause.PLUGIN);
|
||||||
case 2:
|
break;
|
||||||
projectile.remove();
|
case 3:
|
||||||
var teleportCause =org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
projectile.remove();
|
||||||
shooter.teleport(projectile.location,
|
world.generateTree(projectile.location, org.bukkit.TreeType.BIG_TREE);
|
||||||
teleportCause.PLUGIN);
|
break;
|
||||||
break;
|
case 4:
|
||||||
case 3:
|
projectile.remove();
|
||||||
projectile.remove();
|
world.strikeLightning(projectile.location);
|
||||||
world.generateTree(projectile.location, org.bukkit.TreeType.BIG_TREE);
|
break;
|
||||||
break;
|
case 5:
|
||||||
case 4:
|
projectile.remove();
|
||||||
projectile.remove();
|
var launch = function(){
|
||||||
world.strikeLightning(projectile.location);
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
projectile.remove();
|
|
||||||
fireworks.firework(projectile.location);
|
fireworks.firework(projectile.location);
|
||||||
break;
|
if (--fireworkCount)
|
||||||
}
|
setTimeout(launch,2000);
|
||||||
|
};
|
||||||
|
launch();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
events.on("entity.ProjectileHitEvent",_onArrowHit);
|
};
|
||||||
});
|
events.on('entity.ProjectileHitEvent',_onArrowHit);
|
||||||
|
|
||||||
|
|
|
@ -1,53 +1,56 @@
|
||||||
|
/*
|
||||||
|
TODO: Document this module
|
||||||
|
*/
|
||||||
|
var events = require('events');
|
||||||
|
|
||||||
|
var _store = {players: {}};
|
||||||
/*
|
/*
|
||||||
declare a new javascript plugin for changing chat text color
|
declare a new javascript plugin for changing chat text color
|
||||||
*/
|
*/
|
||||||
var chat = chat || plugin("chat", {
|
exports.chat = plugin("chat", {
|
||||||
/*
|
/*
|
||||||
set the color of text for a given player
|
set the color of text for a given player
|
||||||
*/
|
*/
|
||||||
setColor: function(player, color){
|
setColor: function(player, color){
|
||||||
this.store.players[player.name] = color;
|
this.store.players[player.name] = color;
|
||||||
}
|
},
|
||||||
},true);
|
|
||||||
/*
|
|
||||||
initialize the store
|
|
||||||
*/
|
|
||||||
chat.store.players = chat.store.players || {};
|
|
||||||
|
|
||||||
ready(function()
|
store: _store
|
||||||
{
|
|
||||||
var colors = [
|
},true);
|
||||||
"black", "blue", "darkgreen", "darkaqua", "darkred",
|
|
||||||
"purple", "gold", "gray", "darkgray", "indigo",
|
var colors = [
|
||||||
"brightgreen", "aqua", "red", "pink", "yellow", "white"
|
"black", "blue", "darkgreen", "darkaqua", "darkred",
|
||||||
];
|
"purple", "gold", "gray", "darkgray", "indigo",
|
||||||
var colorCodes = {};
|
"brightgreen", "aqua", "red", "pink", "yellow", "white"
|
||||||
for (var i =0;i < colors.length;i++) {
|
];
|
||||||
var hexCode = i.toString(16);
|
var colorCodes = {};
|
||||||
colorCodes[colors[i]] = hexCode;
|
for (var i =0;i < colors.length;i++) {
|
||||||
|
var hexCode = i.toString(16);
|
||||||
|
colorCodes[colors[i]] = hexCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
events.on("player.AsyncPlayerChatEvent",function(l,e){
|
||||||
|
var player = e.player;
|
||||||
|
var playerChatColor = chat.store.players[player.name];
|
||||||
|
if (playerChatColor){
|
||||||
|
e.message = "§" + colorCodes[playerChatColor] + e.message;
|
||||||
}
|
}
|
||||||
|
|
||||||
events.on("player.AsyncPlayerChatEvent",function(l,e){
|
|
||||||
var player = e.player;
|
|
||||||
var playerChatColor = chat.store.players[player.name];
|
|
||||||
if (playerChatColor){
|
|
||||||
e.message = "§" + colorCodes[playerChatColor] + e.message;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
var listColors = function(params){
|
|
||||||
var colorNamesInColor = [];
|
|
||||||
for (var i = 0;i < colors.length;i++)
|
|
||||||
colorNamesInColor[i] = "§"+colorCodes[colors[i]] + colors[i];
|
|
||||||
self.sendMessage("valid chat colors are " + colorNamesInColor.join(", "));
|
|
||||||
};
|
|
||||||
command("list_colors", listColors);
|
|
||||||
command("chat_color",function(params){
|
|
||||||
var color = params[0];
|
|
||||||
if (colorCodes[color]){
|
|
||||||
chat.setColor(self,color);
|
|
||||||
}else{
|
|
||||||
self.sendMessage(color + " is not a valid color");
|
|
||||||
listColors();
|
|
||||||
}
|
|
||||||
},colors);
|
|
||||||
});
|
});
|
||||||
|
var listColors = function(params){
|
||||||
|
var colorNamesInColor = [];
|
||||||
|
for (var i = 0;i < colors.length;i++)
|
||||||
|
colorNamesInColor[i] = "§"+colorCodes[colors[i]] + colors[i];
|
||||||
|
self.sendMessage("valid chat colors are " + colorNamesInColor.join(", "));
|
||||||
|
};
|
||||||
|
command("list_colors", listColors);
|
||||||
|
command("chat_color",function(params){
|
||||||
|
var color = params[0];
|
||||||
|
if (colorCodes[color]){
|
||||||
|
chat.setColor(self,color);
|
||||||
|
}else{
|
||||||
|
self.sendMessage(color + " is not a valid color");
|
||||||
|
listColors();
|
||||||
|
}
|
||||||
|
},colors);
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
var utils = require('utils');
|
||||||
|
var events = require('events');
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
Classroom Module
|
Classroom Module
|
||||||
================
|
================
|
||||||
|
@ -41,22 +44,19 @@ Only ops users can run the classroom.allowScripting() function - this is so that
|
||||||
don't try to bar themselves and each other from scripting.
|
don't try to bar themselves and each other from scripting.
|
||||||
|
|
||||||
***/
|
***/
|
||||||
var classroom = {
|
var _canScript = false;
|
||||||
allowScripting: function(/* boolean: true or false */ canScript){}
|
|
||||||
};
|
|
||||||
|
|
||||||
ready(function(){
|
exports.classroom = {
|
||||||
classroom.allowScripting = function(canScript)
|
allowScripting: function (/* boolean: true or false */ canScript) {
|
||||||
{
|
|
||||||
/*
|
/*
|
||||||
only operators should be allowed run this function
|
only operators should be allowed run this function
|
||||||
*/
|
*/
|
||||||
if (!self.isOp())
|
if (!self.isOp())
|
||||||
return;
|
return;
|
||||||
if (canScript){
|
if (canScript){
|
||||||
utils.foreach( server.onlinePlayers, function (player) {
|
utils.foreach( server.onlinePlayers, function (player) {
|
||||||
player.addAttachment(__plugin, "scriptcraft.*", true);
|
player.addAttachment(__plugin, "scriptcraft.*", true);
|
||||||
});
|
});
|
||||||
}else{
|
}else{
|
||||||
utils.foreach( server.onlinePlayers, function(player) {
|
utils.foreach( server.onlinePlayers, function(player) {
|
||||||
utils.foreach(player.getEffectivePermissions(), function(perm) {
|
utils.foreach(player.getEffectivePermissions(), function(perm) {
|
||||||
|
@ -67,12 +67,13 @@ ready(function(){
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
classroom.canScript = canScript;
|
_canScript = canScript;
|
||||||
};
|
}
|
||||||
events.on("player.PlayerLoginEvent", function(listener, event) {
|
};
|
||||||
var player = event.player;
|
events.on('player.PlayerLoginEvent', function(listener, event) {
|
||||||
if (classroom.canScript){
|
var player = event.player;
|
||||||
player.addAttachment(__plugin, "scriptcraft.*", true);
|
if (classroom.canScript){
|
||||||
}
|
player.addAttachment(__plugin, "scriptcraft.*", true);
|
||||||
}, "HIGHEST");
|
}
|
||||||
});
|
}, "HIGHEST");
|
||||||
|
|
||||||
|
|
|
@ -272,4 +272,4 @@ blocks.rainbow = [blocks.wool.red,
|
||||||
blocks.wool.purple];
|
blocks.wool.purple];
|
||||||
|
|
||||||
|
|
||||||
module.exports = blocks;
|
exports.blocks = blocks;
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
var Drone = require('./drone');
|
var Drone = require('./drone').Drone;
|
||||||
var blocks = require('./blocks');
|
var blocks = require('./blocks').blocks;
|
||||||
|
|
||||||
module.exports = Drone;
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
Drone.blocktype() method
|
Drone.blocktype() method
|
||||||
========================
|
========================
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
var Drone = require('../drone');
|
var Drone = require('../drone').Drone;
|
||||||
module.exports = Drone;
|
|
||||||
//
|
//
|
||||||
// a castle is just a big wide fort with 4 taller forts at each corner
|
// a castle is just a big wide fort with 4 taller forts at each corner
|
||||||
//
|
//
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
var Drone = require('../drone');
|
var Drone = require('../drone').Drone;
|
||||||
var blocks = require('../blocks');
|
var blocks = require('../blocks').blocks;
|
||||||
|
|
||||||
module.exports = Drone;
|
|
||||||
/**
|
/**
|
||||||
* Creates a tile pattern of given block types and size
|
* Creates a tile pattern of given block types and size
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
var Drone = require('../drone');
|
var Drone = require('../drone').Drone;
|
||||||
module.exports = Drone;
|
|
||||||
//
|
//
|
||||||
// usage:
|
// usage:
|
||||||
// [1] to build a cottage at the player's current location or the cross-hairs location...
|
// [1] to build a cottage at the player's current location or the cross-hairs location...
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
var Drone = require('../drone');
|
var Drone = require('../drone').Drone;
|
||||||
module.exports = Drone;
|
|
||||||
//
|
//
|
||||||
// Create a floor of colored tiles some of which emit light.
|
// Create a floor of colored tiles some of which emit light.
|
||||||
// The tiles change color every second creating a strobe-lit dance-floor.
|
// The tiles change color every second creating a strobe-lit dance-floor.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
var Drone = require('../drone');
|
var Drone = require('../drone').Drone;
|
||||||
module.exports = Drone;
|
|
||||||
//
|
//
|
||||||
// constructs a medieval fort
|
// constructs a medieval fort
|
||||||
//
|
//
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
var Drone = require('../drone');
|
var Drone = require('../drone').Drone;
|
||||||
module.exports = Drone;
|
|
||||||
//
|
//
|
||||||
// Constructs the JS logo
|
// Constructs the JS logo
|
||||||
// https://raw.github.com/voodootikigod/logo.js/master/js.png
|
// https://raw.github.com/voodootikigod/logo.js/master/js.png
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
var Drone = require('../drone');
|
var Drone = require('../drone').Drone;
|
||||||
var blocks = require('../blocks');
|
var blocks = require('../blocks').blocks;
|
||||||
module.exports = Drone;
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
Drone.rainbow() method
|
Drone.rainbow() method
|
||||||
======================
|
======================
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
var Drone = require('../drone');
|
var Drone = require('../drone').Drone;
|
||||||
module.exports = Drone;
|
|
||||||
/**
|
/**
|
||||||
* Iterates over each cube in a cubic region. For each cube has a chance to callback your
|
* Iterates over each cube in a cubic region. For each cube has a chance to callback your
|
||||||
* function and provide a new drone to it.
|
* function and provide a new drone to it.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
var Drone = require('../drone');
|
var Drone = require('../drone').Drone;
|
||||||
var blocks = require('../blocks');
|
var blocks = require('../blocks').blocks;
|
||||||
module.exports = Drone;
|
|
||||||
//
|
//
|
||||||
// usage:
|
// usage:
|
||||||
// [1] to place a new block with redstone wire on it (block on bottom, redstone on top)
|
// [1] to place a new block with redstone wire on it (block on bottom, redstone on top)
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
var Drone = require('../drone');
|
var Drone = require('../drone').Drone;
|
||||||
var blocks = require('../blocks');
|
var blocks = require('../blocks').blocks;
|
||||||
|
|
||||||
module.exports = Drone;
|
|
||||||
Drone.extend('skyscraper',function(floors){
|
Drone.extend('skyscraper',function(floors){
|
||||||
|
|
||||||
if (typeof floors == "undefined")
|
if (typeof floors == "undefined")
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
var Drone = require('../drone');
|
var Drone = require('../drone').Drone;
|
||||||
var blocks = require('../blocks');
|
var blocks = require('../blocks').blocks;
|
||||||
|
|
||||||
module.exports = Drone;
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
Drone.spiral_stairs() method
|
Drone.spiral_stairs() method
|
||||||
============================
|
============================
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
var Drone = require('../drone');
|
var Drone = require('../drone').Drone;
|
||||||
module.exports = Drone;
|
|
||||||
/**
|
/**
|
||||||
* Creates a stream of blocks in a given direction until it hits something other than air
|
* Creates a stream of blocks in a given direction until it hits something other than air
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
var Drone = require('../drone');
|
var Drone = require('../drone').Drone;
|
||||||
module.exports = Drone;
|
|
||||||
//
|
//
|
||||||
// constructs a mayan temple
|
// constructs a mayan temple
|
||||||
//
|
//
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
var Drone = require('./drone');
|
|
||||||
var utils = require('../utils/utils');
|
|
||||||
|
|
||||||
var files = [];
|
|
||||||
|
|
||||||
var filter = function(file,name){
|
|
||||||
name = "" + name;
|
|
||||||
if (name.match(/drone\.js$/))
|
|
||||||
return false;
|
|
||||||
if (name.match(/drone\-exts\.js$/))
|
|
||||||
return false;
|
|
||||||
if (name.match(/\.js$/))
|
|
||||||
return true;
|
|
||||||
if (file.isDirectory())
|
|
||||||
return true;
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
|
|
||||||
var files = utils.find(__dirname, filter);
|
|
||||||
|
|
||||||
utils.foreach(files, function (file){
|
|
||||||
require(file);
|
|
||||||
});
|
|
||||||
|
|
||||||
module.exports = Drone;
|
|
|
@ -1,5 +1,5 @@
|
||||||
var _utils = require('../utils/utils');
|
var _utils = require('utils');
|
||||||
var blocks = require('./blocks');
|
var blocks = require('./blocks').blocks;
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
Drone Module
|
Drone Module
|
||||||
|
@ -732,7 +732,7 @@ Drone = function(x,y,z,dir,world)
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = Drone;
|
exports.Drone = Drone;
|
||||||
|
|
||||||
//
|
//
|
||||||
// add custom methods to the Drone object using this function
|
// add custom methods to the Drone object using this function
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
var Drone = require('./drone');
|
var Drone = require('./drone').Drone;
|
||||||
module.exports = Drone;
|
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
Drone.sphere() method
|
Drone.sphere() method
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
var Drone = require('./drone');
|
var Drone = require('./drone').Drone;
|
||||||
|
|
||||||
Drone.prototype.testHorizontalStrokeWidth = function(){
|
Drone.prototype.testHorizontalStrokeWidth = function(){
|
||||||
this.arc({
|
this.arc({
|
||||||
|
|
|
@ -1,8 +1,14 @@
|
||||||
|
var utils = require('utils');
|
||||||
|
var _store = {
|
||||||
|
houses: {},
|
||||||
|
openHouses: {},
|
||||||
|
invites: {}
|
||||||
|
};
|
||||||
/*
|
/*
|
||||||
The homes plugin lets players set a location as home and return to the location, invite
|
The homes plugin lets players set a location as home and return to the location, invite
|
||||||
other players to their home and also visit other player's homes.
|
other players to their home and also visit other player's homes.
|
||||||
*/
|
*/
|
||||||
plugin("homes", {
|
var homes = plugin("homes", {
|
||||||
help: function(){
|
help: function(){
|
||||||
return [
|
return [
|
||||||
/* basic functions */
|
/* basic functions */
|
||||||
|
@ -33,7 +39,7 @@ plugin("homes", {
|
||||||
host = guest;
|
host = guest;
|
||||||
guest = utils.getPlayerObject(guest);
|
guest = utils.getPlayerObject(guest);
|
||||||
host = utils.getPlayerObject(host);
|
host = utils.getPlayerObject(host);
|
||||||
var loc = this.store.houses[host.name];
|
var loc = _store.houses[host.name];
|
||||||
if (!loc){
|
if (!loc){
|
||||||
guest.sendMessage(host.name + " has no home");
|
guest.sendMessage(host.name + " has no home");
|
||||||
return;
|
return;
|
||||||
|
@ -53,9 +59,9 @@ plugin("homes", {
|
||||||
_canVisit: function(guest, host){
|
_canVisit: function(guest, host){
|
||||||
if (guest == host)
|
if (guest == host)
|
||||||
return true;
|
return true;
|
||||||
if (this.store.openHouses[host.name])
|
if (_store.openHouses[host.name])
|
||||||
return true;
|
return true;
|
||||||
var invitations = this.store.invites[host.name];
|
var invitations = _store.invites[host.name];
|
||||||
if (invitations)
|
if (invitations)
|
||||||
for (var i = 0;i < invitations.length;i++)
|
for (var i = 0;i < invitations.length;i++)
|
||||||
if (invitations[i] == guest.name)
|
if (invitations[i] == guest.name)
|
||||||
|
@ -65,16 +71,16 @@ plugin("homes", {
|
||||||
set: function(player){
|
set: function(player){
|
||||||
player = utils.getPlayerObject(player);
|
player = utils.getPlayerObject(player);
|
||||||
var loc = player.location;
|
var loc = player.location;
|
||||||
this.store.houses[player.name] = [""+loc.world.name
|
_store.houses[player.name] = [""+loc.world.name
|
||||||
,Math.floor(loc.x)
|
,Math.floor(loc.x)
|
||||||
,Math.floor(loc.y)
|
,Math.floor(loc.y)
|
||||||
,Math.floor(loc.z)
|
,Math.floor(loc.z)
|
||||||
,Math.floor(loc.yaw)
|
,Math.floor(loc.yaw)
|
||||||
,Math.floor(loc.pitch)];
|
,Math.floor(loc.pitch)];
|
||||||
},
|
},
|
||||||
remove: function(player){
|
remove: function(player){
|
||||||
player = utils.getPlayerObject(player);
|
player = utils.getPlayerObject(player);
|
||||||
delete this.store.houses[player.name];
|
delete _store.houses[player.name];
|
||||||
},
|
},
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
social functions
|
social functions
|
||||||
|
@ -85,11 +91,11 @@ plugin("homes", {
|
||||||
*/
|
*/
|
||||||
list: function(player){
|
list: function(player){
|
||||||
var result = [];
|
var result = [];
|
||||||
for (var ohp in this.store.openHouses)
|
for (var ohp in _store.openHouses)
|
||||||
result.push(ohp);
|
result.push(ohp);
|
||||||
player = utils.getPlayerObject(player);
|
player = utils.getPlayerObject(player);
|
||||||
for (var host in this.store.invites){
|
for (var host in _store.invites){
|
||||||
var guests = this.store.invites[host];
|
var guests = _store.invites[host];
|
||||||
for (var i = 0;i < guests.length; i++)
|
for (var i = 0;i < guests.length; i++)
|
||||||
if (guests[i] == player.name)
|
if (guests[i] == player.name)
|
||||||
result.push(host);
|
result.push(host);
|
||||||
|
@ -103,14 +109,14 @@ plugin("homes", {
|
||||||
player = utils.getPlayerObject(player);
|
player = utils.getPlayerObject(player);
|
||||||
var result = [];
|
var result = [];
|
||||||
// if home is public - all players
|
// if home is public - all players
|
||||||
if (this.store.openHouses[player.name]){
|
if (_store.openHouses[player.name]){
|
||||||
var online = org.bukkit.Bukkit.getOnlinePlayers();
|
var online = org.bukkit.Bukkit.getOnlinePlayers();
|
||||||
for (var i = 0;i < online.length; i++)
|
for (var i = 0;i < online.length; i++)
|
||||||
if (online[i].name != player.name)
|
if (online[i].name != player.name)
|
||||||
result.push(online[i].name);
|
result.push(online[i].name);
|
||||||
}else{
|
}else{
|
||||||
if (this.store.invites[player.name])
|
if (_store.invites[player.name])
|
||||||
result = this.store.invites[player.name];
|
result = _store.invites[player.name];
|
||||||
else
|
else
|
||||||
result = [];
|
result = [];
|
||||||
}
|
}
|
||||||
|
@ -123,10 +129,10 @@ plugin("homes", {
|
||||||
host = utils.getPlayerObject(host);
|
host = utils.getPlayerObject(host);
|
||||||
guest = utils.getPlayerObject(guest);
|
guest = utils.getPlayerObject(guest);
|
||||||
var invitations = [];
|
var invitations = [];
|
||||||
if (this.store.invites[host.name])
|
if (_store.invites[host.name])
|
||||||
invitations = this.store.invites[host.name];
|
invitations = _store.invites[host.name];
|
||||||
invitations.push(guest.name);
|
invitations.push(guest.name);
|
||||||
this.store.invites[host.name] = invitations;
|
_store.invites[host.name] = invitations;
|
||||||
guest.sendMessage(host.name + " has invited you to their home.");
|
guest.sendMessage(host.name + " has invited you to their home.");
|
||||||
guest.sendMessage("type '/jsp home " + host.name + "' to accept");
|
guest.sendMessage("type '/jsp home " + host.name + "' to accept");
|
||||||
},
|
},
|
||||||
|
@ -136,21 +142,21 @@ plugin("homes", {
|
||||||
uninvite: function(host, guest){
|
uninvite: function(host, guest){
|
||||||
host = utils.getPlayerObject(host);
|
host = utils.getPlayerObject(host);
|
||||||
guest = utils.getPlayerObject(guest);
|
guest = utils.getPlayerObject(guest);
|
||||||
var invitations = this.store.invites[host.name];
|
var invitations = _store.invites[host.name];
|
||||||
if (!invitations)
|
if (!invitations)
|
||||||
return;
|
return;
|
||||||
var revisedInvites = [];
|
var revisedInvites = [];
|
||||||
for (var i =0;i < invitations.length; i++)
|
for (var i =0;i < invitations.length; i++)
|
||||||
if (invitations[i] != guest.name)
|
if (invitations[i] != guest.name)
|
||||||
revisedInvites.push(invitations[i]);
|
revisedInvites.push(invitations[i]);
|
||||||
this.store.invites[host.name] = revisedInvites;
|
_store.invites[host.name] = revisedInvites;
|
||||||
},
|
},
|
||||||
/*
|
/*
|
||||||
make the player's house public
|
make the player's house public
|
||||||
*/
|
*/
|
||||||
open: function(player, optionalMsg){
|
open: function(player, optionalMsg){
|
||||||
player = utils.getPlayerObject(player);
|
player = utils.getPlayerObject(player);
|
||||||
this.store.openHouses[player.name] = true;
|
_store.openHouses[player.name] = true;
|
||||||
if (typeof optionalMsg != "undefined")
|
if (typeof optionalMsg != "undefined")
|
||||||
__plugin.server.broadcastMessage(optionalMsg);
|
__plugin.server.broadcastMessage(optionalMsg);
|
||||||
},
|
},
|
||||||
|
@ -159,132 +165,122 @@ plugin("homes", {
|
||||||
*/
|
*/
|
||||||
close: function(player){
|
close: function(player){
|
||||||
player = utils.getPlayerObject(player);
|
player = utils.getPlayerObject(player);
|
||||||
delete this.store.openHouses[player.name];
|
delete _store.openHouses[player.name];
|
||||||
},
|
},
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
admin functions
|
admin functions
|
||||||
======================================================================== */
|
======================================================================== */
|
||||||
listall: function(){
|
listall: function(){
|
||||||
var result = [];
|
var result = [];
|
||||||
for (var home in this.store.houses)
|
for (var home in _store.houses)
|
||||||
result.push(home);
|
result.push(home);
|
||||||
return result;
|
return result;
|
||||||
},
|
},
|
||||||
clear: function(player){
|
clear: function(player){
|
||||||
player = utils.getPlayerObject(player);
|
player = utils.getPlayerObject(player);
|
||||||
delete this.store.houses[player.name];
|
delete _store.houses[player.name];
|
||||||
delete this.store.openHouses[player.name];
|
delete _store.openHouses[player.name];
|
||||||
}
|
},
|
||||||
|
store: _store
|
||||||
}, true);
|
}, true);
|
||||||
/*
|
|
||||||
private implementation
|
exports.homes = homes;
|
||||||
|
|
||||||
|
/*
|
||||||
|
define a set of command options that can be used by players
|
||||||
*/
|
*/
|
||||||
(function(){
|
var options = {
|
||||||
/*
|
'set': function(){homes.set();},
|
||||||
define a set of command options that can be used by players
|
'delete': function(){ homes.remove();},
|
||||||
*/
|
'help': function(){ self.sendMessage(homes.help());},
|
||||||
var options = {
|
'list': function(){
|
||||||
'set': function(){homes.set();},
|
var visitable = homes.list();
|
||||||
'delete': function(){ homes.remove();},
|
if (visitable.length == 0){
|
||||||
'help': function(){ self.sendMessage(homes.help());},
|
self.sendMessage("There are no homes to visit");
|
||||||
'list': function(){
|
return;
|
||||||
var visitable = homes.list();
|
}else{
|
||||||
if (visitable.length == 0){
|
self.sendMessage([
|
||||||
self.sendMessage("There are no homes to visit");
|
"You can visit any of these " + visitable.length + " homes"
|
||||||
return;
|
,visitable.join(", ")
|
||||||
}else{
|
]);
|
||||||
self.sendMessage([
|
|
||||||
"You can visit any of these " + visitable.length + " homes"
|
|
||||||
,visitable.join(", ")
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'ilist': function(){
|
|
||||||
var potentialVisitors = homes.ilist();
|
|
||||||
if (potentialVisitors.length == 0)
|
|
||||||
self.sendMessage("No one can visit your home");
|
|
||||||
else
|
|
||||||
self.sendMessage([
|
|
||||||
"These " + potentialVisitors.length + "players can visit your home",
|
|
||||||
potentialVisitors.join(", ")]);
|
|
||||||
},
|
|
||||||
'invite': function(params){
|
|
||||||
if (params.length == 1){
|
|
||||||
self.sendMessage("You must provide a player's name");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var playerName = params[1];
|
|
||||||
var guest = utils.getPlayerObject(playerName);
|
|
||||||
if (!guest)
|
|
||||||
self.sendMessage(playerName + " is not here");
|
|
||||||
else
|
|
||||||
homes.invite(self,guest);
|
|
||||||
},
|
|
||||||
'uninvite': function(params){
|
|
||||||
if (params.length == 1){
|
|
||||||
self.sendMessage("You must provide a player's name");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var playerName = params[1];
|
|
||||||
var guest = utils.getPlayerObject(playerName);
|
|
||||||
if (!guest)
|
|
||||||
self.sendMessage(playerName + " is not here");
|
|
||||||
else
|
|
||||||
homes.uninvite(self,guest);
|
|
||||||
},
|
|
||||||
'public': function(params){
|
|
||||||
homes.open(self,params.slice(1).join(' '));
|
|
||||||
self.sendMessage("Your home is open to the public");
|
|
||||||
},
|
|
||||||
'private': function(){
|
|
||||||
homes.close();
|
|
||||||
self.sendMessage("Your home is closed to the public");
|
|
||||||
},
|
|
||||||
'listall': function(){
|
|
||||||
if (!self.isOp())
|
|
||||||
self.sendMessage("Only operators can do this");
|
|
||||||
else
|
|
||||||
self.sendMessage(homes.listall().join(", "));
|
|
||||||
},
|
|
||||||
'clear': function(params){
|
|
||||||
if (!self.isOp())
|
|
||||||
self.sendMessage("Only operators can do this");
|
|
||||||
else
|
|
||||||
homes.clear(params[1]);
|
|
||||||
}
|
}
|
||||||
};
|
},
|
||||||
var optionList = [];
|
'ilist': function(){
|
||||||
for (var o in options)
|
var potentialVisitors = homes.ilist();
|
||||||
optionList.push(o);
|
if (potentialVisitors.length == 0)
|
||||||
/*
|
self.sendMessage("No one can visit your home");
|
||||||
Expose a set of commands that players can use at the in-game command prompt
|
else
|
||||||
*/
|
self.sendMessage([
|
||||||
command("home", function(params){
|
"These " + potentialVisitors.length + "players can visit your home",
|
||||||
if (params.length == 0){
|
potentialVisitors.join(", ")]);
|
||||||
homes.go();
|
},
|
||||||
|
'invite': function(params){
|
||||||
|
if (params.length == 1){
|
||||||
|
self.sendMessage("You must provide a player's name");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var option = options[params[0]];
|
var playerName = params[1];
|
||||||
if (option)
|
var guest = utils.getPlayerObject(playerName);
|
||||||
option(params);
|
if (!guest)
|
||||||
else{
|
self.sendMessage(playerName + " is not here");
|
||||||
var host = utils.getPlayerObject(params[0]);
|
else
|
||||||
if (!host)
|
homes.invite(self,guest);
|
||||||
self.sendMessage(params[0] + " is not here");
|
},
|
||||||
else
|
'uninvite': function(params){
|
||||||
homes.go(self,host);
|
if (params.length == 1){
|
||||||
|
self.sendMessage("You must provide a player's name");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
},optionList);
|
var playerName = params[1];
|
||||||
|
var guest = utils.getPlayerObject(playerName);
|
||||||
|
if (!guest)
|
||||||
|
self.sendMessage(playerName + " is not here");
|
||||||
|
else
|
||||||
|
homes.uninvite(self,guest);
|
||||||
|
},
|
||||||
|
'public': function(params){
|
||||||
|
homes.open(self,params.slice(1).join(' '));
|
||||||
|
self.sendMessage("Your home is open to the public");
|
||||||
|
},
|
||||||
|
'private': function(){
|
||||||
|
homes.close();
|
||||||
|
self.sendMessage("Your home is closed to the public");
|
||||||
|
},
|
||||||
|
'listall': function(){
|
||||||
|
if (!self.isOp())
|
||||||
|
self.sendMessage("Only operators can do this");
|
||||||
|
else
|
||||||
|
self.sendMessage(homes.listall().join(", "));
|
||||||
|
},
|
||||||
|
'clear': function(params){
|
||||||
|
if (!self.isOp())
|
||||||
|
self.sendMessage("Only operators can do this");
|
||||||
|
else
|
||||||
|
homes.clear(params[1]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var optionList = [];
|
||||||
|
for (var o in options)
|
||||||
|
optionList.push(o);
|
||||||
|
/*
|
||||||
|
Expose a set of commands that players can use at the in-game command prompt
|
||||||
|
*/
|
||||||
|
command("home", function ( params ) {
|
||||||
|
if (params.length == 0){
|
||||||
|
homes.go();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var option = options[params[0]];
|
||||||
|
if (option)
|
||||||
|
option(params);
|
||||||
|
else{
|
||||||
|
var host = utils.getPlayerObject(params[0]);
|
||||||
|
if (!host)
|
||||||
|
self.sendMessage(params[0] + " is not here");
|
||||||
|
else
|
||||||
|
homes.go(self,host);
|
||||||
|
}
|
||||||
|
},optionList);
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
initialize the store
|
|
||||||
*/
|
|
||||||
if (typeof homes.store.houses == "undefined")
|
|
||||||
homes.store.houses = {};
|
|
||||||
if (typeof homes.store.openHouses == "undefined")
|
|
||||||
homes.store.openHouses = {};
|
|
||||||
if (typeof homes.store.invites == "undefined")
|
|
||||||
homes.store.invites = {};
|
|
||||||
|
|
||||||
}());
|
|
||||||
|
|
|
@ -1,14 +1,20 @@
|
||||||
/*
|
/*************************************************************************
|
||||||
A basic number-guessing game that uses the Bukkit Conversation API.
|
## Minigame: Guess the number
|
||||||
*/
|
|
||||||
ready(function(){
|
### Example
|
||||||
|
|
||||||
global.GuessTheNumber = function()
|
/js Game_NumberGuess.start()
|
||||||
{
|
|
||||||
|
... Begins a number-guessing game where you must guess the number (between 1 and 10) chosen by the computer.
|
||||||
|
|
||||||
|
A basic number-guessing game that uses the Bukkit Conversation API.
|
||||||
|
***/
|
||||||
|
exports.Game_NumberGuess = {
|
||||||
|
start: function() {
|
||||||
importPackage(org.bukkit.conversations);
|
importPackage(org.bukkit.conversations);
|
||||||
|
|
||||||
var number = Math.ceil(Math.random() * 10);
|
var number = Math.ceil(Math.random() * 10);
|
||||||
|
|
||||||
var prompt = new Prompt()
|
var prompt = new Prompt()
|
||||||
{
|
{
|
||||||
getPromptText: function(ctx){
|
getPromptText: function(ctx){
|
||||||
|
@ -44,5 +50,5 @@ ready(function(){
|
||||||
.withPrefix(new ConversationPrefix(){ getPrefix: function(ctx){ return "[1-10] ";} })
|
.withPrefix(new ConversationPrefix(){ getPrefix: function(ctx){ return "[1-10] ";} })
|
||||||
.buildConversation(self);
|
.buildConversation(self);
|
||||||
conv.begin();
|
conv.begin();
|
||||||
};
|
}
|
||||||
});
|
};
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
load(__folder + "../events/events.js");
|
var events = require('events');
|
||||||
|
|
||||||
/*
|
/*
|
||||||
OK - this is a rough and ready prototype of a simple multi-player shoot-em-up.
|
OK - this is a rough and ready prototype of a simple multi-player shoot-em-up.
|
||||||
Get a bunch of players in close proximity and issue the following commands...
|
Get a bunch of players in close proximity and issue the following commands...
|
||||||
|
@ -6,7 +7,7 @@ load(__folder + "../events/events.js");
|
||||||
/js var redTeam = ['<player1>','<player2>',...etc]
|
/js var redTeam = ['<player1>','<player2>',...etc]
|
||||||
/js var blueTeam = ['<player3>','<player4>,...etc]
|
/js var blueTeam = ['<player3>','<player4>,...etc]
|
||||||
/js var greenTeam = ['<player5>','<player6>,...etc]
|
/js var greenTeam = ['<player5>','<player6>,...etc]
|
||||||
/js new SnowBallFight({red: redTeam,blue: blueTeam,green: greenTeam},60).start();
|
/js new Game_SnowBallFight({red: redTeam,blue: blueTeam,green: greenTeam},60).start();
|
||||||
|
|
||||||
Alternatively you can just have all players play against each other...
|
Alternatively you can just have all players play against each other...
|
||||||
|
|
||||||
|
@ -29,152 +30,147 @@ load(__folder + "../events/events.js");
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var SnowBallFight = function(teams, duration){};
|
/*
|
||||||
SnowBallFight.prototype.start = function(){};
|
setup game
|
||||||
|
*/
|
||||||
(function(){
|
var _startGame = function(gameState){
|
||||||
|
// don't let game start if already in progress (wait for game to finish)
|
||||||
/*
|
if (gameState.inProgress){
|
||||||
setup game
|
return;
|
||||||
*/
|
}
|
||||||
var _startGame = function(gameState){
|
gameState.inProgress = true;
|
||||||
// don't let game start if already in progress (wait for game to finish)
|
// reset timer
|
||||||
if (gameState.inProgress){
|
gameState.duration = gameState.originalDuration;
|
||||||
return;
|
// put all players in survival mode and give them each 200 snowballs
|
||||||
}
|
// 64 snowballs for every 30 seconds should be more than enough
|
||||||
gameState.inProgress = true;
|
for (var i = 10;i < gameState.duration;i+=10)
|
||||||
// reset timer
|
gameState.ammo.push(gameState.ammo[0]);
|
||||||
gameState.duration = gameState.originalDuration;
|
|
||||||
// put all players in survival mode and give them each 200 snowballs
|
|
||||||
// 64 snowballs for every 30 seconds should be more than enough
|
|
||||||
for (var i = 10;i < gameState.duration;i+=10)
|
|
||||||
gameState.ammo.push(gameState.ammo[0]);
|
|
||||||
|
|
||||||
for (var teamName in gameState.teams)
|
|
||||||
{
|
|
||||||
gameState.teamScores[teamName] = 0;
|
|
||||||
var team = gameState.teams[teamName];
|
|
||||||
for (var i = 0;i < team.length;i++) {
|
|
||||||
var player = server.getPlayer(team[i]);
|
|
||||||
gameState.savedModes[player.name] = player.gameMode;
|
|
||||||
player.gameMode = org.bukkit.GameMode.SURVIVAL;
|
|
||||||
player.inventory.addItem(gameState.ammo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
/*
|
|
||||||
end the game
|
|
||||||
*/
|
|
||||||
var _endGame = function(gameState){
|
|
||||||
var scores = [];
|
|
||||||
|
|
||||||
var leaderBoard = [];
|
|
||||||
for (var tn in gameState.teamScores){
|
|
||||||
leaderBoard.push([tn,gameState.teamScores[tn]]);
|
|
||||||
}
|
|
||||||
leaderBoard.sort(function(a,b){ return b[1] - a[1];});
|
|
||||||
|
|
||||||
for (var i = 0;i < leaderBoard.length; i++){
|
|
||||||
scores.push("Team " + leaderBoard[i][0] + " scored " + leaderBoard[i][1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var teamName in gameState.teams) {
|
|
||||||
var team = gameState.teams[teamName];
|
|
||||||
for (var i = 0;i < team.length;i++) {
|
|
||||||
// restore player's previous game mode and take back snowballs
|
|
||||||
var player = server.getPlayer(team[i]);
|
|
||||||
player.gameMode = gameState.savedModes[player.name];
|
|
||||||
player.inventory.removeItem(gameState.ammo);
|
|
||||||
player.sendMessage("GAME OVER.");
|
|
||||||
player.sendMessage(scores);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var handlerList = org.bukkit.event.entity.EntityDamageByEntityEvent.getHandlerList();
|
|
||||||
handlerList.unregister(gameState.listener);
|
|
||||||
gameState.inProgress = false;
|
|
||||||
};
|
|
||||||
/*
|
|
||||||
get the team the player belongs to
|
|
||||||
*/
|
|
||||||
var _getTeam = function(player,pteams) {
|
|
||||||
for (var teamName in pteams) {
|
|
||||||
var team = pteams[teamName];
|
|
||||||
for (var i = 0;i < team.length; i++)
|
|
||||||
if (team[i] == player.name)
|
|
||||||
return teamName;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
/*
|
|
||||||
construct a new game
|
|
||||||
*/
|
|
||||||
var _constructor = function(duration, teams) {
|
|
||||||
|
|
||||||
var _snowBalls = new org.bukkit.inventory.ItemStack(org.bukkit.Material.SNOW_BALL, 64);
|
|
||||||
|
|
||||||
var _gameState = {
|
|
||||||
teams: teams,
|
|
||||||
duration: duration,
|
|
||||||
originalDuration: duration,
|
|
||||||
inProgress: false,
|
|
||||||
teamScores: {},
|
|
||||||
listener: null,
|
|
||||||
savedModes: {},
|
|
||||||
ammo: [_snowBalls]
|
|
||||||
};
|
|
||||||
if (typeof duration == "undefined"){
|
|
||||||
duration = 60;
|
|
||||||
}
|
|
||||||
if (typeof teams == "undefined"){
|
|
||||||
/*
|
|
||||||
wph 20130511 use all players
|
|
||||||
*/
|
|
||||||
teams = [];
|
|
||||||
var players = server.onlinePlayers;
|
|
||||||
for (var i = 0;i < players.length; i++){
|
|
||||||
teams.push(players[i].name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//
|
|
||||||
// allow for teams param to be either {red:['player1','player2'],blue:['player3']} or
|
|
||||||
// ['player1','player2','player3'] if all players are against each other (no teams)
|
|
||||||
//
|
|
||||||
if (teams instanceof Array){
|
|
||||||
_gameState.teams = {};
|
|
||||||
for (var i = 0;i < teams.length; i++)
|
|
||||||
_gameState.teams[teams[i]] = [teams[i]];
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
this function is called every time a player is damaged by another entity/player
|
|
||||||
*/
|
|
||||||
var _onSnowballHit = function(l,event){
|
|
||||||
var snowball = event.damager;
|
|
||||||
if (!snowball || !(snowball instanceof org.bukkit.entity.Snowball))
|
|
||||||
return;
|
|
||||||
var throwersTeam = _getTeam(snowball.shooter,_gameState.teams);
|
|
||||||
var damageeTeam = _getTeam(event.entity,_gameState.teams);
|
|
||||||
if (!throwersTeam || !damageeTeam)
|
|
||||||
return; // thrower/damagee wasn't in game
|
|
||||||
if (throwersTeam != damageeTeam)
|
|
||||||
_gameState.teamScores[throwersTeam]++;
|
|
||||||
else
|
|
||||||
_gameState.teamScores[throwersTeam]--;
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
|
||||||
start: function() {
|
|
||||||
_startGame(_gameState);
|
|
||||||
_gameState.listener = events.on("entity.EntityDamageByEntityEvent",_onSnowballHit);
|
|
||||||
new java.lang.Thread(function(){
|
|
||||||
while (_gameState.duration--)
|
|
||||||
java.lang.Thread.sleep(1000); // sleep 1,000 millisecs (1 second)
|
|
||||||
_endGame(_gameState);
|
|
||||||
}).start();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
};
|
|
||||||
SnowBallFight = _constructor;
|
|
||||||
|
|
||||||
}());
|
for (var teamName in gameState.teams)
|
||||||
|
{
|
||||||
|
gameState.teamScores[teamName] = 0;
|
||||||
|
var team = gameState.teams[teamName];
|
||||||
|
for (var i = 0;i < team.length;i++) {
|
||||||
|
var player = server.getPlayer(team[i]);
|
||||||
|
gameState.savedModes[player.name] = player.gameMode;
|
||||||
|
player.gameMode = org.bukkit.GameMode.SURVIVAL;
|
||||||
|
player.inventory.addItem(gameState.ammo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
/*
|
||||||
|
end the game
|
||||||
|
*/
|
||||||
|
var _endGame = function(gameState){
|
||||||
|
var scores = [];
|
||||||
|
|
||||||
|
var leaderBoard = [];
|
||||||
|
for (var tn in gameState.teamScores){
|
||||||
|
leaderBoard.push([tn,gameState.teamScores[tn]]);
|
||||||
|
}
|
||||||
|
leaderBoard.sort(function(a,b){ return b[1] - a[1];});
|
||||||
|
|
||||||
|
for (var i = 0;i < leaderBoard.length; i++){
|
||||||
|
scores.push("Team " + leaderBoard[i][0] + " scored " + leaderBoard[i][1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var teamName in gameState.teams) {
|
||||||
|
var team = gameState.teams[teamName];
|
||||||
|
for (var i = 0;i < team.length;i++) {
|
||||||
|
// restore player's previous game mode and take back snowballs
|
||||||
|
var player = server.getPlayer(team[i]);
|
||||||
|
player.gameMode = gameState.savedModes[player.name];
|
||||||
|
player.inventory.removeItem(gameState.ammo);
|
||||||
|
player.sendMessage("GAME OVER.");
|
||||||
|
player.sendMessage(scores);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var handlerList = org.bukkit.event.entity.EntityDamageByEntityEvent.getHandlerList();
|
||||||
|
handlerList.unregister(gameState.listener);
|
||||||
|
gameState.inProgress = false;
|
||||||
|
};
|
||||||
|
/*
|
||||||
|
get the team the player belongs to
|
||||||
|
*/
|
||||||
|
var _getTeam = function(player,pteams) {
|
||||||
|
for (var teamName in pteams) {
|
||||||
|
var team = pteams[teamName];
|
||||||
|
for (var i = 0;i < team.length; i++)
|
||||||
|
if (team[i] == player.name)
|
||||||
|
return teamName;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
/*
|
||||||
|
construct a new game
|
||||||
|
*/
|
||||||
|
var _constructor = function(duration, teams) {
|
||||||
|
|
||||||
|
var _snowBalls = new org.bukkit.inventory.ItemStack(org.bukkit.Material.SNOW_BALL, 64);
|
||||||
|
|
||||||
|
var _gameState = {
|
||||||
|
teams: teams,
|
||||||
|
duration: duration,
|
||||||
|
originalDuration: duration,
|
||||||
|
inProgress: false,
|
||||||
|
teamScores: {},
|
||||||
|
listener: null,
|
||||||
|
savedModes: {},
|
||||||
|
ammo: [_snowBalls]
|
||||||
|
};
|
||||||
|
if (typeof duration == "undefined"){
|
||||||
|
duration = 60;
|
||||||
|
}
|
||||||
|
if (typeof teams == "undefined"){
|
||||||
|
/*
|
||||||
|
wph 20130511 use all players
|
||||||
|
*/
|
||||||
|
teams = [];
|
||||||
|
var players = server.onlinePlayers;
|
||||||
|
for (var i = 0;i < players.length; i++){
|
||||||
|
teams.push(players[i].name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// allow for teams param to be either {red:['player1','player2'],blue:['player3']} or
|
||||||
|
// ['player1','player2','player3'] if all players are against each other (no teams)
|
||||||
|
//
|
||||||
|
if (teams instanceof Array){
|
||||||
|
_gameState.teams = {};
|
||||||
|
for (var i = 0;i < teams.length; i++)
|
||||||
|
_gameState.teams[teams[i]] = [teams[i]];
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
this function is called every time a player is damaged by another entity/player
|
||||||
|
*/
|
||||||
|
var _onSnowballHit = function(l,event){
|
||||||
|
var snowball = event.damager;
|
||||||
|
if (!snowball || !(snowball instanceof org.bukkit.entity.Snowball))
|
||||||
|
return;
|
||||||
|
var throwersTeam = _getTeam(snowball.shooter,_gameState.teams);
|
||||||
|
var damageeTeam = _getTeam(event.entity,_gameState.teams);
|
||||||
|
if (!throwersTeam || !damageeTeam)
|
||||||
|
return; // thrower/damagee wasn't in game
|
||||||
|
if (throwersTeam != damageeTeam)
|
||||||
|
_gameState.teamScores[throwersTeam]++;
|
||||||
|
else
|
||||||
|
_gameState.teamScores[throwersTeam]--;
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
start: function() {
|
||||||
|
_startGame(_gameState);
|
||||||
|
_gameState.listener = events.on("entity.EntityDamageByEntityEvent",_onSnowballHit);
|
||||||
|
new java.lang.Thread(function(){
|
||||||
|
while (_gameState.duration--)
|
||||||
|
java.lang.Thread.sleep(1000); // sleep 1,000 millisecs (1 second)
|
||||||
|
_endGame(_gameState);
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
var SnowBallFight = _constructor;
|
||||||
|
|
||||||
|
exports.Game_SnowBallFight = SnowBallFight;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,18 +1,21 @@
|
||||||
var signs = require('./menu');
|
var signs = require('signs');
|
||||||
//
|
//
|
||||||
// Usage:
|
// Usage:
|
||||||
//
|
//
|
||||||
// In game, create a sign , target it and type ...
|
// In game, create a sign , target it and type ...
|
||||||
//
|
//
|
||||||
// /js var signExamples = require('./signs/examples');
|
// /js signs.menu_food();
|
||||||
// /js signExamples.testMenu()
|
|
||||||
//
|
//
|
||||||
exports.testMenu = signs
|
// ... or ...
|
||||||
.menu("Dinner",
|
//
|
||||||
["Lamb","Pork","Chicken","Duck","Beef"],
|
// /js signs.menu_time()
|
||||||
function(event){
|
//
|
||||||
event.player.sendMessage("You chose " + event.text);
|
exports.signs = {
|
||||||
});
|
menu_food: signs.menu("Dinner",
|
||||||
|
["Lamb","Pork","Chicken","Duck","Beef"],
|
||||||
|
function(event){
|
||||||
|
event.player.sendMessage("You chose " + event.text);
|
||||||
|
}),
|
||||||
//
|
//
|
||||||
// This is an example sign that displays a menu of times of day
|
// This is an example sign that displays a menu of times of day
|
||||||
// interacting with the sign will change the time of day accordingly.
|
// interacting with the sign will change the time of day accordingly.
|
||||||
|
@ -22,11 +25,10 @@ exports.testMenu = signs
|
||||||
// /js var signExamples = require('./signs/examples');
|
// /js var signExamples = require('./signs/examples');
|
||||||
// /js signExamples.timeOfDay()
|
// /js signExamples.timeOfDay()
|
||||||
//
|
//
|
||||||
exports.timeOfDay = signs
|
menu_time: signs.menu("Time",
|
||||||
.menu("Time",
|
["Dawn","Midday","Dusk","Midnight"],
|
||||||
["Dawn","Midday","Dusk","Midnight"],
|
function(event){
|
||||||
function(event){
|
event.player.location.world.setTime( event.number * 6000 );
|
||||||
event.player.location.world.setTime( event.number * 6000 );
|
})
|
||||||
});
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Reference in a new issue