Złe praktyki

Praktyki które należy unikać, mogą spowodować wyciek pamięci(memory leaks), opóźnienia lub wszelkiego rodzaju niespójności.

Przechowywanie odwołań

Niektóre przypadki, takie jak

nigdy nie przechowuj w pluginie.

Głównymi powodami są:

  • Odwołania uniemożliwiają prawidłowe usuwanie śmieci

  • Wystąpienia mogą już nie być ważne

This can easily be avoided by using the corresponding snapshots or saving the UUID of the given instances and requesting a live instance when you need it.

IO w głównym wątku

Wykonywanie operacji wejścia / wyjścia, takich jak ładowanie pliku, wszelkiego rodzaju zapytania do stron internetowych zajmują dużo czasu i blokują główny wątek serwera, wpływa to na TPS. Takie zadania powinny być wykonywane w osobnych wątkach lub przy użyciu funkcji asynchronicznej. Jednak ładowanie plików konfiguracyjnych serwera przy starcie jest jak najbardziej w porządku.

Sponge.asyncScheduler().submit(Task.builder().execute(this::checkForUpdates).build());

Więcej informacji można zdobyć w scheduler docs.

Jeśli zostanie to zrobione niepoprawnie, klientom może wyrzucić błąd, a nawet wyłączyć serwer.

Uzyskiwanie dostępu do obiektów gry poza głównym wątkiem

Accessing game objects outside of the main thread can lead to crashes, inconsistencies and various other problems and should be avoided. If you have a lengthy operation on a different thread use the scheduler to make changes to such game objects on the main thread. If you want to use a game object in a different thread use a snapshot of the instance or a detached data container.

Ostrzeżenie

If this is done wrong, you can get a ConcurrentModificationException with or without a server crash at best and a corrupted player/world/server at worst.