Hej, chciałem zrobić plugin na statystyki gracza wraz z zapisem do bazy danych MySQL. Projekt wyglądał tak: Gracz wykonuje jakąś akcję, która jest nasłuchiwana przez plugin, np. kopie jakąś rudę, plugin sprawdza jaka to ruda i dodaje + 1 do obecnej wartości. Używam enuma do identyfikacji śledzonych statystyk. Wydaję mi się, że bezpośrednie zapytania do MySQL z prośbą o UPDATE mogą być nieco obciążające dla serwera kiedy jest np. 50 graczy, toteż postawiłem na hashmapy. Kiedy gracz wychodzi z serwera, wykonuje się funkcja "przelecenia" przez enum i zapisanie statystyk do bazy MySQL. Oprócz tego planuje autosave tych statystyk(10-20 min). Mój bezpośredni problem dotyczy hashmapy. Aby uniknąć tworzenia hashmap dla każdej wartości enuma(chyba, że faktycznie powinienem, nie jestem pewien, ale podzielcie się opiniami), postanowiłem stworzyć nową klase SaveMapValue w której utworzyłem po prostu
public SaveMapValue(Player v1, DataSaved v2){}
Gdzie DataSaved to wspomniany enum. Dzięki temu tworzę Hashmapę HashMap<SaveMapValue, Integer> i ustawiam wartość saveMap.put(new SaveMapValue(p, datasaved), 0). To działa. Problem jest kiedy chce odczytać tę wartość lub ją zmienić. Taka funkcja:
public static void IncrementPlayerData(Player p, DataSaved ds, Integer i){
SaveMapValue smv = new SaveMapValue(p, ds);
int value = saveMap.get(smv) + i;
saveMap.replace(smv, value);
}
wywala wtedy mi NullPointerException:
Byłbym wdzięczny za wszystkie rady!