Search in sources :

Example 11 with Name

use of org.terasology.naming.Name in project Terasology by MovingBlocks.

the class ChatScreen method initialise.

@Override
public void initialise() {
    final ScrollableArea scrollArea = find("scrollArea", ScrollableArea.class);
    scrollArea.moveToBottom();
    commandLine = find("commandLine", UIText.class);
    getManager().setFocus(commandLine);
    commandLine.subscribe(widget -> {
        String text = commandLine.getText();
        if (StringUtils.isNotBlank(text)) {
            String command = "say";
            List<String> params = Collections.singletonList(text);
            // TODO: move command execution to separate class
            console.execute(new Name(command), params, localPlayer.getClientEntity());
            commandLine.setText("");
            scrollArea.moveToBottom();
            NotificationOverlay overlay = nuiManager.addOverlay(NotificationOverlay.ASSET_URI, NotificationOverlay.class);
            overlay.setVisible(true);
            nuiManager.closeScreen(this);
        } else {
            commandLine.setText("");
            nuiManager.closeScreen(this);
        }
    });
    final UILabel history = find("messageHistory", UILabel.class);
    history.bindText(new ReadOnlyBinding<String>() {

        @Override
        public String get() {
            Iterable<Message> messageIterable = console.getMessages(CoreMessageType.CHAT, CoreMessageType.NOTIFICATION);
            Stream<Message> messageStream = StreamSupport.stream(messageIterable.spliterator(), false);
            return messageStream.map(Message::getMessage).collect(Collectors.joining(Console.NEW_LINE));
        }
    });
}
Also used : UILabel(org.terasology.rendering.nui.widgets.UILabel) Message(org.terasology.logic.console.Message) ScrollableArea(org.terasology.rendering.nui.layouts.ScrollableArea) UIText(org.terasology.rendering.nui.widgets.UIText) Stream(java.util.stream.Stream) Name(org.terasology.naming.Name)

Example 12 with Name

use of org.terasology.naming.Name in project Terasology by MovingBlocks.

the class ModuleManagerImpl method loadModulesFromClassPath.

/**
 * Overrides modules in modules/ with those specified via -classpath in the JVM
 */
private void loadModulesFromClassPath() {
    // Only attempt this if we're using the standard URLClassLoader
    if (ClassLoader.getSystemClassLoader() instanceof URLClassLoader) {
        URLClassLoader urlClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
        ModuleLoader loader = new ModuleLoader(metadataReader);
        Enumeration<URL> moduleInfosInClassPath;
        loader.setModuleInfoPath(TerasologyConstants.MODULE_INFO_FILENAME);
        // We're looking for jars on the classpath with a module.txt
        try {
            moduleInfosInClassPath = urlClassLoader.findResources(TerasologyConstants.MODULE_INFO_FILENAME.toString());
        } catch (IOException e) {
            logger.warn("Failed to search for classpath modules: {}", e);
            return;
        }
        for (URL url : Collections.list(moduleInfosInClassPath)) {
            if (!url.getProtocol().equalsIgnoreCase("jar")) {
                continue;
            }
            try {
                Reader reader = new InputStreamReader(url.openStream(), TerasologyConstants.CHARSET);
                ModuleMetadata metaData = metadataReader.read(reader);
                String displayName = metaData.getDisplayName().toString();
                Name id = metaData.getId();
                // if the display name is empty or the id is null, this probably isn't a Terasology module
                if (null == id || displayName.equalsIgnoreCase("")) {
                    logger.warn("Found a module-like JAR on the class path with no id or display name. Skipping");
                    logger.warn("{}", url);
                }
                logger.info("Loading module {} from class path at {}", displayName, url.getFile());
                // the url contains a protocol, and points to the module.txt
                // we need to trim both of those away to get the module's path
                Path path = Paths.get(url.getFile().replace("file:", "").replace("!/" + TerasologyConstants.MODULE_INFO_FILENAME, "").replace("/" + TerasologyConstants.MODULE_INFO_FILENAME, ""));
                Module module = loader.load(path);
                registry.add(module);
            } catch (IOException e) {
                logger.warn("Failed to load module.txt for classpath module {}", url);
            }
        }
    }
}
Also used : Path(java.nio.file.Path) ModuleLoader(org.terasology.module.ModuleLoader) InputStreamReader(java.io.InputStreamReader) URLClassLoader(java.net.URLClassLoader) ModuleMetadata(org.terasology.module.ModuleMetadata) Reader(java.io.Reader) InputStreamReader(java.io.InputStreamReader) IOException(java.io.IOException) ClasspathModule(org.terasology.module.ClasspathModule) Module(org.terasology.module.Module) URL(java.net.URL) Name(org.terasology.naming.Name)

Example 13 with Name

use of org.terasology.naming.Name in project Terasology by MovingBlocks.

the class BindsSubsystem method registerAxisBinds.

private void registerAxisBinds(ModuleEnvironment environment) {
    Iterable<Class<?>> classes = environment.getTypesAnnotatedWith(RegisterBindAxis.class);
    for (Class<?> registerBindClass : classes) {
        RegisterBindAxis info = registerBindClass.getAnnotation(RegisterBindAxis.class);
        Name moduleId = environment.getModuleProviding(registerBindClass);
        SimpleUri id = new SimpleUri(moduleId, info.id());
        if (BindAxisEvent.class.isAssignableFrom(registerBindClass)) {
            BindableButton positiveButton = getBindButton(new SimpleUri(info.positiveButton()));
            BindableButton negativeButton = getBindButton(new SimpleUri(info.negativeButton()));
            if (positiveButton == null) {
                logger.warn("Failed to register axis \"{}\", missing positive button \"{}\"", id, info.positiveButton());
                continue;
            }
            if (negativeButton == null) {
                logger.warn("Failed to register axis \"{}\", missing negative button \"{}\"", id, info.negativeButton());
                continue;
            }
            try {
                BindableAxis bindAxis = registerBindAxis(id.toString(), (BindAxisEvent) registerBindClass.newInstance(), positiveButton, negativeButton);
                bindAxis.setSendEventMode(info.eventMode());
                logger.debug("Registered axis bind: {}", id);
            } catch (InstantiationException | IllegalAccessException e) {
                logger.error("Failed to register axis bind \"{}\"", id, e);
            }
        } else {
            logger.error("Failed to register axis bind \"{}\", does not extend BindAxisEvent", id);
        }
    }
}
Also used : BindableButton(org.terasology.input.BindableButton) RegisterBindAxis(org.terasology.input.RegisterBindAxis) SimpleUri(org.terasology.engine.SimpleUri) AbstractBindableAxis(org.terasology.input.internal.AbstractBindableAxis) BindableAxis(org.terasology.input.BindableAxis) Name(org.terasology.naming.Name)

Example 14 with Name

use of org.terasology.naming.Name in project Terasology by MovingBlocks.

the class ComponentSystemManager method loadSystems.

public void loadSystems(ModuleEnvironment environment, NetworkMode netMode) {
    DisplayDevice display = context.get(DisplayDevice.class);
    boolean isHeadless = display.isHeadless();
    ListMultimap<Name, Class<?>> systemsByModule = ArrayListMultimap.create();
    for (Class<?> type : environment.getTypesAnnotatedWith(RegisterSystem.class)) {
        if (!ComponentSystem.class.isAssignableFrom(type)) {
            logger.error("Cannot load {}, must be a subclass of ComponentSystem", type.getSimpleName());
            continue;
        }
        Name moduleId = environment.getModuleProviding(type);
        RegisterSystem registerInfo = type.getAnnotation(RegisterSystem.class);
        if (registerInfo.value().isValidFor(netMode, isHeadless) && areOptionalRequirementsContained(registerInfo, environment)) {
            systemsByModule.put(moduleId, type);
        }
    }
    for (Module module : environment.getModulesOrderedByDependencies()) {
        for (Class<?> system : systemsByModule.get(module.getId())) {
            String id = module.getId() + ":" + system.getSimpleName();
            logger.debug("Registering system {}", id);
            try {
                ComponentSystem newSystem = (ComponentSystem) system.newInstance();
                InjectionHelper.share(newSystem);
                register(newSystem, id);
                logger.debug("Loaded system {}", id);
            } catch (RuntimeException | IllegalAccessException | InstantiationException | NoClassDefFoundError e) {
                logger.error("Failed to load system {}", id, e);
            }
        }
    }
}
Also used : DisplayDevice(org.terasology.engine.subsystem.DisplayDevice) ComponentSystem(org.terasology.entitySystem.systems.ComponentSystem) Name(org.terasology.naming.Name) RegisterSystem(org.terasology.entitySystem.systems.RegisterSystem) Module(org.terasology.module.Module)

Example 15 with Name

use of org.terasology.naming.Name in project Terasology by MovingBlocks.

the class BehaviorSystem method createTree.

public BehaviorTree createTree(String name, BehaviorNode root) {
    BehaviorTreeData data = new BehaviorTreeData();
    data.setRoot(root);
    BehaviorTree behaviorTree = assetManager.loadAsset(new ResourceUrn(BEHAVIORS, new Name(name.replaceAll("\\W+", ""))), data, BehaviorTree.class);
    trees.add(behaviorTree);
    save(behaviorTree);
    return behaviorTree;
}
Also used : BehaviorTreeData(org.terasology.logic.behavior.asset.BehaviorTreeData) BehaviorTree(org.terasology.logic.behavior.asset.BehaviorTree) ResourceUrn(org.terasology.assets.ResourceUrn) Name(org.terasology.naming.Name)

Aggregations

Name (org.terasology.naming.Name)43 Module (org.terasology.module.Module)14 ModuleManager (org.terasology.engine.module.ModuleManager)8 SimpleUri (org.terasology.engine.SimpleUri)7 DependencyResolver (org.terasology.module.DependencyResolver)7 ModuleEnvironment (org.terasology.module.ModuleEnvironment)7 ResourceUrn (org.terasology.assets.ResourceUrn)6 ResolutionResult (org.terasology.module.ResolutionResult)6 IOException (java.io.IOException)4 InputStreamReader (java.io.InputStreamReader)4 ModuleMetadata (org.terasology.module.ModuleMetadata)4 FromModule (org.terasology.module.predicates.FromModule)4 SubtextureData (org.terasology.rendering.assets.texture.subtexture.SubtextureData)4 Reader (java.io.Reader)3 Vector2f (org.terasology.math.geom.Vector2f)3 URL (java.net.URL)2 Path (java.nio.file.Path)2 Map (java.util.Map)2 Test (org.junit.Test)2 Config (org.terasology.config.Config)2