Иногда требуется сохранить файл из JAR плагина. Это может быть файл локализации или еще что-нибудь. Сделать это в Sponge очень легко.
Есть только одно условие: все файлы должны быть в директории asset/{pluginid}
.
Например у нас есть плагин, у которого в аннотации @Plugin
id=my_plugin
, то ассеты должны должны лежать в директории asset/my_plugin
.
Есть 2 способа это сделать:
1. Инжектировать PluginContainer
и использовать метод .getAsset(String)
Пример
1. Ижектируем PluginContainer
и путь до директории с конфигом плагина:
Код
@Inject
private PluginContainer container;
@Inject
@ConfigDir(sharedRoot = false)
private Path confDir;
2. Получаем Asset
из PluginContainer
'а и сохраняем его в директория_плагина/bestdir
Код
Optional<Asset> assetOpt1 = container.getAsset("bestdir/bestfile.txt");
assetOpt1.ifPresent(asset -> {
try {
asset.copyToDirectory(confDir.resolve("bestdir"));
logger.info("Файл распакован");
} catch (IOException e) {
logger.error("Ошибка распаковки файла!", e);
}
});
2. Получить AssetManager
и вызвать метод .getAsset(Object, String)
Пример
1. Получаем директорию плагина:
Код
@Inject
@ConfigDir(sharedRoot = false)
private Path confDir;
2. Получаем Asset
и сохраняем его в директорию плагина:
Код
Optional<Asset> assetOpt = Sponge.getAssetManager().getAsset(this, "myfile.txt");
assetOpt.ifPresent(asset -> {
try {
asset.copyToDirectory(confDir);
logger.info("Файл распакован!");
} catch (IOException e) {
logger.error("Ошибка распаковки файла!", e);
}
});
В этом случае .getAsset(Object,String)
в качестве первого параметра принимает PluginContainer
или класс с аннотацией @Plugin
. В качестве первого параметра можно передать главный класс любого другого плагина и AssetManager
будет искать выбранный файл в JAR переданного плагина.
На этом всё.
Исходники