/** * @param unsavedEntities currently loaded persistent entities without owner that have not been saved yet. * This method removes entities it saves. */ private void preparePlayerStores(Set<EntityRef> unsavedEntities) { allPlayers = Maps.newHashMap(); allPlayers.putAll(unloadedPlayers); for (Map.Entry<String, PlayerStoreBuilder> playerEntry : loadedPlayers.entrySet()) { PlayerStoreBuilder playerStoreBuilder = playerEntry.getValue(); EntityData.PlayerStore playerStore = playerStoreBuilder.build(privateEntityManager); unsavedEntities.removeAll(playerStoreBuilder.getStoredEntities()); Long characterEntityId = playerStoreBuilder.getCharacterEntityId(); if (characterEntityId != null) { EntityRef character = privateEntityManager.getEntity(characterEntityId); unsavedEntities.remove(character); } allPlayers.put(playerEntry.getKey(), playerStore); } }
@Override public void deactivatePlayer(Client client) { EntityRef character = client.getEntity().getComponent(ClientComponent.class).character; PlayerStoreBuilder playerStoreBuilder = createPlayerStore(client, character); EntityData.PlayerStore playerStore = playerStoreBuilder.build(getEntityManager()); deactivateOrDestroyEntityRecursive(character); unloadedAndUnsavedPlayerMap.put(client.getId(), playerStore); }
private PlayerStoreBuilder createPlayerStore(Client client, EntityRef character) { LocationComponent location = character.getComponent(LocationComponent.class); Vector3f relevanceLocation; if (location != null) { relevanceLocation = location.getWorldPosition(); } else { relevanceLocation = new Vector3f(); } Long characterId; if (character.exists()) { characterId = character.getId(); } else { characterId = null; } return new PlayerStoreBuilder(characterId, relevanceLocation); }