Вот этот вот client

Версия Minecraft
1.20.1
API
Forge
38
2
1
Добра читающим.
Я увлекся прочтением документации форджа 1.20.1 и зациклился на теме разделения сторон (на вот эти ваши DIST, dedicated server и так далее)
И вот пишу я мод, и меня не покидает чувство, что где-то я могу с этим напутать, что меня очень напрягает и не дает идти дальше.
Вопрос заключается вот в чем: Что я должен складывать в папку client; где и какие проверки на сторону я должен совершать?

Пример: Я создал папку screen со всеми классами, связанными с GUI. Должен ли я положить ее в client? И должен ли я применять к созданному классу Screen аннотацию @OnlyIn(Dist.CLIENT) ?

Если есть какие-то дополнительные материалы вроде той же документации или статьи, подобной миксинам для чайников, с восторгом отправлюсь их читать.
Прошу помочь)
 
Я создал папку screen со всеми классами, связанными с GUI. Должен ли я положить ее в client?
Ну это просто разделение для удобства куда хочешь туда суй хоть в items код от такого работать не перестанет.
Просто думай как логично и красиво организовать проект.
И должен ли я применять к созданному классу Screen аннотацию @OnlyIn(Dist.CLIENT)
Можешь добавлять можешь не добавлять (+ аннотация и так есть у родителя), в целом если ты не используешь этот класс на сервере то нечего и не будет.
С аннотаций этот метод/класс/поле вырежится на сервере, в целом если этот код не нужен на сервере, то лучше пускай его там и не будет.
где и какие проверки на сторону я должен совершать
Ну смотри любые манипуляции с миром на сервере, любые визуальные эффекты на клиенте.
Если хочешь чтобы код выполнялся на сервере ставишь проверку на сервер.
Если хочешь чтобы код выполнялся на клиенте ставишь проверку на клиент.
Если есть какие-то дополнительные материалы вроде той же документации или статьи
Во такое есть: Разделение Клиент-Сервер и пакетная система ElegantNetworking

И все, потом запускаешь runServer, подключаешься к нему, тестишь мод, если работает и консоль не засрана, то все ок(y)

PS: на 1.12.2 так, на этих ваших новых версиях не знаю
 
Последнее редактирование:
  • Like
Реакции: S1nc
Нечего тут читать, делать надо!
Клиент это все что ты видишь на экране -рендер мира, игрока, сущностей, эффектов + ввод (кнопки мыши, клавиатуры, колесико, позиция курсора итд) + звук. А серверное взаимодействие - это общее что должны видеть все, т.е то, что объединяет клиенты разных игроков.

Если надо видеть что овца шагает на юг- это можно сделать и на клиенте. Но чтобы это видел другой игрок, позицию овцы, анимацию ног - это все нужно отправлять на сервер. В 1.20.1 максимально простая пакетная система. Существуют аннотации @OnlyIn - вешаются на класс или на метод, если надо чтобы он выполнялся только на одной стороне. Кроме того если надо делать проверки и разделение работающего на двух сторонах метода внутри - на 1.20.1 это проверка if(level.isClientSide).

В майнкрафте есть три стороны: клиент, интегрированный (логический) сервер и обособленный(физический) сервер. Логический сервер это урезанная копия полноценного сервера, наверное сделанная для игры по локальной сети. Обособленный же это полноценный сервер.
Тестировать мод обязательно надо всегда на полноценном сервере. Если клиент-серверное взаимодействие работает в одиночке с логическим сервером, это совсем не означает, что этот же самый код не крашнет полноценный сервер.
Я когда писал мод на квадрокоптер, очень хорошо прочувствовал все эти моменты).
p.s выполняемую часть пакетов с клиентским кодом надо оборачивать, т.к клиентских классов не должно быть в пакете в принципе, даже в импортах.
 
Назад
Сверху