Package net.ftb.data

Source Code of net.ftb.data.TexturePack

/*
* This file is part of FTB Launcher.
*
* Copyright © 2012-2014, FTB Launcher Contributors <https://github.com/Slowpoke101/FTBLaunch/>
* FTB Launcher is licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*  http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.ftb.data;

import java.awt.Image;
import java.awt.Toolkit;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import com.google.common.collect.Lists;
import lombok.Getter;
import net.ftb.data.events.TexturePackListener;
import net.ftb.gui.LaunchFrame;
import net.ftb.gui.panes.TexturepackPane;
import net.ftb.log.Logger;
import net.ftb.util.DownloadUtils;
import net.ftb.util.OSUtils;
import net.ftb.workers.TexturePackLoader;

public class TexturePack {
    @Getter
    private String name, author, version, url, mcversion, logoName, imageName, info, resolution;
    private String sep = File.separator;
    @Getter
    private Image logo, image;
    @Getter
    private List<String> compatible = Lists.newArrayList();
    @Getter
    private List<String> masters = Lists.newArrayList();

    @Getter
    private int index;
    @Getter
    private final static ArrayList<TexturePack> texturePackArray = Lists.newArrayList();
    private static List<TexturePackListener> listeners = Lists.newArrayList();

    public static void addListener (TexturePackListener listener) {
        listeners.add(listener);
    }

    public static void loadAll () {
        TexturePackLoader loader = new TexturePackLoader();
        loader.start();
    }

    public static void addTexturePack (TexturePack texturePack) {
        synchronized (texturePackArray) {
            texturePackArray.add(texturePack);
        }
        for (TexturePackListener listener : listeners) {
            listener.onTexturePackAdded(texturePack);
        }
    }

    public static TexturePack getTexturePack (int i) {
        return texturePackArray.get(i);
    }

    /**
     * Used to grab the currently selected TexturePack based off the selected index from TexturepackPane
     * @return TexturePack - the currently selected TexturePack
     */
    public static TexturePack getSelectedTexturePack () {
        return getTexturePack(TexturepackPane.getSelectedTexturePackIndex());
    }

    public TexturePack (String name, String author, String version, String url, String logo, String image, String mcversion, String compatible, String info, String resolution, int idx)
            throws NoSuchAlgorithmException, IOException {
        index = idx;
        this.name = name;
        this.author = author;
        this.version = version;
        this.url = url;
        this.version = version;
        String installPath = OSUtils.getCacheStorageLocation();
        logoName = logo;
        imageName = image;
        String[] tmp = compatible.split(",");
        Collections.addAll(this.compatible, tmp);
        this.info = info;
        this.resolution = resolution;
        for (Iterator<String> it = this.compatible.iterator(); it.hasNext(); ) {
            String s = it.next();
            if (s.toLowerCase().startsWith("master")) {
                masters.add(s.replace("master_", ""));
                it.remove();
            }
        }
        for (ModPack p : ModPack.getPackArray()) {
            if (!p.hasCustomTP() && !this.compatible.contains(p.getDir()) && masters.contains(p.getMcVersion().replace(".", "_"))) {
                this.compatible.add(p.getDir());
            }
        }
        File tempDir = new File(installPath, "TexturePacks" + sep + name);
        File verFile = new File(tempDir, "version");

        if (!upToDate(verFile)) {
            DownloadUtils.saveImage(logo, tempDir, "png");
            DownloadUtils.saveImage(image, tempDir, "png");

        } else {
            if (!new File(tempDir, logo).exists()) {
                DownloadUtils.saveImage(logo, tempDir, "png");
            }
            if (!new File(tempDir, image).exists()) {
                DownloadUtils.saveImage(image, tempDir, "png");
            }
        }

        // image and logo should now exists, if not use placeholder images
        if (!new File(tempDir, logo).exists()) {
            this.logoName = logo = "logo_ftb.png";
            DownloadUtils.saveImage(logo, tempDir, "png");
        }
        this.logo = Toolkit.getDefaultToolkit().createImage(tempDir.getPath() + sep + logo);

        if (!new File(tempDir, image).exists()) {
            this.imageName = image = "default_splash.png";
            DownloadUtils.saveImage(image, tempDir, "png");
        }
        this.image = Toolkit.getDefaultToolkit().createImage(tempDir.getPath() + sep + image);
    }

    private boolean upToDate (File verFile) {
        boolean result = true;
        try {
            if (!verFile.exists()) {
                verFile.getParentFile().mkdirs();
                verFile.createNewFile();
                result = false;
            }
            BufferedReader in = new BufferedReader(new FileReader(verFile));
            String line = in.readLine();
            int storedVersion = -1;
            if (line != null) {
                try {
                    storedVersion = Integer.parseInt(line.replace(".", ""));
                } catch (NumberFormatException e) {
                    Logger.logWarn("Automatically fixing malformed version file for " + name, e);
                    line = null;
                }
            }

            if (line == null || Integer.parseInt(version.replace(".", "")) != storedVersion) {
                BufferedWriter out = new BufferedWriter(new FileWriter(verFile));
                out.write(version);
                out.flush();
                out.close();
                result = false;
            }
            in.close();
        } catch (IOException e) {
            Logger.logError("Error while checking texturepack version", e);
        }
        return result;
    }

    /**
     * Used to get the selected mod pack
     * @return - the compatible pack based on the selected texture pack
     */
    public String getSelectedCompatible () {
        return compatible.get(LaunchFrame.getSelectedTPInstallIndex()).trim();
    }

    public boolean isCompatible (String packName) {
        for (String aCompatible : compatible) {
            ModPack pack = ModPack.getPack(aCompatible);
            if (pack == null) {
                Logger.logDebug("Texturepack is compatible with " + packName + " , but modpack not found");
            } else {
                return pack.getName().equals(packName);
            }
        }
        return false;
    }
}
TOP

Related Classes of net.ftb.data.TexturePack

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.