📜 Script API
Полный справочник по JavaScript API для ScriptsLab. Здесь описаны все доступные объекты и методы для создания скриптов.
Глобальные объекты
При запуске скрипта вам доступны следующие глобальные объекты:
| Объект | Описание |
|---|
Console | Логирование в консоль сервера |
Commands | Регистрация команд |
Events | Обработка событий |
Scheduler | Планирование задач |
Players | Управление игроками |
Server | Управление сервером |
World | Управление мирами |
Items | Создание предметов |
Storage | Сохранение данных |
API | Расширенный API |
Console - Логирование
Вывод сообщений в консоль сервера.
Методы
Console.log('Сообщение');
Console.warn('Предупреждение');
Console.error('Ошибка');
Console.debug('Отладка');
Пример
Console.log('Скрипт загружен');
Console.warn('Внимание: что-то не так');
Console.error('Произошла ошибка: ' + errorMessage);
Console.debug('Переменная x = ' + x);
Commands - Команды
Регистрация и управление командами сервера.
Регистрация команды
Commands.register(name, handler, permission);
| Параметр | Тип | Описание |
|---|
name | string | Имя команды |
handler | function | Функция-обработчик |
permission | string | Право доступа (опционально) |
Обработчик команды
function handler(sender, args) {
}
Примеры
Простая команда
Commands.register('hello', function(sender, args) {
sender.sendMessage('§aПривет, ' + sender.getName() + '!');
});
Команда с правами
Commands.register('heal', function(sender, args) {
if (!sender.isPlayer()) {
sender.sendMessage('§cТолько для игроков!');
return;
}
var player = sender;
player.setHealth(player.getMaxHealth());
player.sendMessage('§aВы исцелены!');
}, 'scriptslab.heal');
Команда с аргументами
Commands.register('warp', function(sender, args) {
if (args.length === 0) {
sender.sendMessage('§cИспользование: /warp <название>');
return;
}
var warpName = args[0];
sender.sendMessage('§aТелепорт на §e' + warpName);
});
Команда с проверкой игрока
Commands.register('fly', function(sender, args) {
if (!sender.isPlayer()) {
sender.sendMessage('§cТолько для игроков!');
return;
}
var player = sender;
var canFly = player.getAllowFlight();
player.setAllowFlight(!canFly);
var msg = !canFly ? '§aПолёт включен!' : '§cПолёт выключен!';
player.sendMessage(msg);
}, 'scriptslab.fly');
Events - События
Обработка событий Bukkit.
Подписка на событие
Events.on(eventName, handler);
| Параметр | Тип | Описание |
|---|
eventName | string | Имя события (например, PlayerJoinEvent) |
handler | function | Функция-обработчик |
Обработчик события
function handler(event) {
}
Доступные события
События игрока
| Событие | Описание |
|---|
PlayerJoinEvent | Вход на сервер |
PlayerQuitEvent | Выход с сервера |
PlayerChatEvent | Чат (синхронный) |
AsyncPlayerChatEvent | Чат (асинхронный) |
PlayerMoveEvent | Движение |
PlayerInteractEvent | Взаимодействие |
PlayerItemHeldEvent | Смена предмета в руке |
PlayerDeathEvent | Смерть |
PlayerRespawnEvent | Возрождение |
События сущностей
| Событие | Описание |
|---|
EntityDamageEvent | Получение урона |
EntityDamageByEntityEvent | Урон от сущности |
EntityDeathEvent | Смерть сущности |
EntityShootBowEvent | Выстрел из лука |
События блоков
| Событие | Описание |
|---|
BlockPlaceEvent | Установка блока |
BlockBreakEvent | Разрушение блока |
BlockInteractEvent | Взаимодействие с блоком |
Примеры
Вход игрока
Events.on('PlayerJoinEvent', function(event) {
var player = event.getPlayer();
player.sendMessage('§aДобро пожаловать!');
Console.log(player.getName() + ' зашёл на сервер');
});
Выход игрока
Events.on('PlayerQuitEvent', function(event) {
var player = event.getPlayer();
Console.log(player.getName() + ' вышел с сервера');
});
Чат
Events.on('AsyncPlayerChatEvent', function(event) {
var player = event.getPlayer();
var message = event.getMessage();
if (message.toLowerCase().indexOf('badword') !== -1) {
event.setCancelled(true);
player.sendMessage('§cТакое говорить нельзя!');
return;
}
});
Смерть игрока
Events.on('PlayerDeathEvent', function(event) {
var entity = event.getEntity();
var killer = entity.getKiller();
if (killer !== null) {
Console.log(entity.getName() + ' был убит ' + killer.getName());
}
});
Урон от игрока
Events.on('EntityDamageByEntityEvent', function(event) {
var damager = event.getDamager();
var victim = event.getEntity();
var Player = Java.type('org.bukkit.entity.Player');
if (damager instanceof Player) {
Console.log(damager.getName() + ' атаковал ' + victim.getName());
}
});
Scheduler - Планировщик
Планирование отложенных и повторяющихся задач.
Важно: Все методы Bukkit API автоматически выполняются в главном потоке!
Методы
runLater - Выполнить один раз
Scheduler.runLater(handler, delay);
| Параметр | Тип | Описание |
|---|
handler | function | Функция для выполнения |
delay | integer | Задержка в тиках (20 тиков = 1 секунда) |
Scheduler.runLater(function() {
player.sendMessage('§aСообщение через 5 секунд!');
}, 100);
runTimer - Повторяющаяся задача
Scheduler.runTimer(handler, delay, period);
| Параметр | Тип | Описание |
|---|
handler | function | Функция для выполнения |
delay | integer | Начальная задержка |
period | integer | Интервал повторения |
Scheduler.runTimer(function() {
Server.broadcast('§eНе забудьте проголосовать!');
}, 0, 1200);
Примеры
Отложенное сообщение
Scheduler.runLater(function() {
Server.broadcast('§eСервер перезагрузится через 10 минут!');
}, 12000);
Повторяющееся объявление
var messages = [
'§eНе забудьте проголосовать!',
'§aПрисоединяйтесь к Discord!',
'§6Голосуйте за сервер!'
];
var index = 0;
Scheduler.runTimer(function() {
Server.broadcast(messages[index]);
index = (index + 1) % messages.length;
}, 0, 6000);
Таймер с отменой
var taskId = Scheduler.runTimer(function() {
}, 0, 20);
Players - Игроки
Управление игроками.
Методы
get - Получить игрока
var player = Players.get('NickName');
| Параметр | Тип | Описание |
|---|
name | string | Имя игрока |
var player = Players.get('Steve');
if (player !== null) {
player.sendMessage('§aПривет!');
}
getAll - Все онлайн игроки
var players = Players.getAll();
var players = Players.getAll();
for (var i = 0; i < players.length; i++) {
players[i].sendMessage('§eОбъявление для всех!');
}
teleport - Телепортация
Players.teleport(player, world, x, y, z);
var player = Players.get('Steve');
var world = org.bukkit.Bukkit.getWorld('world');
Players.teleport(player, world, 0, 100, 0);
giveItem - Дать предмет
Players.giveItem(player, itemId, amount);
var player = Players.get('Steve');
Players.giveItem(player, 'custom_sword', 1);
Server - Сервер
Управление сервером.
Методы
broadcast - Сообщение всем
Server.broadcast(message);
Server.broadcast('§aПривет всем игрокам!');
executeCommand - Выполнить команду
Server.executeCommand(command);
Server.executeCommand('say Сообщение от сервера!');
Server.executeCommand('give Steve DIAMOND 1');
getOnlinePlayers - Онлайн игроки
var players = Server.getOnlinePlayers();
var count = Server.getOnlinePlayers().size();
Console.log('Онлайн: ' + count);
World - Мир
Управление мирами.
Методы
get - Получить мир
var world = World.get('world_name');
var world = World.get('world');
setTime - Установить время
World.setTime(world, time);
var world = World.get('world');
World.setTime(world, 1000);
setWeather - Установить погоду
World.setWeather(world, weather);
var world = World.get('world');
World.setWeather(world, 'CLEAR');
World.setWeather(world, 'RAIN');
World.setWeather(world, 'THUNDER');
spawnEntity - Создать сущность
World.spawnEntity(world, x, y, z, entityType);
var world = World.get('world');
World.spawnEntity(world, 0, 100, 0, 'ZOMBIE');
World.spawnEntity(world, 0, 100, 0, 'CREEPER');
Items - Предметы
Создание кастомных предметов.
Методы
create - Создать предмет
var item = Items.create(id, material, displayName);
| Параметр | Тип | Описание |
|---|
id | string | Уникальный ID |
material | string | Материал (например, DIAMOND_SWORD) |
displayName | string | Отображаемое имя |
var sword = Items.create('fire_sword', 'DIAMOND_SWORD', '§cОгненный меч');
sword.setLore(['§7Поджигает врагов']);
setLore - Установить описание
item.setLore(loreArray);
var sword = Items.create('fire_sword', 'DIAMOND_SWORD', '§cОгненный меч');
sword.setLore([
'§7Поджигает врагов',
'§cЛегендарный предмет'
]);
addAbility - Добавить способность
item.addAbility(triggerType, handler);
| triggerType | Описание |
|---|
HIT | При ударе |
RIGHT_CLICK | Правый клик |
LEFT_CLICK | Левый клик |
var sword = Items.create('fire_sword', 'DIAMOND_SWORD', '§cОгненный меч');
sword.setLore(['§7Поджигает врагов']);
sword.addAbility('HIT', function(player, target, item) {
target.setFireTicks(100);
player.sendMessage('§cВраг горит!');
});
Items.register(sword);
register - Зарегистрировать предмет
Items.register(item);
Items.register(sword);
Storage - Хранилище
Сохранение и загрузка данных.
Методы
save - Сохранить данные
Storage.save(key, value);
Storage.save('player.steve.coins', 100);
Storage.save('player.steve.level', 5);
load - Загрузить данные
Storage.load(key).then(function(value) {
});
Storage.load('player.steve.coins').then(function(coins) {
if (coins === null) {
coins = 0;
}
Console.log('Монет: ' + coins);
});
delete - Удалить данные
Storage.delete(key);
Storage.delete('player.steve.temp');
exists - Проверить существование
Storage.exists(key).then(function(exists) {
if (exists) {
Console.log('Данные существуют');
}
});
API - Расширенный API
Дополнительные методы для удобной работы.
Методы
registerEvent - Регистрация события
API.registerEvent(eventName, handler);
API.registerEvent('PlayerJoinEvent', function(event) {
var player = event.getPlayer();
player.sendMessage('§aДобро пожаловать!');
});
broadcast - Сообщение всем
API.broadcast(message);
API.broadcast('§eОбъявление для всех!');
getOnlinePlayers - Получить игроков
var players = API.getOnlinePlayers();
var count = API.getOnlinePlayers().size();
strikeLightningSync - Молния (безопасно)
API.strikeLightningSync(location);
API.strikeLightningSync(player.getLocation());
addPotionEffectSync - Эффект зелья (безопасно)
API.addPotionEffectSync(player, effectType, duration, amplifier, ambient, particles);
var PotionEffectType = Java.type('org.bukkit.potion.PotionEffectType');
API.addPotionEffectSync(player, PotionEffectType.SPEED, 999999, 2, false, false);
removePotionEffectSync - Убрать эффект (безопасно)
API.removePotionEffectSync(player, effectType);
var PotionEffectType = Java.type('org.bukkit.potion.PotionEffectType');
API.removePotionEffectSync(player, PotionEffectType.SPEED);
addAttribute - Атрибут предмета
API.addAttribute(itemMeta, attributeName, modifierName, value, operation, slot);
| Параметр | Описани�� |
|---|
itemMeta | ItemMeta предмета |
attributeName | GENERIC_ATTACK_DAMAGE, GENERIC_ATTACK_SPEED и т.д. |
modifierName | Уникальное имя модификатора |
value | Значение |
operation | ADD_NUMBER, MULTIPLY_SCALAR_1 |
slot | HAND, FEET, LEGS, etc. |
var Attribute = Java.type('org.bukkit.attribute.Attribute');
var AttributeModifier = Java.type('org.bukkit.attribute.AttributeModifier');
var UUID = Java.type('java.util.UUID');
API.addAttribute(meta, 'GENERIC_ATTACK_DAMAGE', 'damage_boost', 10.0, 'ADD_NUMBER', 'HAND');
log - Логирование
API.log(message);
API.log('Скрипт загружен');
Работа с Java
ScriptsLab позволяет использовать Java классы напрямую.
Импорт классов
var Material = Java.type('org.bukkit.Material');
var ItemStack = Java.type('org.bukkit.inventory.ItemStack');
var Enchantment = Java.type('org.bukkit.enchantments.Enchantment');
var ItemFlag = Java.type('org.bukkit.inventory.ItemFlag');
var Attribute = Java.type('org.bukkit.attribute.Attribute');
var AttributeModifier = Java.type('org.bukkit.attribute.AttributeModifier');
var EquipmentSlot = Java.type('org.bukkit.inventory.EquipmentSlot');
var UUID = Java.type('java.util.UUID');
var ArrayList = Java.type('java.util.ArrayList');
var PotionEffect = Java.type('org.bukkit.potion.PotionEffect');
var PotionEffectType = Java.type('org.bukkit.potion.PotionEffectType');
Создание объектов
var item = new ItemStack(Material.DIAMOND_SWORD);
item.setAmount(64);
var list = new ArrayList();
list.add('элемент');
Использование методов
item.setAmount(64);
list.add('элемент');
var size = list.size();
instanceof - Проверка типа
var Player = Java.type('org.bukkit.entity.Player');
if (entity instanceof Player) {
}
Работа с отправителем команды
Типы отправителя
| Метод | Описание |
|---|
sender.isPlayer() | Проверить, является ли игроком |
sender.isOp() | Проверить, является ли OP |
Примеры
Commands.register('test', function(sender, args) {
if (!sender.isPlayer()) {
sender.sendMessage('§cТолько для игроков!');
return;
}
var player = sender;
player.sendMessage('§aПривет, игрок!');
});
Получение игрока из отправителя
var player = sender;
Обработка ошибок
try-catch
try {
var result = dangerousOperation();
} catch (error) {
Console.error('Ошибка: ' + error);
}
Проверка на null
var player = Players.get('Steve');
if (player !== null) {
} else {
Console.warn('Игрок не найден');
}
Типы данных
JavaScript → Java
| JavaScript | Java |
|---|
number | int, double, float |
string | String |
boolean | boolean |
array | ArrayList, List |
function | Consumer, Function |
object | Object |
Java → JavaScript
| Java | JavaScript |
|---|
int | number |
double | number |
boolean | boolean |
String | string |
List | array |
Map | object |
Object | object |
Ограничения
- Таймаут: 5 секунд по умолчанию (настраивается)
- Память: 128MB на скрипт (настраивается)
- Песочница: Ограниченный доступ к Java API (при sandbox: true)
- Потоки: GraalVM JS однопоточный
Следующие шаги
📜 Script API (English)
Complete reference for ScriptsLab JavaScript API. All available objects and methods for creating scripts are described here.
Global Objects
When a script starts, the following global objects are available:
| Object | Description |
|---|
Console | Log to server console |
Commands | Register commands |
Events | Handle events |
Scheduler | Task scheduling |
Players | Player management |
Server | Server management |
World | World management |
Items | Create items |
Storage | Save data |
API | Extended API |
Console - Logging
Output messages to server console.
Methods
Console.log('Message');
Console.warn('Warning');
Console.error('Error');
Console.debug('Debug');
Example
Console.log('Script loaded');
Console.warn('Attention: something is wrong');
Console.error('An error occurred: ' + errorMessage);
Console.debug('Variable x = ' + x);
Commands - Commands
Register and manage server commands.
Register Command
Commands.register(name, handler, permission);
| Parameter | Type | Description |
|---|
name | string | Command name |
handler | function | Handler function |
permission | string | Access permission (optional) |
Command Handler
function handler(sender, args) {
}
Examples
Simple Command
Commands.register('hello', function(sender, args) {
sender.sendMessage('§aHello, ' + sender.getName() + '!');
});
Command with Permissions
Commands.register('heal', function(sender, args) {
if (!sender.isPlayer()) {
sender.sendMessage('§cOnly for players!');
return;
}
var player = sender;
player.setHealth(player.getMaxHealth());
player.sendMessage('§aYou have been healed!');
}, 'scriptslab.heal');
Command with Arguments
Commands.register('warp', function(sender, args) {
if (args.length === 0) {
sender.sendMessage('§cUsage: /warp <name>');
return;
}
var warpName = args[0];
sender.sendMessage('§aTeleporting to §e' + warpName);
});
Command with Player Check
Commands.register('fly', function(sender, args) {
if (!sender.isPlayer()) {
sender.sendMessage('§cOnly for players!');
return;
}
var player = sender;
var canFly = player.getAllowFlight();
player.setAllowFlight(!canFly);
var msg = !canFly ? '§aFlight enabled!' : '§cFlight disabled!';
player.sendMessage(msg);
}, 'scriptslab.fly');
Events - Events
Handle Bukkit events.
Subscribe to Event
Events.on(eventName, handler);
| Parameter | Type | Description |
|---|
eventName | string | Event name (e.g., PlayerJoinEvent) |
handler | function | Handler function |
Event Handler
function handler(event) {
}
Available Events
Player Events
| Event | Description |
|---|
PlayerJoinEvent | Player join |
PlayerQuitEvent | Player quit |
PlayerChatEvent | Chat (sync) |
AsyncPlayerChatEvent | Chat (async) |
PlayerMoveEvent | Movement |
PlayerInteractEvent | Interaction |
PlayerItemHeldEvent | Item held change |
PlayerDeathEvent | Death |
PlayerRespawnEvent | Respawn |
Entity Events
| Event | Description |
|---|
EntityDamageEvent | Taking damage |
EntityDamageByEntityEvent | Damage by entity |
EntityDeathEvent | Entity death |
EntityShootBowEvent | Bow shoot |
Block Events
| Event | Description |
|---|
BlockPlaceEvent | Block place |
BlockBreakEvent | Block break |
BlockInteractEvent | Block interaction |
Examples
Player Join
Events.on('PlayerJoinEvent', function(event) {
var player = event.getPlayer();
player.sendMessage('§aWelcome!');
Console.log(player.getName() + ' joined the server');
});
Player Quit
Events.on('PlayerQuitEvent', function(event) {
var player = event.getPlayer();
Console.log(player.getName() + ' left the server');
});
Chat
Events.on('AsyncPlayerChatEvent', function(event) {
var player = event.getPlayer();
var message = event.getMessage();
if (message.toLowerCase().indexOf('badword') !== -1) {
event.setCancelled(true);
player.sendMessage('§cYou can't say that!');
return;
}
});
Player Death
Events.on('PlayerDeathEvent', function(event) {
var entity = event.getEntity();
var killer = entity.getKiller();
if (killer !== null) {
Console.log(entity.getName() + ' was killed by ' + killer.getName());
}
});
Player Damage
Events.on('EntityDamageByEntityEvent', function(event) {
var damager = event.getDamager();
var victim = event.getEntity();
var Player = Java.type('org.bukkit.entity.Player');
if (damager instanceof Player) {
Console.log(damager.getName() + ' attacked ' + victim.getName());
}
});
Scheduler - Task Scheduler
Schedule delayed and repeating tasks.
Important: All Bukkit API methods are automatically executed on the main thread!
Methods
runLater - Execute Once
Scheduler.runLater(handler, delay);
| Parameter | Type | Description |
|---|
handler | function | Function to execute |
delay | integer | Delay in ticks (20 ticks = 1 second) |
Scheduler.runLater(function() {
player.sendMessage('§aMessage after 5 seconds!');
}, 100);
runTimer - Repeating Task
Scheduler.runTimer(handler, delay, period);
| Parameter | Type | Description |
|---|
handler | function | Function to execute |
delay | integer | Initial delay |
period | integer | Repeat interval |
Scheduler.runTimer(function() {
Server.broadcast('§eDon\'t forget to vote!');
}, 0, 1200);
Examples
Delayed Message
Scheduler.runLater(function() {
Server.broadcast('§eServer will restart in 10 minutes!');
}, 12000);
Repeating Announcement
var messages = [
'§eDon\'t forget to vote!',
'§aJoin our Discord!',
'§6Vote for the server!'
];
var index = 0;
Scheduler.runTimer(function() {
Server.broadcast(messages[index]);
index = (index + 1) % messages.length;
}, 0, 6000);
Timer with Cancel
var taskId = Scheduler.runTimer(function() {
}, 0, 20);
Players - Players
Player management.
Methods
get - Get Player
var player = Players.get('NickName');
| Parameter | Type | Description |
|---|
name | string | Player name |
var player = Players.get('Steve');
if (player !== null) {
player.sendMessage('§aHello!');
}
getAll - All Online Players
var players = Players.getAll();
var players = Players.getAll();
for (var i = 0; i < players.length; i++) {
players[i].sendMessage('§eAnnouncement for everyone!');
}
teleport - Teleport
Players.teleport(player, world, x, y, z);
var player = Players.get('Steve');
var world = org.bukkit.Bukkit.getWorld('world');
Players.teleport(player, world, 0, 100, 0);
giveItem - Give Item
Players.giveItem(player, itemId, amount);
var player = Players.get('Steve');
Players.giveItem(player, 'custom_sword', 1);
Server - Server
Server management.
Methods
broadcast - Message Everyone
Server.broadcast(message);
Server.broadcast('§aHello to all players!');
executeCommand - Execute Command
Server.executeCommand(command);
Server.executeCommand('say Message from server!');
Server.executeCommand('give Steve DIAMOND 1');
getOnlinePlayers - Online Players
var players = Server.getOnlinePlayers();
var count = Server.getOnlinePlayers().size();
Console.log('Online: ' + count);
World - World
World management.
Methods
get - Get World
var world = World.get('world_name');
var world = World.get('world');
setTime - Set Time
World.setTime(world, time);
var world = World.get('world');
World.setTime(world, 1000);
setWeather - Set Weather
World.setWeather(world, weather);
var world = World.get('world');
World.setWeather(world, 'CLEAR');
World.setWeather(world, 'RAIN');
World.setWeather(world, 'THUNDER');
spawnEntity - Spawn Entity
World.spawnEntity(world, x, y, z, entityType);
var world = World.get('world');
World.spawnEntity(world, 0, 100, 0, 'ZOMBIE');
World.spawnEntity(world, 0, 100, 0, 'CREEPER');
Items - Items
Create custom items.
Methods
create - Create Item
var item = Items.create(id, material, displayName);
| Parameter | Type | Description |
|---|
id | string | Unique ID |
material | string | Material (e.g., DIAMOND_SWORD) |
displayName | string | Display name |
var sword = Items.create('fire_sword', 'DIAMOND_SWORD', '§cFire Sword');
sword.setLore(['§7Ignites enemies']);
setLore - Set Description
item.setLore(loreArray);
var sword = Items.create('fire_sword', 'DIAMOND_SWORD', '§cFire Sword');
sword.setLore([
'§7Ignites enemies',
'§cLegendary item'
]);
addAbility - Add Ability
item.addAbility(triggerType, handler);
| triggerType | Description |
|---|
HIT | On hit |
RIGHT_CLICK | Right click |
LEFT_CLICK | Left click |
var sword = Items.create('fire_sword', 'DIAMOND_SWORD', '§cFire Sword');
sword.setLore(['§7Ignites enemies']);
sword.addAbility('HIT', function(player, target, item) {
target.setFireTicks(100);
player.sendMessage('§cEnemy is burning!');
});
Items.register(sword);
register - Register Item
Items.register(item);
Items.register(sword);
Storage - Storage
Save and load data.
Methods
save - Save Data
Storage.save(key, value);
Storage.save('player.steve.coins', 100);
Storage.save('player.steve.level', 5);
load - Load Data
Storage.load(key).then(function(value) {
});
Storage.load('player.steve.coins').then(function(coins) {
if (coins === null) {
coins = 0;
}
Console.log('Coins: ' + coins);
});
delete - Delete Data
Storage.delete(key);
Storage.delete('player.steve.temp');
exists - Check Existence
Storage.exists(key).then(function(exists) {
if (exists) {
Console.log('Data exists');
}
});
API - Extended API
Additional methods for convenient work.
Methods
registerEvent - Register Event
API.registerEvent(eventName, handler);
API.registerEvent('PlayerJoinEvent', function(event) {
var player = event.getPlayer();
player.sendMessage('§aWelcome!');
});
broadcast - Message Everyone
API.broadcast(message);
API.broadcast('§eAnnouncement for everyone!');
getOnlinePlayers - Get Players
var players = API.getOnlinePlayers();
var count = API.getOnlinePlayers().size();
strikeLightningSync - Lightning (Safe)
API.strikeLightningSync(location);
API.strikeLightningSync(player.getLocation());
addPotionEffectSync - Potion Effect (Safe)
API.addPotionEffectSync(player, effectType, duration, amplifier, ambient, particles);
var PotionEffectType = Java.type('org.bukkit.potion.PotionEffectType');
API.addPotionEffectSync(player, PotionEffectType.SPEED, 999999, 2, false, false);
removePotionEffectSync - Remove Effect (Safe)
API.removePotionEffectSync(player, effectType);
var PotionEffectType = Java.type('org.bukkit.potion.PotionEffectType');
API.removePotionEffectSync(player, PotionEffectType.SPEED);
addAttribute - Item Attribute
API.addAttribute(itemMeta, attributeName, modifierName, value, operation, slot);
| Parameter | Description |
|---|
itemMeta | ItemMeta of item |
attributeName | GENERIC_ATTACK_DAMAGE, GENERIC_ATTACK_SPEED, etc. |
modifierName | Unique modifier name |
value | Value |
operation | ADD_NUMBER, MULTIPLY_SCALAR_1 |
slot | HAND, FEET, LEGS, etc. |
var Attribute = Java.type('org.bukkit.attribute.Attribute');
var AttributeModifier = Java.type('org.bukkit.attribute.AttributeModifier');
var UUID = Java.type('java.util.UUID');
API.addAttribute(meta, 'GENERIC_ATTACK_DAMAGE', 'damage_boost', 10.0, 'ADD_NUMBER', 'HAND');
log - Logging
API.log(message);
API.log('Script loaded');
Working with Java
ScriptsLab allows using Java classes directly.
Import Classes
var Material = Java.type('org.bukkit.Material');
var ItemStack = Java.type('org.bukkit.inventory.ItemStack');
var Enchantment = Java.type('org.bukkit.enchantments.Enchantment');
var ItemFlag = Java.type('org.bukkit.inventory.ItemFlag');
var Attribute = Java.type('org.bukkit.attribute.Attribute');
var AttributeModifier = Java.type('org.bukkit.attribute.AttributeModifier');
var EquipmentSlot = Java.type('org.bukkit.inventory.EquipmentSlot');
var UUID = Java.type('java.util.UUID');
var ArrayList = Java.type('java.util.ArrayList');
var PotionEffect = Java.type('org.bukkit.potion.PotionEffect');
var PotionEffectType = Java.type('org.bukkit.potion.PotionEffectType');
Creating Objects
var item = new ItemStack(Material.DIAMOND_SWORD);
item.setAmount(64);
var list = new ArrayList();
list.add('element');
Using Methods
item.setAmount(64);
list.add('element');
var size = list.size();
instanceof - Type Check
var Player = Java.type('org.bukkit.entity.Player');
if (entity instanceof Player) {
}
Working with Command Sender
Sender Types
| Method | Description |
|---|
sender.isPlayer() | Check if sender is player |
sender.isOp() | Check if sender is OP |
Examples
Commands.register('test', function(sender, args) {
if (!sender.isPlayer()) {
sender.sendMessage('§cOnly for players!');
return;
}
var player = sender;
player.sendMessage('§aHello, player!');
});
Getting Player from Sender
var player = sender;
Error Handling
try-catch
try {
var result = dangerousOperation();
} catch (error) {
Console.error('Error: ' + error);
}
Null Check
var player = Players.get('Steve');
if (player !== null) {
} else {
Console.warn('Player not found');
}
Data Types
JavaScript → Java
| JavaScript | Java |
|---|
number | int, double, float |
string | String |
boolean | boolean |
array | ArrayList, List |
function | Consumer, Function |
object | Object |
Java → JavaScript
| Java | JavaScript |
|---|
int | number |
double | number |
boolean | boolean |
String | string |
List | array |
Map | object |
Object | object |
Limitations
- Timeout: 5 seconds by default (configurable)
- Memory: 128MB per script (configurable)
- Sandbox: Limited Java API access (when sandbox: true)
- Threads: GraalVM JS is single-threaded
Next Steps