Gintarus

tab

Aug 21st, 2025
7
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.09 KB | None | 0 0
  1. /* Decompiler 192ms, total 422ms, lines 213 */
  2. package com.gamerforea.tabmod.client.gui;
  3.  
  4. import com.gamerforea.tabmod.TabMod;
  5. import com.gamerforea.tabmod.util.PlayerData;
  6. import com.google.common.base.Function;
  7. import com.google.common.base.Strings;
  8. import com.google.common.collect.ComparisonChain;
  9. import com.google.common.collect.Lists;
  10. import com.google.common.collect.Ordering;
  11. import cpw.mods.fml.relauncher.Side;
  12. import cpw.mods.fml.relauncher.SideOnly;
  13. import java.util.Comparator;
  14. import java.util.Iterator;
  15. import java.util.List;
  16. import net.minecraft.client.Minecraft;
  17. import net.minecraft.client.entity.AbstractClientPlayer;
  18. import net.minecraft.client.gui.Gui;
  19. import net.minecraft.client.gui.GuiPlayerInfo;
  20. import net.minecraft.client.network.NetHandlerPlayClient;
  21. import net.minecraft.client.renderer.OpenGlHelper;
  22. import net.minecraft.entity.player.EntityPlayer;
  23. import net.minecraft.scoreboard.Score;
  24. import net.minecraft.scoreboard.ScoreObjective;
  25. import net.minecraft.scoreboard.ScorePlayerTeam;
  26. import net.minecraft.util.EnumChatFormatting;
  27. import net.minecraft.util.ResourceLocation;
  28. import org.lwjgl.opengl.GL11;
  29.  
  30. @SideOnly(Side.CLIENT)
  31. public final class GuiPlayerTabOverlay extends Gui {
  32. private static final boolean FORCE_DRAW_HEADS = true;
  33. private static final Ordering<GuiPlayerTabOverlay.ExtendedPlayerInfo> ENTRY_ORDERING = Ordering.from(new GuiPlayerTabOverlay.PlayerComparator());
  34. private final Minecraft mc = Minecraft.func_71410_x();
  35.  
  36. public void renderPlayerlist(int width) {
  37. ScoreObjective scoreObjective = this.mc.field_71441_e.func_96441_U().func_96539_a(0);
  38. NetHandlerPlayClient handler = this.mc.field_71439_g.field_71174_a;
  39. List<GuiPlayerTabOverlay.ExtendedPlayerInfo> list = ENTRY_ORDERING.sortedCopy(Lists.transform(handler.field_147303_b, new Function<GuiPlayerInfo, GuiPlayerTabOverlay.ExtendedPlayerInfo>() {
  40. public GuiPlayerTabOverlay.ExtendedPlayerInfo apply(GuiPlayerInfo playerInfo) {
  41. return GuiPlayerTabOverlay.this.new ExtendedPlayerInfo(playerInfo);
  42. }
  43.  
  44. // $FF: synthetic method
  45. // $FF: bridge method
  46. public Object apply(Object var1) {
  47. return this.apply((GuiPlayerInfo)var1);
  48. }
  49. }));
  50. int maxPlayers = Math.min(80, Math.min(list.size(), handler.field_147304_c));
  51. if (list.size() > maxPlayers) {
  52. list = list.subList(0, maxPlayers);
  53. }
  54.  
  55. int maxNameWidth = 0;
  56. int maxScoreWidth = 0;
  57. Iterator var8 = list.iterator();
  58.  
  59. int columnWidth;
  60. while(var8.hasNext()) {
  61. GuiPlayerTabOverlay.ExtendedPlayerInfo playerInfo = (GuiPlayerTabOverlay.ExtendedPlayerInfo)var8.next();
  62. int nameWidth = this.mc.field_71466_p.func_78256_a(playerInfo.getDisplayName());
  63. maxNameWidth = Math.max(maxNameWidth, nameWidth);
  64. if (scoreObjective != null) {
  65. columnWidth = this.mc.field_71466_p.func_78256_a(" " + playerInfo.getScore(scoreObjective).func_96652_c());
  66. maxScoreWidth = Math.max(maxScoreWidth, columnWidth);
  67. }
  68. }
  69.  
  70. int rows = maxPlayers;
  71.  
  72. int columns;
  73. for(columns = 1; rows > 20; rows = (maxPlayers + columns - 1) / columns) {
  74. ++columns;
  75. }
  76.  
  77. boolean drawHeads = true;
  78. columnWidth = Math.min(columns * ((drawHeads ? 9 : 0) + maxNameWidth + maxScoreWidth + 13), width - 50) / columns;
  79. int left = width / 2 - (columnWidth * columns + (columns - 1) * 5) / 2;
  80. int border = 10;
  81. int l1 = columnWidth * columns + (columns - 1) * 5;
  82. func_73734_a(width / 2 - l1 / 2 - 1, border - 1, width / 2 + l1 / 2 + 1, border + rows * 9, Integer.MIN_VALUE);
  83.  
  84. for(int playerIndex = 0; playerIndex < maxPlayers; ++playerIndex) {
  85. int row = playerIndex / rows;
  86. int column = playerIndex % rows;
  87. int x = left + row * columnWidth + row * 5;
  88. int y = border + column * 9;
  89. func_73734_a(x, y, x + columnWidth, y + 8, 553648127);
  90. GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
  91. GL11.glEnable(3008);
  92. GL11.glEnable(3042);
  93. OpenGlHelper.func_148821_a(770, 771, 1, 0);
  94. GuiPlayerTabOverlay.ExtendedPlayerInfo playerInfo = (GuiPlayerTabOverlay.ExtendedPlayerInfo)list.get(playerIndex);
  95. if (drawHeads) {
  96. ResourceLocation locationSkin = this.getLocationSkin(playerInfo);
  97. if (locationSkin != null) {
  98. this.mc.func_110434_K().func_110577_a(locationSkin);
  99. Gui.func_152125_a(x, y, 8.0F, 8.0F, 8, 8, 8, 8, 64.0F, 32.0F);
  100. x += 9;
  101. }
  102. }
  103.  
  104. String displayName = playerInfo.getDisplayName();
  105. this.mc.field_71466_p.func_78261_a(displayName, x, y, -1);
  106. if (scoreObjective != null) {
  107. int k5 = x + maxNameWidth + 1;
  108. int l5 = k5 + maxScoreWidth;
  109. if (l5 - k5 > 5) {
  110. this.drawScoreboardValues(scoreObjective, y, displayName, k5, l5, playerInfo);
  111. }
  112. }
  113.  
  114. this.drawPing(columnWidth, x - (drawHeads ? 9 : 0), y, playerInfo);
  115. }
  116.  
  117. }
  118.  
  119. private void drawPing(int p_175245_1_, int p_175245_2_, int p_175245_3_, GuiPlayerTabOverlay.ExtendedPlayerInfo playerInfo) {
  120. GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
  121. this.mc.func_110434_K().func_110577_a(Gui.field_110324_m);
  122. int responseTime = playerInfo.playerInfo.field_78829_b;
  123. byte index;
  124. if (responseTime < 0) {
  125. index = 5;
  126. } else if (responseTime < 150) {
  127. index = 0;
  128. } else if (responseTime < 300) {
  129. index = 1;
  130. } else if (responseTime < 600) {
  131. index = 2;
  132. } else if (responseTime < 1000) {
  133. index = 3;
  134. } else {
  135. index = 4;
  136. }
  137.  
  138. this.field_73735_i += 100.0F;
  139. this.func_73729_b(p_175245_2_ + p_175245_1_ - 11, p_175245_3_, 0, 176 + index * 8, 10, 8);
  140. this.field_73735_i -= 100.0F;
  141. }
  142.  
  143. private void drawScoreboardValues(ScoreObjective scoreObjective, int value, String name, int p_175247_4_, int p_175247_5_, GuiPlayerTabOverlay.ExtendedPlayerInfo info) {
  144. int points = info.getScore(scoreObjective).func_96652_c();
  145. String s = EnumChatFormatting.YELLOW.toString() + points;
  146. this.mc.field_71466_p.func_78261_a(s, p_175247_5_ - this.mc.field_71466_p.func_78256_a(s), value, 16777215);
  147. }
  148.  
  149. private ResourceLocation getLocationSkin(GuiPlayerTabOverlay.ExtendedPlayerInfo playerInfo) {
  150. if (playerInfo == null) {
  151. return AbstractClientPlayer.field_110314_b;
  152. } else {
  153. String playerName = playerInfo.playerName;
  154. if (playerName.isEmpty()) {
  155. return AbstractClientPlayer.field_110314_b;
  156. } else {
  157. EntityPlayer player = this.mc.field_71441_e.func_72924_a(playerName);
  158. return player instanceof AbstractClientPlayer ? ((AbstractClientPlayer)player).func_110306_p() : playerInfo.playerData.getSkinResource();
  159. }
  160. }
  161. }
  162.  
  163. @SideOnly(Side.CLIENT)
  164. private static final class PlayerComparator implements Comparator<GuiPlayerTabOverlay.ExtendedPlayerInfo> {
  165. private PlayerComparator() {
  166. }
  167.  
  168. public int compare(GuiPlayerTabOverlay.ExtendedPlayerInfo a, GuiPlayerTabOverlay.ExtendedPlayerInfo b) {
  169. return ComparisonChain.start().compare(a.index, b.index).compare(a.playerName, b.playerName).compare(a.playerInfo.field_78831_a, b.playerInfo.field_78831_a).result();
  170. }
  171.  
  172. // $FF: synthetic method
  173. // $FF: bridge method
  174. public int compare(Object var1, Object var2) {
  175. return this.compare((GuiPlayerTabOverlay.ExtendedPlayerInfo)var1, (GuiPlayerTabOverlay.ExtendedPlayerInfo)var2);
  176. }
  177.  
  178. // $FF: synthetic method
  179. PlayerComparator(Object x0) {
  180. this();
  181. }
  182. }
  183.  
  184. @SideOnly(Side.CLIENT)
  185. private final class ExtendedPlayerInfo {
  186. public final GuiPlayerInfo playerInfo;
  187. public final PlayerData playerData;
  188. public final String playerName;
  189. private final int index;
  190. private String displayName;
  191. private Score score;
  192.  
  193. public ExtendedPlayerInfo(GuiPlayerInfo playerInfo) {
  194. this.playerInfo = playerInfo;
  195. this.playerData = (PlayerData)TabMod.instance.playerDataMap.get(playerInfo.field_78831_a);
  196. this.playerName = this.playerData == null ? "" : Strings.nullToEmpty(this.playerData.gameProfile.getName());
  197. this.index = this.playerData == null ? -1 : this.playerData.index;
  198. }
  199.  
  200. public String getDisplayName() {
  201. if (this.displayName != null) {
  202. return this.displayName;
  203. } else {
  204. ScorePlayerTeam team = GuiPlayerTabOverlay.this.mc.field_71441_e.func_96441_U().func_96509_i(this.playerInfo.field_78831_a);
  205. return this.displayName = ScorePlayerTeam.func_96667_a(team, this.playerInfo.field_78831_a);
  206. }
  207. }
  208.  
  209. public Score getScore(ScoreObjective scoreObjective) {
  210. return this.score != null ? this.score : (this.score = scoreObjective.func_96682_a().func_96529_a(this.playerInfo.field_78831_a, scoreObjective));
  211. }
  212. }
Advertisement
Add Comment
Please, Sign In to add comment