File Details
arcadia-pets-1.2.13
- R
- May 19, 2026
- 631.43 KB
- 1.1K
- 1.21.1
- NeoForge
File Name
arcadia-pets-1.2.13.jar
Supported Versions
- 1.21.1
Curse Maven Snippet
## [1.2.13] - 2026-05-20
### Security
- **Removed two arbitrary-item duplication vectors in pet skills** — `LuckyOinkSkill` (pig) at level 10 + full effectiveness used to duplicate **every** drop from a mob kill via `event.getDrops().add(...item.copy())`. At lower levels it duplicated one random drop. Any mob, any drop, any mod-added item — an uncapped item dupe. The skill now grants a flat XP bonus on kill (+1/+3/+5 XP per tier) so it still rewards play without spawning duplicate items. `EnqueteSkill` (Nathinator) had the exact same shape: on block break, called `event.getState().getBlock().asItem()` and spawned a copy at the broken position. Same vulnerability that retired `AncientSenseSkill`. Now grants a flat XP bonus (+1/+2/+4) on ore breaks plus Glowing/Haste at level 5/10 — no items spawned.
### Fixed
- **Rogue invulnerable pets attacking their own owner after relog** — A player reported their pet no longer recognized them as owner, started attacking, and was impossible to kill. Root cause: `PetLiteAiMixin` short-circuited `Mob.serverAiStep` only while `PetManager.petEntityIdToOwner` had a live mapping for the entity ID; if the mapping was missing (entity survived a server restart, escaped `handleTaggedEntityJoin`, or was loaded from a stale chunk), the mixin returned early and the full vanilla AI ran — including default targeting for hostile-mob pets (Wither Skeleton, Iron Golem, Ravager, etc.). Combined with `setInvulnerable(true)` from the original summon (never cleared), the rogue pet was unkillable. Now the mixin's orphan branch immediately `setNoAi(true) + setInvulnerable(false) + setTarget(null) + setLastHurtByMob(null) + discard()` instead of falling through to vanilla AI. The same neutralization was added to `handleTaggedEntityJoin` (capture-mod release path) and `tickDuplicateRescans` (late-stage rescan) so any path that catches a stray pet drops invulnerability before discarding — closes the window where the entity can bite a passerby for the one tick between `discard()` being called and the level's removal pass running. Also catches entities tagged `arcadia_pet=true` but with missing `PetID`/`OwnerUUID` NBT (corrupt save / `/summon` with crafted NBT).
- **Staff pet pseudos refreshed (skin no longer broken on rename)** — Two helpers changed their Mojang username, so the lib's `StaffPetEntity` couldn't resolve the right skin profile anymore. `Sea6945` → `Lunaria02`, `Nathinator_YTB` → `NathanLeGrosBG`. Updated in three places that all must stay in sync: `arcadia-lib StaffPetEntities` (drives the actual skin lookup), `arcadia-lib` lang files (`en_us.json` / `fr_fr.json`), and `arcadia-pets StaffPetNames` (drives displayed text in tooltips / compendium / pedestal / duel screens). Required a lib rebuild — done in place at 1.2.11.
- **`FeatherfallSkill` cooldown map leaked memory** — Cooldowns were stored in a `static HashMap<UUID, Long>` with no eviction path. Every player who landed hard once kept their entry forever. Moved to the player's persistent NBT (`ArcadiaFeatherfallLast`), matching the pattern used by every other cooldown'd skill. Map dies with the player.
### Performance
- **`ComboFufuSkill` no longer iterates the full pet collection every tick** — `playerHasStaffPet("staff_fricadelle")` was called from `onTick` (≈ every 20 ticks per FuFu pet) and walked every item in the player's `PetCollectionSavedData`. For a player with a large collection that's serious wasted work, since the answer almost never changes mid-session. Added a per-player TTL cache (5s) and a `clearCache(playerId)` hook called from `PetEventHandler.onPlayerLogout` via `PetSkills.onPlayerLogout` so stale entries don't pile up.
### Changed
- **arcadia-lib dependency bumped to `[1.2.11,)`** — Pets requires the lib version that ships the corrected staff usernames. Old jar (`1.2.2`) removed from `libs/`.
### Sécurité
- **Suppression de deux vecteurs de duplication d'items arbitraires dans les compétences** — `LuckyOinkSkill` (cochon) au niveau 10 avec efficacité maximale dupliquait **chaque** drop d'un kill via `event.getDrops().add(...item.copy())`. Aux niveaux inférieurs, un drop aléatoire était dupliqué. N'importe quel mob, n'importe quel drop, n'importe quel item ajouté par un mod — un dupe d'items non-plafonné. La compétence donne désormais un bonus d'XP plat au kill (+1/+3/+5 XP par palier) pour conserver la récompense sans dupliquer d'items. `EnqueteSkill` (Nathinator) avait exactement la même forme : à la cassure d'un bloc, appel à `event.getState().getBlock().asItem()` puis spawn d'une copie à la position. Même vulnérabilité que celle qui avait fait désactiver `AncientSenseSkill`. La compétence donne désormais un bonus d'XP plat (+1/+2/+4) sur les casses de minerai plus Glowing/Haste aux niveaux 5/10 — aucun item spawné.
### Correctifs
- **Pets rebelles invincibles qui attaquaient leur propre propriétaire après relog** — Un joueur a signalé que son pet ne le reconnaissait plus comme propriétaire, l'attaquait, et était impossible à tuer. Cause racine : `PetLiteAiMixin` court-circuitait `Mob.serverAiStep` uniquement tant que `PetManager.petEntityIdToOwner` avait un mapping vivant pour l'ID d'entité ; si le mapping était absent (entité survécue à un redémarrage serveur, échappée à `handleTaggedEntityJoin`, ou chargée depuis un chunk obsolète), le mixin sortait tôt et l'AI vanilla complète tournait — y compris le ciblage par défaut pour les pets de mobs hostiles (Wither Skeleton, Iron Golem, Ravager, etc.). Combiné avec `setInvulnerable(true)` du summon original (jamais retiré), le pet rebelle était intuable. Désormais la branche orphan du mixin fait immédiatement `setNoAi(true) + setInvulnerable(false) + setTarget(null) + setLastHurtByMob(null) + discard()` au lieu de retomber dans l'AI vanilla. La même neutralisation a été ajoutée à `handleTaggedEntityJoin` (chemin de relâche par mod de capture) et `tickDuplicateRescans` (rescan tardif) pour qu'aucun chemin n'oublie de retirer l'invulnérabilité avant de discard — ferme la fenêtre d'un tick entre `discard()` et le pas de suppression du niveau pendant laquelle l'entité peut encore mordre. Attrape aussi les entités taguées `arcadia_pet=true` avec NBT `PetID`/`OwnerUUID` manquant (sauvegarde corrompue / `/summon` avec NBT bricolé).
- **Pseudos des pets staff rafraîchis (skin de retour après changement de nom)** — Deux helpers ont changé leur pseudo Mojang, donc le `StaffPetEntity` de la lib ne pouvait plus résoudre le bon profil de skin. `Sea6945` → `Lunaria02`, `Nathinator_YTB` → `NathanLeGrosBG`. Mis à jour aux trois endroits qui doivent rester synchronisés : `arcadia-lib StaffPetEntities` (qui pilote la résolution du skin), fichiers de langue `arcadia-lib` (`en_us.json` / `fr_fr.json`), et `arcadia-pets StaffPetNames` (qui pilote le texte affiché dans tooltips / compendium / piédestal / écrans de duel). Rebuild de la lib requis — effectué en place sur 1.2.11.
- **Fuite mémoire de la map de cooldown de `FeatherfallSkill`** — Les cooldowns étaient stockés dans un `static HashMap<UUID, Long>` sans aucune éviction. Chaque joueur ayant atterri lourdement une fois gardait son entrée à vie. Déplacé dans le NBT persistant du joueur (`ArcadiaFeatherfallLast`), comme toutes les autres compétences à cooldown. La map disparaît avec le joueur.
### Performance
- **`ComboFufuSkill` n'itère plus la collection complète à chaque tick** — `playerHasStaffPet("staff_fricadelle")` était appelé depuis `onTick` (env. tous les 20 ticks par pet FuFu) et parcourait chaque item du `PetCollectionSavedData` du joueur. Pour un joueur avec une grosse collection c'est un gaspillage sérieux, alors que la réponse change rarement en milieu de session. Ajout d'un cache TTL par joueur (5s) et d'un hook `clearCache(playerId)` appelé depuis `PetEventHandler.onPlayerLogout` via `PetSkills.onPlayerLogout` pour ne pas laisser d'entrées orphelines.
### Modifications
- **Dépendance arcadia-lib relevée à `[1.2.11,)`** — Pets requiert la version de la lib qui embarque les pseudos staff corrigés. Ancien jar (`1.2.2`) retiré de `libs/`.

