LiteLoaderCoreAPIClient.java 5.04 KB
package com.mumfrey.liteloader.client.api;

import java.util.List;

import net.minecraft.client.Minecraft;
import net.minecraft.server.integrated.IntegratedServer;

import com.google.common.collect.ImmutableList;
import com.mumfrey.liteloader.api.CoreProvider;
import com.mumfrey.liteloader.api.CustomisationProvider;
import com.mumfrey.liteloader.api.InterfaceProvider;
import com.mumfrey.liteloader.api.Observer;
import com.mumfrey.liteloader.client.LiteLoaderCoreProviderClient;
import com.mumfrey.liteloader.client.ResourceObserver;
import com.mumfrey.liteloader.client.Translator;
import com.mumfrey.liteloader.core.LiteLoader;
import com.mumfrey.liteloader.core.api.LiteLoaderCoreAPI;
import com.mumfrey.liteloader.interfaces.ObjectFactory;
import com.mumfrey.liteloader.messaging.MessageBus;
import com.mumfrey.liteloader.transformers.event.json.ModEvents;

/**
 * Client side of the core API
 *
 * @author Adam Mummery-Smith
 */
public class LiteLoaderCoreAPIClient extends LiteLoaderCoreAPI
{
    private static final String PKG_LITELOADER_CLIENT = LiteLoaderCoreAPI.PKG_LITELOADER + ".client";

    private static final String[] requiredTransformers = {
            LiteLoaderCoreAPI.PKG_LITELOADER + ".transformers.event.EventProxyTransformer",
            LiteLoaderCoreAPI.PKG_LITELOADER + ".launch.LiteLoaderTransformer",
            LiteLoaderCoreAPIClient.PKG_LITELOADER_CLIENT + ".transformers.CrashReportTransformer"
    };

    private static final String[] requiredDownstreamTransformers = {
            LiteLoaderCoreAPI.PKG_LITELOADER_COMMON + ".transformers.LiteLoaderPacketTransformer",
            LiteLoaderCoreAPIClient.PKG_LITELOADER_CLIENT + ".transformers.LiteLoaderEventInjectionTransformer",
            LiteLoaderCoreAPIClient.PKG_LITELOADER_CLIENT + ".transformers.MinecraftTransformer",
            LiteLoaderCoreAPI.PKG_LITELOADER + ".transformers.event.json.ModEventInjectionTransformer"
    };

    private ObjectFactory<Minecraft, IntegratedServer> objectFactory;

    /* (non-Javadoc)
     * @see com.mumfrey.liteloader.api.LiteAPI#getRequiredTransformers()
     */
    @Override
    public String[] getRequiredTransformers()
    {
        return LiteLoaderCoreAPIClient.requiredTransformers;
    }

    /* (non-Javadoc)
     * @see com.mumfrey.liteloader.api.LiteAPI
     *      #getRequiredDownstreamTransformers()
     */
    @Override
    public String[] getRequiredDownstreamTransformers()
    {
        return LiteLoaderCoreAPIClient.requiredDownstreamTransformers;
    }

    /* (non-Javadoc)
     * @see com.mumfrey.liteloader.api.LiteAPI#getCustomisationProviders()
     */
    @Override
    public List<CustomisationProvider> getCustomisationProviders()
    {
        return ImmutableList.<CustomisationProvider>of
                (
                        new LiteLoaderBrandingProvider(),
                        new LiteLoaderModInfoDecorator(),
                        new Translator()
                        );
    }

    /* (non-Javadoc)
     * @see com.mumfrey.liteloader.api.LiteAPI#getCoreProviders()
     */
    @Override
    public List<CoreProvider> getCoreProviders()
    {
        return ImmutableList.<CoreProvider>of
                (
                        new LiteLoaderCoreProviderClient(this.properties),
                        LiteLoader.getInput()
                        );
    }


    /* (non-Javadoc)
     * @see com.mumfrey.liteloader.api.LiteAPI#getInterfaceProviders()
     */
    @Override
    public List<InterfaceProvider> getInterfaceProviders()
    {
        ObjectFactory<?, ?> objectFactory = this.getObjectFactory();

        return ImmutableList.<InterfaceProvider>of
                (
                        objectFactory.getEventBroker(),
                        objectFactory.getPacketEventBroker(),
                        objectFactory.getClientPluginChannels(),
                        objectFactory.getServerPluginChannels(),
                        MessageBus.getInstance()
                        );
    }

    /* (non-Javadoc)
     * @see com.mumfrey.liteloader.api.LiteAPI#getPreInitObservers()
     */
    @Override
    public List<Observer> getPreInitObservers()
    {
        return ImmutableList.<Observer>of
                (
                        new ModEvents()
                        );
    }

    /* (non-Javadoc)
     * @see com.mumfrey.liteloader.api.LiteAPI#getObservers()
     */
    @Override
    public List<Observer> getObservers()
    {
        ObjectFactory<?, ?> objectFactory = this.getObjectFactory();

        return ImmutableList.<Observer>of
                (
                        new ResourceObserver(),
                        objectFactory.getPanelManager(),
                        objectFactory.getEventBroker()
                        );
    }

    /* (non-Javadoc)
     * @see com.mumfrey.liteloader.core.api.LiteLoaderCoreAPI#getObjectFactory()
     */
    @Override
    public ObjectFactory<?, ?> getObjectFactory()
    {
        if (this.objectFactory == null)
        {
            this.objectFactory = new ObjectFactoryClient(this.environment, this.properties);
        }

        return this.objectFactory;
    }
}