HyCodeYourTale

World Events

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];
}


Last updated: 20. ledna 2026