HyCodeYourTale

Player Events

Player Events

Eventy související s hráči - připojení, odpojení, chat, interakce.

---

PlayerConnectEvent

Vyvolán když se hráč připojí na server.

Typ: Synchronní
Registrace: register() / registerGlobal()
Cancellable: Ne

getEventRegistry().registerGlobal(PlayerConnectEvent.class, event -> {
Holder holder = event.getHolder();
PlayerRef playerRef = event.getPlayerRef();
World world = event.getWorld();

getLogger().atInfo().log("Hráč se připojuje: " + playerRef.getUsername());
});

Dostupné metody:
| Metoda | Návratový typ | Popis |
|--------|---------------|-------|
| getHolder() | Holder | Entity holder hráče |
| getPlayerRef() | PlayerRef | Reference na hráče |
| getWorld() | World | Svět do kterého se připojuje |

---

PlayerDisconnectEvent

Vyvolán když hráč opustí server.

Typ: Synchronní
Registrace: register() / registerGlobal()
Cancellable: Ne

getEventRegistry().register(PlayerDisconnectEvent.class, event -> {
Player player = event.getPlayer();
getLogger().atInfo().log("Hráč odešel: " + player.getName());

// Uložení dat hráče
savePlayerData(player);
});

Dostupné metody:
| Metoda | Návratový typ | Popis |
|--------|---------------|-------|
| getPlayer() | Player | Instance hráče |

---

PlayerReadyEvent

Vyvolán když hráč dokončí načítání a je připraven hrát. Doporučeno pro welcome zprávy.

Typ: Synchronní
Registrace: register() / registerGlobal()
Cancellable: Ne

getEventRegistry().registerGlobal(PlayerReadyEvent.class, event -> {
Player player = event.getPlayer();
player.sendMessage(Message.raw("Vítej na serveru!"));

// Bezpečný přístup ke komponentům - jsme na world threadu
Ref ref = player.getRef();
Store store = ref.getStore();
CustomComponent comp = store.getComponent(ref, CustomComponent.getComponentType());
});

Dostupné metody:
| Metoda | Návratový typ | Popis |
|--------|---------------|-------|
| getPlayer() | Player | Instance hráče |

Poznámka: Neexistuje PlayerJoinEvent - použij PlayerReadyEvent nebo PlayerConnectEvent.

---

PlayerChatEvent

Vyvolán když hráč pošle zprávu do chatu.

Typ: ASYNCHRONNÍ
Registrace: registerAsync() / registerAsyncGlobal() (POVINNÉ!)
Cancellable: Ano

// SPRÁVNĚ - PlayerChatEvent je asynchronní
getEventRegistry().registerAsyncGlobal(PlayerChatEvent.class, future -> {
future.thenAccept(event -> {
PlayerRef sender = event.getSender();
String message = event.getMessage();

// Zrušení zprávy obsahující spam
if (message.contains("spam")) {
event.cancel();
return;
}

// Pro přístup ke komponentům použij world.execute()
Player player = event.getPlayer();
World world = player.getWorld();

world.execute(() -> {
Ref ref = player.getRef();
Store store = ref.getStore();
// Teď bezpečné
CustomComponent comp = store.getComponent(ref, CustomComponent.getComponentType());
});
});
});

CHYBA - Nikdy nepoužívej register() pro async eventy:

// ŠPATNĚ - Toto nebude fungovat!
getEventRegistry().register(PlayerChatEvent.class, event -> {
// Nikdy se nezavolá
});

Dostupné metody:
| Metoda | Návratový typ | Popis |
|--------|---------------|-------|
| getSender() | PlayerRef | Reference na odesílatele |
| getPlayer() | Player | Instance hráče |
| getMessage() | String | Obsah zprávy |
| getContent() | String | Alias pro getMessage() |
| getTargets() | Collection | Příjemci zprávy |
| cancel() | void | Zruší odeslání zprávy |

---

PlayerInteractEvent

Vyvolán když hráč interaguje s entitou nebo blokem.

Typ: Synchronní
Registrace: register() / registerGlobal()
Cancellable: Ano

getEventRegistry().register(PlayerInteractEvent.class, event -> {
Player player = event.getPlayer();
// Zpracování interakce
});

---

PlayerMouseButtonEvent

Vyvolán při kliknutí myší.

Typ: Synchronní
Registrace: register() / registerGlobal()
Cancellable: Ne

getEventRegistry().register(PlayerMouseButtonEvent.class, event -> {
// Zpracování kliknutí
});

Známé problémy: Tento event má hlášené problémy s nefungováním v některých verzích.

---

PlayerMouseMotionEvent

Vyvolán při pohybu myší.

Typ: Synchronní
Registrace: register() / registerGlobal()
Cancellable: Ne

getEventRegistry().register(PlayerMouseMotionEvent.class, event -> {
// Zpracování pohybu myši
});

---

AddPlayerToWorldEvent

Vyvolán když je hráč přidán do světa.

Typ: Synchronní
Registrace: register() / registerGlobal()
Cancellable: Ne

getEventRegistry().registerGlobal(AddPlayerToWorldEvent.class, event -> {
// Hráč byl přidán do světa
});

---

DrainPlayerFromWorldEvent

Vyvolán když je hráč odstraněn ze světa.

Typ: Synchronní
Registrace: register() / registerGlobal()
Cancellable: Ne

getEventRegistry().registerGlobal(DrainPlayerFromWorldEvent.class, event -> {
// Hráč byl odstraněn ze světa
});

---

ChangeGameModeEvent

Vyvolán při změně herního módu hráče.

Typ: Synchronní
Registrace: register() / registerGlobal()
Cancellable: Ano

getEventRegistry().register(ChangeGameModeEvent.class, event -> {
// Zpracování změny game mode
});

---

Permission Eventy

PlayerPermissionChangeEvent

Vyvolán při změně oprávnění hráče.

getEventRegistry().register(PlayerPermissionChangeEvent.class, event -> {
// Oprávnění hráče bylo změněno
});

PlayerGroupEvent

Vyvolán při změně skupiny hráče.

getEventRegistry().register(PlayerGroupEvent.class, event -> {
// Skupina hráče byla změněna
});

GroupPermissionChangeEvent

Vyvolán při změně oprávnění skupiny.

getEventRegistry().register(GroupPermissionChangeEvent.class, event -> {
// Oprávnění skupiny bylo změněno
});

---

Shrnutí Player Eventů

| Event | Typ | Registrace | Cancellable |
|-------|-----|------------|-------------|
| PlayerConnectEvent | Sync | register() | Ne |
| PlayerDisconnectEvent | Sync | register() | Ne |
| PlayerReadyEvent | Sync | register() | Ne |
| PlayerChatEvent | Async | registerAsync() | Ano |
| PlayerInteractEvent | Sync | register() | Ano |
| PlayerMouseButtonEvent | Sync | register() | Ne |
| PlayerMouseMotionEvent | Sync | register() | Ne |
| AddPlayerToWorldEvent | Sync | register() | Ne |
| DrainPlayerFromWorldEvent | Sync | register() | Ne |
| ChangeGameModeEvent | Sync | register() | Ano |
| PlayerPermissionChangeEvent | Sync | register() | Ne |
| PlayerGroupEvent | Sync | register() | Ne |
| GroupPermissionChangeEvent | Sync | register() | Ne |

---

Získání UUID hráče

// Metoda 1: Z PlayerRef komponenty (doporučeno pro ECS kontext)
UUID uuid = playerRef.getUuid();

// Metoda 2: Z Player objektu
Player player = event.getPlayer();
UUID uuid = player.getUuid();

// Metoda 3: Pomocí Universe (pokud máš jen username/uuid)
Player player = Universe.get().getPlayer(uuid);


Last updated: 20. ledna 2026