ModsJava
TropicalProgression | Made with Kodari
Java mod listed for Minecraft 1.8–1.19. Downloads from the MC Java Mods app on Android.
⬇ Download on Spigot
⏳ TropicalProgression ⏳
This plugin was made by an Advanced Minecraft Plugin maker called kodari.ai
A powerful time-gated progression system for SMP servers!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
This plugin was made by an Advanced Minecraft Plugin maker called kodari.ai
A powerful time-gated progression system for SMP servers!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✨ Features
Core Features
- Dimension Locking - Control access to Nether and End based on time/conditions
- Item Usage Restrictions - Lock Elytra, Ender Chests, Totems, and Shulker Boxes
- Enchantment Caps - Progressive enchantment level limits that increase over time
- Time-Based Unlocks - Features unlock based on server age, world age, or playtime
- Advancement Requirements - Require specific advancements before unlocking features
- Manual Unlocks - Admins can manually unlock features for players or globally
Progression Systems
- Server Age - Unlock features after server has been running for X time
- World Age - Unlock based on in-game world time progression
- Player Playtime - Individual unlock requirements based on play hours
- Advancement Tracking - Require vanilla or custom advancements
- Hybrid Conditions - Combine multiple conditions with AND/OR logic
Technical Features
- Performance Optimized - Built-in caching system to minimize lag
- Per-World Overrides - Different rules for different worlds
- Bypass Permissions - Staff can bypass any lock
- Hot Reload - Reload configurations without restarting
- Countdown Timers - Players see how long until features unlock
- Actionbar Notifications - Non-intrusive lock notifications
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Commands
Main Commands
Code (Text):
/progression status - View your current progression status
/progression unlock <type> <name> [player] - Manually unlock a feature
/progression reload - Reload all configurations
/progression unlock <type> <name> [player] - Manually unlock a feature
/progression reload - Reload all configurations
Code (Text):
/prog - Short alias for /progression
/tprog - Alternative alias
/tprog - Alternative alias
Code (Text):
dimension (or dim) - Unlock Nether or End
item - Unlock Elytra, Ender Chest, Totem, or Shulker Box
enchantment (or enchant) - Unlock enchantment levels
item - Unlock Elytra, Ender Chest, Totem, or Shulker Box
enchantment (or enchant) - Unlock enchantment levels
Code (Text):
/progression unlock dimension nether - Unlock Nether for everyone
/progression unlock item elytra Notch - Unlock Elytra for Notch
/progression unlock enchant sharpness - Unlock Sharpness for everyone
/progression unlock item elytra Notch - Unlock Elytra for Notch
/progression unlock enchant sharpness - Unlock Sharpness for everyone
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Permissions
Command Permissions
Code (Text):
tropicalprogression.command - Use progression commands (default: op)
tropicalprogression.command.unlock - Manually unlock features (default: op)
tropicalprogression.command.reload - Reload configurations (default: op)
tropicalprogression.command.unlock - Manually unlock features (default: op)
tropicalprogression.command.reload - Reload configurations (default: op)
Code (Text):
tropicalprogression.bypass.* - Bypass all progression locks (default: op)
tropicalprogression.bypass.dimension - Bypass dimension locks (default: op)
tropicalprogression.bypass.item - Bypass item usage locks (default: op)
tropicalprogression.bypass.enchantment - Bypass enchantment caps (default: op)
tropicalprogression.bypass.dimension - Bypass dimension locks (default: op)
tropicalprogression.bypass.item - Bypass item usage locks (default: op)
tropicalprogression.bypass.enchantment - Bypass enchantment caps (default: op)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚙️ Configuration
config.yml
Spoiler: Click to view config.yml
Code (Text):
settings:
cache-duration-seconds: 60
debug-mode: false
check-for-updates: true
per-world-overrides: true
messages:
prefix: '&8[&bTropical&3Progression&8]&r'
reload-success: '&aConfiguration reloaded successfully!'
no-permission: '&cYou do not have permission to use this command.'
feature-unlocked: '&aFeature &e{feature}&a has been unlocked!'
already-unlocked: '&eThis feature is already unlocked.'
notification:
enabled: true
type: ACTIONBAR
show-countdown: true
countdown-format: '&cLocked: &e{time_remaining}'
cache-duration-seconds: 60
debug-mode: false
check-for-updates: true
per-world-overrides: true
messages:
prefix: '&8[&bTropical&3Progression&8]&r'
reload-success: '&aConfiguration reloaded successfully!'
no-permission: '&cYou do not have permission to use this command.'
feature-unlocked: '&aFeature &e{feature}&a has been unlocked!'
already-unlocked: '&eThis feature is already unlocked.'
notification:
enabled: true
type: ACTIONBAR
show-countdown: true
countdown-format: '&cLocked: &e{time_remaining}'
locks/dimensions.yml
Spoiler: Click to view dimensions.yml
Code (Text):
nether:
enabled: true
locked: true
bypass-permission: tropicalprogression.bypass.dimension
conditions:
- type: SERVER_AGE
value: 604800000
- type: WORLD_AGE
world: world
value: 172800000
require-all-conditions: false
messages:
portal-blocked: '&cThe Nether is currently locked!'
unlock-notification: '&aThe Nether has been unlocked for all players!'
countdown: '&eNether unlocks in: &b{time_remaining}'
per-world-overrides:
world_custom:
locked: false
end:
enabled: true
locked: true
bypass-permission: tropicalprogression.bypass.dimension
conditions:
- type: SERVER_AGE
value: 1209600000
- type: ADVANCEMENT
advancement: minecraft:story/enter_the_nether
require-all-conditions: true
messages:
portal-blocked: '&cThe End is currently locked!'
teleport-blocked: '&cYou cannot teleport to The End yet!'
unlock-notification: '&aThe End has been unlocked for all players!'
countdown: '&eEnd unlocks in: &b{time_remaining}'
enabled: true
locked: true
bypass-permission: tropicalprogression.bypass.dimension
conditions:
- type: SERVER_AGE
value: 604800000
- type: WORLD_AGE
world: world
value: 172800000
require-all-conditions: false
messages:
portal-blocked: '&cThe Nether is currently locked!'
unlock-notification: '&aThe Nether has been unlocked for all players!'
countdown: '&eNether unlocks in: &b{time_remaining}'
per-world-overrides:
world_custom:
locked: false
end:
enabled: true
locked: true
bypass-permission: tropicalprogression.bypass.dimension
conditions:
- type: SERVER_AGE
value: 1209600000
- type: ADVANCEMENT
advancement: minecraft:story/enter_the_nether
require-all-conditions: true
messages:
portal-blocked: '&cThe End is currently locked!'
teleport-blocked: '&cYou cannot teleport to The End yet!'
unlock-notification: '&aThe End has been unlocked for all players!'
countdown: '&eEnd unlocks in: &b{time_remaining}'
locks/items.yml
Spoiler: Click to view items.yml
Code (Text):
elytra:
enabled: true
locked: true
bypass-permission: tropicalprogression.bypass.item
conditions:
- type: SERVER_AGE
value: 2592000000
- type: ADVANCEMENT
advancement: minecraft:end/elytra
require-all-conditions: false
actions:
prevent-equip: true
prevent-flight: true
remove-on-lock: false
messages:
usage-blocked: '&cElytra flight is currently locked!'
equip-blocked: '&cYou cannot equip Elytra yet!'
ender-chest:
enabled: true
locked: true
bypass-permission: tropicalprogression.bypass.item
conditions:
- type: PLAYTIME
value: 36000000
actions:
prevent-open: true
prevent-place: true
messages:
usage-blocked: '&cEnder Chests are currently locked!'
totem:
enabled: true
locked: true
bypass-permission: tropicalprogression.bypass.item
conditions:
- type: SERVER_AGE
value: 1814400000
actions:
prevent-use: true
consume-item: false
messages:
usage-blocked: '&cTotems of Undying are currently locked!'
shulker-box:
enabled: true
locked: true
bypass-permission: tropicalprogression.bypass.item
conditions:
- type: ADVANCEMENT
advancement: minecraft:end/shulker_bullet
actions:
prevent-open: true
prevent-place: true
messages:
usage-blocked: '&cShulker Boxes are currently locked!'
enabled: true
locked: true
bypass-permission: tropicalprogression.bypass.item
conditions:
- type: SERVER_AGE
value: 2592000000
- type: ADVANCEMENT
advancement: minecraft:end/elytra
require-all-conditions: false
actions:
prevent-equip: true
prevent-flight: true
remove-on-lock: false
messages:
usage-blocked: '&cElytra flight is currently locked!'
equip-blocked: '&cYou cannot equip Elytra yet!'
ender-chest:
enabled: true
locked: true
bypass-permission: tropicalprogression.bypass.item
conditions:
- type: PLAYTIME
value: 36000000
actions:
prevent-open: true
prevent-place: true
messages:
usage-blocked: '&cEnder Chests are currently locked!'
totem:
enabled: true
locked: true
bypass-permission: tropicalprogression.bypass.item
conditions:
- type: SERVER_AGE
value: 1814400000
actions:
prevent-use: true
consume-item: false
messages:
usage-blocked: '&cTotems of Undying are currently locked!'
shulker-box:
enabled: true
locked: true
bypass-permission: tropicalprogression.bypass.item
conditions:
- type: ADVANCEMENT
advancement: minecraft:end/shulker_bullet
actions:
prevent-open: true
prevent-place: true
messages:
usage-blocked: '&cShulker Boxes are currently locked!'
locks/enchantments.yml
Spoiler: Click to view enchantments.yml
Code (Text):
global:
enabled: true
default-cap: 5
time-based-progression:
enabled: true
intervals:
0: 2
86400000: 3
604800000: 4
1209600000: 5
per-enchantment:
sharpness:
enabled: true
default-cap: 3
conditions:
- type: SERVER_AGE
value: 604800000
cap: 5
messages:
enchant-blocked: '&cSharpness above level {cap} is currently locked!'
lore-warning: '&c[LOCKED]'
protection:
enabled: true
default-cap: 2
conditions:
- type: SERVER_AGE
value: 432000000
cap: 4
mending:
enabled: true
locked: true
conditions:
- type: SERVER_AGE
value: 1209600000
messages:
enchant-blocked: '&cMending is currently completely locked!'
grindstone-message: '&cYou cannot remove this enchantment yet!'
unbreaking:
enabled: true
default-cap: 2
conditions:
- type: PLAYTIME
value: 18000000
cap: 3
enabled: true
default-cap: 5
time-based-progression:
enabled: true
intervals:
0: 2
86400000: 3
604800000: 4
1209600000: 5
per-enchantment:
sharpness:
enabled: true
default-cap: 3
conditions:
- type: SERVER_AGE
value: 604800000
cap: 5
messages:
enchant-blocked: '&cSharpness above level {cap} is currently locked!'
lore-warning: '&c[LOCKED]'
protection:
enabled: true
default-cap: 2
conditions:
- type: SERVER_AGE
value: 432000000
cap: 4
mending:
enabled: true
locked: true
conditions:
- type: SERVER_AGE
value: 1209600000
messages:
enchant-blocked: '&cMending is currently completely locked!'
grindstone-message: '&cYou cannot remove this enchantment yet!'
unbreaking:
enabled: true
default-cap: 2
conditions:
- type: PLAYTIME
value: 18000000
cap: 3
messages.yml
Spoiler: Click to view messages.yml
Code (Text):
prefix: '&8[&bTropical&3Progression&8]&r'
commands:
no-permission: '&cYou do not have permission to use this command.'
status:
header: '&8&m----------&r &bProgression Status &8&m----------'
dimension-locked: '&c✗ &7{dimension}: &cLocked &8({time_remaining})'
dimension-unlocked: '&a✓ &7{dimension}: &aUnlocked'
item-locked: '&c✗ &7{item}: &cLocked'
item-unlocked: '&a✓ &7{item}: &aUnlocked'
enchant-capped: '&e⚠ &7{enchant}: &eCapped at {cap}'
footer: '&8&m--------------------------------'
unlock:
success: '&aManually unlocked &e{feature}&a for &b{player}&a!'
success-all: '&aManually unlocked &e{feature}&a for all players!'
already-unlocked: '&e{feature} &7is already unlocked.'
invalid-feature: '&cInvalid feature: &e{feature}'
usage: '&cUsage: /progression unlock <dimension|item|enchant> <name> [player]'
reload:
success: '&aReloaded all configurations!'
error: '&cError reloading configs. Check console.'
notifications:
feature-unlocked: '&a&l✓ &aYou have unlocked: &e{feature}&a!'
dimension-unlock: '&a&l✓ &aThe &e{dimension}&a is now accessible!'
item-unlock: '&a&l✓ &aYou can now use &e{item}&a!'
enchant-cap-increase: '&a&l⚠ &e{enchant}&a cap increased to &b{cap}&a!'
commands:
no-permission: '&cYou do not have permission to use this command.'
status:
header: '&8&m----------&r &bProgression Status &8&m----------'
dimension-locked: '&c✗ &7{dimension}: &cLocked &8({time_remaining})'
dimension-unlocked: '&a✓ &7{dimension}: &aUnlocked'
item-locked: '&c✗ &7{item}: &cLocked'
item-unlocked: '&a✓ &7{item}: &aUnlocked'
enchant-capped: '&e⚠ &7{enchant}: &eCapped at {cap}'
footer: '&8&m--------------------------------'
unlock:
success: '&aManually unlocked &e{feature}&a for &b{player}&a!'
success-all: '&aManually unlocked &e{feature}&a for all players!'
already-unlocked: '&e{feature} &7is already unlocked.'
invalid-feature: '&cInvalid feature: &e{feature}'
usage: '&cUsage: /progression unlock <dimension|item|enchant> <name> [player]'
reload:
success: '&aReloaded all configurations!'
error: '&cError reloading configs. Check console.'
notifications:
feature-unlocked: '&a&l✓ &aYou have unlocked: &e{feature}&a!'
dimension-unlock: '&a&l✓ &aThe &e{dimension}&a is now accessible!'
item-unlock: '&a&l✓ &aYou can now use &e{item}&a!'
enchant-cap-increase: '&a&l⚠ &e{enchant}&a cap increased to &b{cap}&a!'
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
How to Use
Setting Up Dimension Locks
- Edit locks/dimensions.yml to configure Nether and End access
- Set locked: true to enable the lock
- Add conditions like SERVER_AGE, WORLD_AGE, or ADVANCEMENT
- Use require-all-conditions: true to require ALL conditions (AND logic)
- Use require-all-conditions: false to require ANY condition (OR logic)
- Players will be blocked from portals and teleports until conditions are met
Setting Up Item Locks
- Edit locks/items.yml to configure item restrictions
- Choose which actions to prevent: prevent-equip, prevent-flight, prevent-open, prevent-place, prevent-use
- Set time-based or advancement-based unlock conditions
- Customize messages for each item type
- Supported items: Elytra, Ender Chest, Totem of Undying, Shulker Box
Setting Up Enchantment Caps
- Edit locks/enchantments.yml to configure enchantment limits
- Set default-cap for the starting enchantment level
- Add time-based progression to increase caps over time
- Configure per-enchantment rules for specific enchantments
- Players cannot enchant or combine items beyond the current cap
Condition Types
- SERVER_AGE - Time since server started (in milliseconds)
- WORLD_AGE - In-game world time (in milliseconds)
- PLAYTIME - Individual player playtime (in milliseconds)
- ADVANCEMENT - Requires specific Minecraft advancement
Time Conversion
Code (Text):
1 hour = 3,600,000 ms
1 day = 86,400,000 ms
1 week = 604,800,000 ms
2 weeks = 1,209,600,000 ms
30 days = 2,592,000,000 ms
1 day = 86,400,000 ms
1 week = 604,800,000 ms
2 weeks = 1,209,600,000 ms
30 days = 2,592,000,000 ms
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Use Cases
For Fresh SMP Servers
- Lock Nether for first week to encourage overworld exploration
- Lock End for two weeks to build anticipation
- Progressive enchantment caps prevent early-game overpowered gear
- Elytra locked for first month to preserve server economy
For Competitive Servers
- Synchronized progression ensures fair competition
- Time-gated features prevent pay-to-win advantages
- Manual unlocks allow event-based progression
- Per-world overrides for special PvP arenas
For Roleplay Servers
- Lock dimensions until story milestones are reached
- Advancement-based unlocks for quest progression
- Custom messages for immersive lock notifications
- Manual unlocks for DM-controlled story events
For Hardcore Servers
- Extreme time gates for ultimate challenge
- Playtime requirements ensure dedication
- Totem locks increase difficulty
- Enchantment caps balance early-game combat
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Placeholders
Available in messages:
Code (Text):
{player} - Player name
{world} - World name
{feature} - Feature name (dimension/item/enchant)
{dimension} - Dimension name
{item} - Item name
{enchant} - Enchantment name
{cap} - Current enchantment cap
{time_remaining} - Time until unlock (formatted)
{world} - World name
{feature} - Feature name (dimension/item/enchant)
{dimension} - Dimension name
{item} - Item name
{enchant} - Enchantment name
{cap} - Current enchantment cap
{time_remaining} - Time until unlock (formatted)
Code (Text):
7d 12h - 7 days, 12 hours
3h 45m - 3 hours, 45 minutes
30m 15s - 30 minutes, 15 seconds
45s - 45 seconds
3h 45m - 3 hours, 45 minutes
30m 15s - 30 minutes, 15 seconds
45s - 45 seconds
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Requirements
- Minecraft Version: 1.13 - 1.21+
- Server Software: Spigot, Paper, Purpur
- Java Version: Java 8+
- Dependencies: None (XSeries included)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
❓ FAQ
Q: How does server age work?
A: Server age starts counting from when the plugin is first enabled. It tracks real-world time, not in-game time.
Q: What's the difference between server age and world age?
A: Server age is real-world time since plugin startup. World age is in-game time (affected by sleep, time commands, etc.).
Q: Can I unlock features early for specific players?
A: Yes! Use /progression unlock <type> <name> <player> to manually unlock for individuals.
Q: Do unlocks persist after restart?
A: Yes! Manual unlocks are saved in unlocks.yml and persist across restarts.
Q: Can I have different rules for different worlds?
A: Yes! Use per-world-overrides in dimension configs to customize per-world.
Q: What happens if I change time values after server start?
A: The plugin will recalculate based on the new values. Locks may unlock immediately if conditions are now met.
Q: Can players bypass locks with commands?
A: Only if they have bypass permissions. Teleport commands are blocked for locked dimensions.
Q: How does the cache system work?
A: Lock states are cached for 60 seconds (configurable) to reduce performance impact. Cache auto-invalidates when advancements are earned.
Q: Can I add custom items or enchantments?
A: Currently supports Elytra, Ender Chest, Totem, and Shulker Box. Enchantments support all vanilla enchants.
Q: Does this work with custom enchantment plugins?
A: Only vanilla enchantments are supported. Custom enchantments from other plugins are not affected.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚡ Performance
- Smart Caching - Lock states cached for 60 seconds to minimize condition checks
- Async-Safe - All operations are main-thread safe
- Minimal Overhead - Only checks locks when relevant events occur
- Auto-Invalidation - Cache clears when player earns advancements
- Configurable Cache - Adjust cache duration in config.yml
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
️ Advanced Features
Hybrid Conditions
- Combine multiple condition types with AND/OR logic
- Example: Require BOTH server age AND advancement
- Example: Require EITHER playtime OR advancement
- Set require-all-conditions: true for AND logic
- Set require-all-conditions: false for OR logic
Per-World Overrides
- Different dimension lock rules per world
- Useful for creative worlds, minigame worlds, etc.
- Example: Nether unlocked in creative world but locked in survival
Notification System
- Choose between CHAT or ACTIONBAR notifications
- Actionbar notifications are non-intrusive
- Countdown timers show time until unlock
- Fully customizable messages
Manual Unlock System
- Unlock for specific players or globally
- Unlocks persist in unlocks.yml
- Perfect for events, rewards, or story progression
- Can be revoked by editing unlocks.yml
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Example Configurations
Example 1: Week-Long Nether Lock
Code (Text):
nether:
enabled: true
locked: true
conditions:
- type: SERVER_AGE
value: 604800000
require-all-conditions: true
messages:
portal-blocked: '&cNether unlocks in 7 days!'
enabled: true
locked: true
conditions:
- type: SERVER_AGE
value: 604800000
require-all-conditions: true
messages:
portal-blocked: '&cNether unlocks in 7 days!'
Code (Text):
end:
enabled: true
locked: true
conditions:
- type: ADVANCEMENT
advancement: minecraft:story/enter_the_nether
- type: SERVER_AGE
value: 1209600000
require-all-conditions: true
messages:
portal-blocked: '&cDefeat the Nether first!'
enabled: true
locked: true
conditions:
- type: ADVANCEMENT
advancement: minecraft:story/enter_the_nether
- type: SERVER_AGE
value: 1209600000
require-all-conditions: true
messages:
portal-blocked: '&cDefeat the Nether first!'
Code (Text):
elytra:
enabled: true
locked: true
conditions:
- type: PLAYTIME
value: 36000000
actions:
prevent-equip: true
prevent-flight: true
messages:
usage-blocked: '&cPlay for 10 hours to unlock Elytra!'
enabled: true
locked: true
conditions:
- type: PLAYTIME
value: 36000000
actions:
prevent-equip: true
prevent-flight: true
messages:
usage-blocked: '&cPlay for 10 hours to unlock Elytra!'
Code (Text):
sharpness:
enabled: true
default-cap: 1
conditions:
- type: SERVER_AGE
value: 604800000
cap: 3
- type: SERVER_AGE
value: 1209600000
cap: 5
messages:
enchant-blocked: '&cSharpness capped at {cap}!'
enabled: true
default-cap: 1
conditions:
- type: SERVER_AGE
value: 604800000
cap: 3
- type: SERVER_AGE
value: 1209600000
cap: 5
messages:
enchant-blocked: '&cSharpness capped at {cap}!'
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Support
Need help? Found a bug? Have a suggestion?
- Discord: Join our Discord
- Issues: Report bugs in the discussion section
- Reviews: Leave a review if you enjoy the plugin!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Made with ❤️ by TropicalStudios
If you enjoy this plugin, please leave a ⭐⭐⭐⭐⭐ review!
Made with ❤️ by TropicalStudios
If you enjoy this plugin, please leave a ⭐⭐⭐⭐⭐ review!
Quick facts
- Edition: Minecraft Java
- File type: .jar
- Minecraft versions listed: 1.8, 1.9, 1.10
- 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.
TropicalProgression | Made with Kodari is a free Minecraft Java mod. Compatible with Minecraft 1.8, 1.9, 1.10, 1.11 and newer. Downloaded 29 times (via Spigot). Download it and open it directly in the game.