All versions
0.3.0
Release
Animal Pen v0.3.0 - Forge Edition2 days ago 2
Uploaded by
Compatibility
Minecraft: Java Edition
1.20–1.20.1
1.19.2–1.19.4
Platform
Forge
Supported environments
Client and server
Changes
[0.3.0] - Individual Animals & Interface Rework
Highlights
- Animal Pens now retain every animal as an individual instead of representing the entire pen with one shared NBT template
- Sheep of different colors retain their own color and produce the correct wool when sheared or killed
- The Animal Pen information screen has been redesigned into a compact, coherent, responsive interface
Added
-
Individual Animal Storage
- Stores complete NBT, health, age, appearance, name, ownership, and variant data for every animal in a pen
- Preserves differently colored sheep and other same-type animal variants in one pen
- Includes migration support for existing count-based Animal Pen saves
- Uses compact client update data so full NBT for all 64 animals is not sent with every visual update
-
Per-Animal Sheep Drops
- Shearing evaluates every stored adult sheep individually
- Mixed-color pens produce the corresponding wool colors rather than copying the front sheep's color
- Wool of matching colors is merged into stacks before being given to the player
- Baby sheep are excluded from shearing
-
Improved Capture Safety
- Prevents players from capturing another player's owned animals
- Prevents capture while an animal is mounted, carrying passengers, or leashed
- Keeps the animal in the world if the captured item cannot be inserted or spawned safely
- Validates captured entity data before deposit or release
- Prevents releasing animals into obstructed spaces
-
Passive Resource Collection
- Empty-hand right-click now collects stored passive resources
- Resource changes synchronize to the Animal Pen screen
- Resource icons in the screen include counts and hover tooltips
Changed
-
Breeding Rework
- Breeding now feeds at most two pairs (2-4 animals) per cycle
- Baby capacity is reserved when food is consumed, preventing deposits from filling those slots mid-cycle
- Full pens no longer consume breeding food without producing offspring
- Breeding creates real offspring NBT from individual parents instead of incrementing a shared adult count
- Stored babies continue growing inside the pen
- Individual vanilla age and post-breeding cooldown values continue ticking while stored
- Breeding timing now uses level game time for consistent server/client progress and unload behavior
-
Combat Rework
- Sneak-attack targets the front animal while ordinary attacks remain available for breaking the pen
- Sneak-attacking an occupied pen no longer progresses block mining
- Damage is calculated from the player's attack-damage attribute and attack strength
- Loot tables receive the actual killed animal and its individual NBT state
-
Tool Interactions
- Bucket interactions dispatch directly to chickens or milkable animals without contradictory messages
- Buckets, bottles, and bowls now use vanilla-style filled-container handling
- Creative-mode interactions no longer consume captured animals or empty containers
- Milking, stewing, shearing, and brushing respect the targeted animal's adult state
- Tool failures are treated as handled pen interactions and no longer fall through to unrelated item behavior
-
Animal Pen Screen
- Replaced the oversized split overlay with one centered, bounded panel
- Added consistent preview, pen status, breeding, and stored-resource cards
- Improved spacing, alignment, typography hierarchy, progress bars, and footer controls
- Added responsive sizing for different window and GUI scales
- Reduced the animal preview size and refreshes it when the front animal changes
- Moved all screen text to localization keys
-
Captured Animal Rendering
- Captured items are cached by entity type and individual NBT instead of entity type alone
- Different sheep colors and other variants now render correctly in inventories, hands, item frames, and as dropped items
- Added a bounded render cache that is cleared when changing worlds
Fixed
- Same-type animals losing or duplicating names, colors, owners, ages, health, and variant data
- Damaged animals using their current health as their permanent maximum health
- Extracting a damaged animal restoring health from an unrelated shared template
- Stale breeding state carrying across extraction, death, or replacement with another species
- Breeding progress and passive resources appearing stale in the client screen
- Passive honey and other generated resources being inaccessible without breaking the pen
- Chicken egg collection showing an incorrect "cannot milk" message first
- Entity loot conditions evaluating against the attacking player instead of the killed animal
- Client and server disagreeing about whether arbitrary held-item interactions succeeded
- Client-only ghost resource drops when an Animal Pen was removed
- Partial inventory insertion potentially duplicating passive resource drops
- Item removal utilities removing incorrect quantities across multiple stacks
- Captured Animal items reusing the first-rendered animal's appearance
- Renderer shadow state remaining disabled after a rendering exception
Technical
- Replaced deprecated item client-extension initialization with
RegisterClientExtensionsEvent - Added per-animal save serialization with backward-compatible legacy migration
- Added compact front-animal serialization for block entity update packets
- Centralized entity validation and safer NBT copying
- Improved render entity cleanup when caches, screens, block entities, or worlds are removed
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:MEeVjOFS:rEci3TiX"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:MEeVjOFS:rEci3TiX"
}

