Call checkSpawns from World instead of from Player

This commit is contained in:
Melledy
2022-04-25 14:12:35 -07:00
parent c3f9fd3ce3
commit 2228332f9d
4 changed files with 52 additions and 21 deletions

View File

@@ -10,6 +10,7 @@ import emu.grasscutter.command.CommandMap;
import emu.grasscutter.database.DatabaseHelper;
import emu.grasscutter.game.Account;
import emu.grasscutter.game.GenshinPlayer;
import emu.grasscutter.game.World;
import emu.grasscutter.game.dungeons.DungeonManager;
import emu.grasscutter.game.gacha.GachaManager;
import emu.grasscutter.game.managers.ChatManager;
@@ -26,6 +27,7 @@ public final class GameServer extends MihoyoKcpServer {
private final GameServerPacketHandler packetHandler;
private final Map<Integer, GenshinPlayer> players;
private final Set<World> worlds;
private final ChatManager chatManager;
private final InventoryManager inventoryManager;
@@ -50,6 +52,7 @@ public final class GameServer extends MihoyoKcpServer {
this.address = address;
this.packetHandler = new GameServerPacketHandler(PacketHandler.class);
this.players = new ConcurrentHashMap<>();
this.worlds = Collections.synchronizedSet(new HashSet<>());
this.chatManager = new ChatManager(this);
this.inventoryManager = new InventoryManager(this);
@@ -84,6 +87,10 @@ public final class GameServer extends MihoyoKcpServer {
return players;
}
public Set<World> getWorlds() {
return worlds;
}
public ChatManager getChatManager() {
return chatManager;
}
@@ -161,12 +168,32 @@ public final class GameServer extends MihoyoKcpServer {
}
public void onTick() throws Exception {
Iterator<World> it = this.getWorlds().iterator();
while (it.hasNext()) {
World world = it.next();
if (world.getPlayerCount() == 0) {
it.remove();
}
world.onTick();
}
for (GenshinPlayer player : this.getPlayers().values()) {
player.onTick();
}
OnGameServerTick.post(new GameServerTickEvent());
}
public void registerWorld(World world) {
this.getWorlds().add(world);
}
public void deregisterWorld(World world) {
// TODO Auto-generated method stub
}
@Override
public void onStartFinish() {