каждый. Недавно я начал писать плагины Bukkit для Minecraft. У меня уже есть версии для разработчиков для моих первых двух плагинов, которые отлично работают на моем сервере, и они не доставили мне особых проблем. В настоящее время я работаю над третьим, и у меня возникли некоторые проблемы.
Я пытаюсь понять, как именно создать файл YAML и читать/записывать данные из/в него. Просто чтобы уточнить, я НЕ имею в виду файл config.yml
, так как у меня нет с этим проблем. Я знаю, как создать файл config.yml
по умолчанию и прочитать из него данные, и все это просто замечательно. Однако с моим третьим плагином мне нужно использовать отдельный файл YAML. Я огляделся в поисках помощи, но 95% ответов, которые я получаю, связаны с тем, что кто-то рассказывает мне что-то о getConfig()
, а это НЕ то, что я ищу, или, по крайней мере, я на 95% уверен, что это не то, что я ищу. за. После нескольких недель поиска четкого ответа я решил опубликовать свой вопрос здесь. Как всегда, заранее спасибо за любую помощь!
Я думаю, что понял, как создать файл YAML, но после этого я застрял. Просто приведу пример своей ситуации.
Скажем, у меня был следующий основной класс:
package ...
import ...
//Here is my main class
public class MyClass extends JavaPlugin {
//I instantiate my File and FileConfiguration here
//Should I do this? I need them for my other classes.
public FileConfiguration myFileConfig = null;
public File myFile;
//On Enable
@Override
public void onEnable() {
//Get/Create File
myFile = new File(getDataFolder(), "myfile.yml");
if (!myFile.exists()) {
try {
myFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
//Load myfily.yml file configuration
FileConfiguration myFileConfig = YamlConfiguration.loadConfiguration(myFile);
//Register my command executor class
getCommand("test").setExecutor(new myCommandExecutor());
}
//On Disable
@Override
public void onDisable() {
//Irrelevant stuff here
}
}
Теперь предположим, что у меня также был следующий класс CommandExecutor (звездочками отмечены места, где происходят важные вещи. Я пропустил все вложенные if
функции, чтобы сэкономить ваше время):
package ...
import ...
public class myCommandExecutor implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (cmd.getName().equalsIgnoreCase("test")) {
if (args.length > 0) {
****************//RIGHT HERE I WOULD ADD ALL THE COMMAND ARGUMENTS
****************//IMAGINE THE FOLLOWING USAGE FOR THE COMMAND
****************//USAGE: /test <add|del> <one|two|three> <name>
****************//IF THE USER EXECUTED THE FOLLOWING, THE CODE BELOW WOULD BE THE FINAL RESULT
****************//EXECUTED: /test add two hello
YamlClass.addToFile(args[1], args[2]);
} else {
sender.sendMessage("Not enough arguments!");
}
}
}
}
В приведенном выше примере, если пользователь набрал /test add two hello
, я бы хотел, чтобы последние два аргумента (два и привет) были отправлены методу в другом классе (в этом примере addToFile(String a, String b)
в классе YamlClass
), в котором args[1] и args[ 2] будет использоваться для помещения строки в такой файл:
test:
one:
two:
- hello
three:
и если пользователь затем запустит /test add three goodbye
, файл будет выглядеть так:
test:
one:
two:
- hello
three:
- goodbye
Если бы пользователь затем выполнил /test add three test
, он добавил бы слово "тест" в раздел без замены слова "до свидания", которое было добавлено ранее. Может ли кто-нибудь дать мне некоторую помощь или советы о том, как это сделать? Спасибо!
[РЕДАКТИРОВАТЬ] Я понял это прошлой ночью. На самом деле я все делал правильно, что касается File и YamlCinfiguration, что-то было не так с моим CommandExecutor, но я это исправил. Спасибо за ответы!