<p align="center">
<img src="https://raw.githubusercontent.com/TomerGamerTV/overnight/main/pack.png" alt="Overnight Logo" width="128" height="128">
</p>
<div align="center"><h1>☽ Overnight</h1></div>
<p align="center">
<strong>Make your nights count.</strong><br>
A Minecraft Fabric mod and Datapack that accelerates crop, tree, and animal growth while players sleep.
</p>
<p align="center">
<img src="https://img.shields.io/badge/Minecraft-26.1.2-green?style=flat-square" alt="Minecraft 26.1.2">
<img src="https://img.shields.io/badge/Pack%20Format-101-blue?style=flat-square" alt="Pack Format 101">
<img src="https://img.shields.io/badge/Side-Server%20%2B%20Singleplayer-orange?style=flat-square" alt="Server + Singleplayer">
<img src="https://img.shields.io/badge/License-CC%20BY--NC--ND%204.0-lightgrey?style=flat-square" alt="License">
</p>
---
## 📖 Description
**Overnight** makes sleeping in Minecraft actually meaningful. Instead of just skipping the night, your crops, saplings, and baby animals continue growing while you rest — as if time truly passed.
### How It Works
- **Plants & Trees**: When a player sleeps, the `randomTickSpeed` is temporarily multiplied by your configured rate (default **100x**), causing all crops, saplings, sugar cane, cactus, bamboo, nether wart, and other vegetation to grow rapidly during the brief sleep window.
- **Animals**: Baby animals have their `Age` tag accelerated each tick during sleep, making them grow toward adulthood faster (default **100x**, but **disabled by default**).
- **Fire Safety**: `doFireTick` is automatically disabled during sleep acceleration and restored when players wake up, preventing unwanted fire spread.
- **Clean Recovery**: If the server reloads mid-sleep (`/reload`), original gamerules are automatically restored.
### What's Affected by Plant Growth?
All vegetation that uses random ticks, including:
| Category | Examples |
|---|---|
| **Crops** | Wheat, Carrots, Potatoes, Beetroots, Melon/Pumpkin Stems |
| **Trees** | All Sapling types (Oak, Birch, Spruce, Jungle, Acacia, Dark Oak, Cherry, Mangrove, Pale Oak) |
| **Tall Plants** | Sugar Cane, Cactus, Bamboo, Kelp, Vines, Dripleaf |
| **Other** | Nether Wart, Cocoa Beans, Sweet Berries, Chorus Plants, Mushrooms |
### What's Affected by Animal Growth?
All breedable baby animals in the `#overnight:growable_animals` tag:
> Cow, Mooshroom, Sheep, Pig, Chicken, Horse, Donkey, Mule, Llama, Rabbit, Fox, Turtle, Panda, Polar Bear, Wolf, Cat, Ocelot, Goat, Axolotl, Camel, Sniffer, Bee, Hoglin, Strider, Villager
You can customize this list by creating your own `data/overnight/tags/entity_types/growable_animals.json` override.
---
## 📦 Installation
### Fabric Mod
1. Ensure you have the **Fabric Loader** and **Fabric API** installed for Minecraft `1.21.4` (snapshot `26.1.2` equivalent).
2. Download the `.jar` file from Modrinth.
3. Place the file into your `.minecraft/mods/` directory (for singleplayer) or `<server directory>/mods/` (for servers).
4. Launch the game.
### Datapack
1. Download the datapack `.zip` file.
2. **Singleplayer**: Place the `.zip` file into:
```
.minecraft/saves/<Your World>/datapacks/
```
3. **Server**: Place the `.zip` file into:
```
<server directory>/world/datapacks/
```
4. Run `/reload` in the console or in-game (or restart the world/server).
---
## ⚙️ Configuration
### Fabric Mod Commands
The Fabric mod provides a dedicated `/overnight` command (requires OP/moderator level 2 permission):
| Command | Description |
|---|---|
| `/overnight status` | View the current configuration status and rates |
| `/overnight toggle plants` | Toggle plant & tree growth acceleration |
| `/overnight toggle mobs` | Toggle animal growth acceleration |
| `/overnight rate plants <value>` | Set plant growth rate multiplier (e.g. `/overnight rate plants 200`) |
| `/overnight rate mobs <value>` | Set animal growth rate multiplier (e.g. `/overnight rate mobs 50`) |
### Datapack Commands
The Datapack version uses `/function` commands and features an interactive chat menu:
| Command | Description |
|---|---|
| `/function overnight:config/menu` | Open the interactive config menu |
| `/function overnight:config/toggle_plants` | Toggle plant & tree growth acceleration |
| `/function overnight:config/toggle_mobs` | Toggle animal growth acceleration |
| `/function overnight:config/set_plant_rate {rate:N}` | Set plant growth multiplier (e.g. `{rate:200}`) |
| `/function overnight:config/set_mob_rate {rate:N}` | Set animal growth multiplier (e.g. `{rate:50}`) |
### Default Settings
| Setting | Default | Description |
|---|---|---|
| Plants & Trees | **ON** | Accelerate crop/sapling growth during sleep |
| Animal Growth | **OFF** | Accelerate baby animal growth during sleep |
| Plant Rate | **100x** | Multiplier applied to plant growth / `randomTickSpeed` |
| Animal Rate | **100x** | Multiplier applied to baby animal age progression |
### Rate Guide
| Rate | Effect | Recommended For |
|---|---|---|
| **50x** | Moderate growth boost | Survival purists who want a subtle benefit |
| **100x** | ~80% of a full night's growth per sleep | **Default — balanced for most players** |
| **200x** | Significant acceleration | Players who want noticeable overnight progress |
| **500x** | Extreme acceleration | Creative/testing (may cause brief lag) |
---
## 🔧 Technical Details
### Architecture
- **Sleep detection**: Polls `SleepTimer` NBT every tick using a single efficient selector
- **State machine**: Tracks sleeping transitions (start → tick → stop) with scoreboard flags
- **Plant acceleration**: Multiplies `randomTickSpeed` during the ~100-tick sleep window
- **Animal acceleration**: Reads/modifies baby `Age` NBT via scoreboard operations each tick during sleep
- **Safety**: Saves and restores `randomTickSpeed` and `doFireTick` gamerules, with fallback defaults
### Performance
- Tick function is a single `execute store` + 3 conditional checks (negligible overhead)
- Mob growth only processes entities matching `#overnight:growable_animals` tag AND `is_baby` predicate
- All acceleration only runs during the brief sleep window (~5 seconds in singleplayer)
### Multiplayer
- Acceleration activates as soon as **any** player sleeps (regardless of `playersSleepingPercentage`)
- Deactivates when the **last** sleeping player wakes up
- Works with vanilla sleep percentage rules and one-player-sleep datapacks
---
## 📁 Project Structure
```
Overnight-Datapack/
├── pack.mcmeta # Pack metadata (format 101)
├── pack.png # Datapack icon
├── LICENSE # CC BY-NC-ND 4.0
├── README.md
└── data/
├── minecraft/tags/function/
│ ├── load.json # Hook: runs on load/reload
│ └── tick.json # Hook: runs every game tick
└── overnight/
├── tags/entity_type/
│ └── growable_animals.json # Baby animal types to accelerate
├── predicate/
│ └── is_baby.json # Efficient baby entity check
└── function/
├── load.mcfunction # Initialize scoreboards & defaults
├── tick.mcfunction # Sleep state detection loop
├── sleep_start.mcfunction # Save gamerules, apply acceleration
├── sleep_tick.mcfunction # Per-tick mob growth dispatch
├── sleep_mob_tick.mcfunction # Baby animal age manipulation
├── sleep_stop.mcfunction # Restore original gamerules
├── apply_plant_speed.mcfunction # Calculate & set tick speed
├── set_tick_speed.mcfunction # Macro: gamerule setter
└── config/
├── menu.mcfunction # Interactive chat config UI
├── toggle_plants.mcfunction # Toggle plant growth
├── toggle_mobs.mcfunction # Toggle animal growth
├── set_plant_rate.mcfunction # Macro: set plant multiplier
└── set_mob_rate.mcfunction # Macro: set animal multiplier
```
---
## 📋 Credits
**Created by** [@TomerGamerTV](https://github.com/TomerGamerTV)
---
## 📄 License
This project is licensed under the **[Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License](https://creativecommons.org/licenses/by-nc-nd/4.0/)** (CC BY-NC-ND 4.0).
You are free to share this datapack with proper attribution, but you may not use it commercially or distribute modified versions.