Package pneumaticCraft.client.render.pneumaticArmor

Source Code of pneumaticCraft.client.render.pneumaticArmor.SearchUpgradeHandler

package pneumaticCraft.client.render.pneumaticArmor;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper;
import net.minecraftforge.common.config.Configuration;

import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;

import pneumaticCraft.api.client.pneumaticHelmet.IOptionPage;
import pneumaticCraft.api.client.pneumaticHelmet.IUpgradeRenderHandler;
import pneumaticCraft.client.gui.pneumaticHelmet.GuiSearchUpgradeOptions;
import pneumaticCraft.client.gui.widget.GuiAnimatedStat;
import pneumaticCraft.common.Config;
import pneumaticCraft.common.item.ItemMachineUpgrade;
import pneumaticCraft.common.item.ItemPneumaticArmor;
import pneumaticCraft.common.item.Itemss;
import pneumaticCraft.common.util.PneumaticCraftUtils;
import pneumaticCraft.lib.PneumaticValues;
import pneumaticCraft.lib.Textures;
import cpw.mods.fml.client.FMLClientHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class SearchUpgradeHandler implements IUpgradeRenderHandler{
    private int totalSearchedItemCount;
    public int searchedItemCounter;
    private int ticksExisted;
    private final Map<EntityItem, Integer> searchedItems = new HashMap<EntityItem, Integer>();
    private final List<RenderSearchItemBlock> searchedBlocks = new ArrayList<RenderSearchItemBlock>();
    @SideOnly(Side.CLIENT)
    private GuiAnimatedStat searchInfo;
    private int statX;
    private int statY;
    private boolean statLeftSided;

    @Override
    @SideOnly(Side.CLIENT)
    public String getUpgradeName(){
        return "itemSearcher";
    }

    @Override
    public void initConfig(Configuration config){
        statX = config.get("Helmet_Options" + Configuration.CATEGORY_SPLITTER + "Item_Search", "stat X", -1).getInt();
        statY = config.get("Helmet_Options" + Configuration.CATEGORY_SPLITTER + "Item_Search", "stat Y", 17).getInt();
        statLeftSided = config.get("Helmet_Options" + Configuration.CATEGORY_SPLITTER + "Item_Search", "stat leftsided", true).getBoolean(true);
    }

    @Override
    public void saveToConfig(){
        Configuration config = Config.config;
        config.load();
        config.get("Helmet_Options" + Configuration.CATEGORY_SPLITTER + "Item_Search", "stat X", -1).set(searchInfo.getBaseX());
        config.get("Helmet_Options" + Configuration.CATEGORY_SPLITTER + "Item_Search", "stat Y", 17).set(searchInfo.getBaseY());
        config.get("Helmet_Options" + Configuration.CATEGORY_SPLITTER + "Item_Search", "stat leftsided", true).set(searchInfo.isLeftSided());
        config.save();
        statX = searchInfo.getBaseX();
        statY = searchInfo.getBaseY();
        statLeftSided = searchInfo.isLeftSided();
    }

    public void addToSearchedItemCounter(int amount){
        searchedItemCounter += amount;
    }

    @Override
    @SideOnly(Side.CLIENT)
    public void update(EntityPlayer player, int rangeUpgrades){
        ticksExisted++;
        ItemStack searchStack = ItemPneumaticArmor.getSearchedStack(player.getCurrentArmor(3));

        if(ticksExisted % 20 == 0) {
            List<EntityItem> items = player.worldObj.getEntitiesWithinAABB(EntityItem.class, EntityTrackUpgradeHandler.getAABBFromRange(player, rangeUpgrades));
            searchedItems.clear();
            for(EntityItem item : items) {
                if(item.getEntityItem() != null && searchStack != null) {
                    if(item.getEntityItem().isItemEqual(searchStack)) searchedItems.put(item, item.getEntityItem().stackSize);
                    else {
                        List<ItemStack> inventoryItems = PneumaticCraftUtils.getStacksInItem(item.getEntityItem());
                        int itemCount = 0;
                        for(ItemStack inventoryItem : inventoryItems) {
                            if(inventoryItem.isItemEqual(searchStack)) {
                                itemCount += inventoryItem.stackSize;
                            }
                        }
                        if(itemCount > 0) searchedItems.put(item, itemCount);
                    }
                }
            }

            totalSearchedItemCount = searchedItemCounter;
            searchedItemCounter = 0;
            for(Integer itemCount : searchedItems.values()) {
                searchedItemCounter += itemCount;
            }
        }
    }

    @Override
    @SideOnly(Side.CLIENT)
    public void render3D(float partialTicks){
        GL11.glEnable(GL12.GL_RESCALE_NORMAL);
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glDepthMask(false);
        GL11.glDisable(GL11.GL_DEPTH_TEST);
        GL11.glDisable(GL11.GL_CULL_FACE);
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT);
        GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
        RenderManager.instance.renderEngine.bindTexture(Textures.GLOW_RESOURCE);
        //  mc.func_110434_K().func_110577_a(Textures.GLOW_RESOURCE);
        for(Map.Entry<EntityItem, Integer> entry : searchedItems.entrySet()) {
            EntityItem item = entry.getKey();
            float height = MathHelper.sin((item.age + partialTicks) / 10.0F + item.hoverStart) * 0.1F + 0.2F;
            RenderSearchItemBlock.renderSearch(item.lastTickPosX + (item.posX - item.lastTickPosX) * partialTicks, item.lastTickPosY + (item.posY - item.lastTickPosY) * partialTicks + height, item.lastTickPosZ + (item.posZ - item.lastTickPosZ) * partialTicks, entry.getValue(), totalSearchedItemCount);
        }
        for(int i = 0; i < searchedBlocks.size(); i++) {
            if(!searchedBlocks.get(i).renderSearchBlock(totalSearchedItemCount)) {
                searchedBlocks.remove(i);
                i--;
            }
        }
        GL11.glEnable(GL11.GL_CULL_FACE);
        GL11.glEnable(GL11.GL_DEPTH_TEST);
        GL11.glDisable(GL11.GL_BLEND);
        GL11.glDepthMask(true);
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glDisable(GL12.GL_RESCALE_NORMAL);
    }

    @Override
    @SideOnly(Side.CLIENT)
    public void render2D(float partialTicks, boolean helmetEnabled){
        ItemStack searchStack = ItemPneumaticArmor.getSearchedStack(FMLClientHandler.instance().getClient().thePlayer.getCurrentArmor(3));
        List<String> textList = new ArrayList<String>();
        if(searchStack == null) {
            textList.add("press '" + Keyboard.getKeyName(HUDHandler.instance().keybindOpenOptions.getKeyCode()) + "' to configure");
        } else {
            textList.add(searchStack.getDisplayName() + " (" + totalSearchedItemCount + " found)");
        }
        searchInfo.setText(textList);
    }

    @Override
    public boolean isEnabled(ItemStack[] upgradeStacks){
        for(ItemStack stack : upgradeStacks) {
            if(stack != null && stack.getItem() == Itemss.machineUpgrade && stack.getItemDamage() == ItemMachineUpgrade.UPGRADE_SEARCH_DAMAGE) return true;
        }
        return false;
    }

    /**
     * This method will be called by the BlockTrackUpgradeHandler when it finds inventories while scanning blocks.
     * @param te TileEntity that already has been checked on if it implements IInventory, so it's save to cast it to IInventory.
     */
    public void checkInventoryForItems(TileEntity te){
        ItemStack searchStack = ItemPneumaticArmor.getSearchedStack(FMLClientHandler.instance().getClient().thePlayer.getCurrentArmor(3));
        IInventory inventory = (IInventory)te;
        boolean hasFoundItem = false;
        for(int l = 0; l < inventory.getSizeInventory(); l++) {
            if(inventory.getStackInSlot(l) != null && searchStack != null) {
                int items = RenderSearchItemBlock.getSearchedItemCount(inventory.getStackInSlot(l), searchStack);
                if(items > 0) {
                    hasFoundItem = true;
                    searchedItemCounter += items;
                }
            }
        }
        if(hasFoundItem) {
            boolean inList = false;
            for(RenderSearchItemBlock trackedBlock : searchedBlocks) {
                if(trackedBlock.isAlreadyTrackingCoord(te.xCoord, te.yCoord, te.zCoord)) {
                    inList = true;
                    break;
                }
            }
            if(!inList) searchedBlocks.add(new RenderSearchItemBlock(te.getWorldObj(), te.xCoord, te.yCoord, te.zCoord));
        }

    }

    @Override
    @SideOnly(Side.CLIENT)
    public void reset(){
        searchedBlocks.clear();
        searchedItemCounter = 0;
        searchedItems.clear();
        ticksExisted = 0;
        searchInfo = null;
    }

    @Override
    public float getEnergyUsage(int rangeUpgrades, EntityPlayer player){
        return PneumaticValues.USAGE_ITEM_SEARCHER;
    }

    @Override
    @SideOnly(Side.CLIENT)
    public IOptionPage getGuiOptionsPage(){
        return new GuiSearchUpgradeOptions(this);
    }

    @Override
    @SideOnly(Side.CLIENT)
    public GuiAnimatedStat getAnimatedStat(){
        if(searchInfo == null) {
            Minecraft minecraft = Minecraft.getMinecraft();
            ScaledResolution sr = new ScaledResolution(minecraft, minecraft.displayWidth, minecraft.displayHeight);
            searchInfo = new GuiAnimatedStat(null, "Currently searching for:", new ItemStack(Itemss.machineUpgrade, 1, ItemMachineUpgrade.UPGRADE_SEARCH_DAMAGE), statX != -1 ? statX : sr.getScaledWidth() - 2, statY, 0x3000AA00, null, statLeftSided);
            searchInfo.setMinDimensionsAndReset(0, 0);
        }
        return searchInfo;
    }

}
TOP

Related Classes of pneumaticCraft.client.render.pneumaticArmor.SearchUpgradeHandler

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.