Home›Java›Mods›TimedItem | 100% Async • Offline NBT Check • Smart Survival Activation • Expiration System [1.21+]
ModsJava
TimedItem | 100% Async • Offline NBT Check • Smart Survival Activation • Expiration System [1.21+]
Java mod listed for Minecraft 1.13–1.21. Download on the author's site.
⏳ TimedItem Next-Gen Expiration Item Engine • 100% Async & Lag-Free • Offline NBT Scanning • Smart Survival Activation ✦ Overview TimedItem is a modern…
⬇ Download on Spigot⏳ TimedItem
Next-Gen Expiration Item Engine • 100% Async & Lag-Free • Offline NBT Scanning • Smart Survival Activation
✦ Overview
TimedItem is a modern, lightweight, high-performance expiration item plugin built from scratch for Minecraft 1.21 / 1.21.1+.
Tired of legacy or abandoned timed item plugins that cause TPS drops, freeze the main thread when scanning player files, or accidentally activate countdowns in crates and kits? TimedItem solves all these problems with cutting-edge Minecraft APIs, native PersistentDataContainer (PDC), and pure Java async NBT processing.
Perfect for Survival, RPG, Factions, Skyblock, BattlePass, Crates, and temporary donation ranks/gear!
✦ Key Features
- ️ Dual-State System (Inactive vs. Active Countdown):
- Inactive State (Duration: <time>): When an item is created by an admin or given as a reward, the timer DOES NOT start ticking! Perfect for storing items in Crates, Shops, Kits, Trading GUIs, or Chests without wasting expiration time.
- Creative Safe: Admins in Creative mode can hold, move, or duplicate timed items without accidentally starting the countdown.
- Smart Survival Activation (Expires at: <date>): As soon as an item enters a player's inventory while in Survival mode (picked up from the ground, withdrawn from a chest/GUI, or upon gamemode change), the item plays a *pling* sound, transforms lore to the expiration date, and begins counting down!
- Asynchronous Offline Player Inventory Scanner:
- Zero TPS Impact: Built-in standalone pure Java NBT parser/writer reads and updates playerdata/<uuid>.dat files completely off the main server thread.
- Automatically cleans expired items from Inventories and Ender Chests even when players are offline!
- Sends a welcoming notification with the exact amount of expired items when the player logs back in.
- ⚡ 100% Asynchronous & Lag-Free Check Engine:
- Periodic checks run asynchronously to prevent server freezes.
- World Dropped Item Check: Automatically clears expired items dropped on the ground.
- Real-Time Event Catchers: Checks items instantly when clicked, interacted with, or picked up. If an item expires between check cycles, it is instantly revoked with an item-break sound effect.
- Native PDC & Safe Lore Engine:
- Stores expiration timestamps using Minecraft's native PersistentDataContainer (PDC).
- Will NOT wipe or break other plugin lores (Enchantments, MMOItems, MythicMobs, Custom Enchants, etc.).
- Supports standard Minecraft color codes (&a, &e, &c...) and modern Hex RGB Colors (&#RRGGBB).
- ⏱️ Ultra-Flexible Time & Date Formats:
- Supports combined duration tokens: 1d2h, 3d5h, 30m, 15s, 1w, 2mo, 1y.
- Supports exact calendar dates: dd/MM/yyyy HH:mm:ss, or date-only dd/MM/yyyy (which defaults to the end of that day: 23:59:59).
- 100% Translatable & Configurable:
- Every single message, placeholder, prefix, and even the /ti help descriptions can be translated directly in lang.yml!
✦ Commands & Permissions
| Command | Permission | Description |
| /ti add [time] | timeditem.command.add | Add duration to item in main hand (ex: /ti add 1d2h, /ti add 30m) |
| /ti remove [time] | timeditem.command.remove | Remove duration from item (ex: /ti remove 3d5h). Expires if reduced past 0. |
| /ti set <format> | timeditem.command.set | Set duration (ex: 1d2h) or exact date (ex: 12/07/2026, 27/05/2026 13:17:29) |
| /ti clear | timeditem.command.clear | Clear expiration time from item in hand |
| /ti reload | timeditem.command.reload | Reload configuration and language files |
| /ti help [page] | timeditem.command.help | Display paged help menu |
* Full Tab-Completion support for subcommands, page numbers, and time duration hints!*
✦ Configuration
Spoiler: config.yml
# TimedItem Configuration
# Date format for /ti set command
# Default: dd/MM/yyyy HH:mm:ss
date-format : "dd/MM/yyyy HH:mm:ss"
# How often to check for expired items (in seconds)
# This affects both inventory and world checks
check-interval : 30
# Whether to check items dropped in the world
world-check : true
# Whether to check online player inventories
inventory-check : true
# Whether to check offline player inventories
offline-check : true
# Number of items shown per help page
help-per-page : 7
# Lore format when item is NOT yet activated (has not started countdown)
# {duration} will be replaced with time duration (ex: 1d 2h, 30m)
lore-inactive-format : "&eDuration: &a{duration}"
# Lore format when item IS activated (countdown is running)
# {expiry} will be replaced with formatted date
lore-format : "&cExpires at: &e{expiry}"
# Messages (supports & color codes and &#RRGGBB)
messages:
prefix : "&8[&6TimedItem&8] &r"
item-expired : "&cYour item &e{item} &cx{amount} &chas expired and been removed!"
items-expired-offline : "&eWhile you were offline, &c{count} &eitem(s) expired and were removed."
item-activated : "&aItem &e{item} &ahas been activated! Expiry: &e{expiry}"
duration-set : "&aDuration &e{duration} &aset for item (starts counting in survival mode)."
time-added : "&aAdded &e{time} &ato the item. New expiry: &e{expiry}"
time-removed : "&aRemoved &e{time} &afrom the item. New expiry: &e{expiry}"
time-set : "&aExpire time set to &e{expiry}&a."
time-cleared : "&aExpire time cleared from item."
no-item-in-hand : "&cYou must hold an item in your main hand!"
not-timed-item : "&cThis item does not have an expire time!"
invalid-time-format : "&cInvalid time format! Use format like: 1d2h30m"
invalid-date-format : "&cInvalid date format! Use: {format}"
date-in-past : "&cThe date must be in the future!"
no-permission : "&cYou don't have permission to do that!"
reloaded : "&aConfiguration reloaded successfully!"
player-only : "&cThis command can only be used by players!"
usage : "&cUsage: {usage}"
help-header : "&8&m----------&r &6TimedItem Help &7(Page {page}/{max_page}) &8&m----------"
help-footer : "&8&m----------&r &7Use /ti help {next_page} for next page &8&m----------"
help-commands:
add : "&6/ti add [time] &7- Add expire time for item. &8(ex: /ti add 1d2h)"
remove : "&6/ti remove [time] &7- Remove expire time from timed item. &8(ex: /ti remove 3d5h)"
set : "&6/ti set <format> &7- Set expire time for item. &8(ex: /ti set 12/07/2025)"
clear : "&6/ti clear &7- Clear expire time from item."
reload : "&6/ti reload &7- Reload plugin."
help : "&6/ti help <page> &7- Show paged help."
Code (YAML):
# TimedItem Configuration
# Date format for /ti set command
# Default: dd/MM/yyyy HH:mm:ss
date-format : "dd/MM/yyyy HH:mm:ss"
# How often to check for expired items (in seconds)
# This affects both inventory and world checks
check-interval : 30
# Whether to check items dropped in the world
world-check : true
# Whether to check online player inventories
inventory-check : true
# Whether to check offline player inventories
offline-check : true
# Number of items shown per help page
help-per-page : 7
# Lore format when item is NOT yet activated (has not started countdown)
# {duration} will be replaced with time duration (ex: 1d 2h, 30m)
lore-inactive-format : "&eDuration: &a{duration}"
# Lore format when item IS activated (countdown is running)
# {expiry} will be replaced with formatted date
lore-format : "&cExpires at: &e{expiry}"
# Messages (supports & color codes and &#RRGGBB)
messages:
prefix : "&8[&6TimedItem&8] &r"
item-expired : "&cYour item &e{item} &cx{amount} &chas expired and been removed!"
items-expired-offline : "&eWhile you were offline, &c{count} &eitem(s) expired and were removed."
item-activated : "&aItem &e{item} &ahas been activated! Expiry: &e{expiry}"
duration-set : "&aDuration &e{duration} &aset for item (starts counting in survival mode)."
time-added : "&aAdded &e{time} &ato the item. New expiry: &e{expiry}"
time-removed : "&aRemoved &e{time} &afrom the item. New expiry: &e{expiry}"
time-set : "&aExpire time set to &e{expiry}&a."
time-cleared : "&aExpire time cleared from item."
no-item-in-hand : "&cYou must hold an item in your main hand!"
not-timed-item : "&cThis item does not have an expire time!"
invalid-time-format : "&cInvalid time format! Use format like: 1d2h30m"
invalid-date-format : "&cInvalid date format! Use: {format}"
date-in-past : "&cThe date must be in the future!"
no-permission : "&cYou don't have permission to do that!"
reloaded : "&aConfiguration reloaded successfully!"
player-only : "&cThis command can only be used by players!"
usage : "&cUsage: {usage}"
help-header : "&8&m----------&r &6TimedItem Help &7(Page {page}/{max_page}) &8&m----------"
help-footer : "&8&m----------&r &7Use /ti help {next_page} for next page &8&m----------"
help-commands:
add : "&6/ti add [time] &7- Add expire time for item. &8(ex: /ti add 1d2h)"
remove : "&6/ti remove [time] &7- Remove expire time from timed item. &8(ex: /ti remove 3d5h)"
set : "&6/ti set <format> &7- Set expire time for item. &8(ex: /ti set 12/07/2025)"
clear : "&6/ti clear &7- Clear expire time from item."
reload : "&6/ti reload &7- Reload plugin."
help : "&6/ti help <page> &7- Show paged help."
Spoiler: lang.yml
prefix : "&8[&6TimedItem&8] &r"
item-expired : "&cYour item &e{item} &cx{amount} &chas expired and been removed!"
items-expired-offline : "&eWhile you were offline, &c{count} &eitem(s) expired and were removed."
item-activated : "&aItem &e{item} &ahas been activated! Expiry: &e{expiry}"
duration-set : "&aDuration &e{duration} &aset for item (starts counting in survival mode)."
time-added : "&aAdded &e{time} &ato the item. New expiry: &e{expiry}"
time-removed : "&aRemoved &e{time} &afrom the item. New expiry: &e{expiry}"
time-set : "&aExpire time set to &e{expiry}&a."
time-cleared : "&aExpire time cleared from item."
no-item-in-hand : "&cYou must hold an item in your main hand!"
not-timed-item : "&cThis item does not have an expire time!"
invalid-time-format : "&cInvalid time format! Use format like: 1d2h30m"
invalid-date-format : "&cInvalid date format! Use: {format}"
date-in-past : "&cThe date must be in the future!"
no-permission : "&cYou don't have permission to do that!"
reloaded : "&aConfiguration reloaded successfully!"
player-only : "&cThis command can only be used by players!"
usage : "&cUsage: {usage}"
help-header : "&8&m----------&r &6TimedItem Help &7(Page {page}/{max_page}) &8&m----------"
help-footer : "&8&m----------&r &7Use /ti help {next_page} for next page &8&m----------"
help-commands:
add : "&6/ti add [time] &7- Add expire time for item. &8(ex: /ti add 1d2h)"
remove : "&6/ti remove [time] &7- Remove expire time from timed item. &8(ex: /ti remove 3d5h)"
set : "&6/ti set <format> &7- Set expire time for item. &8(ex: /ti set 12/07/2025)"
clear : "&6/ti clear &7- Clear expire time from item."
reload : "&6/ti reload &7- Reload plugin."
help : "&6/ti help <page> &7- Show paged help."
Code (YAML):
prefix : "&8[&6TimedItem&8] &r"
item-expired : "&cYour item &e{item} &cx{amount} &chas expired and been removed!"
items-expired-offline : "&eWhile you were offline, &c{count} &eitem(s) expired and were removed."
item-activated : "&aItem &e{item} &ahas been activated! Expiry: &e{expiry}"
duration-set : "&aDuration &e{duration} &aset for item (starts counting in survival mode)."
time-added : "&aAdded &e{time} &ato the item. New expiry: &e{expiry}"
time-removed : "&aRemoved &e{time} &afrom the item. New expiry: &e{expiry}"
time-set : "&aExpire time set to &e{expiry}&a."
time-cleared : "&aExpire time cleared from item."
no-item-in-hand : "&cYou must hold an item in your main hand!"
not-timed-item : "&cThis item does not have an expire time!"
invalid-time-format : "&cInvalid time format! Use format like: 1d2h30m"
invalid-date-format : "&cInvalid date format! Use: {format}"
date-in-past : "&cThe date must be in the future!"
no-permission : "&cYou don't have permission to do that!"
reloaded : "&aConfiguration reloaded successfully!"
player-only : "&cThis command can only be used by players!"
usage : "&cUsage: {usage}"
help-header : "&8&m----------&r &6TimedItem Help &7(Page {page}/{max_page}) &8&m----------"
help-footer : "&8&m----------&r &7Use /ti help {next_page} for next page &8&m----------"
help-commands:
add : "&6/ti add [time] &7- Add expire time for item. &8(ex: /ti add 1d2h)"
remove : "&6/ti remove [time] &7- Remove expire time from timed item. &8(ex: /ti remove 3d5h)"
set : "&6/ti set <format> &7- Set expire time for item. &8(ex: /ti set 12/07/2025)"
clear : "&6/ti clear &7- Clear expire time from item."
reload : "&6/ti reload &7- Reload plugin."
help : "&6/ti help <page> &7- Show paged help."
✦ Installation
- Download TimedItem.jar.
- Drop the jar into your server's /plugins/ folder.
- Start or restart your server.
- Configure config.yml and lang.yml to your liking.
- Run /ti reload to apply your changes!
Developed with ❤️ for the Minecraft Server Community • SpigotMC 1.21+
Quick facts
- Edition: Minecraft Java
- File type: .jar
- Minecraft versions listed: 1.13, 1.14, 1.15
- How to install: Install the matching mod loader (Forge, Fabric or NeoForge) for your Minecraft version. → Download the .jar. → Put it in the .minecraft/mods folder and launch that loader profile.
- Where to get it: Opens on Spigot — not every file is mirrored on our own servers.
Install steps are the general flow for this file type — How to install Minecraft Java mods & modpacks walks through it step by step.
TimedItem | 100% Async • Offline NBT Check • Smart Survival Activation • Expiration System [1.21+] is a free Minecraft Java mod. Compatible with Minecraft 1.13, 1.14, 1.15, 1.16 and newer. Downloaded 35 times (via Spigot). Download it and open it directly in the game.