private String getModulesText(Future<ServerInfoMessage> info) { try { ServerInfoMessage serverInfoMessage = info.get(); if (serverInfoMessage == null) { return FontColor.getColored(translationSystem.translate("${engine:menu#connection-failed}"), Color.RED); } List<String> codedModInfo = new ArrayList<>(); ModuleRegistry reg = moduleManager.getRegistry(); for (NameVersion entry : serverInfoMessage.getModuleList()) { boolean isInstalled = reg.getModule(entry.getName(), entry.getVersion()) != null; Color color = isInstalled ? Color.GREEN : Color.RED; codedModInfo.add(FontColor.getColored(entry.toString(), color)); } Collections.sort(codedModInfo, String.CASE_INSENSITIVE_ORDER); return Joiner.on('\n').join(codedModInfo); } catch (ExecutionException | InterruptedException e) { return FontColor.getColored(translationSystem.translate("${engine:menu#connection-failed}"), Color.RED); } }
private void loadGameModules() { final List<ModuleSelectionInfo> sortedGameModules = gameInfo.getManifest().getModules().stream() .sorted(Comparator.comparing(NameVersion::getName)) .map(nameVersion -> { Module module = moduleManager.getRegistry().getModule(nameVersion.getName(), nameVersion.getVersion()); if (module != null) { return ModuleSelectionInfo.strictVersion(module); } else { logger.warn("Can't find module in your classpath - {}:{}", nameVersion.getName(), nameVersion.getVersion()); module = moduleManager.getRegistry().getLatestModuleVersion(nameVersion.getName()); if (module != null) { logger.debug("Get the latest available version of module {} in your classpath", nameVersion.getName()); errors.add(String.format("Can't find module %s:%s in your classpath; loaded description for the latest available version.", nameVersion.getName(), nameVersion.getVersion())); return ModuleSelectionInfo.latestVersion(module); } logger.error("Can't find any versions of module {} in your classpath!", nameVersion.getName()); errors.add(String.format("Can't find any versions of module %s in your classpath!", nameVersion.getName())); return ModuleSelectionInfo.unavailableVersion(nameVersion.getName().toString(), nameVersion.getVersion().toString()); } }) .filter(Objects::nonNull) .collect(Collectors.toList()); gameModules.setList(sortedGameModules); gameModules.select(0); }
/** * Gets the server information and passes it to the client, while also checking if all required modules have been downloaded. * @param channelHandlerContext * @param message Passes the server information message to the function. */ private void receivedServerInfo(ChannelHandlerContext channelHandlerContext, NetData.ServerInfoMessage message) { logger.info("Received server info"); ((EngineTime) CoreRegistry.get(Time.class)).setGameTime(message.getTime()); this.server = new ServerImpl(networkSystem, channelHandlerContext.getChannel()); server.setServerInfo(message); // Request missing modules for (NetData.ModuleInfo info : message.getModuleList()) { if (null == moduleManager.getRegistry().getModule(new Name(info.getModuleId()), new Version(info.getModuleVersion()))) { missingModules.add(info.getModuleId().toLowerCase(Locale.ENGLISH)); } } if (missingModules.isEmpty()) { joinStatus.setCurrentActivity("Finalizing join"); sendJoin(channelHandlerContext); } else { joinStatus.setCurrentActivity("Requesting missing modules"); NetData.NetMessage.Builder builder = NetData.NetMessage.newBuilder(); for (String module : missingModules) { builder.addModuleRequest(NetData.ModuleRequest.newBuilder().setModuleId(module)); } channelHandlerContext.getChannel().write(builder.build()); } }
Module module = moduleManager.getRegistry().getModule(moduleInfo.getName(), moduleInfo.getVersion()); if (module == null) { StateMainMenu mainMenu = new StateMainMenu("Missing required module: " + moduleInfo);