Skip to content

Commit 0f4eebe

Browse files
committed
feat: support loading NPCs and dialog configurations from subdirectories
1 parent e8b6ac4 commit 0f4eebe

File tree

4 files changed

+58
-39
lines changed

4 files changed

+58
-39
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.smallaswater</groupId>
88
<artifactId>RsNPC</artifactId>
9-
<version>2.5.2<!-- -SNAPSHOT--></version>
9+
<version>2.5.3-SNAPSHOT</version>
1010

1111
<name>RsNPC</name>
1212
<description>RsNPC -- NPC plugin for Nukkit</description>

src/main/java/com/smallaswater/npc/RsNPC.java

Lines changed: 35 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public class RsNPC extends PluginBase {
4444
new ThreadPoolExecutor.DiscardPolicy());
4545
public static final Random RANDOM = new Random();
4646

47-
public static final String VERSION = "2.5.2";
47+
public static final String VERSION = "2.5.3-SNAPSHOT";
4848

4949
private static RsNPC rsNPC;
5050

@@ -194,38 +194,47 @@ private void loadLanguage() {
194194
}
195195

196196
private void loadNpcs() {
197-
File[] files = (new File(getDataFolder() + "/Npcs")).listFiles();
198-
if (files != null) {
199-
for (File file : files) {
200-
if (!file.isFile() && file.getName().endsWith(".yml")) {
201-
continue;
202-
}
203-
String npcName = file.getName().split("\\.")[0];
204-
Config config;
205-
try {
206-
config = new Config(file, Config.YAML);
207-
}catch (Exception e) {
208-
this.getLogger().error(this.getLanguage().translateString("plugin.load.NPC.loadConfigError", npcName), e);
209-
continue;
210-
}
211-
RsNpcConfig rsNpcConfig;
212-
try {
213-
rsNpcConfig = new RsNpcConfig(npcName, config);
214-
} catch (Exception e) {
215-
this.getLogger().error(this.getLanguage().translateString("plugin.load.NPC.loadError", npcName), e);
216-
continue;
217-
}
218-
this.npcs.put(npcName, rsNpcConfig);
219-
this.getLogger().info(this.getLanguage().translateString("plugin.load.NPC.loadComplete", rsNpcConfig.getName()));
220-
}
221-
}
197+
File npcsFolder = new File(getDataFolder() + "/Npcs");
198+
loadNpcsFromDirectory(npcsFolder);
222199
this.getServer().getScheduler().scheduleDelayedTask(this, () -> {
223200
for (RsNpcConfig config : this.npcs.values()) {
224201
config.checkEntity();
225202
}
226203
}, 1);
227204
}
228205

206+
private void loadNpcsFromDirectory(File directory) {
207+
if (!directory.exists() || !directory.isDirectory()) {
208+
return;
209+
}
210+
File[] files = directory.listFiles();
211+
if (files != null) {
212+
for (File file : files) {
213+
if (file.isDirectory()) {
214+
loadNpcsFromDirectory(file);
215+
} else if (file.isFile() && file.getName().endsWith(".yml")) {
216+
String npcName = file.getName().split("\\.")[0];
217+
Config config;
218+
try {
219+
config = new Config(file, Config.YAML);
220+
}catch (Exception e) {
221+
this.getLogger().error(this.getLanguage().translateString("plugin.load.NPC.loadConfigError", npcName), e);
222+
continue;
223+
}
224+
RsNpcConfig rsNpcConfig;
225+
try {
226+
rsNpcConfig = new RsNpcConfig(npcName, config);
227+
} catch (Exception e) {
228+
this.getLogger().error(this.getLanguage().translateString("plugin.load.NPC.loadError", npcName), e);
229+
continue;
230+
}
231+
this.npcs.put(npcName, rsNpcConfig);
232+
this.getLogger().info(this.getLanguage().translateString("plugin.load.NPC.loadComplete", rsNpcConfig.getName()));
233+
}
234+
}
235+
}
236+
}
237+
229238
/**
230239
* 加载内置皮肤
231240
*/

src/main/java/com/smallaswater/npc/dialog/DialogManager.java

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,27 +32,37 @@ public DialogManager(@NotNull RsNPC rsNPC) {
3232

3333
public void loadAllDialog() {
3434
this.dialogConfigs.clear();
35+
File dialogFolder = new File(this.rsNPC.getDataFolder() + "/Dialog");
36+
loadDialogFromDirectory(dialogFolder);
37+
this.rsNPC.getLogger().info(this.rsNPC.getLanguage().translateString("plugin.load.dialog.loadComplete", this.dialogConfigs.size()));
38+
}
3539

36-
File[] files = new File(this.rsNPC.getDataFolder() + "/Dialog").listFiles();
40+
private void loadDialogFromDirectory(File directory) {
41+
if (!directory.exists() || !directory.isDirectory()) {
42+
return;
43+
}
44+
File[] files = directory.listFiles();
3745
if (files == null || files.length == 0) {
3846
return;
3947
}
4048
Arrays.stream(files)
41-
.filter(File::isFile)
42-
.filter(file -> file.getName().endsWith(".yml"))
4349
.forEach(file -> {
44-
try {
45-
this.loadDialog(file.getName().split("\\.")[0]);
46-
} catch (Exception e) {
47-
this.rsNPC.getLogger().error(this.rsNPC.getLanguage().translateString("plugin.load.dialog.dataError", file.getName()), e);
50+
if (file.isDirectory()) {
51+
loadDialogFromDirectory(file);
52+
} else if (file.isFile() && file.getName().endsWith(".yml")) {
53+
try {
54+
String name = file.getName().split("\\.")[0];
55+
this.loadDialog(name, file);
56+
} catch (Exception e) {
57+
this.rsNPC.getLogger().error(this.rsNPC.getLanguage().translateString("plugin.load.dialog.dataError", file.getName()), e);
58+
}
4859
}
4960
});
50-
this.rsNPC.getLogger().info(this.rsNPC.getLanguage().translateString("plugin.load.dialog.loadComplete", this.dialogConfigs.size()));
5161
}
5262

53-
public void loadDialog(@NotNull String name) {
54-
Config config = new Config(this.rsNPC.getDataFolder() + "/Dialog/" + name + ".yml", Config.YAML);
55-
ConfigUtils.addDescription(config, this.description); //添加描述
63+
public void loadDialog(@NotNull String name, File file) {
64+
Config config = new Config(file, Config.YAML);
65+
ConfigUtils.addDescription(config, this.description);
5666
this.dialogConfigs.put(name, new DialogPages(name, config));
5767
}
5868

src/main/resources/plugin.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: RsNPC
22
main: com.smallaswater.npc.RsNPC
3-
version: "2.5.2"
3+
version: "2.5.3-SNAPSHOT"
44
api:
55
- "Nukkit-MOT"
66
- "Nukkit-PM1E"

0 commit comments

Comments
 (0)