
SacredCows
SacredCows is a configurable Minecraft Fabric mod that punishes players for harming cows with customizable consequences and keeps detailed statistics of cow-related offenses.
Автор: voidfemme6335обновлён 26 сент. 2026 г.
ПроклятыеМеханики игрыМобы
Описание
SacredCows

A configurable Fabric mod that gives cattle divine status as stewards of the earth. Punishes cow-assaulters and gives cow-friends special buffs!
Features
- (NEW!) Teleport to your favorite cow by naming the cow, and milking her! Drinking the milk will bring you back to your bovine companion's side.
- Configurable punishments: (instant) death, damage, or lightning-only
- Custom death messages with player name placeholders
- Cosmetic lightning effects (won't harm cows)
- Scoreboard tracking for cow assaults and kills
- Projectile protection (arrows, snowballs, etc.)
- OP-level bypass for admins
Installation
- Install a Fabric server with Fabric API.
- Drop the JAR into your
mods/folder. - Restart the server.
- Optionally edit
config/sacredcows.propertiesto customize behavior.
Commands
| Command | Description | Permission |
|---|---|---|
/sacredcows | Show help | Everyone |
/sacredcows help | Show help | Everyone |
/sacredcows enabled <true|false> | Enable or disable the mod | Operator |
/sacredcows bypass <true|false> | Toggle admin bypass | Operator |
/sacredcows debug <true|false> | Toggle debug logging | Operator |
/sacredcows lightning_effect <true|false> | Toggle lightning visual | Operator |
/sacredcows punishment_type <death|damage|lightning_only> | Set punishment type | Operator |
/sacredcows print_config | Show current config with unsaved changes highlighted | Everyone |
/sacredcows save_config | Write current settings to file | Operator |
/sacredcows reload_config | Reload settings from file | Operator |
/sacredcows stats player <name> | Show stats for a player | Everyone |
/sacredcows stats global | Show server-wide totals | Everyone |
Admin commands require OP level 2 by default (configurable).
Configuration
The mod creates config/sacredcows.properties on first run. Key settings:
settings.enabled=true
settings.punishment-type=death # death, damage, or lightning_only
settings.damage-amount=10.0
settings.lightning-effect=true
settings.custom-death-messages=true
settings.allow-bypass=true
settings.bypass-op-level=2
settings.admin-op-level=2
scoreboard.enabled=true
scoreboard.track-assaults=true
scoreboard.track-kills=true
# Custom death messages — edit manually, %player% is replaced with the player's name
death-messages.0=%player% was moo-rdered for their bovine crimes
death-messages.1=%player% faced divine bovine retribution
Use /sacredcows save_config to persist changes made via commands. Changes take effect immediately without saving.
Compatibility
- Minecraft: 26.1
- Fabric Loader: 0.18.6
- Java: 25
License
No formal license. Use it however you want.
Последние версии
Все версии →release
SacredCows 6.1.2
6.1.226 сент. 2026 г.78Minecraft: 26.3fabric
Что нового
## [6.0.1]
**⚠️ Warning: This version removes the custom `sacredcows:cow_id` data component.**
Milk buckets tagged by SacredCows 6.0.0 or earlier will lose their stored teleport
target after updating, and depending on your Minecraft version may not survive being
loaded at all. **Back up your world before updating.** There is no automatic migration:
after updating, simply re-milk any named cows to mint fresh teleport buckets.
If you ran this mod server-side only and your players were being kicked with a registry
sync error ("registry entry sacredcows:cow_id is missing from local registry"), this
release fixes that — the mod no longer adds anything to a synced registry and is once
again safe to install on the server alone.
### Changed
- Cow teleport data is now stored inside vanilla `minecraft:custom_data` instead of a
dedicated `sacredcows:cow_id` data component. This removes the only modded entry in a
synchronized registry, so vanilla clients can connect to a server running SacredCows
without installing the mod themselves.
### Removed
- The `sacredcows:cow_id` `DataComponentType` and its registration. This was the cause of
the forced client-install / registry sync failure introduced in 6.0.0.
### Migration
- **None provided by design.** Pre-6.0.1 milk buckets are not converted. Back up first,
then re-milk named cows to recreate working teleport buckets.
release
SacredCows 6.0.2
6.0.222 июл. 2026 г.74Minecraft: 26.2fabric
Что нового
## [6.0.1]
**⚠️ Warning: This version removes the custom `sacredcows:cow_id` data component.**
Milk buckets tagged by SacredCows 6.0.0 or earlier will lose their stored teleport
target after updating, and depending on your Minecraft version may not survive being
loaded at all. **Back up your world before updating.** There is no automatic migration:
after updating, simply re-milk any named cows to mint fresh teleport buckets.
If you ran this mod server-side only and your players were being kicked with a registry
sync error ("registry entry sacredcows:cow_id is missing from local registry"), this
release fixes that — the mod no longer adds anything to a synced registry and is once
again safe to install on the server alone.
### Changed
- Cow teleport data is now stored inside vanilla `minecraft:custom_data` instead of a
dedicated `sacredcows:cow_id` data component. This removes the only modded entry in a
synchronized registry, so vanilla clients can connect to a server running SacredCows
without installing the mod themselves.
### Removed
- The `sacredcows:cow_id` `DataComponentType` and its registration. This was the cause of
the forced client-install / registry sync failure introduced in 6.0.0.
### Migration
- **None provided by design.** Pre-6.0.1 milk buckets are not converted. Back up first,
then re-milk named cows to recreate working teleport buckets.
release
SacredCows 6.0.1
6.0.120 июн. 2026 г.33Minecraft: 26.2fabric
Что нового
## [6.0.1]
**⚠️ Warning: This version removes the custom `sacredcows:cow_id` data component.**
Milk buckets tagged by SacredCows 6.0.0 or earlier will lose their stored teleport
target after updating, and depending on your Minecraft version may not survive being
loaded at all. **Back up your world before updating.** There is no automatic migration:
after updating, simply re-milk any named cows to mint fresh teleport buckets.
If you ran this mod server-side only and your players were being kicked with a registry
sync error ("registry entry sacredcows:cow_id is missing from local registry"), this
release fixes that — the mod no longer adds anything to a synced registry and is once
again safe to install on the server alone.
### Changed
- Cow teleport data is now stored inside vanilla `minecraft:custom_data` instead of a
dedicated `sacredcows:cow_id` data component. This removes the only modded entry in a
synchronized registry, so vanilla clients can connect to a server running SacredCows
without installing the mod themselves.
### Removed
- The `sacredcows:cow_id` `DataComponentType` and its registration. This was the cause of
the forced client-install / registry sync failure introduced in 6.0.0.
### Migration
- **None provided by design.** Pre-6.0.1 milk buckets are not converted. Back up first,
then re-milk named cows to recreate working teleport buckets.
release
SacredCows 6.0.0
6.0.019 июн. 2026 г.25Minecraft: 26.2fabric
Что нового
## [6.0.0]
- Ported to the Chaos Cubed update. New versions of:
- minecraft_version -> 26.2 (**Chaos Cubed!**)
- loader_version -> 0.19.3
- fabric_version -> 0.152.0
- loom -> 1.17
- gradle -> 9.5.1
release
SacredCows 5.0.1
5.0.129 мая 2026 г.25Minecraft: 26.1fabric
Что нового
# Changelog
All notable changes to CowMurder will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [5.0.1]
### Fixed
- Severe bug that crashed single-player client instances on startup. Moved the
call to load `cowPositions` inside the `SERVER_STARTED` registration
## [5.0.0]
### Breaking Changes
- All per-setting commands have been removed in favor of a unified command
interface. Existing scripts will break. Old → new:
- `/sacredcows enabled <bool>` → `/sacredcows toggle mod_status` (or `enable`/`disable`)
- `/sacredcows bypass <bool>` → `/sacredcows toggle bypass_status`
- `/sacredcows debug <bool>` → `/sacredcows toggle debug_mode`
- `/sacredcows lightning_effect <bool>` → `/sacredcows toggle lightning_effect`
- `/sacredcows punishment_type <mode>` → `/sacredcows set punishment <mode>`
- `/sacredcows save_config` → `/sacredcows config save`
- `/sacredcows reload_config` → `/sacredcows config reload`
- `/sacredcows print_config` → `/sacredcows config print`
- `PunishmentMode.fromString` no longer accepts the aliases `kill`, `hurt`. Use `death`, `damage`, `lightning_only` OR `lightning-only`.
- `/sacredcows config print` now requires operator permission (previously
available to everyone).
- `CowPositionsData` is no longer a singleton. The static `getInstance()`
factory has been removed; callers must now construct it with
`new CowPositionsData(owner, config)` and call `load()` explicitly.
- `CowProtectionFeature` constructor parameter order changed from
`(SacredCows, CowConfig, TickCounter)` to `(SacredCows, TickCounter, CowConfig)`.
- `CowChunkLoaderFeature` constructor now takes
`(SacredCows, TickCounter, CowPositionsData, CowConfig)` instead of
`(SacredCows, TickCounter)`.
### Added
- New unified command surface:
- `/sacredcows toggle <setting>` — flip a boolean setting
- `/sacredcows enable <setting>` / `disable <setting>` — set a boolean explicitly
- `/sacredcows set <setting> <value>` — set any setting to a value
- `/sacredcows get <setting>` — show a setting's current value
- `/sacredcows config <print|save|reload>` — config file operations
- Tab completion for setting names on all of the above.
- New `Setting` sealed interface hierarchy (`BoolSetting`, `IntSetting`,
`DoubleSetting`, `StringSetting`, `EnumSetting<E>`) that owns its own
parsing, serialization, and chat-display formatting.
- `/sacredcows stats` commands now report when the scoreboard or
individual assault/kill tracking is disabled, rather than silently
printing nothing.
- Build now compiles with `-Xlint:all -Werror`.
- Shadowed `error_prone_annotations` 2.49.0 to silence the older version
pulled in transitively by Gson.
### Changed
release
SacredCows 5.0.0
5.0.025 мая 2026 г.28Minecraft: 26.1, 26.1.1, 26.1.2fabric
Что нового
### Breaking Changes
- All per-setting commands have been removed in favor of a unified command
interface. Existing scripts will break. Old → new:
- `/sacredcows enabled <bool>` → `/sacredcows toggle mod_status` (or `enable`/`disable`)
- `/sacredcows bypass <bool>` → `/sacredcows toggle bypass_status`
- `/sacredcows debug <bool>` → `/sacredcows toggle debug_mode`
- `/sacredcows lightning_effect <bool>` → `/sacredcows toggle lightning_effect`
- `/sacredcows punishment_type <mode>` → `/sacredcows set punishment <mode>`
- `/sacredcows save_config` → `/sacredcows config save`
- `/sacredcows reload_config` → `/sacredcows config reload`
- `/sacredcows print_config` → `/sacredcows config print`
- `PunishmentMode.fromString` no longer accepts the aliases `kill`, `hurt`. Use `death`, `damage`, `lightning_only` OR `lightning-only`.
- `/sacredcows config print` now requires operator permission (previously
available to everyone).
- `CowPositionsData` is no longer a singleton. The static `getInstance()`
factory has been removed; callers must now construct it with
`new CowPositionsData(owner, config)` and call `load()` explicitly.
- `CowProtectionFeature` constructor parameter order changed from
`(SacredCows, CowConfig, TickCounter)` to `(SacredCows, TickCounter, CowConfig)`.
- `CowChunkLoaderFeature` constructor now takes
`(SacredCows, TickCounter, CowPositionsData, CowConfig)` instead of
`(SacredCows, TickCounter)`.
### Added
- New unified command surface:
- `/sacredcows toggle <setting>` — flip a boolean setting
- `/sacredcows enable <setting>` / `disable <setting>` — set a boolean explicitly
- `/sacredcows set <setting> <value>` — set any setting to a value
- `/sacredcows get <setting>` — show a setting's current value
- `/sacredcows config <print|save|reload>` — config file operations
- Tab completion for setting names on all of the above.
- New `Setting` sealed interface hierarchy (`BoolSetting`, `IntSetting`,
`DoubleSetting`, `StringSetting`, `EnumSetting<E>`) that owns its own
parsing, serialization, and chat-display formatting.
- `/sacredcows stats` commands now report when the scoreboard or
individual assault/kill tracking is disabled, rather than silently
printing nothing.
- Build now compiles with `-Xlint:all -Werror`.
- Shadowed `error_prone_annotations` 2.49.0 to silence the older version
pulled in transitively by Gson.
### Changed
- Configuration is now driven by a single registry in `CowConfig` rather
than scattered fields and three parallel enums.
- `/sacredcows config print` output now iterates settings generically and
marks unsaved changes uniformly, instead of hand-listing each one.
Changed values are now highlighted in bold aqua with a `<- (changed)`
marker.
- Verbose cow position/chunk tracking logs in `CowChunkLoaderFeature` are
now gated behind the `debug_mode` setting.
- Log messages standardized with a `sacredcows:` prefix; exceptions are
now passed as `Throwable` arguments to the logger rather than
`.getMessage()`, preserving full stack traces.
- Tab completion now uses `SharedSuggestionProvider.suggest` for proper
prefix filtering instead of suggesting every option unconditionally.
### Removed
- `SettingsEnum`, `ScoreboardEnum`, `PermissionsEnum`, and the
`CowConfigKeys` interface they implemented.
- Dozens of per-setting getter/setter pairs on `CowConfig`. Callers now
access settings directly as fields (`config.modStatus.get()`, etc.).
- Dead `MilkTeleportFeature` stub file.
### Fixed
- `EnumSetting` was using `StringSetting.class` for its SLF4J logger,
causing its log messages to be misattributed.
release
SacredCows 4.1.0
4.1.021 мая 2026 г.39Minecraft: 26.1, 26.1.1, 26.1.2fabric
Что нового
## [4.1.0]
### Changed
- Chunk loading for named cows migrated from `setChunkForced` to a custom `TicketType` (`sacred_cows`) with `addTicketWithRadius` / `removeTicketWithRadius`, which is the API-appropriate path for forced chunk loading in 1.21.x and doesn't persist into the world's forced-chunks list
- Permission level handling now uses the `PermissionLevel` enum throughout instead of raw `int`s, with parsing centralized in `CowConfig.getPermissionLevel()`. The reader accepts either an int id or an enum name and falls back to `GAMEMASTERS` on invalid input
- `executeSetPunishmentMode` now returns a failure (status 0) with a user-facing error on invalid input instead of silently defaulting to `DEATH`
- `/sacredcows config` now styles the current punishment mode in yellow to match the visual treatment of other config values, and normalizes case when comparing the in-memory value to the saved property so the "changed" indicator behaves correctly
- Cow names in log messages and the death broadcast now use `getCustomName().getString()` instead of letting the raw `Component` stringify itself (which produced `literal{Bessie}` instead of `Bessie`)
- Logging cleaned up across the mod: `System.err.println` calls in `CowConfig` replaced with `LOGGER.error`, hardcoded logger name in `CowProtectionFeature` replaced with the class name, and concatenated log strings converted to SLF4J parameterized format
### Fixed
- 3x3 chunk-loading radius around named cows actually covers a 3x3 area now; the previous implementation looped over `dx`/`dz` offsets but constructed `new ChunkPos(center.x(), center.z())` inside the loop, so it only ever added the center chunk nine times
- `CowChunkLoaderFeature.onCowDeath` no longer registers a fresh `AFTER_DEATH` listener every time a cow dies — the listener is now registered once in `registerEventHandlers` and the cleanup logic is called directly. (This was a slow-growing listener leak: every named-cow death added another listener, and every existing listener fired on every subsequent death.)
- Saved cow positions are now actually restored on server start. `CowChunkLoaderFeature` reads from the `CowPositionsData` singleton on `SERVER_STARTED` and re-adds chunk tickets for each persisted position before scanning live entities. The save path (`SERVER_STOPPING`) was already wired up; the load path had been missing
- Named cows no longer leak chunk tickets as they wander. When a cow moves to a new chunk, the ticket on the previous chunk is now removed (this was dropped silently during the `setChunkForced` → ticket-API migration earlier in 4.0.3)
- `CowConfig.save()` now writes permission levels as integer ids rather than `String.valueOf(enum)`, which was producing strings like `GAMEMASTERS` that the loader couldn't parse back. Configs with non-default `bypass-op-level` or `admin-op-level` were silently resetting to default on restart
- `CowPositionsData.getInstance()` is now `static`, so it can actually be used as a singleton accessor
- `CowConfig` constructor is now called with the real `configFile` path instead of `null` in `SacredCows.loadConfig`, so `save()`, `load()`, and `createDefaultConfig()` are no longer no-ops
- Eliminated several redundant `AFTER_DEATH` registrations in `SacredCows.onInitialize` that duplicated work already done inside feature classes
### Removed
- `CowConfig.setDefaultProperties()` — unreachable; `createDefaultConfig()` writes defaults directly via the enum iterators
- `SacredCows.getVersion()` and the `/version.properties` read it depended on — unused
- `cleanupTickCounter`, `cowTickCounter`, and the public `serverTickCounter` field on `SacredCows`, along with the inline tick-dispatch loop in `onInitialize`
### Technical
- Tick-driven work centralized in a new `util.TickCounter` class that exposes `registerIntervalCallback(intervalTicks, Runnable)`; `CowProtectionFeature` and `CowChunkLoaderFeature` now register their periodic work through it instead of `SacredCows` owning the tick loop
- `CowProtectionFeature` and `CowChunkLoaderFeature` take a `TickCounter` via constructor injection
- `ScoreboardFeature` now owns its own `SERVER_STARTED` registration via `registerEventHandlers()` instead of being called inline from `SacredCows`
- `CowChunkLoaderFeature` owns its own `SERVER_STARTED`, `ENTITY_LOAD`, `AFTER_DEATH`, and `SERVER_STOPPING` registrations in one place
- `instanceof` pattern variables adopted in `CowProtectionFeature.getPlayerFromDamageSource` (`projectile instanceof Projectile proj`, `projectile instanceof TraceableEntity ownable`)
- Build now compiles with `-Xlint:deprecation`
- Bumped `mod_version` to `4.1.0`
### Upgrade notes
- **Chunk loading mechanism changed.** 4.0.2 and earlier used the world's
forced-chunks list (the one populated by `/forceload`) to keep named cows
loaded. 4.1.0 uses Fabric's ticket system instead, which doesn't persist to
disk. After upgrading, existing worlds may have leftover entries from
4.0.2 in their `/forceload query` output. These are harmless but can be
cleared with `/forceload remove <x> <z>` for each, or `/forceload remove all`
if you have no other manually-set forced chunks.
release
SacredCows 4.0.0
4.0.04 мая 2026 г.33Minecraft: 26.1, 26.1.1, 26.1.2fabric
Что нового
Major feature update! Added milk bucket teleportation to your favorite named bovine. Just milk a cow, and you'll find yourself by her side wherever she may be.
**Full Changelog**: https://github.com/voidfemme/SacredCows/compare/v3.1.0...v4.0.0
release
SacredCows 3.1.0
3.1.021 апр. 2026 г.35Minecraft: 26.1, 26.1.1, 26.1.2fabric
release
SacredCows 3.0.0
3.0.016 апр. 2026 г.38Minecraft: 26.1, 26.1.1, 26.1.2fabric
Что нового
[v2.2.0...v3.0.0](https://github.com/voidfemme/SacredCows/compare/v2.2.0...v3.0.0)