Skip to content

Changelog

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 PetContainerBreakMarkerSystem listens on BreakBlockEvent and marks every ItemStack in the broken ItemContainerBlock (chest, crate, …) as player-dropped before Hytale’s drop pipeline (ItemContainerSystems.OnAddedOrRemoved.dropAllItemStacksItemComponent.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. PetBlockBreakXpHandler now skips blocks with an ItemContainerBlock component. Smashing a chest is not a mining activity; this also closes a chest-XP-farm path (place chest, smash, repeat).
  • pet.itemsPickedUp and totalItemsCollected moved behind the !playerDropped gate. 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 on DropItemEvent.PlayerRequest) and PetPlayerDeathMarkerSystem (RefChangeSystem<DeathComponent>, ordered between PlayerDropItemsConfig and DropPlayerDeathItems) 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.

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 inside config.json to 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 .*. Compiled Pattern[] 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 lootluck opens 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.

Initial release of the KyuubiSoft Pet System with 3 modules and 48 pet/mount types.

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.
  • 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 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
  • Player-configurable position: 6 presets (top-left, top-right, middle-left, middle-right, bottom-left, bottom-right)
  • Player-configurable layout: vertical or horizontal
  • Server defaults set in config.json, players override via /kspet menu
  • Displays pet name, level, XP progress, items collected, and active buff indicators
  • 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
  • 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
  • Level-scaled buffs applied to the pet owner
  • Proper buff stacking fix (no duplicate application)
  • Buffs reapply automatically on level-up
  • Position sync: player.setMountEntityId(networkId) — native engine sync for all players
  • Animation sync: ECS MountAnimationSyncSystem with playAnimation(), 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)
  • English (en-US) and German (de-DE) included
  • 74 localized keys covering all user-facing strings
  • Localization version 6
  • Full admin command suite via /kspetadmin
  • Player commands via /kspet (aliases: pet, pets)
  • Combat pet commands via /kscombatpet
  • Mount commands via /ksmount
  • 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
  • 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