summaryrefslogtreecommitdiffstats
path: root/src/Chat.hpp
blob: f9dde9867c81050a2719c4daf723651bf6de2841 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#pragma once

#include <vector>
#include <string>


struct ClickEvent {
	enum ActionType {
		NONE,
		OPEN_URL,
		OPEN_FILE,
		RUN_COMMAND,
		SUGGEST_COMMAND,
		CHANGE_PAGE,
	} action = NONE;
	std::string value;
};

struct HoverEvent {
	enum ActionType {
		NONE,
		SHOW_TEXT,
		SHOW_ITEM,
		SHOW_ENTITY,
		SHOW_ACHIEVEMENT,
	} action = NONE;
	std::string value;
};

struct Component {
	enum ComponentType {
		DEFAULT,
		STRING,
		TRANSLATION,
		KEYBIND,
		SCORE,
		SELECTOR,
		UNKNOWN,
	} type = DEFAULT;
	 
	bool isBold = false;
	bool isItalic = false;
	bool isUnderlined = false;
	bool isStrikethrough = false;
	bool isObfuscated = false;
	std::string color;
	std::string insertion;
	ClickEvent clickEvent;
	HoverEvent hoverEvent;
	std::vector<Component> extra;

	//string component
	std::string text;

	//tranlation component
	std::string translate;
	std::vector<Component> with;

	//keybind component
	std::string keybind;

	//score component
	struct {
		std::string name;
		std::string objective;
		std::string value;
	} score;

	//selector component
	std::string selector;
};

class Chat {
	Component component;

public:

	Chat() = default;

	Chat(const std::string &json);

	std::string ToPlainText() const;

	std::string ToJson() const;
};