package pneumaticCraft.client.gui;
import java.awt.Point;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import org.lwjgl.opengl.GL11;
import pneumaticCraft.client.ClientTickHandler;
import pneumaticCraft.client.gui.widget.GuiAnimatedStat;
import pneumaticCraft.common.block.Blockss;
import pneumaticCraft.common.inventory.ContainerSecurityStationHacking;
import pneumaticCraft.common.item.Itemss;
import pneumaticCraft.common.network.NetworkHandler;
import pneumaticCraft.common.network.PacketSecurityStationFailedHack;
import pneumaticCraft.common.network.PacketUseItem;
import pneumaticCraft.common.tileentity.TileEntitySecurityStation;
import pneumaticCraft.common.util.PneumaticCraftUtils;
import pneumaticCraft.lib.Textures;
import cpw.mods.fml.client.FMLClientHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class GuiSecurityStationHacking extends GuiSecurityStationBase{
private GuiAnimatedStat statusStat;
private NetworkConnectionBackground playerBackgroundBridges;
private NetworkConnectionBackground aiBackgroundBridges;
private NetworkConnectionPlayerHandler hackerBridges;
private NetworkConnectionAIHandler aiBridges;
private int stopWorms = 0;
private int nukeViruses = 0;
private final ItemStack stopWorm = new ItemStack(Itemss.stopWorm);
private final ItemStack nukeVirus = new ItemStack(Itemss.nukeVirus);
public GuiSecurityStationHacking(InventoryPlayer player, TileEntitySecurityStation te){
super(new ContainerSecurityStationHacking(player, te), te, Textures.GUI_HACKING);
ySize = 238;
}
@Override
public void initGui(){
super.initGui();
int xStart = (width - xSize) / 2;
int yStart = (height - ySize) / 2;
statusStat = addAnimatedStat("Security Status", new ItemStack(Blockss.securityStation), 0xFFFFAA00, false);
addAnimatedStat("gui.tab.info", Textures.GUI_INFO_LOCATION, 0xFF8888FF, true).setText("gui.tab.info.tile.securityStation.hacking");
addAnimatedStat("gui.tab.upgrades", Textures.GUI_UPGRADES_LOCATION, 0xFF0000FF, true).setText("gui.tab.upgrades.tile.securityStation.hacking");
addAnimatedStat(Itemss.nukeVirus.getUnlocalizedName() + ".name", new ItemStack(Itemss.nukeVirus), 0xFF18c9e8, false).setText("gui.tab.info.tile.securityStation.nukeVirus");
addAnimatedStat(Itemss.stopWorm.getUnlocalizedName() + ".name", new ItemStack(Itemss.stopWorm), 0xFFc13232, false).setText("gui.tab.info.tile.securityStation.stopWorm");
if(playerBackgroundBridges == null) {
playerBackgroundBridges = new NetworkConnectionBackground(this, te, xStart + 21, yStart + 26, 31, 0xAA4444FF);
aiBackgroundBridges = new NetworkConnectionBackground(this, te, xStart + 23, yStart + 27, 31, 0xAA4444FF);
hackerBridges = new NetworkConnectionPlayerHandler(this, te, xStart + 21, yStart + 26, 31, 0xFF00FF00);
aiBridges = new NetworkConnectionAIHandler(this, te, xStart + 23, yStart + 27, 31, 0xFFFF0000);
} else {
playerBackgroundBridges = new NetworkConnectionBackground(playerBackgroundBridges, xStart + 21, yStart + 26);
aiBackgroundBridges = new NetworkConnectionBackground(aiBackgroundBridges, xStart + 23, yStart + 27);
hackerBridges = new NetworkConnectionPlayerHandler(hackerBridges, xStart + 21, yStart + 26);
aiBridges = new NetworkConnectionAIHandler(aiBridges, xStart + 23, yStart + 27);
}
}
@Override
protected boolean shouldAddInfoTab(){
return false;
}
@Override
protected boolean shouldAddUpgradeTab(){
return false;
}
@Override
protected boolean shouldAddRedstoneTab(){
return false;
}
@Override
protected Point getInvNameOffset(){
return null;
}
@Override
protected Point getInvTextOffset(){
return null;
}
@Override
protected void drawGuiContainerForegroundLayer(int x, int y){
super.drawGuiContainerForegroundLayer(x, y);
fontRendererObj.drawString((aiBridges.isTracing() ? EnumChatFormatting.RED : EnumChatFormatting.GREEN) + "Tracing: " + PneumaticCraftUtils.convertTicksToMinutesAndSeconds(aiBridges.getRemainingTraceTime(), true), 15, 7, 4210752);
renderConsumables(x, y);
}
private void renderConsumables(int x, int y){
stopWorms = 0;
nukeViruses = 0;
EntityPlayer player = FMLClientHandler.instance().getClient().thePlayer;
for(ItemStack stack : player.inventory.mainInventory) {
if(stack != null) {
if(stack.getItem() == Itemss.stopWorm) stopWorms += stack.stackSize;
if(stack.getItem() == Itemss.nukeVirus) nukeViruses += stack.stackSize;
}
}
GuiUtils.drawItemStack(nukeVirus, 155, 30);
GuiUtils.drawItemStack(stopWorm, 155, 55);
fontRendererObj.drawString(PneumaticCraftUtils.convertAmountToString(nukeViruses), 155, 45, 0xFFFFFFFF);
fontRendererObj.drawString(PneumaticCraftUtils.convertAmountToString(stopWorms), 155, 70, 0xFFFFFFFF);
}
@Override
public void updateScreen(){
super.updateScreen();
statusStat.setText(getStatusText());
}
@Override
protected void drawGuiContainerBackgroundLayer(float opacity, int x, int y){
super.drawGuiContainerBackgroundLayer(opacity, x, y);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
playerBackgroundBridges.render();
aiBackgroundBridges.render();
hackerBridges.render();
aiBridges.render();
if(x >= guiLeft + 155 && x <= guiLeft + 171 && y >= guiTop + 30 && y <= guiTop + 50) {
List<String> text = new ArrayList<String>();
text.add("Nuke Virus");
if(hasNukeViruses()) {
text.add(EnumChatFormatting.GRAY + "Middle-click a hackable node to use.");
} else {
text.add(EnumChatFormatting.RED + "You don't have any Nuke Viruses.");
}
drawHoveringString(text, x, y, fontRendererObj);
}
if(x >= guiLeft + 155 && x <= guiLeft + 171 && y >= guiTop + 55 && y <= guiTop + 75) {
List<String> text = new ArrayList<String>();
text.add("STOP! Worm");
if(stopWorms > 0) {
if(aiBridges.isTracing()) {
text.add(EnumChatFormatting.GRAY + "Left-click to use.");
} else {
text.add(EnumChatFormatting.GRAY + "STOP! Worms can only be used when being traced.");
}
} else {
text.add(EnumChatFormatting.RED + "You don't have any STOP! Worms.");
}
drawHoveringString(text, x, y, fontRendererObj);
}
}
@Override
protected void addProblems(List<String> text){
super.addProblems(text);
if(aiBridges.isTracing()) {
text.add(EnumChatFormatting.GRAY + "Intrusion detected!");
text.add(EnumChatFormatting.BLACK + "Time till trace: " + PneumaticCraftUtils.convertTicksToMinutesAndSeconds(aiBridges.getRemainingTraceTime(), false));
}
}
private List<String> getStatusText(){
List<String> text = new ArrayList<String>();
text.add(EnumChatFormatting.GRAY + "Security Level");
text.add(EnumChatFormatting.BLACK + "Level " + te.getSecurityLevel());
text.add(EnumChatFormatting.GRAY + "Security Range");
text.add(EnumChatFormatting.BLACK.toString() + te.getSecurityRange() + "m (square)");
return text;
}
@Override
protected void mouseClicked(int par1, int par2, int par3){
if(par3 != 2) super.mouseClicked(par1, par2, par3);
hackerBridges.mouseClicked(par1, par2, par3, getSlotAtPosition(par1, par2));
if(aiBridges.isTracing() && par1 >= guiLeft + 155 && par1 <= guiLeft + 171 && par2 >= guiTop + 55 && par2 <= guiTop + 75) {
EntityPlayer player = FMLClientHandler.instance().getClient().thePlayer;
NetworkHandler.sendToServer(new PacketUseItem(Itemss.stopWorm, 1));
player.inventory.consumeInventoryItem(Itemss.stopWorm);
aiBridges.applyStopWorm();
}
}
/* @Override
protected void drawItemStackTooltip(ItemStack par1ItemStack, int par2, int par3){
List list = par1ItemStack.getTooltip(mc.thePlayer, mc.gameSettings.advancedItemTooltips);
for(int k = 0; k < list.size(); ++k) {
if(k == 0) {
list.set(k, "\u00a7" + Integer.toHexString(par1ItemStack.getRarity().rarityColor) + (String)list.get(k));
} else {
list.set(k, EnumChatFormatting.GRAY + (String)list.get(k));
}
}
handleItemTooltip(par1ItemStack, par2, par3, list);
func_102021_a(list, par2, par3);
}*/
//TODO fix for without NEI
public List<String> handleItemTooltip(ItemStack stack, int mousex, int mousey, List<String> currenttip){
if(stack != null) {
Slot slot = getSlotAtPosition(mousex, mousey);
if(slot != null) {
if(hackerBridges.slotHacked[slot.slotNumber]) {
if(!hackerBridges.slotFortified[slot.slotNumber]) {
currenttip.add(EnumChatFormatting.RED + "DETECTION: " + te.getDetectionChance() + "%");
currenttip.add(EnumChatFormatting.YELLOW + "Right-click to fortify");
}
} else if(hackerBridges.canHackSlot(slot.slotNumber)) {
currenttip.add(EnumChatFormatting.RED + "DETECTION: " + te.getDetectionChance() + "%");
currenttip.add(EnumChatFormatting.GREEN + "Left-click to hack");
}
}
}
return currenttip;
}
public boolean hasNukeViruses(){
return nukeViruses > 0;
}
public void onSlotHack(int slot){
if(Math.random() < te.getDetectionChance() / 100D) {
aiBridges.setTracing(true);
}
}
public void onSlotFortification(int slot){
aiBridges.slotFortified[slot] = true;
if(Math.random() < te.getDetectionChance() / 100D) {
aiBridges.setTracing(true);
}
}
@Override
public void onGuiClosed(){
if(aiBridges.isTracing() && !hackerBridges.hackedSuccessfully) NetworkHandler.sendToServer(new PacketSecurityStationFailedHack(te.xCoord, te.yCoord, te.zCoord));
removeUpdatesOnConnectionHandlers();
super.onGuiClosed();
}
public void removeUpdatesOnConnectionHandlers(){
ClientTickHandler.instance().removeUpdatedObject(hackerBridges);
ClientTickHandler.instance().removeUpdatedObject(aiBridges);
}
}