Search in sources :

Example 26 with Module

use of org.terasology.module.Module in project Terasology by MovingBlocks.

the class ModuleInstaller method call.

@Override
public List<Module> call() throws Exception {
    Map<URL, Path> filesToDownload = getDownloadUrls(moduleList);
    logger.info("Started downloading {} modules", filesToDownload.size());
    MultiFileDownloader downloader = new MultiFileDownloader(filesToDownload, downloadProgressListener);
    List<Path> downloadedModulesPaths = downloader.call();
    logger.info("Module download completed, loading the new modules...");
    List<Module> newInstalledModules = new ArrayList<>(downloadedModulesPaths.size());
    ModuleLoader loader = new ModuleLoader(moduleManager.getModuleMetadataReader());
    loader.setModuleInfoPath(TerasologyConstants.MODULE_INFO_FILENAME);
    for (Path filePath : downloadedModulesPaths) {
        try {
            Module module = loader.load(filePath);
            moduleManager.getRegistry().add(module);
            newInstalledModules.add(module);
        } catch (IOException e) {
            logger.warn("Could not load module {}", filePath.getFileName(), e);
        }
    }
    logger.info("Finished loading the downloaded modules");
    return newInstalledModules;
}
Also used : Path(java.nio.file.Path) MultiFileDownloader(org.terasology.utilities.download.MultiFileDownloader) ModuleLoader(org.terasology.module.ModuleLoader) ArrayList(java.util.ArrayList) IOException(java.io.IOException) Module(org.terasology.module.Module) URL(java.net.URL)

Example 27 with Module

use of org.terasology.module.Module in project Terasology by MovingBlocks.

the class StateHeadlessSetup method createGameManifest.

public GameManifest createGameManifest() {
    GameManifest gameManifest = new GameManifest();
    Config config = context.get(Config.class);
    ModuleManager moduleManager = context.get(ModuleManager.class);
    for (Name moduleName : config.getDefaultModSelection().listModules()) {
        Module module = moduleManager.getRegistry().getLatestModuleVersion(moduleName);
        if (module != null) {
            gameManifest.addModule(module.getId(), module.getVersion());
        }
    }
    WorldGenerationConfig worldGenConfig = config.getWorldGeneration();
    // If no valid default world generator set then try to find one - no option to pick one manually in headless
    if (!worldGenConfig.getDefaultGenerator().isValid()) {
        // find the first gameplay module that is available, it should have a preferred world gen
        for (Name moduleName : config.getDefaultModSelection().listModules()) {
            Module module = moduleManager.getRegistry().getLatestModuleVersion(moduleName);
            if (StandardModuleExtension.isGameplayModule(module)) {
                SimpleUri defaultWorldGenerator = StandardModuleExtension.getDefaultWorldGenerator(module);
                worldGenConfig.setDefaultGenerator(defaultWorldGenerator);
                break;
            }
        }
    }
    SimpleUri worldGeneratorUri = worldGenConfig.getDefaultGenerator();
    gameManifest.setTitle(worldGenConfig.getWorldTitle());
    gameManifest.setSeed(worldGenConfig.getDefaultSeed());
    WorldInfo worldInfo = new WorldInfo(TerasologyConstants.MAIN_WORLD, gameManifest.getSeed(), (long) (WorldTime.DAY_LENGTH * 0.025f), worldGeneratorUri);
    gameManifest.addWorld(worldInfo);
    return gameManifest;
}
Also used : GameManifest(org.terasology.game.GameManifest) Config(org.terasology.config.Config) WorldGenerationConfig(org.terasology.config.WorldGenerationConfig) SimpleUri(org.terasology.engine.SimpleUri) WorldInfo(org.terasology.world.internal.WorldInfo) ModuleManager(org.terasology.engine.module.ModuleManager) Module(org.terasology.module.Module) WorldGenerationConfig(org.terasology.config.WorldGenerationConfig) Name(org.terasology.naming.Name)

Example 28 with Module

use of org.terasology.module.Module in project Terasology by MovingBlocks.

the class NetworkSystemImpl method getServerInfoMessage.

NetData.ServerInfoMessage getServerInfoMessage() {
    NetData.ServerInfoMessage.Builder serverInfoMessageBuilder = NetData.ServerInfoMessage.newBuilder();
    serverInfoMessageBuilder.setTime(time.getGameTimeInMs());
    if (config.getServerMOTD() != null) {
        serverInfoMessageBuilder.setMOTD(config.getServerMOTD());
    }
    serverInfoMessageBuilder.setOnlinePlayersAmount(clientList.size());
    WorldProvider worldProvider = context.get(WorldProvider.class);
    if (worldProvider != null) {
        NetData.WorldInfo.Builder worldInfoBuilder = NetData.WorldInfo.newBuilder();
        worldInfoBuilder.setTime(worldProvider.getTime().getMilliseconds());
        worldInfoBuilder.setTitle(worldProvider.getTitle());
        serverInfoMessageBuilder.addWorldInfo(worldInfoBuilder);
    }
    WorldGenerator worldGen = context.get(WorldGenerator.class);
    if (worldGen != null) {
        serverInfoMessageBuilder.setReflectionHeight(worldGen.getWorld().getSeaLevel());
    }
    for (Module module : CoreRegistry.get(ModuleManager.class).getEnvironment()) {
        if (!StandardModuleExtension.isServerSideOnly(module)) {
            serverInfoMessageBuilder.addModule(NetData.ModuleInfo.newBuilder().setModuleId(module.getId().toString()).setModuleVersion(module.getVersion().toString()).build());
        }
    }
    for (Map.Entry<String, Short> blockMapping : blockManager.getBlockIdMap().entrySet()) {
        serverInfoMessageBuilder.addBlockId(blockMapping.getValue());
        serverInfoMessageBuilder.addBlockName(blockMapping.getKey());
    }
    for (Biome biome : biomeManager.getBiomes()) {
        serverInfoMessageBuilder.addBiomeId(biome.getId());
        short shortId = biomeManager.getBiomeShortId(biome);
        serverInfoMessageBuilder.addBiomeShortId(shortId);
    }
    for (BlockFamily registeredBlockFamily : blockManager.listRegisteredBlockFamilies()) {
        serverInfoMessageBuilder.addRegisterBlockFamily(registeredBlockFamily.getURI().toString());
    }
    serializeComponentInfo(serverInfoMessageBuilder);
    serializeEventInfo(serverInfoMessageBuilder);
    return serverInfoMessageBuilder.build();
}
Also used : WorldGenerator(org.terasology.world.generator.WorldGenerator) ByteString(com.google.protobuf.ByteString) ModuleManager(org.terasology.engine.module.ModuleManager) Biome(org.terasology.world.biomes.Biome) WorldProvider(org.terasology.world.WorldProvider) BlockFamily(org.terasology.world.block.family.BlockFamily) Module(org.terasology.module.Module) Map(java.util.Map) TIntLongMap(gnu.trove.map.TIntLongMap) TIntLongHashMap(gnu.trove.map.hash.TIntLongHashMap)

Example 29 with Module

use of org.terasology.module.Module in project Terasology by MovingBlocks.

the class ServerConnectionHandler method sendModules.

private void sendModules(List<NetData.ModuleRequest> moduleRequestList) {
    for (NetData.ModuleRequest request : moduleRequestList) {
        NetData.ModuleDataHeader.Builder result = NetData.ModuleDataHeader.newBuilder();
        result.setId(request.getModuleId());
        Module module = moduleManager.getEnvironment().get(new Name(request.getModuleId()));
        if (module.isOnClasspath() || module.getLocations().size() != 1 || !Files.isReadable(module.getLocations().get(0))) {
            result.setError("Module not available for download");
        } else {
            Path location = module.getLocations().get(0);
            try {
                result.setVersion(module.getVersion().toString());
                result.setSize(Files.size(location));
                channelHandlerContext.getChannel().write(NetData.NetMessage.newBuilder().setModuleDataHeader(result).build());
            } catch (IOException e) {
                logger.error("Error sending module data header", e);
                channelHandlerContext.getChannel().close();
                break;
            }
            try (InputStream stream = new BufferedInputStream(Files.newInputStream(location))) {
                long remainingData = Files.size(location);
                byte[] data = new byte[1024];
                while (remainingData > 0) {
                    int nextBlock = (int) Math.min(remainingData, 1024);
                    ByteStreams.read(stream, data, 0, nextBlock);
                    channelHandlerContext.getChannel().write(NetData.NetMessage.newBuilder().setModuleData(NetData.ModuleData.newBuilder().setModule(ByteString.copyFrom(data, 0, nextBlock))).build());
                    remainingData -= nextBlock;
                }
            } catch (IOException e) {
                logger.error("Error sending module", e);
                channelHandlerContext.getChannel().close();
                break;
            }
        }
    }
}
Also used : Path(java.nio.file.Path) NetData(org.terasology.protobuf.NetData) BufferedInputStream(java.io.BufferedInputStream) InputStream(java.io.InputStream) IOException(java.io.IOException) Name(org.terasology.naming.Name) BufferedInputStream(java.io.BufferedInputStream) Module(org.terasology.module.Module)

Example 30 with Module

use of org.terasology.module.Module in project Terasology by MovingBlocks.

the class ModuleDownloadListGeneratorTest method testMultipleModulesPartialUpdate.

@Test
public void testMultipleModulesPartialUpdate() throws DependencyResolutionFailedException {
    Module moduleAV1 = buildSimpleModule("myModuleA", "1.0.0");
    Module moduleBV1 = buildSimpleModule("myModuleB", "1.0.0");
    Module moduleBV2 = buildSimpleModule("myModuleB", "2.0.0");
    ModuleRegistry localRegistry = buildRegistry("1.0.0", moduleAV1, moduleBV1);
    DependencyResolver resolver = mockResolver(true, moduleBV1, moduleBV2, buildEngineModule("1.0.0"));
    ModuleDownloadListGenerator listGenerator = new ModuleDownloadListGenerator(localRegistry, resolver);
    assertEquals(Collections.singleton(moduleBV2), buildList(listGenerator));
}
Also used : TableModuleRegistry(org.terasology.module.TableModuleRegistry) ModuleRegistry(org.terasology.module.ModuleRegistry) BaseModule(org.terasology.module.BaseModule) Module(org.terasology.module.Module) DependencyResolver(org.terasology.module.DependencyResolver) Test(org.junit.Test)

Aggregations

Module (org.terasology.module.Module)32 Name (org.terasology.naming.Name)15 ModuleManager (org.terasology.engine.module.ModuleManager)11 DependencyResolver (org.terasology.module.DependencyResolver)11 ModuleEnvironment (org.terasology.module.ModuleEnvironment)9 ResolutionResult (org.terasology.module.ResolutionResult)8 Path (java.nio.file.Path)4 ArrayList (java.util.ArrayList)4 List (java.util.List)4 ModuleMetadata (org.terasology.module.ModuleMetadata)4 IOException (java.io.IOException)3 URL (java.net.URL)3 HashMap (java.util.HashMap)3 Map (java.util.Map)3 Set (java.util.Set)3 SimpleUri (org.terasology.engine.SimpleUri)3 GameManifest (org.terasology.game.GameManifest)3 Vector2i (org.terasology.math.geom.Vector2i)3 DependencyInfo (org.terasology.module.DependencyInfo)3 ModuleRegistry (org.terasology.module.ModuleRegistry)3