TGViewer
Бессонный кодер Бессонный кодер @sleeplesscode · 4.25K subscribers
Post #638 2.82K
В прошлом посте про геймдев я упомянул шину событий игры, и вы задали вопрос, что это за шина вообще?
Я люблю ваши вопросы, так что давайте ответим на него! 🥰

В больших проектах с большим количеством разных модулей, а в нашем случае модов, нам нужен способ передавать информацию о различных событиях между всеми нашими частями. И тут в бой входит шина событий.

Шина - список методов которые принимают то или иное событие, порой с дополнительными плюшками в виде приоритетов или отмены события.
Давайте представим что Рома нажал ПКМ по двери чтобы открыть её и войти в комнату Брендона. Тут в дело вступает PlayerInteractEvent.RightClickBlock. Когда сервер получает пакет от клиента игрока о том что тот делает клик, в шину событий улетает этот ивент:
public static PlayerInteractEvent.RightClickBlock onRightClickBlock(Player player, InteractionHand hand, BlockPos pos, BlockHitResult hitVec) {
PlayerInteractEvent.RightClickBlock evt = new PlayerInteractEvent.RightClickBlock(player, hand, pos, hitVec);
NeoForge.EVENT_BUS.post(evt);
return evt;
}


Ивент в шине, тут он будет проходить по всем местам где есть на него подписка (пример):
@SubscribeEvent
public void onRightClick(PlayerInteractEvent.RightClickBlock event) {
event.getEntity().sendSystemMessage(Component.literal("КАК ТЫ СМЕЛ ТЫКНУТЬ ПО БЛОКУ?"));
}


Но как мы определяем какая подписка должна выполнится первее, для этого у нас есть приоритеты:
public enum EventPriority
{
HIGHEST, //First to execute
HIGH,
NORMAL,
LOW,
LOWEST; //Last to execute
}


Возвращаясь к Брендону. Сначала наше событие приходит в HIGH подписку где мы проверяем, если Рома сильно ранен или у него нет рук, то событие отменяется, и идёт дальше, выглядит это примерно так:
@SubscribeEvent
public void onRightClick(PlayerInteractEvent.RightClickBlock event) {
if(event.getEntity().isWithoutHands()) {
event.setCanceled(true);
}
}


Если Рома не прыгал со скалы, то ивент пройдёт дальше, и словится другим слушателем, который уже даст команду Брендону начать быковать на Рому, вот как-то так :3

#st #devblogGodGame
  • ❤ 46
  • ❤‍🔥 6
  • 🤔 1
  • 🎉 1
  • 👌 1
  • 🍓 1
More from @sleeplesscode
  1. Oct 2, 2026⚡️ JavaScript, архитектура и ИИ: о чем будут говорить на юбилейной HolyJS 2026 Autumn 📆 2…
  2. Oct 1, 2026Post #914
  3. Sep 18, 2026Post #913
  4. Sep 17, 2026Post #912
  5. Sep 15, 2026Post #911
  6. Sep 14, 2026Post #909
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →