Как писать скрипты в PlaceholdersAPI, чтобы сервер не упал (даже если вы не программист)

Руководство Как писать скрипты в PlaceholdersAPI, чтобы сервер не упал (даже если вы не программист)

Поддерживаемые версии
  1. 1.7
  2. 1.8
  3. 1.9
  4. 1.10
  5. 1.11
  6. 1.12
  7. 1.13
  8. 1.14
  9. 1.15
  10. 1.16
  11. 1.17
  12. 1.18
  13. 1.19
  14. 1.20
  15. 1.21

Как писать скрипты в PlaceholdersAPI, чтобы сервер не упал (даже если вы не программист)


Если вы видите данный код впервые — не пугайтесь. Мы объясним каждую строчку так, как если бы вы учились программировать с нуля. Главное — не копировать код, а понимать, почему он работает. Этот гайд — для администраторов Minecraft-серверов, которые хотят добавить красивый баланс, но не хотят, чтобы игроки видели NaN или сервер тормозил. В этой статье я покажу, как писать надёжный JavaScript-код, даже если вы никогда не программировали.

🔥 Ошибка #1: Доверять данным из других плагинов​

Представьте: вы добавили баланс через %cmi_user_balance%. Игроки рады, но вдруг один пишет:
«У меня вместо денег — NaN!»

Что случилось?
Плагин CMI может прислать баланс как строку:
  • '100 000' — с пробелом
  • 'abc' — из-за бага
  • '' — пустая строка
Если ваш скрипт попытается разделить это на 1 (bal / 1), получится NaN → игрок увидит NaN, а сервер начнёт глючить.

Проблема в старой статье:
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 + " ⛂";
}

Фото:

1757150444387.png

Автор
NeyTM
Просмотры
3 919
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок

Другие ресурсы пользователя NeyTM

Поделиться ресурсом

Последние обновления

  1. up

    Доработал статью
Назад
Сверху Снизу