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);