Lib99j
Ещё одна полезная библиотека для серверной разработки.
- Загрузчики
- FabricQuilt
- Скачиваний на Modrinth
- 710
- Подписчиков на Modrinth
- 4
- версия
- 21
- Обновлён
- 29 марта 202629 мар.
- Опубликован
- в 2025
Коротко о моде
Ставится только на сервер; игрокам ставить не нужно
О моде
Это мод, используемый как основа для всех моих модов. Не стесняйтесь использовать его, если хотите.
Возможности библиотеки
- Визуальные эффекты, включая блокировку камеры, оверлеи и многое другое
- Серверные текстуры GUI
- Серверные частицы
- Скрытие боссбаров
- Кастомные эффекты
- Pondering
- Простое создание конфигов
- И многое другое...
Использование
При инициализации мода, пожалуйста, запустите Lib99j.ensureLoaded(). Это заставляет библиотеку загрузиться раньше вашей, что позволяет всем функциям работать корректно
build.gradle (номер версии с modrinth)
repositories {
maven { url = 'https://dj.ucc.asn.au/maven/' }
}
dependencies {
implementation include("com.daniel99j:djutil:1.1")
implementation include("com.daniel99j:lib99j:VERSION")
}Ponder (серверный)
Это воссоздание системы ponder из Create Mod, теперь на стороне сервера. Смотрите https://modrinth.com/mod/ponderplus для примера.
Возможности:
- Не требует клиентских модов
- Пропуск, перемотка назад и пауза
- Если установлен вместе с Polydex или Booklet, кликните один раз, чтобы открыть ponder
- Быстрый
- Не изменяет игрока — ни сервер, ни клиент не знают, что вы в ponder, всё происходит на сетевом уровне
- Полностью самодостаточный
- Без изменений в реальном мире
- Работает с Polymer и серверными модами (а также с клиентскими!)
Управление (внутриигровой HUD показывает их):
- F: Identify — летайте вокруг, и он покажет, на что вы смотрите
- SPACE: Пауза/воспроизведение
- Q: Выход
- L: Открыть меню
- S: Перезапустить сцену
- D: Следующая сцена (если возможно)
- A: Предыдущая сцена (если возможно)
- SCROLL: Выбрать шаг для пропуска
- W: Пропустить до выбранного шага
Команды:
/ponder all <id>
/ponder item <item>
/ponder item <item> scene <id>
/ponder item hand
/ponder item hand <id>
/ponder scene pause
/ponder scene unpause
/ponder scene exitКоманды для разработчиков:
/ponder dev ui_creator -> Открывает создатель UI.
/ponder dev ui_creator_from <ponder command> -> Открывает создатель UI после выполнения указанной команды ponder
/ponder dev toggle_free_movement -> Переключить свободное перемещение в сцене ponder
/ponder dev get_edits -> Список всех взаимодействий с миром в режиме свободного перемещенияСоздатель UI:
- Витраж показывает безопасную зону
- Откройте меню [L], чтобы начать редактирование
- Если вы на клиенте, удерживайте shift в меню, чтобы увидеть, над какой координатой UI ponder находится курсор, CTRL-C для копирования
Свойства игры
- enableHideableBossbar() делает жёлтые боссбары белыми, а с помощью BossBarVisibility вы можете сделать любой боссбар невидимым
- enableCustomEffectBadLuck() заставляет эффект неудачи отображаться как "Custom Effect (/polymer effects)" и иметь кастомный спрайт
- enablePonder() включает ponder (см. выше)
- enableAddingAssetTranslationsToServer() заставляет все файлы lang в папке assets обрабатываться как серверный перевод в Nucleoid Server Translations API
Конфиги
- Lib99j также предоставляет простой в использовании API конфигов
- Настройки для каждого мира, общие, только для клиента и только для сервера
- Опциональная синхронизация с клиентом
- Использует cloth config для экрана
- Внутриигровое серверное диалоговое воссоздание cloth config (/lib99j config {modid})
- Поддержка mod menu
- JSON-сериализация через GSON
- Поддерживает примитивы, идентификаторы, vec2, vec3, цвета автоматически во всех экранах конфигов и файлах конфигов
- Используйте ConfigManager.addConfig(modid, modconfig) для добавления конфигов. Каждый ModConfig содержит nullable ConfigHolder для каждого контекста. Просто предоставьте класс конфига, и всё готово
- Используйте ServerConfigCopy.getConfigOption(modid, serializedName, optionClass, fallback) для получения синхронизированной опции с сервера (опция должна быть аннотирована sync = true)
Пример класса конфига:
public class ExampleConfig {
@ConfigEntry
public boolean testBool = true;
@ConfigEntry(sync = true)
@SerializedName("wavy_ui")
public boolean wavyUi = false;
//Примитивы-объекты тоже работают!
@ConfigEntry(min = 0, max = 10000)
public Integer explosionDamage = 10;
@ConfigEntry(displayType = ConfigDisplayType.SLIDER, max = 50, min = 0)
public int explosionSize = 10;
@ConfigEntry(displayType = ConfigDisplayType.COLOUR_PICKER)
public int worldTint = 0xff00ff;
@ConfigEntry(displayType = ConfigDisplayType.COLOUR_PICKER_ALPHA)
public int overlayColour = 0xff0000ff;
@ConfigEntry
public Identifier packId = Identifier.withDefaultNamespace("test");
@ConfigEntry
public Vec2 spawnRotation = Vec2.ZERO;
@ConfigEntry
public Vec3 spawnPos = Vec3.ZERO;
//ChatFormatting — это Enum
@ConfigEntry
public ChatFormatting formatType = ChatFormatting.RED;
}Статус установки мода
- Используйте ModInstallManager.syncInstalledStatus(modid), чтобы отметить ваш мод для синхронизации статуса установки, затем используйте ModInstallManager.isInstalled(modid, player), чтобы проверить, установлен ли мод на клиенте
Утилиты Gui
- По умолчанию Lib99j генерирует диапазон пробелов шрифта от -256 до 256 (Учтите: при использовании, например, space=270, он использует комбинацию 256 и 14!). Используйте GuiUtils.getSpace() и связанные функции
- GuiUtils.nextPage(), GuiUtils.previousPage() и GuiUtils.head() создают головы игроков для использования в интерфейсах
- GuiUtils.doesPlayerHaveMods() позволяет увидеть, какие моды установлены; читайте документацию для подробностей
- GuiUtils.toast() отображает всплывающее окно достижения с кастомным предметом и текстом
- А теперь самое главное!
- GuiUtils.generateTexture() и GuiUtils.generateColourableTexture() создают GuiElementBuilder с автоматически сгенерированной моделью предмета и определением. Формат текстуры: "examplemod", "ui/test/image". Учтите, что другие базовые пути тоже принимаются, но рекомендуется использовать /ui/, так как другие функции используют только его
- GuiUtils.generateBarTexture() создаёт вертикальную полосу заполнения снизу вверх с основой, заполнением и наложением.
- BackgroundTextures — это базовый генератор фона шрифта на основе инвентаря, например: new BackgroundTexture(Identifier.fromNamespaceAndPath(MagmaNetworkMod.MOD_ID, "test/test_ui"), 176). Использует /ui/ для ссылок на текстуры.
VFX
- VfxUtils.shake() вызывает эффект тряски камеры, похожий на Bedrock Edition
- VfxUtils.addGenericScreenEffect() добавляет множество других клиентских эффектов, таких как:
- RED_TINT — красный оттенок границы мира
- SNOW — наложение рыхлого снега
- FIRE — говорит само за себя
- NAUSEA — ну, вы поняли.
- BLACK_HEARTS — сердца иссушения
- GREEN_HEARTS — отравленные сердца
- GREEN_HUNGER — зелёные полуголодные сердца
- BLINDNESS — эффект слепоты
- NIGHT_VISION — эффект ночного видения
- CONDUIT_POWER — эффект силы проводника
- DARKNESS — эффект тьмы Warden'а
- LOCK_CAMERA_AND_POS — сложнее, объясняется далее.
- Блокировка камеры
- Чтобы заблокировать камеру и движение игрока, добавьте эффект LOCK_CAMERA_AND_POS
- setCameraInterpolation, setCameraPos, setCameraPitch и setCameraYaw управляют различными аспектами заблокированной камеры
- По техническим причинам игрок не может видеть хотбар, и игра выглядит так, будто он в режиме наблюдателя
- registerCameraLockHandler регистрирует обработчик блокировки камеры для source id, который предоставляет поворот камеры и игрока
- РАЗНОЕ
- VfxUtils.clientSideExplode() вызывает клиентский взрыв, разрушающий блоки (ТОЛЬКО НА КЛИЕНТЕ). Используйте только для катсцен, так как блоки-призраки работают с багами
- VfxUtils.fireworkExplode() создаёт взрыв фейерверка, как если бы фейерверк действительно был запущен
- VfxUtils.sendFakeEntity() отправляет клиентскую сущность. Учтите, что она никогда не будет удалена обычным способом, поэтому рекомендуется использовать это только с молниями или другими сущностями, которые удаляются автоматически
Частицы
ФУНКЦИЯ В РАЗРАБОТКЕ, может вызывать сильные лаги сервера. Переработка произойдёт скоро, когда у меня будет время.
Разное
- PlayPacketUtils содержит список всех PLAY-пакетов
- ConfigUtils имеет некоторые базовые функции конфигурации
- GameProperties содержит некоторые переключатели и информацию об игре
Этот проект не связан с Create Mod, Ponder или любыми похожими модами.
Частые вопросы
Как установить Lib99j?
Установите Fabric под свою версию Minecraft, скачайте Lib99j под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть Lib99j?
У Lib99j есть сборки для Minecraft 1.21.5, 1.21.8–26.1.
Нужен ли Lib99j на сервере?
Ставится только на сервер; игрокам ставить не нужно