Links
Tags
Creators
Details
0.1.0-alpha.1
Compatibility
Required content
Changes
First public test release.
TimeLens reconstructs how an area of your world looked at an earlier point in time and shows it to a single player, using block history recorded by CoreProtect. The world itself is never written to.
Please read
This is an alpha. The central promise, that a historical view is visible only to the player who requested it, has been verified by design and by code review, but it has not yet been confirmed with two clients on a live server. Please do not run this on a production server.
What works
- Views given as an age (
30m,2h,7d,2w) or as a calendar date and time (2026-08-20 14:30), read in the server's time zone - An optional per-view radius, so a view that falls short of a build can be widened without editing the configuration
- History lookups run off the main server thread
- Two independent limits bound the cost of a single view, and a request exceeding either is refused with an explanation rather than rendered slowly
- Views are cleaned up on exit, disconnect, world change, teleport and death. Nothing about a player is modified, so no plugin state can survive a crash
Measured
- Reconstruction agrees with an independent SQL calculation on 1,971 of 1,971 positions from a real CoreProtect database
- Main-thread render preparation costs 0.5 to 2.8 ms for up to 2,400 blocks, where one tick is 50 ms
- 83 unit tests, clean build from a fresh checkout
Requirements
Paper 1.21.11 or a fork, Java 21 or newer, and CoreProtect 24.0 or newer with its API enabled. Will not load on Spigot or CraftBukkit. Folia is untested.
Not included
Entities, inventories and most block-entity data are not reconstructed. Timeline playback, graphical interfaces and block inspection are deliberately absent. The foundation should prove itself first.
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:5rGNHWnh:9HFfjr2Q"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:5rGNHWnh:9HFfjr2Q"
}
