cj89898 2020-07-25 11:33:09 -05:00
parent befe79197e
commit 2d3616fdf5

@ -31,7 +31,6 @@ The JavaScript Expansion for PlaceholderAPI allows for expansions that wouldn't
* [**TokenEnchant Token Value**](#tokenenchant-token-value)
* [**Health Bar**](#health-bar)
* [**Number of Players in Group of Worlds**](#number-of-players-in-group-of-worlds)
* [**List Players**](#list-players)
***
### Random Integer Between
@ -1112,241 +1111,4 @@ numInGroupOfWorlds();
```yaml
number_in_group_of_worlds:
file: number_in_group_of_worlds.js
```
### List Players
* **Author:** Tanguygab
* **Description:** Returns the player list matching the specified syntax
* **Usage:** `%javascript_listplayers_<type>,<subtype>,<yes/no>,<output>,<subtype_value>%` - The `yes/no` is to include/exclude the player.
**Types:**
* `all` - Matches all players
* `online` - Matches online players
* `offline` - Matches offline players
**Output Types:**
* `list` - Returns a list of players separated by `, `
* `amount` - Returns amount of players matched
* `<integer>` - Returns the player at the specified index
**SubTypes:**
* `normal` - Matches all players - Requires no `<subtype_value>`
* `perm` - Matches all players that match the permission defined by `<subtype_value>` - Supports multiple separated by `+` (Ex: `perm1+perm2`)
* `world` - Matches all player in the world defined by `<subtype_value>` - Supports multiple separated by `+` (Ex: `world1+world2`)
* `nearby` - Matches all players in a certain radius defined by `<subtype_value>`
**Examples:**
* `%javascript_listplayers_all,normal,yes,list%` - `Tanguygab, cj89898, funnycube, clip, Frcsty, GabyTM, ItsMeGlare`
* `%javascript_listplayers_online,perm,yes,amount,staff.admin%` - `2`
* `%javascript_listplayers_online,world,yes,2,buildingworld+spawnworld%` - `cj89898, funnycube`
* `%javascript_listplayers_online,nearby,yes,list,5%` - `Tanguygab, cj89898, clip`
* `%javascript_listplayers_online,nearby,no,list,5%` - `Tanguygab, clip`
*You can also use `[placeholder]` for papi placeholders in addition to the javascript `{placeholder}`*
*Note: `Offline` and `All` only support the `Normal` subtype.*
**Javascript Code**
<details>
<summary>listplayers.js</summary>
```javascript
var listOnline = BukkitServer.getOnlinePlayers();
var listOffline = BukkitServer.getOfflinePlayers();
var listType = listOffline;
function normalListPlayers() {
for (var i = 0; i < args.length; i++) {
if (args[i].indexOf("[") == 0 && args[i].indexOf("]") == args[i].length-1) {
args[i] = PlaceholderAPI.static.setPlaceholders(BukkitPlayer, args[i].replace(/\[|]/g, "%"));
if (!isNaN(args[i])) {
args[i] = parseInt(args[i],10).toPrecision(1);
}
}
}
if (args[0] == "online") {listType = listOnline}
var players = [];
for (var i = 0; i < listType.length; i++) {
var player = listType[i];
if (args[2] == "no" && BukkitPlayer.getName() == player.getName()) {}
else {
if (args[0] == "offline" && listOnline.indexOf(player) >= 0) {}
else {players.push(player.getName())}
}
}
players.sort();
//list
if (args[3] == "list" && players != "") {return players.join(", ")}
//amount
else if (args[3] == "amount") {return players.length}
//player
else if (players.length != 0 && args[3] < players.length) {return players[args[3]]}
//0 players
else {return "Offline"}
}
function permListPlayers() {
for (var i = 0; i < args.length; i++) {
if (args[i].indexOf("[") == 0 && args[i].indexOf("]") == args[i].length-1) {
args[i] = PlaceholderAPI.static.setPlaceholders(BukkitPlayer, args[i].replace(/\[|]/g, "%"));
if (!isNaN(args[i])) {
args[i] = parseInt(args[i],10).toPrecision(1);
}
}
}
var args4 = args[4].split('+');
var players = [];
for (var i = 0; i < listOnline.length; i++) {
var player = listOnline[i];
for (var i2 = 0; i2 < args4.length; i2++) {
if (players.indexOf(player.getName()) == -1 && player.hasPermission(args4[i2])) {
if (args[2] == "no" && BukkitPlayer.getName() == player.getName()) {}
else {players.push(player.getName())}
}
}
}
players.sort();
//list
if (args[3] == "list" && players != "") {return players.join(", ")}
//amount
else if (args[3] == "amount") {return players.length}
//player
else if (players.length != 0 && args[3] < players.length) {return players[args[3]]}
//0 players
else {return "Offline"}
}
function worldListPlayers() {
for (var i = 0; i < args.length; i++) {
if (args[i].indexOf("[") == 0 && args[i].indexOf("]") == args[i].length-1) {
args[i] = PlaceholderAPI.static.setPlaceholders(BukkitPlayer, args[i].replace(/\[|]/g, "%"));
if (!isNaN(args[i])) {
args[i] = parseInt(args[i],10).toPrecision(1);
}
}
}
var args4 = args[4].split('+') + ',';
var players = [];
for (var i = 0; i < listOnline.length; i++) {
var player = listOnline[i];
if (args4.indexOf(player.getWorld().getName()+",") >= 0) {
if (args[2] == "no" && BukkitPlayer.getName() == player.getName()) {}
else {players.push(player.getName())}
}
}
players.sort();
//list
if (args[3] == "list" && players != "") {return players.join(", ")}
//amount
else if (args[3] == "amount") {return players.length}
//player
else if (players.length != 0 && args[3] < players.length) {return players[args[3]]}
//0 players
else {return "Offline"}
}
function nearbyListPlayers() {
for (var i = 0; i < args.length; i++) {
if (args[i].indexOf("[") == 0 && args[i].indexOf("]") == args[i].length-1) {
args[i] = PlaceholderAPI.static.setPlaceholders(BukkitPlayer, args[i].replace(/\[|]/g, "%"));
if (!isNaN(args[i])) {
args[i] = parseInt(args[i],10).toPrecision(1);
}
}
}
var players = [];
for (var i = 0; i < listOnline.length; i++) {
var player = listOnline[i];
var zone = args[4]*args[4];
if (BukkitPlayer.getWorld() == player.getWorld() && BukkitPlayer.getLocation().distanceSquared(player.getLocation()) < zone) {
if (args[2] == "no" && BukkitPlayer.getName() == player.getName()) {}
else {players.push(player.getName())}
}
}
players.sort();
//list
if (args[3] == "list" && players != "") {return players.join(", ")}
//amount
else if (args[3] == "amount") {return players.length}
//player
else if (players.length != 0 && args[3] < players.length) {return players[args[3]]}
//0 players
else {return "Offline"}
}
function mainListPlayers() {
for (var i = 0; i < args.length; i++) {
if (args[i].indexOf("[") == 0 && args[i].indexOf("]") == args[i].length-1) {
args[i] = PlaceholderAPI.static.setPlaceholders(BukkitPlayer, args[i].replace(/\[|]/g, "%"));
if (!isNaN(args[i])) {
args[i] = parseInt(args[i],10).toPrecision(1);
}
}
}
//type
var args0;
if (args.length >= 1) {args0 = args[0]}
//subtype
var args1;
if (args.length >= 2) {args1 = args[1]}
//yes/no
var args2;
if (args.length >= 3) {args2 = args[2]}
//output
var args3;
if (args.length >= 4) {args3 = args[3]}
//subtype value
var args4;
if (args.length >= 5) {args4 = args[4]}
//check for types
if (args0 != "online" && args0 != "offline" && args0 != "all") {return "&3&lValid List Types: &9online&f, &9offline&f, &9all&f."}
//check for subtypes
else if (args1 != "normal" && args1 != "perm" && args1 != "world" && args1 != "nearby") {return "&3&lValid List SubTypes: &9normal&f, &9perm&f, &9world&f, &9nearby&f."}
//help syntax
else if (args.length == 2) {return "&3&lValid Syntax: &9%"+"javascript_listplayers_&b"+args0+"&9,&b"+args1+"&9,&b<yes/no>&9,&b<output>&9,&b<subtype value>&9%"}
//check for yes/no
else if (args2 != "yes" && args2 != "no") {return "&4&lError&c: You have to use either &9yes &cor &9no &cin the third argument."}
//check for output
else if (args3 != "list" && args3 != "amount" && isNaN(args3)) {return "&3&lValid Output Types: &9list&f, &9amount&f, &9a number&f."}
//check for output lower than 0
else if (args3 == "-0" || args3 < 0) {return "&4&lError&c: &cYou can't use negative numbers ! What's even the point ? x)"}
//check for args4
else if ((args1 == "world" || args1 == "perm" || args1 == "nearby") && args4 == null) {return "&4&lError&c: &cYou have to specify a &9permission&c/&9world&c/&9radius&c."}
//check for offline/all + perm/world/nearby
else if ((args0 == "offline" || args0 == "all") && (args1 == "perm" || args1 == "world" || args1 == "nearby")) {return "Unsupported =/"}
if (args1 == "normal") {return normalListPlayers()}
else if (args1 == "perm") {return permListPlayers()}
else if (args1 == "world") {return worldListPlayers()}
else if (args1 == "nearby") {return nearbyListPlayers()}
else {return "Offline"}
}
mainListPlayers()
```
</details>
**Add to** `javascript_placeholders.yml`
```yaml
listplayers:
file: listplayers.js
```