- Поддерживаемые версии
- 1.7
- 1.8
- 1.9
- 1.10
- 1.11
- 1.12
- 1.13
- 1.14
- 1.15
- 1.16
- 1.17
- 1.18
- 1.19
- 1.20
- 1.21
Как писать скрипты в PlaceholdersAPI, чтобы сервер не упал (даже если вы не программист)
Если вы видите данный код впервые — не пугайтесь. Мы объясним каждую строчку так, как если бы вы учились программировать с нуля. Главное — не копировать код, а понимать, почему он работает. Этот гайд — для администраторов Minecraft-серверов, которые хотят добавить красивый баланс, но не хотят, чтобы игроки видели NaN или сервер тормозил. В этой статье я покажу, как писать надёжный JavaScript-код, даже если вы никогда не программировали.
Ошибка #1: Доверять данным из других плагинов
Представьте: вы добавили баланс через %cmi_user_balance%. Игроки рады, но вдруг один пишет:«У меня вместо денег — NaN!»
Что случилось?
Плагин CMI может прислать баланс как строку:
- '100 000' — с пробелом
- 'abc' — из-за бага
- '' — пустая строка
Проблема в старой статье:
JavaScript:
var bal = '%cmi_user_balance%';
var math1 = bal / 1; // Если bal = '100 000', math1 = NaN
Решение: очистка и проверка
JavaScript:
var bal = '%cmi_user_balance%'; // Пример: '100 000'
// Шаг 1: Удаляем пробелы
var cleanBal = bal.replace(/\s/g, ''); // Становится '100000'
// Шаг 2: Проверяем, можно ли это превратить в число
if (isNaN(cleanBal) || cleanBal === '') {
return "§fБаланс: &#ffbc40Ошибка";
}
// Шаг 3: Теперь можно конвертировать в число
var numericBal = parseFloat(cleanBal); // 100000
Объяснение для новичка:
- replace(/\s/g, '') — удаляет все пробелы, табы, переносы строк.
- isNaN(cleanBal) — проверяет, является ли значение «не числом».
- parseFloat() — превращает строку в число.
Ошибка #2: Не обрабатывать крайние случаи
Что сломается?Если баланс = -500, игрок увидит -500K. Это некрасиво и может запутать.
Если баланс = 0, а у вас 5 разных return, код будет дублироваться.
Решение: добавляем проверки
JavaScript:
// После получения numericBal
if (numericBal < 0) {
numericBal = 0; // Отрицательный баланс = 0
}
Объяснение для новичка
Это как «подстраховка». Даже если другой плагин ошибётся, ваш скрипт покажет корректное значение.
Всегда спрашивайте себя:
- Что будет, если число отрицательное?
- Что будет, если оно очень большое?
- Что будет, если оно пустое?
Проверка if (numericBal < 0) — это 1 строка, которая спасёт вас от часов отладки.
Ошибка #3: Писать медленный код
Что сломается?Если 100 игроков одновременно видят баланс и ваш скрипт каждый раз конвертирует строку в число — сервер начнёт тормозить.
Решение: кэшируем результат
JavaScript:
// Правильно: один раз
const numericBal = parseFloat(cleanBal);
// Неправильно: каждый раз
return "§fБаланс: " + (parseFloat(bal) / 1000).toFixed(1) + "K";
Объяснение для новичка
const numericBal = ... — сохраняет результат один раз.
Даже если игрок смотрит 10 раз в секунду, число будет вычислено только один раз.
Финальный скрипт
JavaScript:
// Получаем баланс из CMI
var bal = '%cmi_user_balance%';
// Удаляем пробелы
var cleanBal = bal.replace(/\s/g, '');
// Проверяем, число ли это
if (isNaN(cleanBal) || cleanBal === '') {
return "§fБаланс: &#ffbc40Ошибка";
}
// Конвертируем в число один раз
var numericBal = parseFloat(cleanBal);
// Подстраховка от отрицательных значений
if (numericBal < 0) {
numericBal = 0;
}
// Форматируем
if (numericBal >= 1000000) {
var formatted = (numericBal / 1000000).toFixed(1);
return "§fБаланс: &#ffbc40" + formatted.replace(/\.0$/, '') + "M ⛂";
} else if (numericBal >= 1000) {
var formatted = (numericBal / 1000).toFixed(1);
return "§fБаланс: &#ffbc40" + formatted.replace(/\.0$/, '') + "K ⛂";
} else {
return "§fБаланс: &#ffbc40" + numericBal + " ⛂";
}