File Details
arcadia-pets-1.2.11
- R
- May 1, 2026
- 546.07 KB
- 13.7K
- 1.21.1
- NeoForge
File Name
arcadia-pets-1.2.11.jar
Supported Versions
- 1.21.1
Curse Maven Snippet
## [1.2.11] - 2026-05-01 (latest)
### Fixed
- **Pets disappearing or partially missing after server hop in the 3-server FR cluster** — `PetCollectionSavedData.loadFromDatabase` short-circuited via `if (collections.containsKey(playerUuid)) return;` whenever the in-memory map already held the player. But the SavedData `load(CompoundTag)` runs at server startup and pre-fills that map from `world/data/arcadia_pet_collections.dat` — the LOCAL world copy of every player who has ever deposited on this server. So every login on a multi-server MySQL setup read a stale snapshot from disk, ignored MySQL entirely, and the next deposit pushed that stale list back to MySQL — wiping the pets the player had on the other servers. Three-front fix: (1) `loadFromDatabase` now uses a `loadedFromDb` Set tracked per server-session and ALWAYS replaces the cached entry with what MySQL returns (an empty MySQL collection is a valid state, no longer masked by the local cache). (2) The SavedData `save()` writes an empty `players` tag when MySQL is active — MySQL is the single source of truth, the local `.dat` no longer gets to shadow it after a restart. (3) `PetEventHandler.onPlayerLogin` now invalidates and force-refreshes the collection from MySQL on every login (instead of waiting for a lazy `getCollection()` call that could fire after a deposit had already touched the stale map). `onPlayerLogout` also invalidates so a return visit re-pulls fresh state.
### Correctifs
- **Pets qui disparaissent ou en manquent quelques-uns après un changement de serveur dans le cluster FR à 3 serveurs** — `PetCollectionSavedData.loadFromDatabase` court-circuitait via `if (collections.containsKey(playerUuid)) return;` dès que la map en mémoire contenait déjà le joueur. Mais le `load(CompoundTag)` du SavedData s'exécute au démarrage du serveur et pré-remplit cette map depuis `world/data/arcadia_pet_collections.dat` — la copie LOCALE du monde de chaque joueur ayant déjà déposé sur ce serveur. Donc chaque connexion sur un setup multi-serveur MySQL lisait un snapshot périmé du disque, ignorait MySQL totalement, et le dépôt suivant repoussait cette liste périmée vers MySQL — effaçant les pets que le joueur avait sur les autres serveurs. Correction sur trois fronts : (1) `loadFromDatabase` utilise maintenant un Set `loadedFromDb` suivi par session serveur et REMPLACE TOUJOURS l'entrée en cache par ce que MySQL retourne (une collection MySQL vide est un état valide, plus masqué par le cache local). (2) Le `save()` du SavedData écrit un tag `players` vide quand MySQL est actif — MySQL est l'unique source de vérité, le `.dat` local ne peut plus l'éclipser après un redémarrage. (3) `PetEventHandler.onPlayerLogin` invalide et force-refresh la collection depuis MySQL à chaque connexion (au lieu d'attendre un appel lazy `getCollection()` qui pourrait se déclencher après qu'un deposit ait déjà touché la map périmée). `onPlayerLogout` invalide aussi pour qu'un retour re-pull un état frais.

