Tags
Creators
Details
0.8.0+1.20.1
Compatibility
Required content
Changes
0.8.0: NPCs with a day, and NPCs you can hand to a friend
Daily schedules
An NPC can now keep hours. Give it a list of times and what it should be doing at each, and it runs its own day: asleep in a bed overnight, up and wandering before dawn, at the counter when the shop opens, walking a round in the afternoon.
Moves tab, Daily Schedule. Each block of the day gets a start time, one of four things to do (sleep in a bed, wander an area, stand at a spot, walk the patrol route), and a spot, which you mark by right-clicking the world with the tool it hands you. The same tool you already use for patrol routes, so there is nothing new to learn.
- Opening hours, if you want them. Turn Keep opening hours on and each block decides whether the NPC's role can be used, so a shop that is closed says so in words you write instead of opening at three in the morning. Leave it off and the schedule is pure choreography, with the shop open around the clock. Dialogue keeps working either way, so you can write closed-hours conversations.
- Things that happen on the hour. Any block can run actions as it begins: say a line, hand something over, charge or pay coins, run a command. This is how a shop restocks at opening and announces itself while it does.
- It survives being left alone. The schedule is worked out from the clock, so an NPC in an unloaded chunk costs nothing and cannot drift. Come back a week later and it is doing whatever it should be doing at that hour, with no catch-up and nothing to repair.
- Entries that still need a spot are marked, counted, and fixable in a couple of clicks with Fix next, which hands you the tool aimed at the right one.
- Schedules need a sunrise, so the screen says so plainly in the Nether and the End rather than letting you build a day that would never advance.
Share an NPC as text
Presets have always saved NPCs to files, but those land in the server's config folder where no player can reach them. An NPC could be copied anywhere inside one world and nowhere outside it.
A share code is just text. Copy it off an NPC, paste it onto another, and it carries the whole build:
look, pose, dialogue, reactions, gear. It travels however you already talk to people. The same text
is what a .npc file holds, so in single player you can hand over a file instead, and that route has
no size limit at all.
Codes coming in are treated as hostile input, since a code is the one thing in the mod written by a stranger. A code that claims to expand into something enormous is refused rather than parsed, and oversized pastes are turned away with a pointer to the file route rather than disconnecting whoever sent them.
Security
- Paying coins and giving items have been admin-only since 0.6.0, enforced by a sweep that skips any NPC already checked. That "already checked" mark travelled inside the NPC's config, so an operator's preset landing on an ordinary player's NPC kept its pay actions and was never looked at again, which is a coin faucet for the price of loading a preset. The mark is now stripped along with everything else world-specific, so a foreign config always gets checked on arrival.
Fixes
- Sleeping NPCs lie in the bed properly, in the head half, instead of standing beside it or hanging off the end.
- A sleeping NPC stops turning to watch passers-by.
- A bed mined out from under a sleeping NPC wakes it rather than leaving it asleep on nothing.
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:gGHT7Irr:Xp6kt75v"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:gGHT7Irr:Xp6kt75v"
}

