package net.blay09.mods.eirairc.client.gui; import net.blay09.mods.eirairc.ConnectionManager; import net.blay09.mods.eirairc.api.IRCReplyCodes; import net.blay09.mods.eirairc.api.event.IRCConnectEvent; import net.blay09.mods.eirairc.api.event.IRCConnectionFailedEvent; import net.blay09.mods.eirairc.api.event.IRCErrorEvent; import net.blay09.mods.eirairc.client.gui.base.GuiAdvancedTextField; import net.blay09.mods.eirairc.client.gui.base.GuiLabel; import net.blay09.mods.eirairc.config.AuthManager; import net.blay09.mods.eirairc.config.ConfigurationHandler; import net.blay09.mods.eirairc.config.ServerConfig; import net.blay09.mods.eirairc.util.Globals; import net.blay09.mods.eirairc.util.I19n; import net.blay09.mods.eirairc.util.Utils; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiConfirmOpenLink; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiYesNoCallback; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.client.config.GuiCheckBox; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import org.lwjgl.input.Keyboard; public class GuiTwitch extends EiraGuiScreen implements GuiYesNoCallback { private static final ResourceLocation twitchLogo = new ResourceLocation("eirairc", "gfx/twitch_logo.png"); private final ServerConfig config; private GuiCheckBox chkAnonymous; private GuiAdvancedTextField txtUsername; private GuiAdvancedTextField txtPassword; private GuiButton btnOAuthHelp; private GuiButton btnConnect; public GuiTwitch(GuiScreen parentScreen) { super(parentScreen); config = ConfigurationHandler.getOrCreateServerConfig(Globals.TWITCH_SERVER); } @Override public void initGui() { super.initGui(); Keyboard.enableRepeatEvents(true); MinecraftForge.EVENT_BUS.register(this); final int topY = height / 2 - 30; boolean oldChecked; if(chkAnonymous != null) { oldChecked = chkAnonymous.isChecked(); } else { oldChecked = config.getNick().equals("%ANONYMOUS%"); } chkAnonymous = new GuiCheckBox(2, width / 2 - 90, topY, I19n.format("eirairc:gui.twitch.anonymous"), oldChecked); buttonList.add(chkAnonymous); labelList.add(new GuiLabel(I19n.format("eirairc:gui.twitch.username"), width / 2 - 90, topY + 20, Globals.TEXT_COLOR)); String oldText; if(txtUsername != null) { oldText = txtUsername.getText(); } else { oldText = config.getNick(); } txtUsername = new GuiAdvancedTextField(0, fontRendererObj, width / 2 - 90, topY + 35, 180, 15); txtUsername.setMaxStringLength(Integer.MAX_VALUE); txtUsername.setText(oldText); textFieldList.add(txtUsername); labelList.add(new GuiLabel(I19n.format("eirairc:gui.twitch.oauth"), width / 2 - 90, topY + 60, Globals.TEXT_COLOR)); if(txtPassword != null) { oldText = txtPassword.getText(); } else { oldText = AuthManager.getServerPassword(config.getIdentifier()); } txtPassword = new GuiAdvancedTextField(1, fontRendererObj, width / 2 - 90, topY + 75, 180, 15); txtPassword.setDefaultPasswordChar(); txtPassword.setText(oldText); textFieldList.add(txtPassword); txtUsername.setNextTabField(txtPassword); txtPassword.setNextTabField(txtUsername); btnOAuthHelp = new GuiButton(0, width / 2 + 94, topY + 72, 20, 20, "?"); buttonList.add(btnOAuthHelp); btnConnect = new GuiButton(1, width / 2 - 100, topY + 100, I19n.format("eirairc:gui.twitch.connect")); buttonList.add(btnConnect); if(chkAnonymous.isChecked()) { txtUsername.setEnabled(false); txtPassword.setEnabled(false); btnOAuthHelp.enabled = false; } } @Override public void actionPerformed(GuiButton button) { if(button == btnOAuthHelp) { Minecraft.getMinecraft().displayGuiScreen(new GuiConfirmOpenLink(this, Globals.TWITCH_OAUTH, 0, true)); } else if(button == btnConnect) { if(chkAnonymous.isChecked()) { config.setNick("%ANONYMOUS%"); AuthManager.putServerPassword(config.getIdentifier(), null); config.getGeneralSettings().readOnly.set(true); config.getBotSettings().messageFormat.set("Twitch"); config.getBotSettings().relayIRCJoinLeave.set(false); btnConnect.enabled = false; ConfigurationHandler.addServerConfig(config); ConnectionManager.connectTo(config); } else { config.setNick(txtUsername.getText()); AuthManager.putServerPassword(config.getIdentifier(), txtPassword.getText()); config.getGeneralSettings().readOnly.set(false); config.getBotSettings().messageFormat.set("Twitch"); config.getBotSettings().relayIRCJoinLeave.set(false); if(!config.getNick().isEmpty() && !txtPassword.getText().isEmpty()) { config.getOrCreateChannelConfig("#" + config.getNick()); btnConnect.enabled = false; ConfigurationHandler.addServerConfig(config); ConnectionManager.connectTo(config); } } ConfigurationHandler.saveServers(); } else if(button == chkAnonymous) { if(chkAnonymous.isChecked()) { txtUsername.setEnabled(false); txtPassword.setEnabled(false); btnOAuthHelp.enabled = false; } else { txtUsername.setEnabled(true); txtPassword.setEnabled(true); btnOAuthHelp.enabled = true; } } } @SubscribeEvent public void onSuccess(IRCConnectEvent event) { if(event.connection.isTwitch()) { gotoPrevious(); } } @SubscribeEvent public void onFailure(IRCConnectionFailedEvent event) { if(event.connection.isTwitch()) { btnConnect.enabled = true; } } @SubscribeEvent public void onWrongPassword(IRCErrorEvent event) { if(event.numeric == IRCReplyCodes.ERR_PASSWDMISMATCH && event.connection.isTwitch()) { btnConnect.enabled = true; } } @Override public void confirmClicked(boolean result, int id) { if(result) { Utils.openWebpage(Globals.TWITCH_OAUTH); } Minecraft.getMinecraft().displayGuiScreen(this); } @Override public void onGuiClosed() { super.onGuiClosed(); Keyboard.enableRepeatEvents(false); MinecraftForge.EVENT_BUS.unregister(this); } @Override public void drawScreen(int mouseX, int mouseY, float par3) { drawLightBackground(menuX, menuY, menuWidth, menuHeight); mc.renderEngine.bindTexture(twitchLogo); EiraGui.drawTexturedRect(menuX + menuWidth / 2 - 64, menuY + 10, 128, 43, 0, 0, 128, 43, zLevel, 128, 43); super.drawScreen(mouseX, mouseY, par3); } }