Package thaumic.tinkerer.client.gui

Source Code of thaumic.tinkerer.client.gui.GuiEnchanting

/**
* This class was created by <Vazkii>. It's distributed as
* part of the ThaumicTinkerer Mod.
*
* ThaumicTinkerer is Open Source and distributed under a
* Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License
* (http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_GB)
*
* ThaumicTinkerer is a Derivative Work on Thaumcraft 4.
* Thaumcraft 4 (c) Azanor 2012
* (http://www.minecraftforum.net/topic/1585216-)
*
* File Created @ [15 Sep 2013, 00:58:22 (GMT)]
*/
package thaumic.tinkerer.client.gui;

import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;
import thaumcraft.api.aspects.Aspect;
import thaumic.tinkerer.client.core.helper.ClientHelper;
import thaumic.tinkerer.client.gui.button.GuiButtonEnchant;
import thaumic.tinkerer.client.gui.button.GuiButtonEnchanterLevel;
import thaumic.tinkerer.client.gui.button.GuiButtonEnchantment;
import thaumic.tinkerer.client.gui.button.GuiButtonFramedEnchantment;
import thaumic.tinkerer.client.lib.LibResources;
import thaumic.tinkerer.common.ThaumicTinkerer;
import thaumic.tinkerer.common.block.tile.TileEnchanter;
import thaumic.tinkerer.common.block.tile.container.ContainerEnchanter;
import thaumic.tinkerer.common.enchantment.core.EnchantmentManager;
import thaumic.tinkerer.common.lib.LibFeatures;
import thaumic.tinkerer.common.network.packet.PacketEnchanterAddEnchant;
import thaumic.tinkerer.common.network.packet.PacketEnchanterStartWorking;

import java.awt.*;
import java.util.ArrayList;
import java.util.List;

public class GuiEnchanting extends GuiContainer {

  private static final ResourceLocation gui = new ResourceLocation(LibResources.GUI_ENCHANTER);

  int x, y;

  public TileEnchanter enchanter;

  GuiButtonEnchantment[] enchantButtons = new GuiButtonEnchantment[16];

  public List<String> tooltip = new ArrayList();

  List<Integer> lastTickEnchants;
  List<Integer> lastTickLevels;
  ItemStack lastTickStack;
  ItemStack currentStack;

  public GuiEnchanting(TileEnchanter enchanter, InventoryPlayer inv) {
    super(new ContainerEnchanter(enchanter, inv));
    this.enchanter = enchanter;
    lastTickStack = enchanter.getStackInSlot(0);
    currentStack = enchanter.getStackInSlot(0);
    lastTickEnchants = new ArrayList(enchanter.enchantments);
    lastTickLevels = new ArrayList(enchanter.levels);
  }

  @Override
  public void initGui() {
    super.initGui();

    x = (width - xSize) / 2;
    y = (height - ySize) / 2;

    buildButtonList();
  }

  public void buildButtonList() {
    buttonList.clear();
    GuiButton enchantButton = new GuiButtonEnchant(this, enchanter, 0, x + 151, y + 33);
    buttonList.add(enchantButton);
    enchantButton.enabled = !enchanter.enchantments.isEmpty();

    for (int i = 0; i < 16; i++) {
      int z = -24;
      if (i > 7 || (enchantButtons[8] == null || !enchantButtons[8].enabled)) {
        z = 0;
      }
      GuiButtonEnchantment button = new GuiButtonEnchantment(this, 1 + i, x + 34 + ((i) % 8) * 16, y + 54 + z);
      enchantButtons[i] = button;
      buttonList.add(button);
    }

    asignEnchantButtons();

    int i = 0;
    for (Integer enchant : enchanter.enchantments) {
      GuiButtonEnchantment button = new GuiButtonFramedEnchantment(this, 17 + i * 3, x + xSize + 4, y + i * 26);
      button.enchant = Enchantment.enchantmentsList[enchant];
      buttonList.add(button);
      buttonList.add(new GuiButtonEnchanterLevel(17 + i * 3 + 1, x + xSize + 24, y + i * 26 - 4, false));
      buttonList.add(new GuiButtonEnchanterLevel(17 + i * 3 + 2, x + xSize + 31, y + i * 26 - 4, true));
      ++i;
    }
  }

  public void asignEnchantButtons() {
    for (int i = 0; i < 16; i++) {
      enchantButtons[i].enchant = null;
      enchantButtons[i].enabled = false;
    }

    if (currentStack == null || currentStack.isItemEnchanted())
      return;

    int it = 0;

    for (int enchant : EnchantmentManager.enchantmentData.keySet()) {
      if (currentStack.getItem().getItemEnchantability() != 0 && EnchantmentManager.canApply(currentStack, Enchantment.enchantmentsList[enchant], enchanter.enchantments) && EnchantmentManager.canEnchantmentBeUsed(ClientHelper.clientPlayer().getGameProfile().getName(), Enchantment.enchantmentsList[enchant])) {
        enchantButtons[it].enchant = Enchantment.enchantmentsList[enchant];
        enchantButtons[it].enabled = true;
        it++;
        if (it >= 16)
          break;
      }
    }

  }

  @Override
  protected void actionPerformed(GuiButton par1GuiButton) {
    if (par1GuiButton.id == 0) {
      ThaumicTinkerer.netHandler.sendToServer(new PacketEnchanterStartWorking(enchanter));
    } else if (par1GuiButton.id <= 16) {
      GuiButtonEnchantment button = enchantButtons[par1GuiButton.id - 1];
      if (button != null && button.enchant != null)
        ThaumicTinkerer.netHandler.sendToServer(new PacketEnchanterAddEnchant(enchanter, button.enchant.effectId, 0));
    } else {
      int type = (par1GuiButton.id - 17) % 3;
      int index = (par1GuiButton.id - 17) / 3;

      if (index >= enchanter.enchantments.size() || index >= enchanter.levels.size())
        return;

      int level = enchanter.levels.get(index);

      Enchantment enchant = Enchantment.enchantmentsList[enchanter.enchantments.get(index)];

      switch (type) {
        case 0: {
          ThaumicTinkerer.netHandler.sendToServer(new PacketEnchanterAddEnchant(enchanter, enchant.effectId, -1));
          break;
        }
        case 1: {
          ThaumicTinkerer.netHandler.sendToServer(new PacketEnchanterAddEnchant(enchanter, enchant.effectId, level == 1 ? -1 : level - 1));
          break;
        }
        case 2: {
          ThaumicTinkerer.netHandler.sendToServer(new PacketEnchanterAddEnchant(enchanter, enchant.effectId, level + 1));
          break;
        }
      }
    }

    buildButtonList();
  }

  @Override
  public void updateScreen() {
    currentStack = enchanter.getStackInSlot(0);
    buildButtonList();
    if (currentStack != lastTickStack || !lastTickEnchants.equals(enchanter.enchantments) || !lastTickLevels.equals(enchanter.levels))
      buildButtonList();

    lastTickStack = currentStack;
    lastTickEnchants = new ArrayList(enchanter.enchantments);
    lastTickLevels = new ArrayList(enchanter.enchantments);
  }

  @Override
  protected void drawGuiContainerBackgroundLayer(float f, int i, int j) {
    GL11.glColor4f(1F, 1F, 1F, 1F);
    mc.renderEngine.bindTexture(gui);
    drawTexturedModalRect(x, y, 0, 0, xSize, ySize);

    ItemStack itemToEnchant = enchanter.getStackInSlot(0);
    if (enchantButtons[8].enabled) {
      if (itemToEnchant != null && !itemToEnchant.isItemEnchanted())
        drawTexturedModalRect(x + 30, y + 26, 0, ySize, 147, 24);
    }

    if (itemToEnchant != null && !itemToEnchant.isItemEnchanted())
      drawTexturedModalRect(x + 30, y + 50, 0, ySize, 147, 24);

    if (!enchanter.enchantments.isEmpty()) {
      int x = this.x + 40;
      GL11.glEnable(GL11.GL_BLEND);
      int xo = 15;
      int z = 50;
      if (enchantButtons[8].enabled)
        z = 26;
      for (Aspect aspect : LibFeatures.PRIMAL_ASPECTS) {
        drawAspectBar(aspect, x + xo, y + z, i, j);
        xo += 15;
      }
      GL11.glDisable(GL11.GL_BLEND);
    }
  }

  @Override
  protected void drawGuiContainerForegroundLayer(int par1, int par2) {
    if (!tooltip.isEmpty())
      ClientHelper.renderTooltip(par1 - x, par2 - y, tooltip);
    tooltip.clear();
  }

  private void drawAspectBar(Aspect aspect, int x, int y, int mx, int my) {
    int totalCost = enchanter.totalAspects.getAmount(aspect);
    int current = enchanter.currentAspects.getAmount(aspect);

    int size = totalCost == 0 ? 11 : 59;

    if (totalCost == 0) {
      drawTexturedModalRect(x, y - size, 200, 0, 10, 4);
      drawTexturedModalRect(x, y - size + 4, 200, 52, 10, 10);
    } else {
      int pixels = (int) (48D * ((double) current / (double) totalCost));
      Color color = new Color(aspect.getColor());
      GL11.glColor3ub((byte) color.getRed(), (byte) color.getGreen(), (byte) color.getBlue());
      drawTexturedModalRect(x + 1, y - size + 4 + 48 - pixels, 210, 48 - pixels, 8, pixels);
      GL11.glColor3f(1F, 1F, 1F);
      drawTexturedModalRect(x, y - size, 200, 0, 10, size);
    }

    if (mx > x && mx <= x + 10 && my > y - size && my <= y) {
      List<String> tooltip = new ArrayList();
      tooltip.add('\u00a7' + aspect.getChatcolor() + aspect.getName());
      tooltip.add(current + "/" + totalCost);
      this.tooltip = tooltip;
    }
  }

}
TOP

Related Classes of thaumic.tinkerer.client.gui.GuiEnchanting

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.