World Events
Eventy související se světy - načítání, chunky, zóny.
---
StartWorldEvent
Vyvolán při inicializaci světa.
Typ: Synchronní
Registrace: register() / registerGlobal()
Cancellable: Ne
getEventRegistry().registerGlobal(StartWorldEvent.class, event -> {
World world = event.getWorld();
getLogger().atInfo().log("Svět se inicializuje: " + world.getName());
});
Dostupné metody:
| Metoda | Návratový typ | Popis |
|--------|---------------|-------|
| getWorld() | World | Instance světa |
---
AddWorldEvent
Vyvolán když je svět přidán do Universe.
Typ: Synchronní
Registrace: register() / registerGlobal()
Cancellable: Ne
getEventRegistry().registerGlobal(AddWorldEvent.class, event -> {
World world = event.getWorld();
getLogger().atInfo().log("Svět přidán: " + world.getName()); // Příklad: Registrace marker provideru pro world map
world.getWorldMapManager().addMarkerProvider("mymarkers", new MyMarkerProvider());
});
Dostupné metody:
| Metoda | Návratový typ | Popis |
|--------|---------------|-------|
| getWorld() | World | Instance světa |
---
AllWorldsLoadedEvent
Vyvolán když jsou všechny světy načteny.
Typ: Synchronní
Registrace: registerGlobal()
Cancellable: Ne
getEventRegistry().registerGlobal(AllWorldsLoadedEvent.class, event -> {
getLogger().atInfo().log("Všechny světy načteny!"); // Načtení globálních dat
loadWarps();
loadGlobalConfig();
});
Tento event je ideální pro načítání dat, která závisí na existenci všech světů.
---
ChunkPreLoadProcessEvent
Vyvolán před načtením chunku.
Typ: Synchronní
Registrace: registerGlobal()
Cancellable: Ne
getEventRegistry().registerGlobal(ChunkPreLoadProcessEvent.class, event -> {
WorldChunk chunk = event.getChunk();
BlockChunk blockChunk = chunk.getBlockChunk(); if (blockChunk != null) {
int chunkX = blockChunk.getX();
int chunkZ = blockChunk.getZ();
World world = chunk.getWorld();
// Příklad: Spawn entity při načtení chunku
// (z TeleportPlugin - spawn warp markerů)
}
});
Dostupné metody:
| Metoda | Návratový typ | Popis |
|--------|---------------|-------|
| getChunk() | WorldChunk | Načítaný chunk |
Příklad z TeleportPlugin:
private void onChunkPreLoadProcess(@Nonnull ChunkPreLoadProcessEvent event) {
WorldChunk chunk = event.getChunk();
BlockChunk blockChunk = chunk.getBlockChunk(); if (blockChunk != null) {
int chunkX = blockChunk.getX();
int chunkZ = blockChunk.getZ();
World world = chunk.getWorld();
String worldName = world.getName();
for (Entry warpEntry : this.warps.entrySet()) {
Warp warp = warpEntry.getValue();
Transform transform = warp.getTransform();
if (transform != null) {
Vector3d position = transform.getPosition();
// Kontrola zda je warp v tomto chunku
if (ChunkUtil.isInsideChunk(chunkX, chunkZ,
MathUtil.floor(position.x),
MathUtil.floor(position.z)) &&
warp.getWorld().equals(worldName)) {
// Spawnuj warp entity na world threadu
world.execute(() -> {
Store store = world.getEntityStore().getStore();
store.addEntity(this.createWarp(warp, store), AddReason.LOAD);
});
}
}
}
}
}
---
DiscoverZoneEvent
Vyvolán když hráč objeví novou zónu.
Typ: Synchronní
Registrace: register() / registerGlobal()
Cancellable: Ne
getEventRegistry().register(DiscoverZoneEvent.class, event -> {
// Hráč objevil novou zónu
getLogger().atInfo().log("Zóna objevena!");
});
---
WorldPathChangedEvent
Vyvolán při změně waypoints/cest ve světě.
Typ: Synchronní
Registrace: register() / registerGlobal()
Cancellable: Ne
getEventRegistry().register(WorldPathChangedEvent.class, event -> {
// Cesty ve světě byly změněny
});
---
LoadedAssetsEvent
Vyvolán když jsou assety načteny nebo změněny.
Typ: Synchronní
Registrace: register()
Cancellable: Ne
// Příklad: Sledování změn modelů
getEventRegistry().register(LoadedAssetsEvent.class, ModelAsset.class, event -> {
Map modelMap = event.getLoadedAssets();
ModelAsset myModel = modelMap.get("MyModel"); if (myModel != null) {
// Model byl načten/změněn
this.cachedModel = Model.createUnitScaleModel(myModel);
}
});
---
Shrnutí World Eventů
| Event | Typ | Popis |
|-------|-----|-------|
| StartWorldEvent | Sync | Inicializace světa |
| AddWorldEvent | Sync | Svět přidán do Universe |
| AllWorldsLoadedEvent | Sync | Všechny světy načteny |
| ChunkPreLoadProcessEvent | Sync | Před načtením chunku |
| DiscoverZoneEvent | Sync | Hráč objevil zónu |
| WorldPathChangedEvent | Sync | Změna cest ve světě |
| LoadedAssetsEvent | Sync | Assety načteny/změněny |
---
Práce s World objektem
// Získání světa
World world = player.getWorld();
World defaultWorld = Universe.get().getWorld("default");// Vlastnosti světa
String name = world.getName();
WorldConfig config = world.getWorldConfig();
// Entity store
EntityStore entityStore = world.getEntityStore();
Store store = entityStore.getStore();
// Spawnování na world threadu
world.execute(() -> {
// Bezpečné operace na world threadu
store.addEntity(holder, AddReason.SPAWN);
});
// Kontrola threadu
if (world.isInThread()) {
// Jsme na správném threadu
}
---
Spawn Provider
Získání spawn pointů světa:
ISpawnProvider spawnProvider = world.getWorldConfig().getSpawnProvider();// Jeden spawn point (podle UUID hráče)
Transform spawn = spawnProvider.getSpawnPoint(world, playerUuid);
// Všechny spawn pointy
Transform[] spawnPoints = spawnProvider.getSpawnPoints();
// Konkrétní spawn point podle indexu
if (index >= 0 && index < spawnPoints.length) {
Transform spawn = spawnPoints[index];
}