Changelog
Changelog
Section titled “Changelog”v1.3.10 — 2026-04-27
Section titled “v1.3.10 — 2026-04-27”Loot Luck dupe hardening
Section titled “Loot Luck dupe hardening”A series of fixes that close the chest-stash dupe path against pet pickup XP, the items-collected counter, and the Loot Luck duplication roll. All three effects now sit behind a single !playerDropped gate, so collecting your own dropped loot is invisible to pet progression.
- Container-break dupe closed. New
PetContainerBreakMarkerSystemlistens onBreakBlockEventand marks everyItemStackin the brokenItemContainerBlock(chest, crate, …) as player-dropped before Hytale’s drop pipeline (ItemContainerSystems.OnAddedOrRemoved.dropAllItemStacks→ItemComponent.generateItemDrops) spawns the entities. Two redundant marker channels (BSON metadata stamp + 5-min itemId tracker) — the itemId tracker is the load-bearing one because the BSON stamp can be lost during the drop pipeline’s stack copy. Place loot in a chest, wait an hour, smash the chest: pet collects without XP, counter, or Loot Luck. - Container blocks no longer grant block-break XP.
PetBlockBreakXpHandlernow skips blocks with anItemContainerBlockcomponent. Smashing a chest is not a mining activity; this also closes a chest-XP-farm path (place chest, smash, repeat). pet.itemsPickedUpandtotalItemsCollectedmoved behind the!playerDroppedgate. Previously the two counters were incremented unconditionally on every successful pickup, even though XP and Loot Luck were already gated. Now collecting a Q-drop, a death drop, or a chest contents tick produces no progression effect at all.- Q-drop and death-drop marker systems shipped together.
PetPlayerDropMarkerSystem(BSON marker onDropItemEvent.PlayerRequest) andPetPlayerDeathMarkerSystem(RefChangeSystem<DeathComponent>, ordered betweenPlayerDropItemsConfigandDropPlayerDeathItems) cover the manual Q-drop and death-drop paths. Markers are stripped on respawn so Keep-Inventory mode does not leave BSON-tagged items that would break crafting.
New: Loot Luck blacklist
Section titled “New: Loot Luck blacklist”Admin-configurable item-id blacklist that blocks Loot Luck duplication for matched items. Independent from the Pickup Filter (which is per-player and controls whether the pet collects at all) — the blacklist only suppresses the duplication roll, the pet still picks up and the player still gets the item once. Useful for de-valuing common drops (Dirt, Stone) and high-tier gear (Tools, Weapons) that should never duplicate.
- Storage:
data/loot_luck_blacklist.json. Dedicated file rather than a section insideconfig.jsonto avoid clobbering parallel admin edits when the UI live-saves. - Pattern syntax: case-insensitive. Plain patterns (
Dirt) match as substring. Patterns with*(*_Tool_*,Ore_*) treat*as.*. CompiledPattern[]cache rebuilt on every load/add/remove/toggle/clear/reload, so admin UI edits hit the next pickup tick without a server reload. - Admin UI: new
/kspetadmin lootluckopens a page with six quick-toggle buttons (Tools / Weapons / Armor / Food / Ores / Resources), a custom-pattern input, a paginated list of active patterns with per-row delete, and Clear All. Every mutation live-saves to disk.
v1.0.0 — 2026-03-25
Section titled “v1.0.0 — 2026-03-25”Initial release of the KyuubiSoft Pet System with 3 modules and 48 pet/mount types.
Module System
Section titled “Module System”Three independently toggleable modules via config.json:
- Pickup Pets (collector) — 26 types. Miniature companion NPCs that follow the player and automatically collect nearby items. Configurable pickup filters with presets and blacklist/whitelist modes.
- Combat Pets (combat) — 13 types. Always-aggressive battle companions with floating damage numbers, attack animations, and per-entity animation sets.
- Mounts (mount) — 9 types. Instant summon via Mount Horn item, native engine position sync (
player.setMountEntityId), F-key dismount, configurable speed and health per mount type.
Random Stat System
Section titled “Random Stat System”- 11-stat pool:
damage_bonus,max_health,pickup_radius,xp_bonus,stamina_regen,mana_regen,crit_chance,armor_bonus,loot_luck,thorns,life_steal - Rarity-based stat slots: uncommon (2), rare (3), epic (4), legendary (5)
- Stats unlock progressively at level thresholds defined per rarity
- Quality range scaling per rarity (legendary can exceed base maximum at 1.2x)
- Same stat type can appear up to 3 times per pet
- Combat pets roll from a restricted combat-only stat pool
Reroll and Refine Scrolls
Section titled “Reroll and Refine Scrolls”- Reroll Scroll — re-rolls both stat type and value randomly
- Refine Scroll — keeps stat type, re-rolls value only
- Separate scrolls for pickup pets (
Pet Reroll Scroll,Pet Refine Scroll) and combat pets (Battle Reroll Scroll,Battle Refine Scroll) - Scroll usage requires the stat to be unlocked and a pet to be summoned
Pet Tracker HUD
Section titled “Pet Tracker HUD”- Player-configurable position: 6 presets (
top-left,top-right,middle-left,middle-right,bottom-left,bottom-right) - Player-configurable layout:
verticalorhorizontal - Server defaults set in
config.json, players override via/kspetmenu - Displays pet name, level, XP progress, items collected, and active buff indicators
UI Pages
Section titled “UI Pages”- Pet Menu — Owned pets grid with active pet info, HUD settings, 5 pet slots per page with pagination
- Pet Collection — Overview of all pet types with ownership status, 6 entries per page
- Bestiary — Discovery tracker with highest level and discovery date, 5 entries per page
- Filter — Pickup filter rule management with presets, 12 rules per page
- Reroll — Stat reroll interface for pickup and combat pets
- Refine — Stat refine interface for pickup and combat pets
- Mount Page — Mount selection and summoning, 3 slots per page
Safety Features
Section titled “Safety Features”- Gamemode change protection: Follow target auto-refreshes when gamemode changes to prevent orphaned NPCs
- Drop guard: Dropping a pet egg, battle rune, or mount horn automatically dismisses the associated pet/mount
- Orphan NPC cleanup: Periodic sweep + on-join check + manual admin commands to remove stale pet NPCs
- Startup/shutdown cleanup:
forceRemoveAllKSRoleNpcs()with CountDownLatch on server start/stop
Buff System
Section titled “Buff System”- Level-scaled buffs applied to the pet owner
- Proper buff stacking fix (no duplicate application)
- Buffs reapply automatically on level-up
Mount System Details
Section titled “Mount System Details”- Position sync:
player.setMountEntityId(networkId)— native engine sync for all players - Animation sync: ECS
MountAnimationSyncSystemwithplayAnimation(), MovementStates+Velocity sync, keepAliveTicks hysteresis - Walk/Run detection: Uses MovementStates flags only (not Velocity — oscillates per tick)
- Clean dismount: Native NPCMountSystems handles player state, entity removed via UUID-lookup (500ms delayed)
- NPCMountComponent: Interactable set together with NPCMountComponent (OnAdd compatibility)
- 52 item definitions total: pet eggs (26), battle runes (13), mount horns (9), scrolls (4)
- Auto-generated item templates for custom pet types (written to
item-templates/when a pet type’s summon item is missing from server content)
Localization
Section titled “Localization”- English (
en-US) and German (de-DE) included - 74 localized keys covering all user-facing strings
- Localization version 6
Commands
Section titled “Commands”- Full admin command suite via
/kspetadmin - Player commands via
/kspet(aliases:pet,pets) - Combat pet commands via
/kscombatpet - Mount commands via
/ksmount
Bugfixes
Section titled “Bugfixes”- Placed items (flowers, furniture) no longer picked up by pets
- Combat pets no longer use the pickup system
- Items go to Storage first (not Hotbar) to avoid animation flicker
- Filter works without active pet (first collector pet as fallback)
- “Press F to interact” prompt removed from pets and mounts
- Adjusted model scales for 8 pets
Technical
Section titled “Technical”- Standalone plugin — no dependencies on other KyuubiSoft mods required
- File-first config pattern with JAR fallback
- Auto-save with configurable interval and dirty-flag tracking