-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathSkript.java
More file actions
135 lines (109 loc) · 4.8 KB
/
Copy pathSkript.java
File metadata and controls
135 lines (109 loc) · 4.8 KB
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package com.github.skriptdev.skript.plugin;
import com.github.skriptdev.skript.api.skript.ScriptsLoader;
import com.github.skriptdev.skript.api.skript.command.ArgUtils;
import com.github.skriptdev.skript.api.skript.registration.SkriptRegistration;
import com.github.skriptdev.skript.api.skript.variables.JsonVariableStorage;
import com.github.skriptdev.skript.api.utils.ReflectionUtils;
import com.github.skriptdev.skript.api.utils.Utils;
import com.github.skriptdev.skript.plugin.elements.ElementRegistration;
import io.github.syst3ms.skriptparser.Parser;
import io.github.syst3ms.skriptparser.config.Config;
import io.github.syst3ms.skriptparser.config.Config.ConfigSection;
import io.github.syst3ms.skriptparser.log.ErrorType;
import io.github.syst3ms.skriptparser.log.LogEntry;
import io.github.syst3ms.skriptparser.log.SkriptLogger;
import io.github.syst3ms.skriptparser.registration.SkriptAddon;
import io.github.syst3ms.skriptparser.variables.Variables;
import java.nio.file.Path;
public class Skript extends SkriptAddon {
public static Skript INSTANCE;
private final HySk hySk;
private final Config skriptConfig;
private final Path scriptsPath;
private final SkriptLogger logger;
private SkriptRegistration registration;
private ElementRegistration elementRegistration;
private ScriptsLoader scriptsLoader;
public Skript(HySk hySk) {
INSTANCE = this;
this.hySk = hySk;
this.scriptsPath = hySk.getDataDirectory().resolve("scripts");
this.logger = new SkriptLogger();
Path skriptConfigPath = hySk.getDataDirectory().resolve("config.sk");
this.skriptConfig = new Config(skriptConfigPath, "/config.sk", this.logger);
this.logger.setDebug(this.skriptConfig.getBoolean("debug"));
Utils.log("Setting up HySkript!");
setup();
this.logger.finalizeLogs();
for (LogEntry logEntry : this.logger.close()) {
Utils.log(null, logEntry);
}
}
private void setup() {
ReflectionUtils.init();
ArgUtils.init();
this.registration = new SkriptRegistration(this);
this.elementRegistration = new ElementRegistration(this);
this.elementRegistration.registerElements();
// FINALIZE SETUP
this.registration.register();
printSyntaxCount();
Utils.log("HySkript setup complete!");
// LOAD VARIABLES
loadVariables();
// LOAD SCRIPTS
this.scriptsLoader = new ScriptsLoader(this);
this.scriptsLoader.loadScripts(null, this.scriptsPath, false);
// FINALIZE SCRIPT LOADING
Parser.getMainRegistration().getRegisterer().finishedLoading();
}
public void shutdown() {
Utils.log("Saving variables...");
Variables.shutdown();
Utils.log("Variable saving complete!");
}
private void printSyntaxCount() {
io.github.syst3ms.skriptparser.registration.SkriptRegistration mainRegistration = Parser.getMainRegistration();
int eventSize = this.registration.getEvents().size() + mainRegistration.getEvents().size();
int effectSize = this.registration.getEffects().size() + mainRegistration.getEffects().size();
int expsSize = this.registration.getExpressions().size() + mainRegistration.getExpressions().size();
int secSize = this.registration.getSections().size() + mainRegistration.getSections().size();
int typeSize = this.registration.getTypes().size() + mainRegistration.getTypes().size();
int total = eventSize + effectSize + expsSize + secSize + typeSize;
Utils.log("Loaded HySkript %s elements:", total);
Utils.log("- Types: %s", typeSize);
Utils.log("- Events: %s ", eventSize);
Utils.log("- Effects: %s", effectSize);
Utils.log("- Expressions: %s", expsSize);
Utils.log("- Sections: %s", secSize);
}
public HySk getPlugin() {
return this.hySk;
}
public Path getScriptsPath() {
return this.scriptsPath;
}
public SkriptLogger getLogger() {
return this.logger;
}
public SkriptRegistration getRegistration() {
return this.registration;
}
public ElementRegistration getElementRegistration() {
return this.elementRegistration;
}
public ScriptsLoader getScriptsLoader() {
return this.scriptsLoader;
}
public void loadVariables() {
Utils.log("Loading variables...");
Variables.registerStorage(JsonVariableStorage.class, "json-database");
ConfigSection databases = this.skriptConfig.getConfigSection("databases");
if (databases == null) {
this.logger.error("Databases section not found in config.sk", ErrorType.STRUCTURE_ERROR);
return;
}
Variables.load(this.logger, databases);
Utils.log("Finished loading variables!");
}
}