This repository has been archived on 2021-07-14. You can view files and clone it, but cannot push or open issues or pull requests.
scriptcraft/src/main/javascript/arrows/arrows.js

139 lines
4.1 KiB
JavaScript
Raw Normal View History

2013-01-18 00:28:12 +01:00
/*
The arrows mod adds fancy arrows to the game.
Usage:
/js arrows.sign() turns a targeted sign into a Arrows menu
/js arrows.normal() sets arrow type to normal.
/js arrows.explosive() - makes arrows explode.
/js arrows.teleport() - makes player teleport to where arrow has landed.
/js arrows.flourish() - makes a tree grow where the arrow lands.
/js arrows.lightning() - lightning strikes where the arrow lands.
2013-06-23 20:56:18 +02:00
/js arrows.firework() - A firework launches where the the arrow lands.
2013-01-18 00:28:12 +01:00
All of the above functions can take an optional player object or name as
a parameter. E.g.
/js arrows.explosive('player23') makes player23's arrows explosive.
*/
var arrows = arrows || plugin("arrows",{
/*
turn a sign into a menu of arrow choices
*/
sign: function(sign){},
/*
change player's arrows to normal
*/
normal: function(player){},
/*
change player's arrows to explode on impact
*/
explosive: function(player){},
/*
change player's arrows to teleporting
*/
teleport: function(player){},
/*
change player's arrows to plant trees where they land
*/
flourish: function(player){},
/*
change player's arrows to strike lightning where they land
*/
2013-05-11 17:03:49 +02:00
lightning: function(player){},
2013-06-23 20:56:18 +02:00
/*
launch a firework where the arrow lands
*/
2013-05-11 17:03:49 +02:00
explosiveYield: 2.5
2013-01-18 00:28:12 +01:00
},true);
2013-01-19 01:44:11 +01:00
/*
initialize data
*/
arrows.store.players = arrows.store.players || {};
2013-01-18 00:28:12 +01:00
/*
private implementation of normal, explosive, teleport, flourish and lightning functions
*/
(function(){
2013-01-18 00:28:12 +01:00
//
// setup functions for the arrow types
//
2013-06-23 20:56:18 +02:00
var _types = {normal: 0, explosive: 1, teleport: 2, flourish: 3, lightning: 4, firework: 5};
2013-01-18 00:28:12 +01:00
for (var type in _types)
{
arrows[type] = (function(n){
return function(player){
if (typeof player == "undefined")
2013-01-25 00:46:28 +01:00
player = self;
2013-01-18 00:28:12 +01:00
var playerName = null;
if (typeof player == "string")
playerName = player;
else
playerName = player.name;
arrows.store.players[playerName] = n;
};
})(_types[type]);
}
}());
2013-01-18 00:28:12 +01:00
/*
Arrows depends on 2 other modules: 'signs' and 'events' so the following code
can't execute until all modules have loaded (ready).
*/
ready(function()
{
/*
called when the player chooses an arrow option from a menu sign
*/
var _onMenuChoice = function(event){
arrows.store.players[event.player.name] = event.number;
};
arrows.sign = signs.menu("Arrow",
2013-06-23 20:56:18 +02:00
["Normal","Explosive","Teleport","Flourish","Lightning","Firework"],
2013-01-18 00:28:12 +01:00
_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;
if (projectile instanceof org.bukkit.entity.Arrow &&
shooter instanceof org.bukkit.entity.Player)
{
var arrowType = arrows.store.players[shooter.name];
switch (arrowType){
case 1:
projectile.remove();
2013-05-11 17:03:49 +02:00
world.createExplosion(projectile.location,arrows.explosiveYield);
2013-01-18 00:28:12 +01:00
break;
case 2:
projectile.remove();
var teleportCause =org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
2013-01-18 00:28:12 +01:00
shooter.teleport(projectile.location,
teleportCause.PLUGIN);
2013-01-18 00:28:12 +01:00
break;
case 3:
projectile.remove();
world.generateTree(projectile.location, org.bukkit.TreeType.BIG_TREE);
break;
case 4:
projectile.remove();
world.strikeLightning(projectile.location);
break;
2013-06-23 20:56:18 +02:00
case 5:
projectile.remove();
fireworks.firework(projectile.location);
break;
2013-01-18 00:28:12 +01:00
}
}
};
events.on("entity.ProjectileHitEvent",_onArrowHit);
});