Перейти к основному содержимому

Bukkit API

Полный доступ к Bukkit/Paper API через Java.type.

Импорт классов

// Основные классы
const Bukkit = Java.type('org.bukkit.Bukkit');
const Server = Java.type('org.bukkit.Server');

// Сущности
const Player = Java.type('org.bukkit.entity.Player');
const Entity = Java.type('org.bukkit.entity.Entity');

// Предметы
const ItemStack = Java.type('org.bukkit.inventory.ItemStack');
const Material = Java.type('org.bukkit.Material');

// Блоки
const Block = Java.type('org.bukkit.block.Block');
const BlockState = Java.type('org.bukkit.block.BlockState');

// Миры
const World = Java.type('org.bukkit.World');
const Location = Java.type('org.bukkit.Location');

// События
const Event = Java.type('org.bukkit.event.Event');

// Статистика
const Statistic = Java.type('org.bukkit.Statistic');
const GameMode = Java.type('org.bukkit.GameMode');

// Инвентарь
const Inventory = Java.type('org.bukkit.inventory.Inventory');
const InventoryHolder = Java.type('org.bukkit.inventory.InventoryHolder');

Основные примеры

Работа с игроком

const PlayerJoinEvent = Java.type('org.bukkit.event.player.PlayerJoinEvent');

events.on(PlayerJoinEvent, (event) => {
const player = event.getPlayer();

// Информация об игроке
const name = player.getName();
const uuid = player.getUniqueId();
const world = player.getWorld().getName();
const location = player.getLocation();

// Телепортация
const spawn = server.getWorld("world").getSpawnLocation();
player.teleport(spawn);

// Изменение здоровья
player.setHealth(20);
player.setHealthScale(20);

// Изменение еды
player.setFoodLevel(20);
player.setSaturation(10);

// Опыт
player.setLevel(10);
player.setExp(0.5);

// Игровой режим
player.setGameMode(GameMode.CREATIVE);

// Полет
player.setAllowFlight(true);
player.setFlying(false);

// Инвентарь
player.getInventory().clear();
player.getInventory().addItem(new ItemStack(Material.DIAMOND, 10));
player.updateInventory();

// Эффекты
player.addPotionEffect(org.bukkit.potion.PotionEffectType.SPEED.createEffect(60, 1));

// Звуки
player.playSound(player.getLocation(), "entity.player.levelup", 1, 1);

// Титулы
player.sendTitle("Заголовок", "Подзаголовок", 10, 60, 10);

// Сообщения
player.sendMessage("Привет!");
player.sendActionBar("Сообщение внизу экрана");
});

Работа с инвентарём

const ItemStack = Java.type('org.bukkit.inventory.ItemStack');
const Material = Java.type('org.bukkit.Material');

// Создание предмета
const diamond = new ItemStack(Material.DIAMOND, 10);
const sword = new ItemStack(Material.DIAMOND_SWORD);

// С метаданными (название, лор)
const head = new ItemStack(Material.PLAYER_HEAD);
const meta = head.getItemMeta();
meta.setDisplayName("§6Особый предмет");
meta.setLore(["§7Легендарный меч", "§8+100 урона"]);
head.setItemMeta(meta);

// Добавление в инвентарь
player.getInventory().addItem(diamond);
player.getInventory().setItem(0, sword);

// Проверка наличия
const hasDiamond = player.getInventory().contains(Material.DIAMOND, 5);
const hasItem = player.getInventory().containsAtLeast(diamond, 1);

// Удаление
player.getInventory().removeItem(diamond);
player.getInventory().clear();

Работа с мирами

const World = Java.type('org.bukkit.World');
const Location = Java.type('org.bukkit.Location');

// Получение мира
const world = server.getWorld("world");
const nether = server.getWorld("world_nether");
const theEnd = server.getWorld("world_the_end");

// Спавн
const spawn = world.getSpawnLocation();

// Создание локации
const loc = new Location(world, 100, 64, -100);

// Работа с границей мира
const border = world.getWorldBorder();
border.setCenter(0, 0);
border.setSize(1000);
border.setWarningDistance(50);

// Время
world.setTime(1000);
world.setFullTime(0);
world.setStorm(false);

// Погода
world.setStorm(false);
world.setThundering(false);

// Создание частицы
world.spawnParticle(
org.bukkit.Particle.valueOf("VILLAGER_HAPPY"),
player.getLocation(),
10
);

Работа с блоками

const Material = Java.type('org.bukkit.Material');
const Block = Java.type('org.bukkit.block.Block');

events.on(PlayerInteractEvent, (event) => {
const block = event.getClickedBlock();
if (!block) return;

// Тип блока
const type = block.getType();

// Изменение блока
block.setType(Material.DIAMOND_BLOCK);

// Метаданные блока
const state = block.getState();
if (state instanceof org.bukkit.block.Sign) {
const sign = state;
sign.setLine(0, "§lЗаголовок");
sign.setLine(1, "Строка 2");
sign.update();
}
});

Работа с сущностями

// Спавн моба
const Location = Java.type('org.bukkit.Location');

events.on(PlayerCommandPreprocessEvent, (event) => {
if (event.getMessage() === "/spawnzombie") {
const loc = event.getPlayer().getLocation();

// Спавн зомби
const zombie = loc.getWorld().spawnEntity(loc, org.bukkit.entity.EntityType.ZOMBIE);
zombie.setCustomName("§cЗлой зомби");
zombie.setCustomNameVisible(true);
zombie.setHealth(50);

event.setCancelled(true);
}
});

Работа с конфигом

// Чтение
const greeting = plugin.getConfig().getString("messages.greeting");
const list = plugin.getConfig().getStringList("blacklist");
const number = plugin.getConfig().getInt("settings.max-players");

// Запись
plugin.getConfig().set("settings.custom-key", "value");
plugin.saveConfig();

// Перезагрузка
plugin.reloadConfig();

Работа с файлами (JSON)

const File = Java.type('java.io.File');
const Files = Java.type('java.nio.file.Files');
const StandardOpenOption = Java.type('java.nio.file.StandardOpenOption');

const DATA_FILE = new File(plugin.getDataFolder(), "data.json");

// Чтение
const content = Files.readString(DATA_FILE.toPath());
const data = JSON.parse(content);

// Запись
const newData = JSON.stringify(data, null, 2);
Files.writeString(
DATA_FILE.toPath(),
newData,
StandardOpenOption.CREATE,
StandardOpenOption.TRUNCATE_EXISTING
);

Vault (экономика)

const Bukkit = Java.type('org.bukkit.Bukkit');

// Получение экономики
const econClass = Java.type('net.milkbowl.vault.economy.Economy');
const rsp = Bukkit.getServicesManager().getRegistration(econClass);

if (rsp) {
const econ = rsp.getProvider();

// Баланс
const balance = econ.getBalance(player);

// Снятие
econ.withdrawPlayer(player, 100);

// Начисление
econ.depositPlayer(player, 100);

// Проверка
if (econ.has(player, 50)) {
// достаточно денег
}
}

Таблица соответствия типов

Bukkit JavaJS EasyScript
String"текст"
intparseInt()
doubleparseFloat()
booleantrue/false
List<String>Array
Map<String, Object>Object