Hytale Modding
Встановлена інформація

Параметри Коду серверу

15.12.2025 Slikey поділився деякими спостереженнями щодо коду сервера. Цей документ охоплює ключові моменти та висновки з цієї дискусії.

Примітка

Наведена нижче інформація базується на висновках, якими поділився технічний директор Slikey 15 грудня 2025 року на сервері Hytale Discord. Він надає огляд архітектури коду сервера та можливостей плагінів.

Більшість цього документа — це просто цитати зі Слікі з мінімальними коментарями. Важливіше зберегти обмін інформацією, а не перефразувати її.

Вихідний код сервера

Сервер буде випущено як спільний вихідний код — ми матимемо вихідний код без обфускації та всі їхні коментарі.

Ліцензія

Ліцензія дозволяє використання для будь-яких речей, пов'язаних з Hytale, за умови, що ви не використовуєте сервер/вихідний код для створення власної гри або продажу їхніх алгоритмів.

Система дозволів

Після запитання на сервері модингу Hytale, провідний архітектор Zero відповів:

Це досить просто, тому не очікуйте багато чого, але так, у нас є вбудована система дозволів. Він також підтримує реалізацію власного бекенду. Наприклад, якщо ви хочете зберегти його в базі даних.

Фрагмент вихідного коду доваолів

Впровадження генерації світу

Наступний блок тексту безпосередньо від провідного архітектора Zero:

Ви можете дуже легко реалізувати власну генерацію світу за допомогою плагіна. Отже, якщо вам потрібна зовсім інша конфігурація або логіка для генерації ландшафту, ви можете додати це в плагін, а потім налаштувати світ для його використання. У нас є деякі префаби для завантаження, і в поточних генераторах світів є код, який, можливо, можна було б використовувати повторно, але немає API спеціально для деталей самої генерації.

public interface IWorldGenProvider {
    BuilderCodecMapCodec<IWorldGenProvider> CODEC = new BuilderCodecMapCodec<>("Type", true);

    IWorldGen getGenerator() throws WorldGenLoadException;
}
public interface IWorldGen {
    @Nullable
    WorldGenTimingsCollector getTimings();

    CompletableFuture<GeneratedChunk> generate(int seed, long index, int x, int z, LongPredicate stillNeeded);

    @Deprecated
    Transform[] getSpawnPoints(int seed);

    @Nonnull
    default ISpawnProvider getDefaultSpawnProvider(int seed) {
        return new FitToHeightMapSpawnProvider(new IndividualSpawnProvider(getSpawnPoints(seed)));
    }

    default void shutdown() {}
}

Фрагменти коду сервера

Також було опубліковано деякі фрагменти коду з плагіна, який вони створили. Наступні фрагменти цитуються безпосередньо з повідомлень технічного директора Slikey:

Плагін BlockSpawner

Добре, я опублікую тут кілька фрагментів коду для простого плагіна під назвою "BlockSpawner", який перетвориться на "випадковий" блок, коли його буде розміщено у світі, на основі налаштованих правил.

Тут загалом більше коду, але він показує систему активів та макет плагіна. Ви можете бачити, що система активів визначає "Кодеки", які використовуються для серіалізації та десеріалізації даних. Використовуючи ці кодеки, ми можемо генерувати схеми Припустимо, ви підключаєтеся до сервера та відкриваєте редактор ресурсів: сервер надішле ці схеми, тож кожен окремий тип ресурсу, визначений на стороні сервера, навіть той, що належить вам, тепер стає частиною редактора ресурсів на клієнтській сторінці — не потрібно нічого робити, ви просто можете насолоджуватися інтерфейсом редактора для створення визначених вами ресурсів.

Код Block Spawner 1 Код  Block Spawner 2 Код  Block Spawner 3 Маніфест Block Spawner

Я думаю, що ця частина також трохи показує, як ми використовуємо константи для зберігання деяких мовних ключів - Slikey (зображення нижче)

Константи для зберігання мовних ключів

Ви можете повністю налаштувати постачальника сховища фрагментів, ми, наприклад, створили порожній, який не завантажує фрагменти з диска. Ви можете додати MySQLChunkStorageProvider, і він зможе зчитувати дані з бази даних. Те саме стосується і worldgen, ви можете просто реалізувати цей інтерфейс для створення генератора світів - Siikey.

Чанки 1 Чанки 2 Чанки 3

Я маю на увазі, що ось визначення всієї зброї, скажіть мені, очевидно, ви знайдете обмеження, але я думаю, що є багато можливостей для змін - насправді це складно, тут має відбутися багато покращення якості життя.

Зброя 1