Search in sources :

Example 41 with Name

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

the class MethodCommand method referringTo.

/**
 * Creates a new {@code ReferencedCommand} to a specific method annotated with {@link Command}.
 *
 * @param specificMethod The method to reference to
 * @return The command reference object created
 */
public static MethodCommand referringTo(SpecificAccessibleObject<Method> specificMethod, Context context) {
    Method method = specificMethod.getAccessibleObject();
    Command commandAnnotation = method.getAnnotation(Command.class);
    Preconditions.checkNotNull(commandAnnotation);
    String nameString = commandAnnotation.value();
    if (nameString.length() <= 0) {
        nameString = method.getName();
    }
    Name name = new Name(nameString);
    return new MethodCommand(name, commandAnnotation.requiredPermission(), commandAnnotation.runOnServer(), commandAnnotation.shortDescription(), commandAnnotation.helpText(), specificMethod, context);
}
Also used : Command(org.terasology.engine.logic.console.commandSystem.annotations.Command) Method(java.lang.reflect.Method) Name(org.terasology.gestalt.naming.Name)

Example 42 with Name

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

the class CoreCommands method dumpEntities.

/**
 * Writes out information on entities having specific components to a text file for debugging
 * If no component names provided - writes out information on all entities
 *
 * @param componentNames string contains one or several component names, if more then one name
 *                       provided - they must be braced with double quotes and all names separated
 *                       by space
 * @return String containing information about number of entities saved
 * @throws IOException thrown when error with saving file occures
 */
@Command(shortDescription = "Writes out information on all entities to a JSON file for debugging", helpText = "Writes entity information out into a file named \"<timestamp>-entityDump.json\"." + " Supports list of component names, which will be used to only save entities that contains" + " one or more of those components. Names should be separated by spaces.")
public String dumpEntities(@CommandParam(value = "componentNames", required = false) String... componentNames) throws IOException {
    int savedEntityCount;
    EngineEntityManager engineEntityManager = (EngineEntityManager) entityManager;
    PrefabSerializer prefabSerializer = new PrefabSerializer(engineEntityManager.getComponentLibrary(), engineEntityManager.getTypeSerializerLibrary());
    WorldDumper worldDumper = new WorldDumper(engineEntityManager, prefabSerializer);
    Path outFile = PathManager.getInstance().getHomePath().resolve(Instant.now() + "-entityDump.json");
    if (componentNames.length == 0) {
        savedEntityCount = worldDumper.save(outFile);
    } else {
        List<Class<? extends Component>> filterComponents = Arrays.stream(componentNames).map(// Trim off whitespace
        String::trim).filter(// Remove empty strings
        o -> !o.isEmpty()).map(// All component class names end with "component"
        o -> o.toLowerCase().endsWith("component") ? o : o + "component").map(o -> Streams.stream(moduleManager.getEnvironment().getSubtypesOf(Component.class)).filter(e -> e.getSimpleName().equalsIgnoreCase(o)).findFirst()).filter(Optional::isPresent).map(Optional::get).collect(Collectors.toList());
        if (!filterComponents.isEmpty()) {
            savedEntityCount = worldDumper.save(outFile, filterComponents);
        } else {
            return "Could not find components matching given names";
        }
    }
    return "Number of entities saved: " + savedEntityCount;
}
Also used : EngineEntityManager(org.terasology.engine.entitySystem.entity.internal.EngineEntityManager) Path(java.nio.file.Path) DropItemEvent(org.terasology.engine.logic.inventory.events.DropItemEvent) Server(org.terasology.engine.network.Server) Arrays(java.util.Arrays) Component(org.terasology.gestalt.entitysystem.component.Component) In(org.terasology.engine.registry.In) SystemConfig(org.terasology.engine.config.SystemConfig) Sender(org.terasology.engine.logic.console.commandSystem.annotations.Sender) Console(org.terasology.engine.logic.console.Console) SkinSuggester(org.terasology.engine.logic.console.suggesters.SkinSuggester) DisplayDevice(org.terasology.engine.core.subsystem.DisplayDevice) NUIEditorScreen(org.terasology.engine.rendering.nui.editor.layers.NUIEditorScreen) Locale(java.util.Locale) BlockUri(org.terasology.engine.world.block.BlockUri) FontColor(org.terasology.nui.FontColor) Vector3f(org.joml.Vector3f) TranslationProject(org.terasology.engine.i18n.TranslationProject) Path(java.nio.file.Path) StateLoading(org.terasology.engine.core.modes.StateLoading) Command(org.terasology.engine.logic.console.commandSystem.annotations.Command) TranslationSystem(org.terasology.engine.i18n.TranslationSystem) ConsoleCommand(org.terasology.engine.logic.console.commandSystem.ConsoleCommand) CommandParam(org.terasology.engine.logic.console.commandSystem.annotations.CommandParam) ConsoleColors(org.terasology.engine.logic.console.ConsoleColors) GameEngine(org.terasology.engine.core.GameEngine) CommandNameSuggester(org.terasology.engine.logic.console.suggesters.CommandNameSuggester) WaitPopup(org.terasology.engine.rendering.nui.layers.mainMenu.WaitPopup) Set(java.util.Set) StateMainMenu(org.terasology.engine.core.modes.StateMainMenu) NUISkinEditorSystem(org.terasology.engine.rendering.nui.editor.systems.NUISkinEditorSystem) Streams(com.google.common.collect.Streams) BlockFamilyDefinition(org.terasology.engine.world.block.loader.BlockFamilyDefinition) Instant(java.time.Instant) UISkinAsset(org.terasology.nui.skin.UISkinAsset) Collectors(java.util.stream.Collectors) Direction(org.terasology.engine.math.Direction) NUIManager(org.terasology.engine.rendering.nui.NUIManager) List(java.util.List) EntityRef(org.terasology.engine.entitySystem.entity.EntityRef) RegisterSystem(org.terasology.engine.entitySystem.systems.RegisterSystem) NUISkinEditorScreen(org.terasology.engine.rendering.nui.editor.layers.NUISkinEditorScreen) ScreenSuggester(org.terasology.engine.logic.console.suggesters.ScreenSuggester) Optional(java.util.Optional) Name(org.terasology.gestalt.naming.Name) TerasologyConstants(org.terasology.engine.core.TerasologyConstants) UIElement(org.terasology.nui.asset.UIElement) ModuleManager(org.terasology.engine.core.module.ModuleManager) EngineEntityManager(org.terasology.engine.entitySystem.entity.internal.EngineEntityManager) NetworkMode(org.terasology.engine.network.NetworkMode) Callable(java.util.concurrent.Callable) BlockItemFactory(org.terasology.engine.world.block.items.BlockItemFactory) ArrayList(java.util.ArrayList) WorldDumper(org.terasology.engine.persistence.WorldDumper) ResourceUrn(org.terasology.gestalt.assets.ResourceUrn) Time(org.terasology.engine.core.Time) StreamSupport(java.util.stream.StreamSupport) AssetManager(org.terasology.gestalt.assets.management.AssetManager) PingService(org.terasology.engine.network.PingService) MessagePopup(org.terasology.engine.rendering.nui.layers.mainMenu.MessagePopup) Assets(org.terasology.engine.utilities.Assets) BlockFamily(org.terasology.engine.world.block.family.BlockFamily) PermissionManager(org.terasology.engine.logic.permission.PermissionManager) NUIEditorSystem(org.terasology.engine.rendering.nui.editor.systems.NUIEditorSystem) LocationComponent(org.terasology.engine.logic.location.LocationComponent) ClientComponent(org.terasology.engine.network.ClientComponent) EntityManager(org.terasology.engine.entitySystem.entity.EntityManager) PrefabManager(org.terasology.engine.entitySystem.prefab.PrefabManager) IOException(java.io.IOException) Prefab(org.terasology.engine.entitySystem.prefab.Prefab) UnknownHostException(java.net.UnknownHostException) BaseComponentSystem(org.terasology.engine.entitySystem.systems.BaseComponentSystem) Ordering(com.google.common.collect.Ordering) BlockManager(org.terasology.engine.world.block.BlockManager) PrefabSerializer(org.terasology.engine.persistence.serializers.PrefabSerializer) JoinStatus(org.terasology.engine.network.JoinStatus) NetworkSystem(org.terasology.engine.network.NetworkSystem) PathManager(org.terasology.engine.core.PathManager) Optional(java.util.Optional) WorldDumper(org.terasology.engine.persistence.WorldDumper) Component(org.terasology.gestalt.entitysystem.component.Component) LocationComponent(org.terasology.engine.logic.location.LocationComponent) ClientComponent(org.terasology.engine.network.ClientComponent) PrefabSerializer(org.terasology.engine.persistence.serializers.PrefabSerializer) Command(org.terasology.engine.logic.console.commandSystem.annotations.Command) ConsoleCommand(org.terasology.engine.logic.console.commandSystem.ConsoleCommand)

Example 43 with Name

use of org.terasology.gestalt.naming.Name 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.getResources() instanceof ArchiveFileSource)) {
            // TODO: gestaltv7 restore module downloading for maximum possibles
            result.setError("Module not available for download");
        } else {
            FileReference fileReference = module.getResources().getFiles().iterator().next();
            try (InputStream stream = fileReference.open()) {
                ByteString byteString = ByteString.readFrom(stream, 1024);
                channelHandlerContext.channel().write(NetData.NetMessage.newBuilder().setModuleData(NetData.ModuleData.newBuilder().setModule(byteString)).build());
                result.setVersion(module.getVersion().toString());
                result.setSize(byteString.size());
                channelHandlerContext.channel().write(NetData.NetMessage.newBuilder().setModuleDataHeader(result).build());
            } catch (IOException e) {
                logger.error("Error sending module", e);
                channelHandlerContext.channel().close();
                break;
            }
        }
    }
}
Also used : NetData(org.terasology.protobuf.NetData) InputStream(java.io.InputStream) ByteString(com.google.protobuf.ByteString) IOException(java.io.IOException) Module(org.terasology.gestalt.module.Module) FileReference(org.terasology.gestalt.module.resources.FileReference) ArchiveFileSource(org.terasology.gestalt.module.resources.ArchiveFileSource) Name(org.terasology.gestalt.naming.Name)

Example 44 with Name

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

the class ServerInfoMessageImpl method getModuleList.

@Override
public List<NameVersion> getModuleList() {
    List<NameVersion> result = Lists.newArrayList();
    for (NetData.ModuleInfo moduleInfo : info.getModuleList()) {
        if (!moduleInfo.hasModuleId() || !moduleInfo.hasModuleVersion()) {
            logger.error("Received incomplete module info");
        } else {
            Name id = new Name(moduleInfo.getModuleId());
            Version version = new Version(moduleInfo.getModuleVersion());
            result.add(new NameVersion(id, version));
        }
    }
    return result;
}
Also used : NameVersion(org.terasology.gestalt.naming.NameVersion) NetData(org.terasology.protobuf.NetData) Version(org.terasology.gestalt.naming.Version) NameVersion(org.terasology.gestalt.naming.NameVersion) Name(org.terasology.gestalt.naming.Name)

Example 45 with Name

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

the class ModuleEnvironmentSandbox method isValidTypeHandlerDeclaration.

@Override
public <T> boolean isValidTypeHandlerDeclaration(TypeInfo<T> type, TypeHandler<T> typeHandler) {
    Name moduleDeclaringHandler = getModuleProviding(typeHandler.getClass());
    // TODO: Possibly find better way to refer to engine module
    if (moduleDeclaringHandler == null || moduleDeclaringHandler.equals(new Name("engine"))) {
        return true;
    }
    if (type.getRawType().getClassLoader() == null) {
        // Modules cannot specify handlers for builtin classes
        return false;
    }
    Name moduleDeclaringType = getModuleProviding(type.getRawType());
    // Both the type and the handler must come from the same module
    return Objects.equals(moduleDeclaringType, moduleDeclaringHandler);
}
Also used : Name(org.terasology.gestalt.naming.Name)

Aggregations

Name (org.terasology.gestalt.naming.Name)58 ResourceUrn (org.terasology.gestalt.assets.ResourceUrn)15 Module (org.terasology.gestalt.module.Module)14 SimpleUri (org.terasology.engine.core.SimpleUri)13 ModuleManager (org.terasology.engine.core.module.ModuleManager)10 DependencyResolver (org.terasology.gestalt.module.dependencyresolution.DependencyResolver)7 IOException (java.io.IOException)6 ResolutionResult (org.terasology.gestalt.module.dependencyresolution.ResolutionResult)6 List (java.util.List)5 GameEngine (org.terasology.engine.core.GameEngine)5 SubtextureData (org.terasology.engine.rendering.assets.texture.subtexture.SubtextureData)5 BlockUri (org.terasology.engine.world.block.BlockUri)5 ModuleEnvironment (org.terasology.gestalt.module.ModuleEnvironment)5 UIText (org.terasology.nui.widgets.UIText)5 Map (java.util.Map)4 Set (java.util.Set)4 Config (org.terasology.engine.config.Config)4 Path (java.nio.file.Path)3 ArrayList (java.util.ArrayList)3 Arrays (java.util.Arrays)3