QuestEngine icon

QuestEngine -----

A simple yet optimized quest plugin




ENTITY KILL == MOBKILLING
----------, May 20, 2026


CTX REMOVED
----------, May 12, 2026

LANG FILE UPDATED
----------, May 12, 2026

HotKeyManager Event Support
----------, May 11, 2026

GUIManager Event Support
----------, May 11, 2026

CUSTOM EVENT FIX AND MYTHICDUNGEONS SUPPORT
----------, May 11, 2026

MUTLI LANG PROBLEM FIX
----------, May 11, 2026

questeditor debug command add

custom event data capture check
----------, May 10, 2026

PLAYER COMMAND CHECK PROBLEM FIX
----------, May 10, 2026

CUSTOM EVENT FIXED

CUSTOM EVENT NOT SUPPORT PROBLEM FIXED.
----------, May 10, 2026

description get placeholder, placeholderapi.

이제 description 에서 변수 값을 가져올 수 있습니다
----------, May 10, 2026

Item Model Support
----------, May 10, 2026

CraftSlotCommands4 Menu Click Event Support!

CRAFTSLOT_CLICK EVENT!
targets:
- 0
- 1
- 2
- 3
- 4
----------, May 10, 2026

FORGET MSG FILE FIXED

MSG FILE AUTO MERGED
----------, May 7, 2026

QUEST CANCEL MESSAGE DUPE FIXED

퀘스트 취소 메세지 중복 삭제
----------, May 6, 2026

API ADD

Code (Text):
package com.gmail.bobason01.questengine.api;

import com.gmail.bobason01.questengine.QuestEnginePlugin;
import com.gmail.bobason01.questengine.progress.PlayerData;
import com.gmail.bobason01.questengine.quest.QuestDef;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

import java.util.Collection;
import java.util.List;
import java.util.UUID;

public final class QuestEngineAPI {

    private QuestEngineAPI() {}

    public static QuestEnginePlugin getPlugin() {
        return JavaPlugin.getPlugin(QuestEnginePlugin.class);
    }

    public static QuestDef getQuest(String id) {
        if (id == null) return null;
        return getPlugin().quests().get(id);
    }

    public static Collection<QuestDef> getAllQuests() {
        return getPlugin().quests().all();
    }

    public static PlayerData getPlayerData(UUID uuid, String name) {
        if (uuid == null) return null;
        return getPlugin().progress().of(uuid, name);
    }

    public static boolean isActive(UUID uuid, String name, String questId) {
        if (uuid == null || questId == null) return false;
        return getPlugin().progress().isActive(uuid, name, questId);
    }

    public static boolean isCompleted(UUID uuid, String name, String questId) {
        if (uuid == null || questId == null) return false;
        return getPlugin().progress().isCompleted(uuid, name, questId);
    }

    public static int getQuestProgress(UUID uuid, String name, String questId) {
        if (uuid == null || questId == null) return 0;
        return getPlugin().progress().value(uuid, name, questId);
    }

    public static List<String> getActiveQuests(UUID uuid, String name) {
        if (uuid == null) return null;
        return getPlugin().progress().activeQuestIds(uuid, name);
    }

    public static List<String> getCompletedQuests(UUID uuid, String name) {
        if (uuid == null) return null;
        return getPlugin().progress().completedQuestIds(uuid, name);
    }

    public static void startQuest(Player player, String questId) {
        if (player == null || questId == null) return;
        getPlugin().engine().startQuest(player, questId);
    }

    public static void cancelQuest(Player player, String questId) {
        if (player == null || questId == null) return;
        getPlugin().engine().cancelQuest(player, questId);
    }

    public static void forceCompleteQuest(UUID uuid, String name, String questId) {
        if (uuid == null || name == null || questId == null) return;
        getPlugin().engine().forceComplete(uuid, name, questId);
    }

    public static void forceCompleteQuest(Player player, String questId) {
        if (player == null || questId == null) return;
        QuestDef quest = getQuest(questId);
        if (quest != null) {
            getPlugin().engine().forceComplete(player, quest);
        }
    }

    public static void stopQuest(UUID uuid, String name, String questId) {
        if (uuid == null || name == null || questId == null) return;
        getPlugin().engine().stopQuest(uuid, name, questId);
    }

    public static int addQuestProgress(UUID uuid, String name, String questId, int amount) {
        if (uuid == null || questId == null) return 0;
        return getPlugin().progress().addProgress(uuid, name, questId, amount);
    }

    public static void resetQuestProgress(UUID uuid, String name, String questId) {
        if (uuid == null || questId == null) return;
        getPlugin().progress().reset(uuid, name, questId);
    }

    public static void openQuestListMenu(Player player, int page) {
        if (player == null) return;
        getPlugin().gui().openList(player, page);
    }

    public static void openPublicQuestMenu(Player player, int page) {
        if (player == null) return;
        getPlugin().gui().openPublic(player, page);
    }
}
----------, May 6, 2026

PAPI UPDATE

description%
_description_full%
_icon%
_cmd%
_party%
active_<index>_%
----------, May 5, 2026

MESSAGE PREFIX REMOVED

메세지 PREFIX 제거
----------, May 5, 2026

PAPI SIMPLE

1. 전체 통계 관련 (Global Statistics)
%questengine_active_count%

  • EN: Shows the number of quests the player is currently working on.

  • KR: 플레이어가 현재 진행 중인 퀘스트의 총 개수를 보여줍니다.
%questengine_completed_count%

  • EN: Shows the total number of quests the player has successfully finished.

  • KR: 플레이어가 지금까지 완료한 퀘스트의 총 개수를 보여줍니다.
%questengine_total_points%

  • EN: Shows the sum of all quest points the player has earned so far.

  • KR: 플레이어가 퀘스트를 통해 획득한 모든 포인트의 합계를 보여줍니다.
%questengine_active_list_ids%

  • EN: Lists the IDs of all currently active quests, separated by commas.

  • KR: 현재 진행 중인 퀘스트들의 ID 목록을 쉼표로 구분하여 나열합니다.
%questengine_completed_list_ids%

  • EN: Lists the IDs of all completed quests, separated by commas.

  • KR: 완료된 퀘스트들의 ID 목록을 쉼표로 구분하여 나열합니다.
%questengine_active_list_names%

  • EN: Lists the display names of all currently active quests, separated by commas.

  • KR: 현재 진행 중인 퀘스트들의 이름(DisplayName) 목록을 쉼표로 구분하여 나열합니다.
2. 진행 중 퀘스트 정보 (Active Quest by Index)
인덱스(번호)는 1번부터 시작하며, 해당 번호에 퀘스트가 없으면 빈 칸으로 출력됩니다.

%questengine_active_{index}_id%

  • EN: Shows the unique ID of the quest at the specified position in the active list.

  • KR: 진행 중인 목록에서 해당 번호에 위치한 퀘스트의 고유 ID를 출력합니다.
%questengine_active_{index}_name%

  • EN: Shows the internal name of the quest at the specified position.

  • KR: 해당 번호에 위치한 퀘스트의 내부 시스템 이름을 출력합니다.
%questengine_active_{index}_title%

  • EN: Shows the colored display title of the quest at the specified position.

  • KR: 해당 번호 퀘스트의 제목을 출력하며, 설정된 색상 코드가 적용됩니다.
%questengine_active_{index}_reward%

  • EN: Shows the reward description text for the quest at the specified position.

  • KR: 해당 번호 퀘스트의 보상 설명 텍스트를 출력합니다.
%questengine_active_{index}_points%

  • EN: Shows how many points will be rewarded upon completing this quest.

  • KR: 해당 번호 퀘스트 완료 시 지급될 포인트 수치를 보여줍니다.
%questengine_active_{index}_target%

  • EN: Shows the total target amount required to complete the quest.

  • KR: 해당 번호 퀘스트를 완료하기 위해 필요한 목표 총량을 보여줍니다.
%questengine_active_{index}_progress%

  • EN: Shows the current progress amount of the quest at the specified position.

  • KR: 해당 번호 퀘스트의 현재 진행 수치를 보여줍니다.
%questengine_active_{index}_percent%

  • EN: Shows the progress of the quest as a percentage (e.g., 50%).

  • KR: 해당 번호 퀘스트의 진행도를 백분율(예: 50%)로 보여줍니다.
%questengine_active_{index}_bar%

  • EN: Shows a visual progress bar using colored square symbols.

  • KR: 초록색과 회색 사각형 기호를 사용해 진행 상태를 막대 그래프로 보여줍니다.
%questengine_active_{index}_state%

  • EN: Shows the current status of the quest (active, completed, or blank).

  • KR: 해당 퀘스트의 현재 상태를 표시합니다. (진행중은 active, 완료는 completed, 그 외엔 빈칸)
3. 특정 퀘스트 정보 (Specific Quest by ID)
퀘스트 ID를 직접 입력하며, 존재하지 않는 ID일 경우 빈 칸으로 출력됩니다.

%questengine_qid_{quest_id}_id%

  • EN: Returns the ID of the specified quest if it exists.

  • KR: 지정한 ID의 퀘스트가 존재하면 해당 ID를 다시 반환합니다.
%questengine_qid_{quest_id}_title%

  • EN: Shows the colored display title of the specific quest ID.

  • KR: 지정한 ID를 가진 퀘스트의 제목을 색상 코드를 포함하여 출력합니다.
%questengine_qid_{quest_id}_progress%

  • EN: Shows the player's current progress for the specific quest ID.

  • KR: 지정한 ID의 퀘스트에 대해 플레이어가 현재 얼마나 진행했는지 수치를 보여줍니다.
%questengine_qid_{quest_id}_percent%

  • EN: Shows the progress percentage for the specific quest ID.

  • KR: 지정한 ID 퀘스트의 진행도를 퍼센트로 보여줍니다.
%questengine_qid_{quest_id}_bar%

  • EN: Shows the visual progress bar for the specific quest ID.

  • KR: 지정한 ID 퀘스트의 진행 상태를 막대 그래프로 보여줍니다.
%questengine_qid_{quest_id}_state%

  • EN: Shows if the specific quest is currently active or completed.

  • KR: 지정한 ID의 퀘스트가 현재 진행 중인지 완료되었는지를 상태값으로 보여줍니다.
----------, May 5, 2026

QUEST FILE DELETE COMMAND ADD

퀘스트 파일 삭제 명령어 추가
----------, Apr 12, 2026

Event List Simple

이벤트 리스트를 심플하게
----------, Apr 11, 2026

Templete Example Update

템플릿 예시 업데이트
----------, Apr 11, 2026

다국어 버전으로 돌아왔습니다
힌트 메세지는 힌트 명령어로 이제 퀘스트 목록에 있을 때 좌 클릭 시 퀘스트 명령어로 실행되므로 GPS 와 연동해보세요!
그외에는 코드 최적화나 여러가지 있었습니다

We are back with a multilingual version.

Hint messages now run as Hint commands; left-clicking while in the quest list executes the Quest command, so try linking with GPS!

Aside from that, there was code optimization and various other improvements.
----------, Apr 2, 2026

minor patch
사소한 패치
prefix message color problem fixed
prefix 메세지 색상 문제 수정
----------, Apr 2, 2026

Add description to ongoing quest

진행 중인 퀘스트에 설명을 추가합니다
----------, Jan 18, 2026

DB PROBLEM FIX
----------, Jan 9, 2026

Required Quest Conditions Add
----------, Jan 5, 2026

CUSTOM_EVENT
PLAYER_BARTERING
BLOCK_BREAK
BLOCK_PLACE
BLOCK_FERTILIZING
BLOCK_ITEM_DROPPING
BLOCK_SHEARING
BREEDNG
BREWING
BUCKET_EMPTY
BUCKET_ENTITY
BUCKET_FILL
COMPOSTING
CURING
DEAL_DAMAGE
DISTANCE_FROM
ENCHANTING
FARMING
FISHING
HATCHING
ITEM_BREAK
ITEM_DAMAGE
ITEM_MENDING
MILKING
MOBKILLING
PERMISSIONS_CHECK
SHEARING
SMELTING
SMITHING
TAMING
TRADING
PLAYER_WALK
PLAYER_PRE_JOIN
PLAYER_LEAVE
PLAYER_RESPAWN
PLAYER_DEATH
PLAYER_COMMAND
PLAYER_CHAT
PLAYER_EXP_GAIN
PLAYER_LEVELUP
PLAYER_WORLD_CHANGE
PLAYER_ATTACK
PLAYER_KILL
PLAYER_ARMOR
PLAYER_TELEPORT
PLAYER_BED_ENTER
PLAYER_SWAP_HAND
ITEM_INTERACT
ITEM_CONSUME
ITEM_PICKUP
ITEM_MOVE
ITEM_CRAFT
ITEM_DROP
ITEM_SELECT
ITEM_ENCHANT
ENTITY_INTERACT
ENTITY_SPAWN
MYTHICMOBS_ENTITY_SPAWN
----------, Jan 1, 2026

기본 quest 폴더 파일이 있다면 더 이상 퀘스트 예제 파일을 만들지 않습니다
----------, Dec 14, 2025

CANCEL CONFIRM CHAT COLOR PROBLEM FIX

취소 확인에서 색상 코드 메세지가 적용 안되는 점 수정
----------, Dec 4, 2025

Mythicmobs Kill Mob ID Check add.
----------, Dec 1, 2025

I rewrote all the code

Now it works without any issues, lag, or traffic concerns even on a server with 500 people.

코드 전부 다시 짰습니다

이제 500 명이 있는 서버에서도 문제 없이 렉 없이 트래픽 걱정 없이 작동합니다
----------, Nov 27, 2025

TRASH MESSAGE DELETED
쓰레기 메세지 제거
----------, Nov 23, 2025

current placeholder removed

active placeholder fixed
----------, Nov 23, 2025

Most issues have been fixed
----------, Nov 22, 2025

Quest File PAPI and Color & Support
NPC INTERACT IS NOW

Mythicmobs:
Citizens:
Entity:

changed.

Quest Progress + Rewards Text Message Changed
----------, Nov 22, 2025

PARTY PROBLEM FIX
----------, Nov 21, 2025

Message Editor Title Fix
Sorry
----------, Nov 13, 2025

Ingame Quest Editor Support!

config.yml update please.

messages.yml update please.

many bug fix.

many problem fix.

msg{t=} > msg{m=}
item{t=} > item{i=}
----------, Nov 13, 2025

Custom GUI Setting + PAPI Problem Fix
----------, Nov 12, 2025

NPC INTERACT BUG FIX

RELOAD PROBLEM FIX
----------, Nov 12, 2025

Do not display quests that cannot be repeated
----------, Nov 12, 2025

NPC INTERACT BUG FIX
----------, Nov 12, 2025

CODE REWRITE
----------, Nov 12, 2025

ENTITY_INTERACT EVENT FIX

PUBLIC QUEST > QUEST BOARD CHANGED

CANCEL QUEST BUG FIX
----------, Nov 12, 2025

GUI ITEM BUG FIX
----------, Nov 9, 2025


YES YES MORE BETTER GUI UPDATE
----------, Nov 9, 2025


English Config + English Quest Example Changed

User Quest Now GUI Base
----------, Nov 9, 2025



YES CONFIG TOO
----------, Nov 8, 2025

PARTY SUPPORT
----------, Nov 8, 2025


jar in example add.
----------, Nov 8, 2025

Resource Information
Author:
----------
Total Downloads: 374
First Release: Nov 8, 2025
Last Update: May 20, 2026
Category: ---------------
All-Time Rating:
5 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings