001 package net.minecraft.client.gui; 002 003 import cpw.mods.fml.relauncher.Side; 004 import cpw.mods.fml.relauncher.SideOnly; 005 import java.io.BufferedReader; 006 import java.io.InputStreamReader; 007 import java.nio.charset.Charset; 008 import java.util.ArrayList; 009 import java.util.List; 010 import java.util.Random; 011 import net.minecraft.client.renderer.Tessellator; 012 import net.minecraft.network.packet.Packet205ClientCommand; 013 import org.lwjgl.opengl.GL11; 014 015 @SideOnly(Side.CLIENT) 016 public class GuiWinGame extends GuiScreen 017 { 018 /** Counts the number of screen updates. */ 019 private int updateCounter = 0; 020 021 /** List of lines on the ending poem and credits. */ 022 private List lines; 023 private int field_73989_c = 0; 024 private float field_73987_d = 0.5F; 025 026 /** 027 * Called from the main game loop to update the screen. 028 */ 029 public void updateScreen() 030 { 031 ++this.updateCounter; 032 float var1 = (float)(this.field_73989_c + this.height + this.height + 24) / this.field_73987_d; 033 034 if ((float)this.updateCounter > var1) 035 { 036 this.respawnPlayer(); 037 } 038 } 039 040 /** 041 * Fired when a key is typed. This is the equivalent of KeyListener.keyTyped(KeyEvent e). 042 */ 043 protected void keyTyped(char par1, int par2) 044 { 045 if (par2 == 1) 046 { 047 this.respawnPlayer(); 048 } 049 } 050 051 /** 052 * Respawns the player. 053 */ 054 private void respawnPlayer() 055 { 056 this.mc.thePlayer.sendQueue.addToSendQueue(new Packet205ClientCommand(1)); 057 this.mc.displayGuiScreen((GuiScreen)null); 058 } 059 060 /** 061 * Returns true if this GUI should pause the game when it is displayed in single-player 062 */ 063 public boolean doesGuiPauseGame() 064 { 065 return true; 066 } 067 068 /** 069 * Adds the buttons (and other controls) to the screen in question. 070 */ 071 public void initGui() 072 { 073 if (this.lines == null) 074 { 075 this.lines = new ArrayList(); 076 077 try 078 { 079 String var1 = ""; 080 String var2 = "\u00a7f\u00a7k\u00a7a\u00a7b"; 081 short var3 = 274; 082 BufferedReader var4 = new BufferedReader(new InputStreamReader(GuiWinGame.class.getResourceAsStream("/title/win.txt"), Charset.forName("UTF-8"))); 083 Random var5 = new Random(8124371L); 084 int var6; 085 086 while ((var1 = var4.readLine()) != null) 087 { 088 String var7; 089 String var8; 090 091 for (var1 = var1.replaceAll("PLAYERNAME", this.mc.session.username); var1.contains(var2); var1 = var7 + "\u00a7f\u00a7k" + "XXXXXXXX".substring(0, var5.nextInt(4) + 3) + var8) 092 { 093 var6 = var1.indexOf(var2); 094 var7 = var1.substring(0, var6); 095 var8 = var1.substring(var6 + var2.length()); 096 } 097 098 this.lines.addAll(this.mc.fontRenderer.listFormattedStringToWidth(var1, var3)); 099 this.lines.add(""); 100 } 101 102 for (var6 = 0; var6 < 8; ++var6) 103 { 104 this.lines.add(""); 105 } 106 107 var4 = new BufferedReader(new InputStreamReader(GuiWinGame.class.getResourceAsStream("/title/credits.txt"), Charset.forName("UTF-8"))); 108 109 while ((var1 = var4.readLine()) != null) 110 { 111 var1 = var1.replaceAll("PLAYERNAME", this.mc.session.username); 112 var1 = var1.replaceAll("\t", " "); 113 this.lines.addAll(this.mc.fontRenderer.listFormattedStringToWidth(var1, var3)); 114 this.lines.add(""); 115 } 116 117 this.field_73989_c = this.lines.size() * 12; 118 } 119 catch (Exception var9) 120 { 121 var9.printStackTrace(); 122 } 123 } 124 } 125 126 private void func_73986_b(int par1, int par2, float par3) 127 { 128 Tessellator var4 = Tessellator.instance; 129 GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("%blur%/gui/background.png")); 130 var4.startDrawingQuads(); 131 var4.setColorRGBA_F(1.0F, 1.0F, 1.0F, 1.0F); 132 int var5 = this.width; 133 float var6 = 0.0F - ((float)this.updateCounter + par3) * 0.5F * this.field_73987_d; 134 float var7 = (float)this.height - ((float)this.updateCounter + par3) * 0.5F * this.field_73987_d; 135 float var8 = 0.015625F; 136 float var9 = ((float)this.updateCounter + par3 - 0.0F) * 0.02F; 137 float var10 = (float)(this.field_73989_c + this.height + this.height + 24) / this.field_73987_d; 138 float var11 = (var10 - 20.0F - ((float)this.updateCounter + par3)) * 0.005F; 139 140 if (var11 < var9) 141 { 142 var9 = var11; 143 } 144 145 if (var9 > 1.0F) 146 { 147 var9 = 1.0F; 148 } 149 150 var9 *= var9; 151 var9 = var9 * 96.0F / 255.0F; 152 var4.setColorOpaque_F(var9, var9, var9); 153 var4.addVertexWithUV(0.0D, (double)this.height, (double)this.zLevel, 0.0D, (double)(var6 * var8)); 154 var4.addVertexWithUV((double)var5, (double)this.height, (double)this.zLevel, (double)((float)var5 * var8), (double)(var6 * var8)); 155 var4.addVertexWithUV((double)var5, 0.0D, (double)this.zLevel, (double)((float)var5 * var8), (double)(var7 * var8)); 156 var4.addVertexWithUV(0.0D, 0.0D, (double)this.zLevel, 0.0D, (double)(var7 * var8)); 157 var4.draw(); 158 } 159 160 /** 161 * Draws the screen and all the components in it. 162 */ 163 public void drawScreen(int par1, int par2, float par3) 164 { 165 this.func_73986_b(par1, par2, par3); 166 Tessellator var4 = Tessellator.instance; 167 short var5 = 274; 168 int var6 = this.width / 2 - var5 / 2; 169 int var7 = this.height + 50; 170 float var8 = -((float)this.updateCounter + par3) * this.field_73987_d; 171 GL11.glPushMatrix(); 172 GL11.glTranslatef(0.0F, var8, 0.0F); 173 GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/title/mclogo.png")); 174 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); 175 this.drawTexturedModalRect(var6, var7, 0, 0, 155, 44); 176 this.drawTexturedModalRect(var6 + 155, var7, 0, 45, 155, 44); 177 var4.setColorOpaque_I(16777215); 178 int var9 = var7 + 200; 179 int var10; 180 181 for (var10 = 0; var10 < this.lines.size(); ++var10) 182 { 183 if (var10 == this.lines.size() - 1) 184 { 185 float var11 = (float)var9 + var8 - (float)(this.height / 2 - 6); 186 187 if (var11 < 0.0F) 188 { 189 GL11.glTranslatef(0.0F, -var11, 0.0F); 190 } 191 } 192 193 if ((float)var9 + var8 + 12.0F + 8.0F > 0.0F && (float)var9 + var8 < (float)this.height) 194 { 195 String var12 = (String)this.lines.get(var10); 196 197 if (var12.startsWith("[C]")) 198 { 199 this.fontRenderer.drawStringWithShadow(var12.substring(3), var6 + (var5 - this.fontRenderer.getStringWidth(var12.substring(3))) / 2, var9, 16777215); 200 } 201 else 202 { 203 this.fontRenderer.fontRandom.setSeed((long)var10 * 4238972211L + (long)(this.updateCounter / 4)); 204 this.fontRenderer.drawStringWithShadow(var12, var6, var9, 16777215); 205 } 206 } 207 208 var9 += 12; 209 } 210 211 GL11.glPopMatrix(); 212 GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("%blur%/misc/vignette.png")); 213 GL11.glEnable(GL11.GL_BLEND); 214 GL11.glBlendFunc(GL11.GL_ZERO, GL11.GL_ONE_MINUS_SRC_COLOR); 215 var4.startDrawingQuads(); 216 var4.setColorRGBA_F(1.0F, 1.0F, 1.0F, 1.0F); 217 var10 = this.width; 218 int var13 = this.height; 219 var4.addVertexWithUV(0.0D, (double)var13, (double)this.zLevel, 0.0D, 1.0D); 220 var4.addVertexWithUV((double)var10, (double)var13, (double)this.zLevel, 1.0D, 1.0D); 221 var4.addVertexWithUV((double)var10, 0.0D, (double)this.zLevel, 1.0D, 0.0D); 222 var4.addVertexWithUV(0.0D, 0.0D, (double)this.zLevel, 0.0D, 0.0D); 223 var4.draw(); 224 GL11.glDisable(GL11.GL_BLEND); 225 super.drawScreen(par1, par2, par3); 226 } 227 }