Ever wanted to make your own plugin? but you only have javascript skills? well, maybe you should try PandawaJS! PandawaJS will read your javascript code so that it can run on your server! The fact that making a plugin using javascript is faster than making it with Java!
- ECMAScript v6 syntax support
- XML syntax support
- JSON syntax support
- Yaml config support
- Built-in modules
- Pre-made scripts
- Java Libraries support
Code (Java):
var last
=
{
}
;
// new hashmap
var messageFormat = '&d&lPM &7[&aYou &8-> &a{player}&7] &e' ;
var receiveFormat = '&d&lPM &7[&a{player} &8-> &aYou&7] &e' ;
/*
Private Message command.
*/
Commands [ 'pm' ]. also ( 'msg' ). also ( 'message' ). executor (function (sender,args ) {
if (args. length > 0 ) {
if (args. length > 1 ) {
var player = Players [args [ 0 ] ] ;
if (player ) {
var message = args [ 1 ] ;
for (var i = 2 ; i < args. length ; i ++ ) {
message += args [i ] ;
}
message = tryColor (sender,message ) ;
sender. sendMessage (color (messageFormat. replace ( '{player}', player. getName ( ) ) ) +message ) ;
player. sendMessage (color (receiveFormat. replace ( '{player}', sender. getName ( ) ) ) +message ) ;
last [sender. getName ( ) ] = player. getName ( ) ;
last [player. getName ( ) ] = sender. getName ( ) ;
} else {
sender. sendMessage (color ( '&cPlayer not found!' ) ) ;
}
return ;
}
sender. sendMessage (color ( '&cPlease specify the message to be sent to ' +args [ 0 ] ) ) ;
return ;
}
sender. sendMessage (color ( '&eSend message privately to a player. Usage: &b/msg <player> <message>' ) ) ;
} ). register ( ) ; // don't forget to register it!
/*
Reply command.
*/
Commands [ 'reply' ]. also ( 'r' ). executor (function (sender,args ) {
var lastReply = last [sender. getName ( ) ] ;
if (lastReply ) {
if (args. length > 0 ) {
var player = Players [lastReply ] ;
if (player ) {
var message = args [ 0 ] ;
for (var i = 1 ; i < args. length ; i ++ ) {
message += args [i ] ;
}
message = tryColor (sender,message ) ;
sender. sendMessage (color (messageFormat. replace ( '{player}', player. getName ( ) ) ) +message ) ;
player. sendMessage (color (receiveFormat. replace ( '{player}', sender. getName ( ) ) ) +message ) ;
last [sender. getName ( ) ] = player. getName ( ) ;
last [player. getName ( ) ] = sender. getName ( ) ;
} else {
sender. sendMessage (color ( '&c' +lastReply + ' is Offline' ) ) ;
}
} else {
sender. sendMessage (color ( '&eReply a message to the last person you chat with (Last: ' +lastReply + '). Usage: &b/r <message>' ) ) ;
}
return ;
}
sender. sendMessage (color ( '&cYou don\'t have anyone to reply!' ) ) ;
} ). register ( ) ; //don't forget to register it!
/**
Return a colored message if sender has permission "message.color"
*/
function tryColor (sender,message ) {
if (sender. hasPermission ( 'message.color' ) ) {
return color (message ) ;
} else return message ;
}
var messageFormat = '&d&lPM &7[&aYou &8-> &a{player}&7] &e' ;
var receiveFormat = '&d&lPM &7[&a{player} &8-> &aYou&7] &e' ;
/*
Private Message command.
*/
Commands [ 'pm' ]. also ( 'msg' ). also ( 'message' ). executor (function (sender,args ) {
if (args. length > 0 ) {
if (args. length > 1 ) {
var player = Players [args [ 0 ] ] ;
if (player ) {
var message = args [ 1 ] ;
for (var i = 2 ; i < args. length ; i ++ ) {
message += args [i ] ;
}
message = tryColor (sender,message ) ;
sender. sendMessage (color (messageFormat. replace ( '{player}', player. getName ( ) ) ) +message ) ;
player. sendMessage (color (receiveFormat. replace ( '{player}', sender. getName ( ) ) ) +message ) ;
last [sender. getName ( ) ] = player. getName ( ) ;
last [player. getName ( ) ] = sender. getName ( ) ;
} else {
sender. sendMessage (color ( '&cPlayer not found!' ) ) ;
}
return ;
}
sender. sendMessage (color ( '&cPlease specify the message to be sent to ' +args [ 0 ] ) ) ;
return ;
}
sender. sendMessage (color ( '&eSend message privately to a player. Usage: &b/msg <player> <message>' ) ) ;
} ). register ( ) ; // don't forget to register it!
/*
Reply command.
*/
Commands [ 'reply' ]. also ( 'r' ). executor (function (sender,args ) {
var lastReply = last [sender. getName ( ) ] ;
if (lastReply ) {
if (args. length > 0 ) {
var player = Players [lastReply ] ;
if (player ) {
var message = args [ 0 ] ;
for (var i = 1 ; i < args. length ; i ++ ) {
message += args [i ] ;
}
message = tryColor (sender,message ) ;
sender. sendMessage (color (messageFormat. replace ( '{player}', player. getName ( ) ) ) +message ) ;
player. sendMessage (color (receiveFormat. replace ( '{player}', sender. getName ( ) ) ) +message ) ;
last [sender. getName ( ) ] = player. getName ( ) ;
last [player. getName ( ) ] = sender. getName ( ) ;
} else {
sender. sendMessage (color ( '&c' +lastReply + ' is Offline' ) ) ;
}
} else {
sender. sendMessage (color ( '&eReply a message to the last person you chat with (Last: ' +lastReply + '). Usage: &b/r <message>' ) ) ;
}
return ;
}
sender. sendMessage (color ( '&cYou don\'t have anyone to reply!' ) ) ;
} ). register ( ) ; //don't forget to register it!
/**
Return a colored message if sender has permission "message.color"
*/
function tryColor (sender,message ) {
if (sender. hasPermission ( 'message.color' ) ) {
return color (message ) ;
} else return message ;
}
Code (Java):
let configFile
= Files
[
'userdata.yml'
]
;
let config ;
if (configFile. exists ( ) ) {
config = configFile. loadConfig ( ) ;
} else {
config = new Yaml ( ) ;
configFile. createNewFile ( ) ; //create the file
}
Hooks. onDisable (function ( ) {
configFile. write (config ) ;
} ) ;
function getBalance (name ) {
var balance = config. balance [name ] ;
return balance ? balance : 0 ; //ternary operator
}
function setBalance (name,value ) {
config. balance [name ] = value ;
}
function addBalance (name,value ) {
setBalance (name,getBalance (name ) +value ) ;
}
function removeBalance (name,value ) {
setBalance (name,getBalance (name ) -value ) ;
}
let prefix = color ( '&6Coins &8- &7' ) ;
function oncommand (sx,ar ) {
if (ar. length > 0 ) {
let a1 = ar [ 0 ] ;
if (a1. equalsIgnoreCase ( 'balance' ) || a1. equalsIgnoreCase ( 'bal' ) ) {
if (ar. length > 1 && sx. hasPermission ( 'coins.balance.other' ) ) {
var target = ar [ 1 ] ;
var balance = getBalance (target ) ;
sx. sendMessage (prefix +target + ' balance: ' +balance ) ;
return ;
}
var bal = getBalance (sx. getName ( ) ) ;
sx. sendMessage (prefix +sx. getName ( ) + ' balance: ' +bal ) ;
return ;
}
if (a1. equalsIgnoreCase ( 'pay' ) ) {
if (ar. length > 2 ) {
var target = ar [ 1 ] ;
if (target. equals (sx. getName ( ) ) ) {
sx. sendMessage (prefix + 'You cannot pay yourself!' ) ;
return ;
}
var amount ;
try {
amount = parseInt (ar [ 2 ] ) ;
} catch (thrown ) {
sx. sendMessage (prefix + 'Please input a number!' ) ;
return ;
}
var balance = getBalance (sx. getName ( ) ) ;
if (balance < amount ) {
sx. sendMessage (prefix + 'You dont have enough money!' ) ;
return ;
}
removeBalance (sx. getName ( ),amount ) ;
addBalance (target,amount ) ;
sx. sendMessage (prefix + 'You paid ' +target + ' ' +amount + ' coins' ) ;
var player = Players [target ] ;
if (player ) {
player. sendMessage (prefix +sx. getName ( ) + ' paid you ' +amount + ' coins!' ) ;
}
return ;
}
sx. sendMessage (prefix + 'Pay someone. Usage: /coin pay <target> <amount>' ) ;
return ;
}
if (sx. hasPermission ( 'server.admin' ) ) {
if (a1. equalsIgnoreCase ( 'set' ) ) {
if (ar. length > 2 ) {
var target = ar [ 1 ] ;
var amount ;
try {
amount = parseInt (ar [ 2 ] ) ;
} catch (thrown ) {
sx. sendMessage (prefix + 'Please input a number!' ) ;
return ;
}
setBalance (target,amount ) ;
sx. sendMessage (prefix + 'You set ' +target + ' coins to ' +amount + ' coins' ) ;
return ;
}
sx. sendMessage (prefix + 'Set player coin amount. Usage: /coin set <target> <amount>' ) ;
return ;
}
if (a1. equalsIgnoreCase ( 'add' ) ) {
if (ar. length > 2 ) {
var target = ar [ 1 ] ;
var amount ;
try {
amount = parseInt (ar [ 2 ] ) ;
} catch (thrown ) {
sx. sendMessage (prefix + 'Please input a number!' ) ;
return ;
}
addBalance (target,amount ) ;
sx. sendMessage (prefix + 'You set ' +target + ' coins to ' +amount + ' coins' ) ;
return ;
}
sx. sendMessage (prefix + 'Set player coin amount. Usage: /coin set <target> <amount>' ) ;
return ;
}
if (a1. equalsIgnoreCase ( 'remove' ) ) {
if (ar. length > 2 ) {
var target = ar [ 1 ] ;
var amount ;
try {
amount = parseInt (ar [ 2 ] ) ;
} catch (thrown ) {
sx. sendMessage (prefix + 'Please input a number!' ) ;
return ;
}
addBalance (target,amount ) ;
sx. sendMessage (prefix + 'You set ' +target + ' coins to ' +amount + ' coins' ) ;
return ;
}
sx. sendMessage (prefix + 'Set player coin amount. Usage: /coin set <target> <amount>' ) ;
return ;
}
}
}
if (sx. hasPermission ( 'server.admin' ) ) {
sx. sendMessage (prefix + 'Usage: /coin <balance|pay|set|add|remove>' ) ;
} else {
sx. sendMessage (prefix + 'Usage: /coin <balance|pay>' )
}
}
function tabcomp (sx,ar ) {
if (ar. length == 0 ) {
if (sx. hasPermission ( 'server.admin' ) ) {
return [ 'balance', 'pay', 'set', 'remove' ] ;
} else return [ 'balance', 'pay' ] ;
}
}
Commands [ 'coin' ]. alias ( 'coins' ). alias ( 'c' ). executor (oncommand ). tabcompleter (tabcomp ). register ( ) ;
let config ;
if (configFile. exists ( ) ) {
config = configFile. loadConfig ( ) ;
} else {
config = new Yaml ( ) ;
configFile. createNewFile ( ) ; //create the file
}
Hooks. onDisable (function ( ) {
configFile. write (config ) ;
} ) ;
function getBalance (name ) {
var balance = config. balance [name ] ;
return balance ? balance : 0 ; //ternary operator
}
function setBalance (name,value ) {
config. balance [name ] = value ;
}
function addBalance (name,value ) {
setBalance (name,getBalance (name ) +value ) ;
}
function removeBalance (name,value ) {
setBalance (name,getBalance (name ) -value ) ;
}
let prefix = color ( '&6Coins &8- &7' ) ;
function oncommand (sx,ar ) {
if (ar. length > 0 ) {
let a1 = ar [ 0 ] ;
if (a1. equalsIgnoreCase ( 'balance' ) || a1. equalsIgnoreCase ( 'bal' ) ) {
if (ar. length > 1 && sx. hasPermission ( 'coins.balance.other' ) ) {
var target = ar [ 1 ] ;
var balance = getBalance (target ) ;
sx. sendMessage (prefix +target + ' balance: ' +balance ) ;
return ;
}
var bal = getBalance (sx. getName ( ) ) ;
sx. sendMessage (prefix +sx. getName ( ) + ' balance: ' +bal ) ;
return ;
}
if (a1. equalsIgnoreCase ( 'pay' ) ) {
if (ar. length > 2 ) {
var target = ar [ 1 ] ;
if (target. equals (sx. getName ( ) ) ) {
sx. sendMessage (prefix + 'You cannot pay yourself!' ) ;
return ;
}
var amount ;
try {
amount = parseInt (ar [ 2 ] ) ;
} catch (thrown ) {
sx. sendMessage (prefix + 'Please input a number!' ) ;
return ;
}
var balance = getBalance (sx. getName ( ) ) ;
if (balance < amount ) {
sx. sendMessage (prefix + 'You dont have enough money!' ) ;
return ;
}
removeBalance (sx. getName ( ),amount ) ;
addBalance (target,amount ) ;
sx. sendMessage (prefix + 'You paid ' +target + ' ' +amount + ' coins' ) ;
var player = Players [target ] ;
if (player ) {
player. sendMessage (prefix +sx. getName ( ) + ' paid you ' +amount + ' coins!' ) ;
}
return ;
}
sx. sendMessage (prefix + 'Pay someone. Usage: /coin pay <target> <amount>' ) ;
return ;
}
if (sx. hasPermission ( 'server.admin' ) ) {
if (a1. equalsIgnoreCase ( 'set' ) ) {
if (ar. length > 2 ) {
var target = ar [ 1 ] ;
var amount ;
try {
amount = parseInt (ar [ 2 ] ) ;
} catch (thrown ) {
sx. sendMessage (prefix + 'Please input a number!' ) ;
return ;
}
setBalance (target,amount ) ;
sx. sendMessage (prefix + 'You set ' +target + ' coins to ' +amount + ' coins' ) ;
return ;
}
sx. sendMessage (prefix + 'Set player coin amount. Usage: /coin set <target> <amount>' ) ;
return ;
}
if (a1. equalsIgnoreCase ( 'add' ) ) {
if (ar. length > 2 ) {
var target = ar [ 1 ] ;
var amount ;
try {
amount = parseInt (ar [ 2 ] ) ;
} catch (thrown ) {
sx. sendMessage (prefix + 'Please input a number!' ) ;
return ;
}
addBalance (target,amount ) ;
sx. sendMessage (prefix + 'You set ' +target + ' coins to ' +amount + ' coins' ) ;
return ;
}
sx. sendMessage (prefix + 'Set player coin amount. Usage: /coin set <target> <amount>' ) ;
return ;
}
if (a1. equalsIgnoreCase ( 'remove' ) ) {
if (ar. length > 2 ) {
var target = ar [ 1 ] ;
var amount ;
try {
amount = parseInt (ar [ 2 ] ) ;
} catch (thrown ) {
sx. sendMessage (prefix + 'Please input a number!' ) ;
return ;
}
addBalance (target,amount ) ;
sx. sendMessage (prefix + 'You set ' +target + ' coins to ' +amount + ' coins' ) ;
return ;
}
sx. sendMessage (prefix + 'Set player coin amount. Usage: /coin set <target> <amount>' ) ;
return ;
}
}
}
if (sx. hasPermission ( 'server.admin' ) ) {
sx. sendMessage (prefix + 'Usage: /coin <balance|pay|set|add|remove>' ) ;
} else {
sx. sendMessage (prefix + 'Usage: /coin <balance|pay>' )
}
}
function tabcomp (sx,ar ) {
if (ar. length == 0 ) {
if (sx. hasPermission ( 'server.admin' ) ) {
return [ 'balance', 'pay', 'set', 'remove' ] ;
} else return [ 'balance', 'pay' ] ;
}
}
Commands [ 'coin' ]. alias ( 'coins' ). alias ( 'c' ). executor (oncommand ). tabcompleter (tabcomp ). register ( ) ;
Code (Java):
let gui
=
new GUI
(
'Actions',
27
)
;
gui [ 10 ] = Items. APPLE. display (color ( '&aHeal' ) ). executor (function (event ) {
event. getWhoClicked ( ). performCommand ( '/heal' ) ;
} ) ;
gui [ 12 ] = Items. POTION. display (color ( '&dNausea' ) ). lore (color ( '&7Gives you confusion effect' ),color ( '&7for 20 seconds.' ) ). executor (function (event ) {
Potions. CONFUSION. duration (seconds ( 20 ) ). amplifier ( 2 ). apply (event. getWhoClicked ( ) ) ;
} ) ;
gui [ 16 ] = Items. BARRIER. display (color ( '&cDisconnect' ) ). lore (color ( '&7get out from this server.' ) ). executor (function (event ) {
event. getWhoClicked ( ). kickPlayer ( 'Disconnected' ) ;
} ) ;
function cmd (sender,args ) {
if (isPlayer (sender ) ) {
sender. sendMessage (color ( '&eOpening GUI...' ) ) ;
gui. open (sender ) ;
} else sender. sendMessage (color ( '&cThis command is only for players!' ) ) ;
}
Commands [ 'guitest' ]. permission ( 'server.tester' ). executor (cmd ). register ( ) ;
gui [ 10 ] = Items. APPLE. display (color ( '&aHeal' ) ). executor (function (event ) {
event. getWhoClicked ( ). performCommand ( '/heal' ) ;
} ) ;
gui [ 12 ] = Items. POTION. display (color ( '&dNausea' ) ). lore (color ( '&7Gives you confusion effect' ),color ( '&7for 20 seconds.' ) ). executor (function (event ) {
Potions. CONFUSION. duration (seconds ( 20 ) ). amplifier ( 2 ). apply (event. getWhoClicked ( ) ) ;
} ) ;
gui [ 16 ] = Items. BARRIER. display (color ( '&cDisconnect' ) ). lore (color ( '&7get out from this server.' ) ). executor (function (event ) {
event. getWhoClicked ( ). kickPlayer ( 'Disconnected' ) ;
} ) ;
function cmd (sender,args ) {
if (isPlayer (sender ) ) {
sender. sendMessage (color ( '&eOpening GUI...' ) ) ;
gui. open (sender ) ;
} else sender. sendMessage (color ( '&cThis command is only for players!' ) ) ;
}
Commands [ 'guitest' ]. permission ( 'server.tester' ). executor (cmd ). register ( ) ;
This framework uses modified source of Rhino. Report bugs or suggest feature on my discord server.
Quick facts
- Edition: Minecraft Java
- File type: .jar
- How to install: Install the matching mod loader (Forge, Fabric or NeoForge) for your Minecraft version. → Download the .jar. → Put it in the .minecraft/mods folder and launch that loader profile.
- Where to get it: Opens on Spigot — not every file is mirrored on our own servers.
Install steps are the general flow for this file type — How to install Minecraft Java mods & modpacks walks through it step by step.
PandawaJS is a free Minecraft Java mod. Downloaded 749 times (via Spigot). Download it and open it directly in the game.