Hytale Modding API: The Complete Server Plugin Development Guide

By HytaleCharts Team Category: guides 7 min read

Всичко необходимо, за да започнете изграждането на Hytale сървър плъгини. Това ръководство обхваща Java 25 настройка, плъгин жизнен цикъл, двойната система събитие (EventBus + ECS), регистрация на командата, компоненти на организацията, манифест.json формат, и разполагането на CurseForge.

Системата за приставка на сървъра на Hytale дава на разработчиците дълбок контрол върху всеки аспект на играта. Ако сте написали Bukkit или Spigot плъгини за Minecraft, преходът е неофициално, но архитектурата на Hytale е фундаментално различна по начини, които имат значение. Това ръководство ви води през всичко от първоначалната настройка до внедряването на производството. < h2 > Архитектура Преглед Преди да напишете някакъв код, разберете как действа модирането на Hytale: < strong > Клиентът е доставчик. Hytale's C# клиент се занимава с графики, вход, и аудио ... но не съдържа игрова логика. Всички симулации работят на сървъра Java, дори и в един играч. < strong > Всичко е сървърно. Когато играчите се присъединят към модифициран сървър, потребителски активи и поведение поток автоматично. Не са необходими клиентски модове. < strong > Съществуват четири категории модинг: Активи от данни (JSON), Art Assets (Blockbench Models), Server Plugins (Java) и Visual Scripting (counting скоро). Server плъгини са най-мощната категория год. те ви дават пълен Java достъп до времето за изпълнение на сървъра, включително системата за компонент на Number System, канал за събития, командна рамка и световна манипулация. < h2 > Настройка на околната среда за развитие < h3 > Предварителни условия < tr > < tho > Tool < t > Version < t > Бележки < td > < strong > Java < td > 25+ < td > Hytale използва съвременни характеристики, включително виртуални нишки (Project Loom) < tr > < td > < strong > IntelliJ IDEA < td > Общността или крайна < td > > Remended IDE готварско издание работи добре < tr > < td > < strong > Gradle < td > 9,2.0+ < td > Build > Build (включена в образеца за плъгин) < tr > < td > < strong > Git < td > Всяка скорошна версия < td > За клониране на официалния образец < h3 > Clone Официален образец Hypixel Studios осигурява официален плъгин шаблон на GitHub: git клонинг https://github.com/HytaleModding/plugin-template.git My FirstPlugin cd MyFirstPlugin Отвори проекта в IntelliJ IDEA и нека Gradel синхронизира. Образецът включва правилната структура на директорията, изграждане на конфигурация и сървър API зависимости. < p > Alternatively, the < strong > HytaleIO Генератор на проекти на hytalio.com/проект-генератор може да създаде Plugin, Mod или Full (combo) скеле с уеб UI < h2 > Структура на Plugin Всеки хитален плъгин следва оформлението на директорията: < code > your-plugin/ . Ти си Плугин. Ява # Главна входна точка . гонитба. Json # Приставка метаданни (задължително) Споделени активи (модели, текстури) год. да се изгради.gradel.kts Настройки.gradel.kts . < h3 >manifest.json Всеки плъгин изисква manifest.json в корена на компилирания JAR. Това е еквивалентът на Hytale на Bukkit plugin.yml : { "Група": "Com. your name," "Име": "Твоето име," "Main": com. your name. yourplugin. your Plugin," "Version": "1.0." "Описание": "Какво прави плъгинът ви," "Автор": "ServerVersion": "*," "Тенденции": "Възможни тенденции": "LoadПреди": [], "DisabledByDefault": false, "Includes AssetPack": false } < p > Идентификационен код на плъгина се формира като Група: Име (напр. com. yourname:YourPluginName ). Main полеви точки към вашия клас за влизане го схванете погрешно и приставката няма да се зареди. < h2 > Lifecycle < p > Вашият основен клас се простира JavaPlugin и има четири фази на жизнения цикъл: Публична класа Разширяване на приставката JavaPlugin { public YourPlugin(@Nonnull JavaPluginInit init) { super(init); getLogger().info("Plugin конструиран!"); } @ Override Настройка на публичното празно пространство() { / / Фаза 2: Регистрация на събития, команди, ECS системи / / Това е мястото, където повечето от вашия регистрационен код отива } @ Override Старт на публичното празно пространство() { / / Фаза 3: Сървърът е готов за играчите / / Стартиране на планирани задачи, отворени връзки } @ Override Изключване на публичното празно пространство() { / / Фаза 4: Почистване преди спиране на сървъра / / Запис на данни, близки връзки, отмяна на задачи } } < tr > < t > Phase < t > Method < t > Какво да правим тук < td >1. Строителство < td > Конструктор < td > Основна инициализация, сеч < tr > < td >2. Настройка < td > < code > setup() < td > Регистрация на събития, команди, компоненти и системи на ECS < tr > < td >3. Начало < td > < code > start() < td > Стартиране на задачи, сървърът приема играчи < td >4. Изключване < td > < code > shutdown() < td > Запис на данни, ресурси за почистване < h2 > Системата за двойно събитие < p > Това е най-важната концепция за разбиране. Hytale има две отделни системи за събитие и използването на грешната е често срещана грешка. < h3 > Събитие Автобуси по света Събития The EventBus се занимава със сървърни събития като връзки, чат и световно натоварване. Регистрирайте обработвателите чрез EventRegistry , предоставени на вашия плъгин: @ Отмяна Настройка на публичното празно пространство() { // Синхронно глобално събитие getEventRegistry().registerGlobal( Играч ReadyEvent. клас, събитие - > { getLogger [6].info("Player се присъедини: " + събитие.getPlayer().getUsername()); } ); // Асинк събитие (като PlayerChatEvent) getEventRegistry().registerAyncGlobal( PlayerChatEvent. клас, бъдеще - > { Бъдеще. След това Accept(събитие - > { ако (събитие.getMessage(). съдържа("spam")) { object.setCancelled(вярно); } }; } ); } < strong > Key Event Автобусни събития: PlayerConectEvent / PlayerDiscontactEvent . PlayerReadyEvent . PlayerChatEvent год. съобщения (async, cancable) AddPlayerToWorldEvent год. StartWorldEvent / AddWorldEvent / RemoveWorld Събитие Управление на света < p > < strong > Приоритети на събитието: Използване EventPriority. НАЧАЛНО да стартирате първи и да модифицирате събитията преди други лица да ги видят. Използване EventPriority. LATE да се види крайното състояние след като всички други лица, които обработват, са преминали обработка. ECS Събития, свързани с неточности Събитията на ниво Entity като блокиране на блок, поставяне на блок и увреждане се обработват чрез системата < strong > Компонент на Entity , а не EventBus. Създаване на "Система за събитие" : Публичен клас BlockBreakHandler Разширява SubjectEventSystem < EntityStore, BreakBlock Event> { @ Override Публична заявка получаваQuery() { / / Целеви субекти със специфични компоненти връщане Query.builder().build(); } @ Override Публичен клас getEventType() { връщане BreakBlockEvent. клас; } @ Override публичен празен ръкохватка [6]EntityStore магазин, Буферен буфер, BreakBlock Събития) { / / Обработване на блок почивка / / Отказ във филтърната фаза, не тук. } } < strong > Критично правило: Само анулирайте ECS събитията по време на фазата < strong > филтър . Анулирането на фазата на инспекция няма ефект, тъй като действието вече се е случило. < h2 > Компонентна система за свързване (ECS) < p > Хитале използва обичайна ECS архитектура. Разбиране, че е от съществено значение за всеки non-trivial плъгин. < h3 > Коректни концепции < strong> Entity горно уникално ID, не съдържа самите данни < strong>Component гофриран контейнер за чиста информация, прикрепен към обект < strong > System Логика, която обработва обекти със специфични комбинации от компоненти < strong> Ref годна дръжка за дадено предприятие (никога не съхранявайте препратки към прякото образувание) < strong> Store год. < h3 > Компоненти на корпуса Оценка на публичния клас Изпълнение на данните Компонент < ЕтиСторе> { оценка на публичното int = 0; обществен екип на стринга = ""; Обществено дългосрочно присъединяване При = система. ток TimeMillis(); @ Override Клонинг на публичния скор данни() { Копие от скор Данни = нови данни за скор[1]; Copy.score = това.score; Разбрано. екип = този отбор; Разбрано. към В = това. В; обратно копие; } } Коментарите трябва да приложат клонинг() . Прикрепете ги към обекти, за да съхранявате потребителски данни . . . < h3 >разбирателство PlayerRef "Player" в Hytale не е специален клас, който се състои от компоненти. PlayerRef всъщност е компонент, който съхранява потребителското име на играча, UUID, език и мрежов ръководител. Той остава активен, докато играчът е свързан. < h2 > Командирска регистрация Командири прилагат Командир интерфейс: Публичен клас Спуун Командата изпълнява команда { @ Override public String getName() { return "spook"; } @ Override public value executed(CommissionSender подателя, String[] args) { ако (изпрати пример за играч на играч) { / / Телепортен плейър за изчадие подател.Изпрати съобщение("Телепортиране на изчадие..."); } } } / / Регистрирайте се в настройката() CommandRegistry.Registery Command(New Spoun Command()); И двата Player и CommandSender поддръжка hasPermission() проверки. Вградената система за разрешения поддържа правата на потребителите, груповото наследство и съвпадението на wildcard. < h2 > Изградени и разгърнати < h3 > Сграда ./gradlew build < p > Изходът JAR преминава към build/libs/. < h3 > Пътища за разполагане < tr > < t > Platform < t > Директория на модата windows (местни) < td > < code >%AppData%/Roaming/Hytale/UserData/Mods/ < td > Linux server < td > < code >/opt/hytale/Server/mods/ Нагретото презареждане е частично поддържано за незначителни промени - използване Ctrl+F9 в Intelli J да се възстанови без пълно рестартиране. Големите промени изискват рестартиране на сървъра. EventRegistry автоматично почиства обработващите устройства, когато приставката се разтоварва. < h3 > Публикуване на CurseForge < p > CurseForge разпознава три типа мод: < strong> Packs год. < strong> Plugins по Java JAR файлове, използващи сървъра API < strong> Early Plugins < / strong> горни плъгини за трансформации от ниско ниво (напреднали, пестеливи) < h2 > Ресурси на Общността < p > Модирането е изградило обширна документация отвъд това, което Hypixel Studios предлага: < tr > < t > Resource < t > Focus < tr > < td > < strong > HytalyModing. dev < td > > Водачи, доктори, инструменти, инструменти, които са < tr > < td > < strong > Britakee Studios GitBook < td > Несигурен тестван урок за пакети и приставки < strong > HytaleDocs.com < td > Препратка на Общността wiki и API < tr > < td > < strong > Hytale-Toolkit (GitHub) < td > Decompiled source, javadocs, semantic code search < td > < strong > Patcher (GitHub) < td > > Преглед на сървъра JAR като проект IntelliJ < strong > Забележка: Сървърът JAR не е обезвреден и може да бъде свободно декомпилиран. Hypixel Studios е поел ангажимент да освободи пълния код на сървъра в рамките на 1...2 месеца от стартирането на EA. Какво следва < strong > Освобождаване на изходния код Очаква се до март 2026 г. < strong> Visual Wriffing год. < strong>Развитие bonunts < / strong> год. Hypixel Studios планира да предложи награди за общински вноски < strong> Разширяване на официалната документация Признат за непълен, разширен въз основа на обратна връзка на общността Готови ли сте да разгърнете плъгин? Регистрирайте вашия moded сървър на HytaleCharts , така че играчите да могат да намерят вашето творение. За модели на минигейм развитие, вижте нашите Custom Minigames Guide .