package pneumaticCraft.client.gui;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.util.ChatComponentTranslation;
import net.minecraft.util.EnumChatFormatting;
import org.lwjgl.opengl.GL11;
import pneumaticCraft.client.render.RenderProgressingLine;
import pneumaticCraft.common.item.ItemNetworkComponents;
import pneumaticCraft.common.item.Itemss;
import pneumaticCraft.common.network.NetworkHandler;
import pneumaticCraft.common.network.PacketSecurityStationAddHacker;
import pneumaticCraft.common.network.PacketUseItem;
import pneumaticCraft.common.tileentity.TileEntitySecurityStation;
import pneumaticCraft.lib.TileEntityConstants;
import cpw.mods.fml.client.FMLClientHandler;
public class NetworkConnectionPlayerHandler extends NetworkConnectionHandler{
private final List<GuiStatBalloon> balloons = new ArrayList<GuiStatBalloon>();
public boolean hackedSuccessfully;
public NetworkConnectionPlayerHandler(GuiSecurityStationBase gui, TileEntitySecurityStation station, int baseX,
int baseY, int nodeSpacing, int color){
super(gui, station, baseX, baseY, nodeSpacing, color, TileEntityConstants.NETWORK_NORMAL_BRIDGE_SPEED);
for(int i = 0; i < 35; i++) {
if(station.getStackInSlot(i) != null && station.getStackInSlot(i).getItemDamage() == ItemNetworkComponents.NETWORK_IO_PORT) {
slotHacked[i] = true;
}
}
}
public NetworkConnectionPlayerHandler(NetworkConnectionPlayerHandler copy, int baseX, int baseY){
super(copy, baseX, baseY);
}
@Override
public void render(){
super.render();
GL11.glEnable(GL11.GL_BLEND);
// GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glColor4f(1, 1, 1, 0.5F);
for(GuiStatBalloon balloon : balloons) {
balloon.render();
}
// GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glDisable(GL11.GL_BLEND);
}
@Override
public void update(){
super.update();
for(GuiStatBalloon balloon : balloons) {
String numberText = balloon.text.replace("%", "");
if(numberText.equals("")) {
balloon.text = "0%";
} else if(!numberText.contains("+")) {
int percentage = Integer.parseInt(numberText) + 1;
if(percentage <= 100) {
balloon.text = percentage + "%";
} else {
balloon.text = "+1";
onSlotFortification(balloon.slotNumber);
}
}
}
}
public void mouseClicked(int x, int y, int mouseButton, Slot slot){
if(slot != null) {
if(mouseButton == 0) tryToHackSlot(slot.slotNumber);
if(mouseButton == 1 && slotHacked[slot.slotNumber]) {
boolean alreadyFortifying = false;
for(GuiStatBalloon balloon : balloons) {
if(balloon.slotNumber == slot.slotNumber) {
alreadyFortifying = true;
break;
}
}
if(!alreadyFortifying) {
balloons.add(new GuiStatBalloon(slot.xDisplayPosition + gui.getGuiLeft() + 8, slot.yDisplayPosition + gui.getGuiTop() - 5, slot.slotNumber));
}
}
if(mouseButton == 2 && !slotHacked[slot.slotNumber] && ((GuiSecurityStationHacking)gui).hasNukeViruses()) {
int linesBefore = lineList.size();
if(tryToHackSlot(slot.slotNumber)) {
EntityPlayer player = FMLClientHandler.instance().getClient().thePlayer;
NetworkHandler.sendToServer(new PacketUseItem(Itemss.nukeVirus, 1));
player.inventory.consumeInventoryItem(Itemss.nukeVirus);
for(int i = linesBefore; i < lineList.size(); i++) {
RenderProgressingLine line = lineList.get(i);
line.setProgress(1);
slotHacked[slot.slotNumber] = true;
onSlotHack(slot.slotNumber, true);
}
}
}
}
}
private void onSlotFortification(int slot){
if(gui instanceof GuiSecurityStationHacking) {
((GuiSecurityStationHacking)gui).onSlotFortification(slot);
}
}
@Override
protected void onSlotHack(int slot, boolean nuked){
if(!nuked && gui instanceof GuiSecurityStationHacking) {
((GuiSecurityStationHacking)gui).onSlotHack(slot);
}
if(station.getStackInSlot(slot) != null && (station.getStackInSlot(slot).getItemDamage() == ItemNetworkComponents.NETWORK_REGISTRY || station.getStackInSlot(slot).getItemDamage() == ItemNetworkComponents.DIAGNOSTIC_SUBROUTINE)) {
hackedSuccessfully = true;
EntityPlayer player = FMLClientHandler.instance().getClient().thePlayer;
NetworkHandler.sendToServer(new PacketSecurityStationAddHacker(station, player.getCommandSenderName()));
FMLClientHandler.instance().getClient().thePlayer.closeScreen();
player.addChatComponentMessage(new ChatComponentTranslation(EnumChatFormatting.GREEN + "Hacking successful! This Security Station now doesn't protect the area any longer!"));
if(gui instanceof GuiSecurityStationHacking) ((GuiSecurityStationHacking)gui).removeUpdatesOnConnectionHandlers();
}
}
}