mc.nates.cloud
CraftGPT 2.0 beta

Configuration

Everything lives in plugins/CraftGPT/config.yml. Run /cg reload after editing (a few settings, noted below, need a restart). Config checking is strict: an invalid value switches the plugin off at startup, or is rejected on reload with the old config kept.

Providers

Key Default What it does
providers.default openai The profile mobs use unless /cg model says otherwise. Must name a profile that exists
providers.profiles.<name>.* one openai profile See AI providers for every profile key

Inference

Key Default What it does
inference.max-concurrent 4 Most AI calls running at once
inference.queue-capacity 64 How many more can wait; anything beyond is turned away straight away
inference.total-timeout-seconds 90 Time limit for a whole request, including waiting and retries
inference.model-cache-capacity 32 How many provider connections to keep ready

These are read at startup. Failed calls are retried up to 3 attempts in total (except for errors like a bad key or unknown model). If a call still fails, the player sees “I couldn’t respond because the AI provider request failed.”

Chat

Key Default What it does
chat.interaction-radius 30 Blocks. Chat range, the normal visibility range, the reaction range and the get_nearby radius
chat.history-token-budget 4000 About how many tokens of history are sent with each message
chat.default-prefix "<%NAME%>" The default reply prefix. & codes and MiniMessage work

Retention

Key Default What it does
retention.keep-messages-per-mob 0 0 keeps all history; a number trims each mob to its latest messages
retention.prune-interval-minutes 60 How often trimming runs

Tools

See Tools for tools.enabled, tools.per-inference-budget, tools.tool-timeout-ms, tools.default-policy.allow, tools.default-policy.deny, tools.real-world.timezone, tools.actions.follow-max-seconds and tools.actions.wander-max-blocks.

Prompt editor

Key Default What it does
prompt-editor.max-prompt-length 8000 Longest prompt /cg prompt will save, in characters
prompt-editor.prefer-dialog true Present in the file, but currently has no effect

Auto-spawn

Key Default What it does
auto-spawn.enabled false Turn some mobs in newly loaded chunks into AI mobs
auto-spawn.chance 1.5 Percent chance per eligible mob
auto-spawn.prompt-appendix "" Text added to every auto-spawned mob’s personality
auto-spawn.default-prefix "<%NAME%>" Prefix for auto-spawned mobs
auto-spawn.worlds ["world", "world_the_end", "world_nether"] Worlds where it runs

Auto-chat

Key Default What it does
auto-chat.enabled false Server-wide switch. Per-mob auto-chat does nothing while this is off
auto-chat.auto-end true End the chat when the player walks out of range
auto-chat.auto-spawn-default true Auto-spawned mobs start with auto-chat on
auto-chat.manual-default false Mobs made with /cg create start with auto-chat on
auto-chat.radius 30 How close a player has to come

Prompt templates

The config says “don’t touch unless you know what you’re doing”. %ENTITY_TYPE%, %BACKSTORY% and %NAME% are filled in.

Key Default
prompt.default-system-prompt "You are a %ENTITY_TYPE% in Minecraft. Your personality is '%BACKSTORY%' All responses must be as a %ENTITY_TYPE%. Do not prefix your responses with your name. Keep responses short."
prompt.backstory-writer-system-prompt "You are writing short but wacky personalities and names for characters in a Minecraft world."
prompt.backstory-prompt-unnamed "Write a personality and backstory and name for this particular %ENTITY_TYPE% in 50 words or less"
prompt.backstory-prompt-named "Write a personality and backstory for this particular %ENTITY_TYPE% named %NAME% in 50 words or less"
prompt.name-parser-system-prompt "You are pulling names from defined backstories. Only respond with the name from the personality description and nothing else. Do not include any other words except for the name."
prompt.name-parser-prompt "The backstory is: %BACKSTORY% and the name from the backstory is:"
prompt.speak-verb "says" (player lines reach the AI as ” says ”)
prompt.chatting-instructions "You are currently chatting with the following players: "

Usage limits

See Usage limits for usage-reset.*, default-usage-limit, global-usage-limit and usage-limit.<tier>.max.

Telemetry and updates

Key Default What it does
metrics.enabled true Anonymous bStats statistics (no prompts, keys, identities or chat content)
update-check.enabled true Check Spigot for a newer version
update-check.connect-timeout-ms 3000
update-check.request-timeout-ms 5000

Hidden settings

These work but aren’t in the default file:

Key Default What it does
debug false Logs event reactions and every tool call to the console
messages-cutoff or chat.messages-cutoff not set The 0.3.x limit on how many history messages are sent. Still honoured on top of the token budget if you set it

Events

How the AI hears about things. Each event has a chance (percent) and a message, where %s is filled with the item or creature’s name. player-* events are things the chatting player did or suffered; npc-* events happened to the mob itself. player-approach-npc fires when auto-chat starts a chat; player-kill-friend is when the player kills the mob it’s talking to.

Key Default What it does
player-event-prefix "your friend %s" Put before player events (%s = the player’s name)
passive-event-prefix "" Put before mob events
event-indicator "[event]" Marks event lines for the AI, so [event] your friend Steve just caught a cod with a fishing rod
Key Chance Message sent to the AI
events.player-fish 20 "just caught a %s with a fishing rod"
events.player-kill-friend 20 "just killed you!"
events.player-kill-entity 20 "just killed a %s"
events.player-breed-entity 20 "bred two %ss and they just made a baby %s"
events.player-mount 20 "just mounted a %s to ride it"
events.player-pickup-item 20 "just picked up a %s"
events.player-resurrect 20 "just resurrected from the dead"
events.player-tame-entity 20 "just tamed a %s"
events.player-eat 20 "just ate a %s"
events.player-hit-friend-projectile 20 "just shot you with a %s"
events.player-hit-entity-projectile 20 "just shot a %s with a %s"
events.player-damage-friend 20 "just hit you with a %s"
events.player-damage-friend-fist 20 "just hit you with their fist"
events.player-damage-entity 20 "just hit a %s"
events.player-break-item 20 "just broke their %s"
events.player-levelup 20 "just went up in experience level"
events.player-leash-entity 20 "just attached a leash to a %s"
events.player-approach-npc 100 "just walked up next to you"
events.player-hurt-suffocation 20 "just got hurt by suffocation"
events.player-hurt-lightning 20 "just got hit by lightning and took damage"
events.player-hurt-lava 20 "just got burned by lava and took damage"
events.player-hurt-fire 20 "just got burned by fire and took damage"
events.player-hurt-fall 20 "just got hurt in a fall"
events.player-hurt-entityexplosion 20 "just got hurt by an explosion"
events.npc-damage-entity 20 "you just hit a %s"
events.npc-kill-entity 20 "you just killed a %s"
events.npc-hurt-entity 20 "something just hit you and you took damage"
events.npc-hurt-entityexplosion 20 "something just exploded near you and you took damage"
events.npc-hurt-fall 20 "you just fell and took damage"
events.npc-hurt-fire 20 "you just took damage from touching fire"
events.npc-hurt-lava 20 "you just took damage from touching lava"
events.npc-hurt-projectile 20 "you just took damage from a projectile"
events.npc-hurt-fire-tick 20 "you just took damage from being on fire"
events.npc-hurt-drowning 20 "you just took damage from drowning"

Messages

Everything players see. Text uses MiniMessage (<gold>…</gold>); a message with & codes and no tags is read as old-style colour codes, so 0.3.x texts still work. Placeholders work as names (<name>, <profile>, <page>…) or as %s, filled in order. messages.prefix goes in front of most replies. A key missing from your file falls back to the default.

Key Default
messages.prefix "<gold>[</gold><gray>Craft</gray><green>GPT</green><gold>]</gold> "
messages.chat.start.text "Started chatting with %s! "
messages.chat.start.locate.text "[locate]"
messages.chat.start.locate.hover "Click me!"
messages.chat.stop.text "Stopped chatting with %s!"
messages.chat.stop.stop-with-reason "Stopped chatting with %s %s"
messages.chat.stop.death-reason "because entity died."
messages.chat.error.global-limit "Server has reached global chat usage limit!"
messages.chat.error.player-limit "You have reached your usage limit!"
messages.chat.error.no-api "No API key set! Set one in config.yml"
messages.chat.error.too-far "<name> is too far away to hear you! Use <gold>/cg stop</gold> to exit chat."
messages.chat.error.one-message-at-a-time "You can only send one message at a time!"
messages.chat.error.api-error "I couldn't respond because the AI provider request failed."
messages.selecting.selected "Selected %s"
messages.selecting.unselected "Unselected %s"
messages.selecting.unselected-death "Unselected %s because it died."
messages.selecting.while-sneaking "Can't use magic wand while sneaking!"
messages.mob-ai-status.disabled "Disabled AI for <name>"
messages.mob-ai-status.enabling "Enabling AI for <name>..."
messages.mob-ai-status.backstory-generated "Backstory generated!"
messages.mob-ai-status.name-generated "Name generated!"
messages.mob-ai-status.enabled "AI successfully enabled for <name>!"
messages.mob-ai-status.locate.text "[locate]"
messages.mob-ai-status.locate.hover "Click me!"
messages.mob-ai-status.enable-chat-hint "Click entity while sneaking to enable chat."
messages.mob-ai-status.console-creating "Creating mob..."
messages.mob-ai-status.api-failure.header "<red>ERROR: API failure!"
messages.mob-ai-status.api-failure.line1 "<red>This is most often caused by an invalid API key or because your provider account is not properly configured/funded."
messages.mob-ai-status.api-failure.line2 "<red>Using the API requires credits or quota configured with your provider."
messages.mob-ai-status.api-failure.line3 "<red>For more information on the exact error, see the server logs."
messages.help.header "&e==========| &7CraftGPT Help &e|=========="
messages.help.join-discord "Join the Discord "
messages.help.cg-wand "&c/cg wand &7Get a magic wand" (currently unused)
messages.help.cg-stop "&c/cg stop &7Exit chat mode" (currently unused)
messages.help.cg-reload "&c/cg reload &7Reload config.yml and plugin data" (currently unused)
messages.help.cg-create "&c/cg create &7Enable AI for selected mob" (currently unused)
messages.help.cg-remove "&c/cg remove &7Remove Ai for selected mob" (currently unused)
messages.help.cg-clearMobBuilder "&c/cg clearMobBuilder &7Clear mob-builder settings" (currently unused)
messages.reload.debug-mode "Debug mode enabled"
messages.reload.success "Config reloaded successfully"
messages.reload.updates "Checking for updates..." (currently unused)
messages.no-permission "You do not have permission to do that!"
messages.commands.no-api "WARNING: CraftGPT is not connected to an AI provider! Most features of the plugin will not work! See console logs for error details." (currently unused)
messages.commands.malformed-command-1 "Malformed command or must run command as player!" (currently unused)
messages.commands.malformed-command-2 "Malformed command! Try &c/cg help" (currently unused)
messages.commands.key-required "CraftGPT requires a configured provider (see config.yml)!"
messages.commands.craftgpt-no-console "Cannot use /craftgpt as console!"
messages.commands.console-only "This command can only be run from the console."
messages.commands.consolecreate-usage "Usage: /craftgpt consolecreate <UUID> [rawprompt]"
messages.commands.invalid-uuid "Invalid UUID format."
messages.commands.entity-not-found "No entity found with the specified UUID."
messages.commands.update-failed "<red>Failed to save change: <error>"
messages.commands.api-connected.no-aimob-selected "No AI mob selected!"
messages.commands.api-connected.no-aimob-chatting "No AI mob chatting/selected!"
messages.commands.api-connected.no-mob-selected "No mob selected!"
messages.commands.api-connected.ai-already-enabled "Mob is already AI-enabled!"
messages.commands.api-connected.ai-not-enabled "Mob is not AI-enabled!"
messages.commands.api-connected.prefix.set "Prefix set to:"
messages.commands.api-connected.prefix.not-set "&cWARNING: %NAME% not set in prefix so mob's name will not appear!"
messages.commands.api-connected.auto-chat.set "Auto-chat set to: "
messages.commands.api-connected.locate.highlight " highlighted for 10 sec!"
messages.commands.api-connected.visibility.unrecognized "Unrecognized visibility!"
messages.commands.api-connected.visibility.set "Visibility set to: "
messages.commands.api-connected.visibility.specify "Must specify visibility!"
messages.commands.api-connected.model.not-set "No provider override set (using default: <default>)"
messages.commands.api-connected.model.current "Provider override: <profile>"
messages.commands.api-connected.model.set "Provider override set to: <profile>"
messages.commands.api-connected.model.cleared "Provider override cleared, using default: <default>"
messages.commands.api-connected.model.unknown-profile "<red>Unknown provider profile '<name>'. Configured profiles: <profiles>"
messages.commands.api-connected.prompt.usage "<red>Usage: /cg prompt <show|set|append> ...</red>"
messages.commands.api-connected.prompt.not-set-yet "No custom prompt is set yet; the default template will be used once created."
messages.commands.api-connected.prompt.invalid-page "<red>Invalid page; choose 1-<pages>.</red>"
messages.commands.api-connected.prompt.page-header "<gold>Prompt (page <page>/<pages>)</gold>"
messages.commands.api-connected.prompt.not-set "No prompt text provided. Try again!"
messages.commands.api-connected.prompt.too-long "<red>Prompt is <length> characters, which exceeds the <max>-character limit.</red>"
messages.commands.api-connected.prompt.updated "Prompt updated."
messages.commands.api-connected.prompt.updated-history-cleared "Prompt updated and chat history cleared."
messages.commands.api-connected.prompt.history-clear-failed "<red>Prompt was saved, but clearing chat history failed: <error></red>"
messages.commands.api-connected.prompt.exported "Exported the prompt to a book (<pages> page(s))."
messages.commands.api-connected.prompt.too-long-for-book "<red>The prompt is too long to fit in a book.</red>"
messages.commands.api-connected.prompt.book-inventory-full "<red>Your inventory is full; couldn't give you the book.</red>"
messages.commands.api-connected.prompt.no-book-held "<red>Hold a written or writable book in your main hand first.</red>"
messages.commands.api-connected.prompt.backstory-imported "Backstory imported from the book."
messages.commands.api-connected.prompt.edit-unavailable "<red>Dialog editor requires a newer server version; use /cg prompt show|set|append|tobook|frombook instead.</red>"
messages.commands.api-connected.prompt.selection-changed "<red>Your selection changed while the editor was open — nothing was saved. Re-select the mob and try again.</red>"
messages.commands.api-connected.displayname.set "Name set to: "
messages.commands.api-connected.displayname.not-set "No name provided. Try again!"
messages.commands.api-connected.iterate.coming-soon "Coming soon." (currently unused)
messages.commands.api-connected.save.success "Data saved!"
messages.commands.api-connected.wand.name "Magic Wand"
messages.commands.api-connected.wand.help "&7Click mobs to toggle selection!"
messages.commands.api-connected.stop.not-set "Not currently chatting"
messages.commands.api-connected.create.dead "Mob is dead!"
messages.commands.api-connected.clearMobBuilder.already-created "AI mob already created! Use &c/cg remove &7to remove AI from a mob."
messages.commands.api-connected.clearMobBuilder.success "AI mob builder cleared!"
messages.commands.api-connected.name.set "Name set to: "
messages.commands.api-connected.name.not-set "No name provided. Try again!"
messages.commands.api-connected.backstory.null-prompt "Can't provide a backstory with a raw prompt!"
messages.commands.api-connected.backstory.set "Backstory set to: "
messages.commands.api-connected.backstory.not-set "No backstory provided. Try again!"
messages.commands.api-connected.rawprompt.null-backstory "Can't provide a raw prompt with a backstory!"
messages.commands.api-connected.rawprompt.set "Raw prompt set to: "
messages.commands.api-connected.rawprompt.not-set "No prompt provided. Try again!"
messages.commands.api-connected.info.name "Name: "
messages.commands.api-connected.info.system-prompt "System prompt: "
messages.commands.api-connected.clearUsageFile.success "Usage file cleared and reloaded!"
messages.commands.api-connected.debug.enter "You are now in debug mode!"
messages.commands.api-connected.debug.exit "You have exited debug mode!"
messages.commands.api-connected.usage.plugins.usage "<red>Usage: /craftgpt usage plugins [page]</red>"
messages.commands.api-connected.usage.plugins.invalid-page "<red>Page must be a positive whole number.</red>"
messages.commands.api-connected.usage.plugins.empty "No plugin-attributed usage has been recorded."
messages.commands.api-connected.usage.plugins.out-of-range "<red>Page <page> is out of range; choose 1-<pages>.</red>"
messages.commands.api-connected.usage.plugins.header "<gold>Plugin usage (page <page>/<pages>, <page_size> per page)</gold>"
messages.commands.api-connected.usage.plugins.row "<rank>. <plugin>: <tokens> tokens"
messages.commands.api-connected.dryrun.border "+++++++++++++++++++++++++++++++++++++++++"
messages.commands.api-connected.dryrun.selected "Dry run for selected "
messages.commands.api-connected.dryrun.name "Name: "
messages.commands.api-connected.dryrun.backstory "Backstory: "
messages.commands.api-connected.dryrun.chatgpt "ChatGPT"
messages.commands.api-connected.dryrun.rawprompt "Raw Prompt: "
messages.commands.api-connected.tp.tphere-success "Mob teleported to you!"
messages.commands.api-connected.tp.tpto-success "You teleported to the Mob!"
messages.commands.api-connected.tp.tp-fail "Unable to teleport, make sure a mob is selected."