matteroverdrive.guide.MOGuideEntry.java Source code

Java tutorial

Introduction

Here is the source code for matteroverdrive.guide.MOGuideEntry.java

Source

/*
 * This file is part of Matter Overdrive
 * Copyright (c) 2015., Simeon Radivoev, All rights reserved.
 *
 * Matter Overdrive is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Matter Overdrive is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Matter Overdrive.  If not, see <http://www.gnu.org/licenses>.
 */

package matteroverdrive.guide;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import matteroverdrive.MatterOverdrive;
import matteroverdrive.Reference;
import matteroverdrive.util.MOStringHelper;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import org.apache.commons.io.IOUtils;

import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Simeon on 4/4/2015.
 */
public class MOGuideEntry {
    private MOGuideEntry parent;
    private ItemStack[] stackIcons;
    public String name;
    @SideOnly(Side.CLIENT)
    private int guiPosX;
    @SideOnly(Side.CLIENT)
    private int guiPosY;
    private List<MOGuideEntry> children;
    private int id;
    private String group;
    @SideOnly(Side.CLIENT)
    private ResourceLocation styleLocation;

    public MOGuideEntry(String name, ItemStack... stackIcons) {
        this.stackIcons = stackIcons;
        this.name = name;
        init();
    }

    public MOGuideEntry(int id, String name, ItemStack... stackIcons) {
        this.stackIcons = stackIcons;
        this.name = name;
        this.id = id;
        init();
    }

    private void init() {
        children = new ArrayList<>();
    }

    public MOGuideEntry setStackIcons(ItemStack... stackIcons) {
        this.stackIcons = stackIcons;
        return this;
    }

    @SideOnly(Side.CLIENT)
    public MOGuideEntry setStackIcons(Item item) {
        List<ItemStack> stacks = new ArrayList<>();
        item.getSubItems(item, null, stacks);
        if (stacks.size() > 0) {
            this.stackIcons = new ItemStack[stacks.size()];
            this.stackIcons = stacks.toArray(this.stackIcons);
        } else
            this.stackIcons = new ItemStack[] { new ItemStack(item) };
        return this;
    }

    @SideOnly(Side.CLIENT)
    public MOGuideEntry setStackIcons(Block block) {
        List<ItemStack> stacks = new ArrayList<>();
        block.getSubBlocks(Item.getItemFromBlock(block), null, stacks);
        if (stacks.size() > 0) {
            this.stackIcons = new ItemStack[stacks.size()];
            this.stackIcons = stacks.toArray(this.stackIcons);
        } else
            this.stackIcons = new ItemStack[] { new ItemStack(block) };
        return this;
    }

    public String getDisplayName() {
        return MOStringHelper.translateToLocal(String.format("guide.entry.%s.name", name));
    }

    public MOGuideEntry setGuiPos(int x, int y) {
        this.guiPosX = x;
        this.guiPosY = y;
        return this;
    }

    @SideOnly(Side.CLIENT)
    public int getGuiPosX() {
        return guiPosX;
    }

    @SideOnly(Side.CLIENT)
    public int getGuiPosY() {
        return guiPosY;
    }

    public MOGuideEntry setParent(MOGuideEntry parent) {
        this.parent = parent;
        return this;
    }

    public MOGuideEntry getParent() {
        return parent;
    }

    public void addChild(MOGuideEntry child) {
        child.setParent(this);
        children.add(child);
    }

    public ItemStack[] getStackIcons() {
        return stackIcons;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @SideOnly(Side.CLIENT)
    public String getDescription() {
        String info;
        StringWriter writer = new StringWriter();
        InputStream stream;

        try {

            stream = Minecraft.getMinecraft().getResourceManager().getResource(
                    new ResourceLocation(getDescriptionPath(Minecraft.getMinecraft().gameSettings.language)))
                    .getInputStream();
            info = IOUtils.toString(stream, "UTF-8");
            writer.close();
            stream.close();
        } catch (IOException e) {
            MatterOverdrive.log.warn("Language text %s for entry %s not found.",
                    Minecraft.getMinecraft().gameSettings.language, name);
            try {
                stream = Minecraft.getMinecraft().getResourceManager()
                        .getResource(new ResourceLocation(getDescriptionPath("en_US"))).getInputStream();
                info = IOUtils.toString(stream, "UTF-8");
                writer.close();
                stream.close();
            } catch (IOException e1) {
                info = "There is no default text entry for " + name;
            }
        }

        return info;
    }

    @SideOnly(Side.CLIENT)
    public InputStream getDescriptionStream() {
        InputStream stream = null;
        try {
            return Minecraft.getMinecraft().getResourceManager().getResource(
                    new ResourceLocation(getDescriptionPath(Minecraft.getMinecraft().gameSettings.language)))
                    .getInputStream();
        } catch (IOException e) {
            MatterOverdrive.log.warn("Language text %s for entry %s not found.",
                    Minecraft.getMinecraft().gameSettings.language, name);
            try {
                return Minecraft.getMinecraft().getResourceManager()
                        .getResource(new ResourceLocation(getDescriptionPath("en_US"))).getInputStream();
            } catch (IOException e1) {
                MatterOverdrive.log.warn("Default language entry for %s not found", name);
            }
        }
        return stream;
    }

    public String getDescriptionPath(String language) {
        return String.format("%s%s/%s.xml", Reference.PATH_INFO, language, name);
    }

    public String getGroup() {
        return group;
    }

    public String getName() {
        return name;
    }

    public MOGuideEntry setGroup(String group) {
        this.group = group;
        return this;
    }

    @SideOnly(Side.CLIENT)
    public void setStyleLocation(ResourceLocation location) {
        this.styleLocation = location;
    }

    @SideOnly(Side.CLIENT)
    public ResourceLocation getStyleLocation() {
        return styleLocation;
    }
}