💡Introduction

Gemini-AI is not just a chatbot. It is an all-powerful virtual assistant, a 24/7 support staff, and a dynamic quest system, designed to enhance the player experience and reduce your management workload.

✨ GEMINI-AI'S HIGHLIGHTED FEATURES ✨

🚀 Intelligent & Context-Aware AI Interaction

  • Flexible Communication: Players can chat with the AI via a command (/bot) or directly in chat (Hey AI,). Both are fully customizable in config.yml.
  • Player Understanding: The AI doesn't give robotic answers! Through PlaceholderAPI integration, it understands the player's context (location, health, money, etc.) to provide the most relevant responses.
  • Conversation Memory: The AI has a "memory" of the conversation, allowing for natural, follow-up interactions. The memory size is configurable for each permission group!

⚙️ Deep & Dynamic Quest System

Gemini-AI turns your server into a living world with quests that are automatically triggered by player actions.

  • Dozens of Trigger Types:
    • Events: First join, kill a mob, craft an item, reach a certain Y-level...
    • Advanced: Trigger via PlaceholderAPI (e.g., when a player reaches level 10).
  • Rich Objectives & Rewards:
    • Objectives: From gathering items and taming animals to wearing a full set of armor. Also supports randomized targets (e.g., kill a Zombie or a Skeleton).
    • Rewards: It's not just items! You can run commands (give money, ranks) or let the player choose their own reward from a GUI (CHOICE).
  • Build Storylines:
    • Create long quest chains by linking them with the next-quest option.
    • Require players to have a "special" item from a previous quest to start a new one.

🔧 The Ultimate Admin Toolkit

Helping you manage your server easily and professionally.

  • One-Command Plugin Translator:
    • Translate any plugin's entire language file (.yml) with the /ai translate command.
    • Includes a smart cache to save API costs and increase speed.
  • Web-Based Quest Editor:
    • No more manual YML editing! The /ai editor command opens an intuitive web interface.
    • Game-Changer: The "Create with AI ✨" feature allows you to generate a complete quest just from an idea!
  • Permission Profiles & Monetization:
    • Create separate AI "profiles" for different groups (Member, VIP, Admin) in config.yml.
    • Fine-tune limits: cooldowns, conversation memory, max active quests. This is a great tool for creating attractive VIP packages.

🔑Commands and Permissions

Player Commands

Command Description
/<config-command-name> [question] Ask the AI a question. The default command name is /bot and can be changed in config.yml.
[chat-prefix] [question] Call the AI directly in chat. The default prefix is Hey AI and can be changed in config.yml.
/ai questlog Opens the quest log, allowing players to view, track, or cancel their active quests.

Admin Commands

Command Description Permission
/ai reload Reload the entire plugin configuration. geminiai.admin
/ai translate <plugin> <file> <lang> Translate a .yml file from another plugin. geminiai.admin
/ai confirm Confirm and overwrite the original file with the translation. geminiai.admin
/ai deny Save the translation as a new file instead of overwriting. geminiai.admin
/ai cancel Cancel the ongoing translation process. geminiai.admin
/ai editor Create a session and URL to access the web-based Quest Editor. geminiai.admin

Other Permissions

Permission Description
geminiai.admin Grants access to all Gemini-AI admin commands.
geminiai.cooldown.bypass Allows a player to bypass the cooldown for the AI ask command.
geminiai.profile.* Grants access to a specific AI profile defined in config.yml (e.g., geminiai.profile.vip, geminiai.profile.default).

📄YML Configuration

Below are the original and complete contents of the important configuration files. These files are extensively commented to help you customize them directly with ease.

config.yml

▶ Expand to see the full config.yml file

# =================================================================
#                 GEMINI-AI PLUGIN CONFIGURATION
# =================================================================
# Welcome to the Gemini-AI configuration file!
# Here, you can customize everything from commands, AI personality,
# to other advanced settings.
# =================================================================

# Configuration version, DO NOT CHANGE THIS LINE.
config-version: '1.2.0'

# =================================================================
#               AI INTERACTION METHODS
# =================================================================
interaction:
  command:
    # The command name players will use to call the AI.
    name: "bot"
  chat:
    # Any message starting with this string will trigger the AI.
    # Leave empty ("") if you want to DISABLE this feature.
    prefix: "AI, "
  response:
    # Default display mode for responses, "private" or "public".
    default-mode: "private"
    # Special symbol at the end of a question to temporarily reverse the display mode.
    public-trigger: "!!"

# =================================================================
#                      GEMINI CORE SETTINGS
# =================================================================
gemini:
  # (IMPORTANT) Define AI profiles based on permissions.
  # You can edit or add custom groups, but ensure
  # all necessary keys are present according to the template for the plugin to work correctly.

  # It's recommended to add multiple API keys from different projects for each
  # group to avoid errors when a project's free API quota is exhausted.

  ai-profiles:
    # Profile for admins: highest permissions, no limits.
    admin:
      # (Required) The permission a player needs to use this profile.
      permission: "geminiai.profile.admin"
      # Cooldown time (seconds) between AI queries.
      cooldown: 0
      # Number of recent question-answer pairs the AI will remember to understand context.
      conversation-memory-size: 20
      # Maximum number of quests a player can have active at once.
      max-active-quests: 10
      # Time (hours) a quest exists before automatically expiring.
      #  Set to 0 for no expiration.
      quest-lifetime-hours: 0
      # Gemini model to use for this profile. "gemini-2.5-flash" is recommended.
      model: "gemini-2.5-flash"
      # Maximum number of tokens (words/characters) in each AI response.
      max-output-tokens: 1000
      # The "personality" of the AI. This is the core instruction the AI always follows.
      system-instruction: |
        You are an omnipotent server administrator, efficiently assisting with server management.
        Always answer accurately and concisely.
      # List of API keys. The plugin will automatically rotate them to avoid overload.
      chat-api-keys:
        - "your_admin_api_key_here"

    # Profile for VIP players: higher permissions than regular players.
    vip:
      permission: "geminiai.profile.vip"
      cooldown: 20
      conversation-memory-size: 14
      max-active-quests: 5
      quest-lifetime-hours: 48
      model: "gemini-2.5-flash"
      max-output-tokens: 800
      system-instruction: |
        You are a premium AI assistant for VIP players.
        Always appear knowledgeable and provide helpful and friendly answers.
      chat-api-keys:
        - "your_vip_api_key_1"
        - "your_vip_api_key_2"

    # Default profile for regular players
    default:
      permission: "geminiai.profile.default"
      cooldown: 60
      conversation-memory-size: 8
      max-active-quests: 3
      quest-lifetime-hours: 24
      model: "gemini-2.5-flash"
      max-output-tokens: 1000
      system-instruction: |
        You are an intelligent and friendly AI assistant in a Minecraft server.
        Always respond in a natural and cheerful manner.
      chat-api-keys:
        - "your_default_player_api_key"

  # --- SETTINGS SPECIFIC TO THE TRANSLATION FEATURE ---
  # It's recommended to add as many API keys as possible and avoid duplicates
  # with APIs already used for other plugin features.
  translation:
    model: "gemini-2.5-flash"
    api-keys:
      - "your_translation_api_key_here"


  # (WARNING) THIS IS THE OPTIMAL CONFIGURATION FOR ANY SERVER AND SHOULD NOT BE CHANGED.
  # The {placeholders} variable will be replaced with information from placeholders.yml.
  context-format: "Use the following context to provide the most accurate answer: {placeholders}"

  # --- SETTINGS SPECIFIC TO THE QUEST SYSTEM ---
  quest-generation:
    prompt-format: |
      The objective for a quest in a Minecraft server is: '{objective}'.
      Based on this objective, generate an exciting quest name and a short, immersive description (1-2 sentences).
    quest-generation-profile:
      model: "gemini-2.5-flash"
      max-output-tokens: 1000
      api-keys:
        - "your_quest_api_key_here"
      disable-safety-filters: true

# =================================================================
#                       OTHER GENERAL SETTINGS
# =================================================================
general:
  # Select the language for the plugin.
  # The file name must match a file in the 'lang' folder (e.g., 'en', 'vi').
  # English ('en') is the default language.
  language: "en"

  # Enable/disable logging of plugin activities to a log file.
  enable-logging: true
  # Delay (milliseconds) between each bulk translation request to avoid 429 errors.
  translation-delay-ms: 1000
  # Cooldown time (minutes) after completing a quest before a new one can be received.
  quest-completion-cooldown-minutes: 5

  # TRACKED QUEST DISPLAY MODE
  # You can choose how quest information is displayed to the player.
  # Valid modes:
  #   - 'SIDEBAR': Display on the scoreboard on the right side of the screen.
  #   - 'BOSS_BAR': Display on the Boss Bar at the top of the screen.
  #   - 'ACTION_BAR': Display on the action bar (above the hotbar).
  #   - 'NONE': Display nothing, players will check with /ai questlog.
  quest-display:
    mode: "SIDEBAR"
            

quests.yml

▶ Expand to see the full quests.yml file

# =================================================================================================
#
#                               COMPREHENSIVE GUIDE TO quests.yml
#
# =================================================================================================
# This file is the heart of the quest system, where you define the "archetypes"
# for each quest. Each archetype includes activation triggers, requirements, objectives
# to complete, and rewards.
#
# OVERALL STRUCTURE:
#
# quest-archetypes:
#   # Unique identifier for the quest, written as a single word without spaces.
#   quest_name_1:
#     trigger-scenarios: [...]
#     requirements: {...}
#     objectives: [...]
#     rewards: [...]
#     next-quest: "..."
#
# =================================================================================================
#
# I. TRIGGER (trigger-scenarios)
#
# -------------------------------------------------------------------------------------------------
# This is a list of actions that will trigger the quest assignment. If just one of these
# actions occurs, the quest will be assigned (if the player meets the conditions).
#
# LIST OF AVAILABLE TRIGGERS:
#
# --- Combat & PvP ---
# - KILL_MOB:ZOMBIE           (Kill a type of mob)
# - PLAYER_KILL               (Defeat another player)
# - TAKE_DAMAGE:FALL          (Take damage from a source. E.g., FALL, LAVA, ZOMBIE...)
# - BLOCK_ATTACK              (Successfully block an attack with a shield)
#
# --- Exploration & Movement ---
# - JOIN                      (Join the server)
# - JOIN:FIRST                (Join the server for the first time)
# - QUIT                      (Leave the server)
# - DEATH                     (Die)
# - RESPAWN                   (Respawn)
# - BIOME_ENTER:PLAINS        (Enter a biome)
# - PORTAL_USE:NETHER_PORTAL  (Go through a portal. E.g., NETHER_PORTAL, END_PORTAL)
# - PLAYER_SLEEP              (Lie in a bed)
# - REACH_HEIGHT:>=:200       (Reach a Y-level. Operators: >, >=, <, <=, ==, !=)
#
# --- Farming & Interaction ---
# - BLOCK_BREAK:DIAMOND_ORE   (Break a type of block)
# - BLOCK_PLACE:CRAFTING_TABLE (Place a type of block)
# - USE:LEVER                 (Interact (right-click) with a block or item)
# - USE:ENDER_PEARL
# - ITEM_CONSUME:APPLE        (Consume (eat/drink) an item)
# - ITEM_CRAFT:DIAMOND_SWORD  (Craft an item)
# - FISH:CAUGHT_FISH          (State during fishing. E.g., CAUGHT_FISH, FAILED_ATTEMPT)
# - VILLAGER_TRADE            (Successfully trade with a villager)
# - PLANT_CROP:WHEAT_SEEDS    (Plant a type of crop)
# - HARVEST_CROP:WHEAT        (Harvest a fully grown crop)
# - STRIP_LOG:OAK_LOG         (Use an axe to strip a log)
# - TILL_SOIL                 (Use a hoe to till soil)
# - SHEAR_ENTITY:SHEEP        (Use shears on an entity)
# - FILL_BUCKET:WATER_BUCKET  (Fill a bucket)
# - EMPTY_BUCKET:LAVA_BUCKET  (Empty a bucket)
#
# --- Status & Items ---
# - LEVEL_UP:30               (Reach an experience level)
# - ENCHANT:SHARPNESS         (Enchant an item with an enchantment of any level)
# - ENCHANT:SHARPNESS:5       (Enchant an item with a level V enchantment)
# - TAME:WOLF                 (Tame an animal)
# - GAIN_EFFECT:SPEED         (Receive a potion effect)
# - GAIN_EFFECT:SPEED:2       (Receive a level II potion effect)
# - ITEM_BREAK:DIAMOND_PICKAXE (Break an item)
# - ITEM_REPAIR               (Repair an item at an anvil)
# - ITEM_DROP:DIRT            (Drop an item)
# - ITEM_PICKUP:DIAMOND       (Pick up an item)
#
# --- System & Other ---
# - COMMAND:spawn             (Use a command (without the /))
# - PAPI:player_level>=10     (Trigger based on a placeholder)
#
# =================================================================================================
#
# II. OBJECTIVES (objectives)
#
# -------------------------------------------------------------------------------------------------
# A list of objectives the player needs to complete.
# Each objective has the structure: { type, target, amount }
#
# LIST OF OBJECTIVE TYPES:
#
# | type            | target (Target)                           | amount (Quantity)                         |
# |-----------------|---------------------------------------------|-------------------------------------------|
# | KILL_MOB        | EntityType name (e.g., ZOMBIE)                 | Number of mobs to kill.                     |
# | GATHER_ITEM     | Item Material name (e.g., DIAMOND)     | Number of items to have in inventory.      |
# | BREAK_BLOCK     | Block Material name (e.g., OAK_LOG)        | Number of blocks to break.                          |
# | PLACE_BLOCK     | Block Material name (e.g., TORCH)          | Number of blocks to place.                           |
# | REACH_LEVEL     | *Not used* | Experience level to reach.               |
# | KILL_PLAYER     | Player name, or `ANY`                  | Number of players to kill.                    |
# | BREED_ANIMAL    | EntityType name (e.g., COW)                    | Number of times to breed.                        |
# | TAME_ANIMAL     | EntityType name (e.g., WOLF)                   | Number of animals to tame.                  |
# | CONSUME_ITEM    | Material name (e.g., APPLE)                    | Number of items to eat/drink.                   |
# | SMELT_ITEM      | Output Material name (e.g., IRON_INGOT)       | Number of items to smelt.                 |
# | ENCHANT_ITEM    | Enchantment name (e.g., sharpness)             | Minimum enchantment level to achieve.      |
# | TRADE_VILLAGER  | *Not used* | Number of trades.                         |
# | FISH_ITEM       | Material name of caught item (e.g., SALMON)         | Number of items to fish.                          |
# | WEAR_ARMOR      | Armor type name (e.g., DIAMOND, IRON)           | Wear a full set (always 1).                    |
#
# RANDOMIZED OBJECTIVES:
# You can have the AI randomly pick a `target` by providing a list.
#
# objectives:
#   - type: 'KILL_MOB'
#     target: ['ZOMBIE', 'SKELETON', 'SPIDER']
#     amount: 10
#
# =================================================================================================
#
# III. REWARDS (rewards)
#
# -------------------------------------------------------------------------------------------------
# Rewards for completing the quest.
#
# - type: COMMAND
#   commands:
#     - "eco give %player% 1000"
#     - "say %player% has completed the quest!"
#
# - type: ITEM
#   items:
#     - material: "DIAMOND"
#       amount: 10
#
# - type: CHOICE
#   title: "Choose your reward"
#   items:
#     - material: "DIAMOND_SWORD"
#       name: "Divine Sword"
#       # ... other attributes
#     - material: "DIAMOND_AXE"
#       name: "Battle Axe"
#       # ... other attributes
#
# DETAILED ITEM FORMAT:
# - material: "DIAMOND_SWORD"
#   amount: 1
#   name: "Divine Sword"
#   lore:
#     - "A sharp blade."
#   enchantments:
#     - "sharpness:5"
#     - "unbreaking:3"
#   # Set to true if you want this item to have a "fingerprint"
#   # for use in another quest's requirements.
#   quest-item: true
#
# =================================================================================================
#
# IV. REQUIREMENTS (requirements) & V. NEXT QUEST (next-quest)
#
# -------------------------------------------------------------------------------------------------
#
# requirements:
#   required-items:
#     # Regular item, just needs to be in the inventory
#     - material: "NETHER_STAR"
#       amount: 1
#     # Item requiring a "fingerprint" from the 'the_ocean_trial' quest
#     - material: "HEART_OF_THE_SEA"
#       amount: 1
#       from-quest: "the_ocean_trial"
#
# next-quest: "next_quest_name"
#
# =================================================================================================

# CONFIGURATION VERSION (DO NOT CHANGE)
config-version: '1.2.0'

quest-archetypes:
  # =================================================================
  #                    QUEST CHAIN: THE BEGINNING
  # =================================================================
  newbie_1_wood:
    trigger-scenarios:
      - 'JOIN:FIRST'
    objectives:
      - type: 'BREAK_BLOCK'
        target:
          - 'OAK_LOG'
          - 'BIRCH_LOG'
          - 'SPRUCE_LOG'
        amount: 10
    rewards:
      - type: "ITEM"
        items:
          - material: "STONE_AXE"
    next-quest: "newbie_2_stoneage"

  newbie_2_stoneage:
    objectives:
      - type: 'GATHER_ITEM'
        target: 'COBBLESTONE'
        amount: 20
    rewards:
      - type: "ITEM"
        items:
          - material: "STONE_PICKAXE"
    next-quest: "newbie_3_tools"

  newbie_3_tools:
    objectives:
      - type: 'ITEM_CRAFT'
        target: 'STONE_SWORD'
        amount: 1
      - type: 'ITEM_CRAFT'
        target: 'STONE_SHOVEL'
        amount: 1
    rewards:
      - type: "ITEM"
        items:
          - material: "BREAD"
            amount: 5
    next-quest: "newbie_4_shelter"

  newbie_4_shelter:
    objectives:
      - type: 'PLACE_BLOCK'
        target: 'OAK_PLANKS'
        amount: 30
      - type: 'ITEM_CRAFT'
        target: 'FURNACE'
        amount: 1
    rewards:
      - type: "CHOICE"
        title: "Choose your bed"
        items:
          - material: "WHITE_BED"
          - material: "RED_BED"
          - material: "BLUE_BED"

  # ... (and many more example quests) ...
            

placeholders.yml

▶ Expand to see the full placeholders.yml file

# =================================================================
#                         NEW GUIDE
# =================================================================
# You can group keywords that share a common meaning.
# Each group will have a placeholder string and a list of related keywords.
# If a player's question contains ANY keyword from the list,
# the plugin will use the corresponding placeholder to provide context to the AI.
#
# Format:
# any_group_name:
#   placeholder: '%placeholder_api%'
#   keywords:
#     - 'keyword 1'
#     - 'keyword 2'
#     - 'keyword 3'
# =================================================================

# Configuration version, DO NOT CHANGE THIS LINE.
# The plugin uses it to automatically update the config file when needed.
config-version: '1.2.0'

# =================================================================
placeholders:
  location:
    placeholder: '%player_location_world%, %player_location_x%, %player_location_y%, %player_location_z%'
    keywords:
      - 'location'
      - 'coordinates'
      - 'where am i'

  biome:
    placeholder: '%player_biome_name%'
    keywords:
      - 'biome'
      - 'area'

  world:
    placeholder: '%player_world_name%'
    keywords:
      - 'world'

  health:
    placeholder: '%player_health_rounded% / %player_max_health_rounded%'
    keywords:
      - 'health'
      - 'hp'
      - 'life'

  hunger:
    placeholder: '%player_food_level%/20'
    keywords:
      - 'hunger'
      - 'food bar'
      - 'food'

  level:
    placeholder: '%player_level%'
    keywords:
      - 'level'
      - 'exp'

  server_time:
    placeholder: '%server_time_12%'
    keywords:
      - 'time'
      - 'what time is it'

  server_players:
    placeholder: '%server_online% / %server_max_players%'
    keywords:
      - 'players'
      - 'online'
      - 'how many people'

  server_tps:
    placeholder: '%server_tps_1%'
    keywords:
      - 'tps'
      - 'performance'
      - 'lag'
            

keywords.yml

▶ Expand to see the full keywords.yml file

# =================================================================
#            CUSTOM UNTRANSLATABLE KEYWORDS LIST
# =================================================================
# Add any word or phrase that you DO NOT want the translator to translate here.
# This is very useful for plugin-specific keywords, player names,
# command names, or special values that need to be preserved.
#
# - The check is case-insensitive.
# - Each keyword should be on its own line, starting with a hyphen (-).
# =================================================================

# Configuration version, DO NOT CHANGE THIS LINE.
# The plugin uses it to automatically update the config file when needed.
config-version: '1.2.0'

# =================================================================
keywords:
  # General
  - "true"
  - "false"
  - "null"
  - "default"
  - "Lowest"
  - "Low"
  - "Normal"
  - "High"
  - "Highest"

  # Plugin Specific
  - "AdminShop"
  - "AnotherPluginValue"

  # Minecraft Items & Blocks
  - "ACACIA_BOAT"
  - "APPLE"
  - "ARMOR_STAND"
  # ... (and many more keywords)
            

lang/en.yml (and other language files)

Files in the lang directory allow you to customize all messages the plugin displays to players. You can change the text to match your server's style or translate it into a new language.

▶ See an example of lang/en.yml

# =================================================================
#                 PLUGIN NOTIFICATION CUSTOMIZATION
# =================================================================
# Welcome to the language file!
# Here, you can change all the messages that Gemini-AI sends
# to players and administrators.
# =================================================================

# THE PREFIX FOR MESSAGES
message-prefix: "[alilShady]: "

# LIST OF KEYS TO EXCLUDE FROM THE PREFIX
prefix-exemptions:
  - 'public-ask-prefix'
  - 'translation.confirm-prompt'
  - 'translation.overwrite-confirmed'
  - 'translation.save-new-denied'
  # ... (and many more message keys)

# --- Generic Messages ---
ask-success: ""
console-ask-success: "[alilShady]: "
reload-success: "Configuration reloaded successfully!"
no-permission: "You do not have permission to execute this command!"
# ... (and many more messages)
            

📖Quest Configuration

The Gemini-AI quest system is defined in quests.yml. Below is a detailed guide on its structure and the values you can use.

I. Triggers

Triggers are in-game events that activate quest assignment. If any of the listed triggers occur, the plugin will check other requirements and assign the quest to the player.

Usage Description
PAPI:<placeholder> <operator> <value> Triggers based on a value from PlaceholderAPI. Valid operators are >, >=, <, <=, ==, !=.
JOIN Triggers when a player joins the server.
JOIN:FIRST Triggers when a player joins the server for the first time.
QUIT Triggers when a player leaves the server.
DEATH Triggers when a player dies.
RESPAWN Triggers when a player respawns.
WORLD_CHANGE Triggers when a player changes worlds.
KILL_MOB:<ENTITY_TYPE> Triggers when a player kills a specific type of mob (e.g., ZOMBIE).
PLAYER_KILL Triggers when a player kills another player.
TAKE_DAMAGE:<DAMAGE_TYPE> Triggers when a player takes damage from a specific source (e.g., FALL, LAVA).
BLOCK_ATTACK Triggers when a player successfully blocks an attack with a shield.
BIOME_ENTER:<BIOME_NAME> Triggers when a player enters a specific biome (e.g., PLAINS).
PORTAL_USE:<PORTAL_TYPE> Triggers when a player uses a portal (e.g., NETHER_PORTAL, END_PORTAL).
REACH_HEIGHT:<operator>:<Y_level> Triggers when a player reaches a specific Y-level. Valid operators are >, >=, <, <=, ==, !=.
BLOCK_BREAK:<MATERIAL_NAME> Triggers when a player breaks a specific type of block (e.g., DIAMOND_ORE).
BLOCK_PLACE:<MATERIAL_NAME> Triggers when a player places a specific type of block.
USE:<MATERIAL_NAME> Triggers when a player interacts (right-clicks) with a specific item or block.
ITEM_CONSUME:<MATERIAL_NAME> Triggers when a player eats or drinks a specific item.
ITEM_CRAFT:<MATERIAL_NAME> Triggers when a player crafts a specific item.
FISH:<STATE> Triggers based on the fishing state (e.g., CAUGHT_FISH, FAILED_ATTEMPT).
VILLAGER_TRADE Triggers when a player completes a trade with a villager.
PLANT_CROP:<MATERIAL_NAME> Triggers when a player plants a specific crop.
HARVEST_CROP:<MATERIAL_NAME> Triggers when a player harvests a specific crop.
STRIP_LOG:<LOG_TYPE> Triggers when a player strips a specific type of log.
TILL_SOIL Triggers when a player tills soil with a hoe.
SHEAR_ENTITY:<ENTITY_TYPE> Triggers when a player shears an entity.
FILL_BUCKET:<BUCKET_TYPE> Triggers when a player fills a bucket.
EMPTY_BUCKET:<BUCKET_TYPE> Triggers when a player empties a bucket.
PLAYER_SLEEP Triggers when a player sleeps in a bed.
TIME_IS:<STATE> Triggers when the in-game time becomes DAY or NIGHT.
LEVEL_UP:<level> Triggers when a player reaches a specific experience level.
ENCHANT:<ENCHANTMENT>:<level> Triggers when a player enchants an item with a specific enchantment level (e.g., SHARPNESS:5).
TAME:<ENTITY_TYPE> Triggers when a player tames an animal.
GAIN_EFFECT:<POTION_EFFECT>:<level> Triggers when a player gains a specific potion effect with a certain level.
ITEM_BREAK:<MATERIAL_NAME> Triggers when a player's item breaks.
ITEM_REPAIR Triggers when a player repairs an item at an anvil.
ITEM_DROP:<MATERIAL_NAME> Triggers when a player drops an item.
ITEM_PICKUP:<MATERIAL_NAME> Triggers when a player picks up an item.

II. Objectives

Objectives are a list of requirements that a player must complete to finish the quest. You can use a single objective or a list of them.

Type (`type`) Target (`target`) Description
KILL_MOB EntityType name (e.g., ZOMBIE) Kill a specific type of mob with the required amount.
GATHER_ITEM Item Material name (e.g., DIAMOND) Have the required number of items in the inventory.
BREAK_BLOCK Block Material name (e.g., OAK_LOG) Break a specific number of blocks.
PLACE_BLOCK Block Material name (e.g., TORCH) Place a specific number of blocks.
REACH_LEVEL *Not used* Reach a required experience level.
KILL_PLAYER Player name or ANY Kill a specific player or any player.
BREED_ANIMAL EntityType name (e.g., COW) Breed a specific number of animals.
TAME_ANIMAL EntityType name (e.g., WOLF) Tame a specific number of animals.
CONSUME_ITEM Material name (e.g., APPLE) Eat or drink a specific item.
SMELT_ITEM Output Material name (e.g., IRON_INGOT) Smelt a specific number of items.
ENCHANT_ITEM Enchantment name (e.g., sharpness) Enchant an item with a minimum enchantment level.
TRADE_VILLAGER *Not used* Trade with villagers a specific number of times.
FISH_ITEM Material name of caught item (e.g., SALMON) Fish a specific number of items.
WEAR_ARMOR Armor type name (e.g., DIAMOND, IRON) Wear a full set of armor.
PLANT_CROP Material name of the seed (e.g., WHEAT_SEEDS) Plant a specific number of crops.
ITEM_CRAFT Material name of the item (e.g., STONE_SWORD) Craft a specific number of items.
HARVEST_CROP Material name of the crop (e.g., WHEAT) Harvest a specific number of crops.
REACH_HEIGHT *Not used* Reach a required Y-level.
BLOCK_ATTACK *Not used* Block a specific number of attacks with a shield.
BIOME_ENTER Biome name (e.g., DESERT) Enter a required biome.
USE Material name (e.g., LEVER) Interact (right-click) with a specific item or block.
STRIP_LOG Log type (e.g., OAK_LOG) Strip a specific number of logs.

III. Rewards

Rewards are given to the player upon quest completion. A quest can have multiple types of rewards.

Type (`type`) Attributes Description
COMMAND commands A list of commands to be executed from the console. Use %player% for the player's name.
*none* Executes one or more commands as a reward.
ITEM items A list of items to give to the player.
*none* Gives one or more pre-configured items as a reward.
CHOICE title The title of the reward choice GUI.
items A list of items the player can choose from.
*none* Opens a GUI for the player to select an item reward.

Each item in the ITEM or CHOICE reward can have the following attributes:

Attribute Type Description
material String The Material name of the item (e.g., DIAMOND_SWORD).
amount Integer The number of items.
name String The display name of the item (supports MiniMessage).
lore List of strings The item's lore (one line per entry, supports MiniMessage).
enchantments List of strings A list of enchantments (e.g., sharpness:5).
quest-item Boolean If true, the item has a "fingerprint" and can be used in other quest requirements.

IV. Requirements

Requirements are conditions that a player must meet BEFORE receiving a quest. Currently, only item requirements are supported.

Attribute Type Description
material String The Material name of the required item.
amount Integer The required number of items.
from-quest String The ID of the quest the item must have originated from (e.g., a `quest-item` from another quest).

V. Next Quest

You can create a quest chain by specifying the ID of the next quest.

Attribute Type Description
next-quest String The ID of the next quest to be assigned to the player upon completion of the current one.