use of org.lanternpowered.server.asset.AssetRepository in project LanternServer by LanternPowered.
the class AssetRepositoryJsonDeserializer method deserialize.
@Override
public AssetRepository deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
final MultiAssetRepository repository = new MultiAssetRepository();
// The class loader asset repository will always be present,
// this cannot be overridden, but the assets themselves can
// be overridden like the minecraft resource pack system
final ClassLoaderAssetRepository classLoaderAssetRepository = new ClassLoaderAssetRepository(this.pluginManager);
repository.add(classLoaderAssetRepository);
final LanternClassLoader classLoader = LanternClassLoader.get();
final Consumer<URL> consumer = url -> {
final Path path = PathUtils.toPath(url);
if (Files.isDirectory(path) && Files.exists(path.resolve("data-packs.info"))) {
Lantern.getLogger().debug("Registered a data pack asset repository: " + path);
repository.add(new PacksAssetRepository(this.pluginManager, path));
} else {
classLoaderAssetRepository.addRepository(path);
}
};
classLoader.getBaseURLs().forEach(consumer);
classLoader.addBaseURLTracker(consumer);
final JsonArray array = json.getAsJsonArray();
for (int i = 0; i < array.size(); i++) {
final JsonObject obj = array.get(i).getAsJsonObject();
final String type = obj.get("type").getAsString().toLowerCase(Locale.ENGLISH);
Path path;
switch(type) {
// Currently only directory asset repositories
case "dir":
case "directory":
path = Paths.get(obj.get("path").getAsString());
Lantern.getLogger().debug("Registered a directory asset repository: " + path);
repository.add(new DirectoryAssetRepository(this.pluginManager, path));
break;
// Also support a directory with data/asset packs
case "packs":
path = Paths.get(obj.get("path").getAsString());
Lantern.getLogger().debug("Registered a data pack asset repository: " + path);
repository.add(new PacksAssetRepository(this.pluginManager, path));
break;
default:
throw new JsonParseException("Unknown repository type: " + type);
}
if (!Files.exists(path)) {
try {
Files.createDirectories(path);
} catch (IOException e) {
e.printStackTrace();
}
}
}
return repository;
}
use of org.lanternpowered.server.asset.AssetRepository in project LanternServer by LanternPowered.
the class TranslationManagerRegistryModule method registerDefaults.
@EarlyRegistration
@Override
public void registerDefaults() {
this.translationManager = new CombinedTranslationManager();
// Get the asset repository
final AssetRepository assetRepository = Lantern.getAssetRepository();
// Add the translation manager as a reload listener
assetRepository.addReloadListener(this.translationManager);
// Add the minecraft language file for defaults and
// the client translations
this.translationManager.addManager(new MinecraftTranslationManager());
final LanternTranslationManager lanternTranslationManager = new LanternTranslationManager();
// Add the lantern languages
lanternTranslationManager.addResourceBundle(assetRepository.get("lantern", "lang/en_us.properties").get(), Locale.ENGLISH);
this.translationManager.addManager(lanternTranslationManager);
this.translationManager.setDelegateManager(lanternTranslationManager);
}
use of org.lanternpowered.server.asset.AssetRepository in project LanternServer by LanternPowered.
the class LanternScriptGameRegistry method compile.
@Override
public Script<Object> compile(Object plugin, String asset) {
final AssetRepository assetRepository = Lantern.getAssetRepository();
final Asset theAsset = assetRepository.get(plugin, asset).orElseThrow(() -> new IllegalArgumentException("There is no asset with the specified id: " + asset + " for the specified plugin:" + plugin));
return this.compile(theAsset);
}
use of org.lanternpowered.server.asset.AssetRepository in project LanternServer by LanternPowered.
the class LanternScriptGameRegistry method compile0.
private Script<Object> compile0(String assetId) {
final AssetRepository assetRepository = Lantern.getAssetRepository();
final Asset theAsset = assetRepository.get(assetId).orElseThrow(() -> new IllegalArgumentException("There is no asset with the specified id: " + assetId));
return this.compile(theAsset);
}
use of org.lanternpowered.server.asset.AssetRepository in project LanternServer by LanternPowered.
the class LanternScriptGameRegistry method compile.
@Override
public <T> Script<T> compile(Object plugin, String asset, Class<T> function) {
final AssetRepository assetRepository = Lantern.getAssetRepository();
final Asset theAsset = assetRepository.get(plugin, asset).orElseThrow(() -> new IllegalArgumentException("There is no asset with the specified id: " + asset));
return this.compile(theAsset, function);
}
Aggregations