GTNHLib ======= 🌐 **Мови:** [English](README.md) | [Українська](README_uk.md) ## Про бібліотеку Спільна бібліотека коду для модів GTNH. ## Можливості ### Налаштування - Визначення налаштувань за допомогою анотації `@Config` для класу. Кожне поле стає параметром конфігурації. - Встановлення значень за замовчуванням, діапазонів, коментарів та ключів локалізації за допомогою анотацій полів, таких як `@DefaultInt`, `@RangeInt` та `@Comment`. - Бібліотека зчитує, записує та перевіряє файл `.cfg` за вас. Жодних ручних викликів `Configuration`. - Позначення полів анотацією `@Sync` для надсилання значень із сервера клієнтам під час підключення. - Створення графічного інтерфейсу налаштувань Forge прямо з анотацій. ### Події - Викликає `InventoryChangedEvent`, коли змінюється загальна кількість предметів в інвентарі гравця. Підписуйтесь на `ItemAdded` або `ItemRemoved`, які містять змінений `ItemStack`, дельту зі знаком, а також `inventoryCount` — загальну кількість цього предмета у гравця після зміни. - Предмети зіставляються за типом і метаданими, ігноруючи NBT, тому сортування інвентарю не викликає жодних подій. Сканування виконується кожні кілька тактів (можна налаштувати). - Викликає `PickBlockEvent`, коли гравець клацає середньою кнопкою миші по блоку. - Позначте клас анотацією `@EventBusSubscriber` для автоматичної реєстрації його методів `@SubscribeEvent`. Виберіть сторону та етап завантаження в анотації. Ручна реєстрація не потрібна. ### Предмети - `ImmutableItemStack` обгортає стек як доступний лише для читання, щоб запобігти випадковим змінам. - `ItemTransfer` переміщує предмети між `ItemSource` та `ItemSink` за допомогою фільтрів-предикатів та обмежень кількості. - Перебирайте будь-який `IInventory` за допомогою `InventoryIterator`, включно зі слотами, прив’язаними до сторін блока. - Інтерфейси джерела та приймача абстрагують вилучення та вставлення предметів, тому логіка переміщення працює з будь-яким типом інвентарю. ### Рендеринг - Рендеринг предметів з кількома накладеними текстурними шарами шляхом реалізації `ItemWithTextures`. Реєструйте за допомогою `TexturedItemRenderer`. - `CapturingTesselator` захоплює квади рендерингу поза основним потоком для пакетної або асинхронної візуалізації. - Допоміжні класи для анімованих підказок та HUD-повідомлень над панеллю швидкого доступу. ### Стан блоку - Реєстрація власних властивостей блоку: boolean, int, enum, direction, axis та orientation. - Пакування та зчитування значень властивостей із метаданих блоку, щоб на версії 1.7 блоки поводилися як сучасні стани блоків. - Включає команду `blockstate` для перевірки стану блоку за координатами. ### Команди - Brigadier command API для сучасного парсингу, автодоповнення та виконання команд на версії 1.7. - Реєстрація власних ігрових правил за допомогою `GameRuleRegistry`. Бібліотека вбудовується у ванільну систему ігрових правил, щоб сповіщати ваші правила про зміни. ### Команди гравців - Система керування командами гравців з ролями, складом учасників та адміністративними командами. - Реєстрація власних даних команди за допомогою `TeamDataRegistry`. Бібліотека зберігає їх на диск і синхронізує з клієнтами. ### Мережа - Надсилання екранних повідомлень, повідомлень над панеллю швидкого доступу та дальності промальовування клієнтам. - Синхронізація власних даних гравців. ### Утиліти - Бекпорт `MemoryUtil` та `MemoryStack` у стилі LWJGL3 в пакеті `bytebuf`. - 32- та 64-бітне хешування FNV-1a. - Допоміжні класи для роботи з математикою, NBT, JSON, файлами, напрямками та відстанями. - Типи кольорів для RGB та HSV. - Ітератори та трансформації 3D-геометрії. - Допоміжні класи для провайдерів можливостей. - Синхронізовані прив’язки клавіш. - Допоміжні класи для роботи з ASM та байт-кодом. - Перевірка сумісності з модами (Baubles, FalseTweaks, NEI). - Тіньове підключення FastUtil через https://github.com/GTNewHorizons/GTNHExtLib ## Подяки Налаштування: Оригінальний код від FalsePattern, що розповсюджується за ліцензією LGPL-3.0 у [FalsePatternLib](https://github.com/FalsePattern/FalsePatternLib/tree/master/src/main/java/com/falsepattern/lib/config)