Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 52 additions & 18 deletions public/mcdoc/blood-dialog.mcdoc
Original file line number Diff line number Diff line change
@@ -1,45 +1,77 @@
use ::java::util::text::Text

// Source dialog scripts also support graph helpers outside JSON:
// @label_name, -> label_name, ? condition:value -> label_name, condition blocks
// ? condition:value { ... } { ... }, and ! end. Label names must match [A-Za-z0-9_.-]+.
// Source action shorthands: ! give_item <material> <amount>,
struct LocalizedText {
/// Ключ локализации ресурспака. Создаётся при сохранении, если поле пустое.
key?: string,
en_us?: string,
ru_ru?: string,
/// Значения для плейсхолдеров %s в lang-строке.
arguments?: [LocalizedText],
/// Дополнительные части текста, добавленные после этого текста.
append?: [LocalizedText],
color?: string,
shadow_color?: string,
font?: string,
bold?: boolean,
italic?: boolean,
underlined?: boolean,
strikethrough?: boolean,
obfuscated?: boolean,
insertion?: string,
click_event?: ClickEvent,
hover_event?: HoverEvent,
}

struct ClickEvent {
action: string,
value: string,
}

struct HoverEvent {
action: string,
value: string,
}

// Source-скрипты диалогов также поддерживают вспомогательный графовый синтаксис вне JSON:
// @label_name, -> label_name, ? condition:value -> label_name, блоки условий
// ? condition:value { ... } { ... } и ! end. Имена label должны совпадать с [A-Za-z0-9_.-]+.
// Короткие source-action команды: ! give_item <material> <amount>,
// ! give_currency <BLOOD_ORB|SILVER> <amount>, ! teleport <location>,
// ! set_flag <key> [true|false|string:value|int:value], and ! clear_flag <key>.
// ! set_flag <key> [true|false|string:value|int:value] и ! clear_flag <key>.

dispatch minecraft:resource[blood:blood-dialog] to struct Dialog {
id: string,
/// True by default
/// По умолчанию true.
condition?: Condition,
actors: [Actor],
root: [Node],
}

struct Condition {
condition: string,
/// Provider argument, for example a flag key, quest id, level, or "<quest_id>:<stage_number>" for quest_stage.
/// Аргумент провайдера: например ключ флага, id квеста, уровень или "<quest_id>:<stage_number>" для quest_stage.
value?: string,
and?: [Condition],
or?: [Condition],
not?: Condition,
}

struct Actor {
/// Can be used as ref in TellNode
/// Можно использовать как ref в TellNode.
id: string,
entity: string,
}

// --- Nodes ---

dispatch blood:nodes[blood:tell_node] to struct {
text: Text,
/// Локализованный текст. Укажите key вручную или оставьте пустым, чтобы ключ создался при сохранении.
text?: LocalizedText,
actor: string,
pauseAfterMessage?: boolean,
}

dispatch blood:nodes[blood:say_node] to struct {
text: Text,
/// Локализованный текст. Укажите key вручную или оставьте пустым, чтобы ключ создался при сохранении.
text?: LocalizedText,
pauseAfterMessage?: boolean,
}

Expand All @@ -51,7 +83,7 @@ dispatch blood:nodes[blood:branch_node] to struct {
struct ConditionBranch {
condition: Condition,
label: string,
/// Lower priorities are tested first. If omitted, JSON order is used after prioritized branches.
/// Меньший priority проверяется раньше. Если поле пустое, после priority-веток используется порядок JSON.
priority?: int,
}

Expand All @@ -61,8 +93,9 @@ dispatch blood:nodes[blood:condition_branch_node] to struct {
}

struct Choice {
text: Text,
/// Jumps to said label
/// Локализованный текст. Укажите key вручную или оставьте пустым, чтобы ключ создался при сохранении.
text?: LocalizedText,
/// Переход к указанному label.
label: string,
}

Expand Down Expand Up @@ -115,7 +148,8 @@ dispatch blood:actions[blood:command_action] to struct {
}

dispatch blood:actions[blood:set_actor_name_action] to struct {
actorName: Text,
/// Локализованный текст. Укажите key вручную или оставьте пустым, чтобы ключ создался при сохранении.
actorName?: LocalizedText,
}

dispatch blood:actions[blood:give_item_action] to struct {
Expand Down Expand Up @@ -145,7 +179,7 @@ enum(string) PlayerFlagValueType {

dispatch blood:actions[blood:set_player_flag_action] to struct {
key: string,
/// Defaults to boolean true when omitted.
/// Если поле пустое, используется boolean true.
value?: string,
valueType?: PlayerFlagValueType,
}
Expand All @@ -169,7 +203,7 @@ dispatch minecraft:resource[blood:dialog_item_definition] to struct ItemDefiniti
}

dispatch blood:item_definition[blood:item_stack] to struct {
/// Bukkit ItemStack serialized data.
/// Сериализованные данные Bukkit ItemStack.
yml: string,
}

Expand Down
156 changes: 133 additions & 23 deletions public/mcdoc/blood-quest.mcdoc
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
use ::java::util::text::Text

dispatch minecraft:resource[blood:blood-quest] to struct Quest {
id: string,
type: QuestType,
name: Text,
description: Text,
/// True by default
/// Локализованный текст. Укажите key вручную или оставьте пустым, чтобы ключ создался при сохранении.
name?: LocalizedText,
/// Локализованный текст. Укажите key вручную или оставьте пустым, чтобы ключ создался при сохранении.
description?: LocalizedText,
/// По умолчанию true.
condition?: Condition,
activation?: Activation,
/// Changing this will reset players' progress if quest is active upon reload
/// ID актёра NPC, который выдаёт квест.
giverActor?: string,
/// ID актёра NPC, который выдаёт награду.
rewardActor?: string,
/// Строковый custom model data для GUI квестов.
icon?: string,
/// Изменение версии сбросит прогресс игроков, если квест активен при перезагрузке.
version: string,
rewards: [Reward],
stages: [Stage],
Expand Down Expand Up @@ -67,7 +73,7 @@ dispatch minecraft:resource[blood:reward] to struct ItemDefinition {
}

dispatch blood:item_definition[blood:item_stack] to struct {
/// Bukkit ItemStack serialized data
/// Сериализованные данные Bukkit ItemStack.
yml: string,
}

Expand All @@ -90,13 +96,45 @@ dispatch blood:item_definition[blood:arc_potion] to struct {

struct Condition {
condition: string,
/// Provider argument, for example a flag key, quest id, level, or "<quest_id>:<stage_number>" for quest_stage.
/// Аргумент провайдера: например ключ флага, id квеста, уровень или "<quest_id>:<stage_number>" для quest_stage.
value?: string,
and?: [Condition],
or?: [Condition],
not?: Condition,
}

struct LocalizedText {
/// Ключ локализации ресурспака. Создаётся при сохранении, если поле пустое.
key?: string,
en_us?: string,
ru_ru?: string,
/// Значения для плейсхолдеров %s в lang-строке.
arguments?: [LocalizedText],
/// Дополнительные части текста, добавленные после этого текста.
append?: [LocalizedText],
color?: string,
shadow_color?: string,
font?: string,
bold?: boolean,
italic?: boolean,
underlined?: boolean,
strikethrough?: boolean,
obfuscated?: boolean,
insertion?: string,
click_event?: ClickEvent,
hover_event?: HoverEvent,
}

struct ClickEvent {
action: string,
value: string,
}

struct HoverEvent {
action: string,
value: string,
}

dispatch minecraft:resource[blood:activation] to struct Activation {
type: ActivationType,
...blood:activation[[type]],
Expand All @@ -107,15 +145,27 @@ dispatch blood:activation[dialog] to struct {
}

dispatch minecraft:resource[blood:stage] to struct Stage {
name: Text,
coordinates: string,
/// Локализованный текст. Укажите key вручную или оставьте пустым, чтобы ключ создался при сохранении.
name?: LocalizedText,
coordinates: QuestLocation,
goals: [Goal]
}

type QuestLocation = (QuestPosition | string)

struct QuestPosition {
world: string,
x: double,
y: double,
z: double,
yaw?: float,
pitch?: float,
}

struct Area {
/// Center coordinates in "world x y z" or F3+C format
location: string,
/// Radius in blocks
/// Координаты центра
location: QuestLocation,
/// Радиус в блоках
radius: float,
}

Expand All @@ -132,22 +182,31 @@ enum(string) GoalType {
ShootArea = "blood:shoot_area",
Consume = "blood:consume",
Dialog = "blood:dialog",
Die = "blood:die", // lmao
Die = "blood:die",
KillPlayer = "blood:kill_player",
Level = "blood:level",
Craft = "blood:craft",
Dungeon = "blood:dungeon",
InteractObject = "blood:interact_object",
NpcZone = "blood:npc_zone",
Condition = "blood:condition",
Scoreboard = "blood:scoreboard",
ScoreboardTag = "blood:scoreboard_tag",
}

dispatch minecraft:resource[blood:goal] to struct Goal {
/// Стабильный уникальный id; создаётся сервером при сохранении, если поле пустое.
id?: string,
type: GoalType,
...blood:goal[[type]],
}

dispatch blood:goal[blood:kill] to struct {
/// Registry key. Use either entity_type or mythic_mob.
/// Ключ реестра. Укажите entity_type или mythic_mob.
entity_type?: string,
/// MythicMobs internal name. Use either mythic_mob or entity_type.
/// Внутреннее имя MythicMobs. Укажите mythic_mob или entity_type.
mythic_mob?: string,
/// Amount of entities to kill
/// Количество сущностей для убийства.
amount: int@1..,
}

Expand All @@ -157,12 +216,12 @@ dispatch blood:goal[blood:gather] to struct {

dispatch blood:goal[blood:deliver] to struct {
item: ItemDefinition,
/// ActorId of NPC to whom to deliver
/// ID актёра NPC, которому нужно отнести предмет.
actor: string,
}

dispatch blood:goal[blood:talk] to struct {
/// ActorId of NPC to whom to talk
/// ID актёра NPC, с которым нужно поговорить.
actor: string,
}

Expand All @@ -171,13 +230,15 @@ dispatch blood:goal[blood:reach] to struct {
}

dispatch blood:goal[blood:interact_entity] to struct {
/// Entity registry key
/// Ключ реестра сущности.
entity_type: string,
}

dispatch blood:goal[blood:interact_block] to struct {
/// Block position formatted as "world x y z"
block: string,
/// Позиция блока.
block?: QuestLocation,
/// Несколько позиций блоков; каждую позицию нужно использовать один раз.
blocks?: [QuestLocation],
}

dispatch blood:goal[blood:shoot_area] to struct {
Expand All @@ -197,10 +258,59 @@ dispatch blood:goal[blood:die] to struct {
}

dispatch blood:goal[blood:kill_player] to struct {
// TODO: Player Predicate?
// Позже: предикат игрока.
amount: int@1..,
}

dispatch blood:goal[blood:level] to struct {
level: int@1..,
}

dispatch blood:goal[blood:craft] to struct {
item: ItemDefinition,
amount: int@1..,
}

enum(string) DungeonMode {
Solo = "SOLO",
Party = "PARTY",
}

dispatch blood:goal[blood:dungeon] to struct {
dungeon: string,
mode: DungeonMode,
/// По умолчанию 3 для PARTY.
min_players?: int@1..,
}

dispatch blood:goal[blood:interact_object] to struct {
objectId: string,
amount: int@1..,
}

enum(string) ZoneDirection {
Enter = "ENTER",
Exit = "EXIT",
}

dispatch blood:goal[blood:npc_zone] to struct {
actor: string,
radius: float@0.1..,
direction: ZoneDirection,
}

dispatch blood:goal[blood:condition] to struct {
condition: Condition,
}

dispatch blood:goal[blood:scoreboard] to struct {
/// Имя цели vanilla scoreboard.
objective: string,
/// Требуемое значение счёта.
min: int@1..,
}

dispatch blood:goal[blood:scoreboard_tag] to struct {
/// Entity-тег vanilla из команды /tag <player> add <tag>.
tag: string,
}
Loading