Hooks.java 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. package me.ktcm.events;
  2. import java.lang.reflect.Field;
  3. import java.lang.reflect.InvocationTargetException;
  4. import java.lang.reflect.Method;
  5. import net.minecraft.client.Minecraft;
  6. import net.minecraftforge.fml.relauncher.ReflectionHelper;
  7. import net.minecraft.client.gui.FontRenderer;
  8. public class Hooks
  9. {
  10. public static int onColorCodeChosen(char c, boolean shadow)
  11. {
  12. switch(c)
  13. {
  14. case '0': return 0;
  15. case '1': return 1;
  16. case '2': return 2;
  17. case '3': return 3;
  18. case '4': return 4;
  19. case '5': return 5;
  20. case '6': return 6;
  21. case '7': return 7;
  22. case '8': return 8;
  23. case '9': return 9;
  24. case 'a': return 10;
  25. case 'b': return 11;
  26. case 'c': return 12;
  27. case 'd': return 13;
  28. case 'e': return 14;
  29. case 'f': return 15;
  30. case 'k': return 16;
  31. case 'l': return 17;
  32. case 'm': return 18;
  33. case 'n': return 19;
  34. case 'o': return 20;
  35. case 'r': return 21;
  36. case 'A': return 10;
  37. case 'B': return 11;
  38. case 'C': return 12;
  39. case 'D': return 13;
  40. case 'E': return 14;
  41. case 'F': return 15;
  42. case 'K': return 16;
  43. case 'L': return 17;
  44. case 'M': return 18;
  45. case 'N': return 19;
  46. case 'O': return 20;
  47. case 'R': return 21;
  48. // brown
  49. case 'g':
  50. case 'G': setColor(shadow, 0.4f, 0.2f, 0.0f, 0.1f, 0.05f, 0.0f); return 22;
  51. case 'h':
  52. case 'H': setColor(shadow, 0.6f, 0.4f, 0.2f, 0.15f, 0.1f, 0.05f); return 22;
  53. // blue
  54. case 'i':
  55. case 'I': setColor(shadow, 0.0f, 0.2f, 0.4f, 0.0f, 0.05f, 0.1f); return 22;
  56. case 'j':
  57. case 'J': setColor(shadow, 0.0f, 0.4f, 0.6f, 0.0f, 0.1f, 0.15f); return 22;
  58. // green
  59. case 'p':
  60. case 'P': setColor(shadow, 0.4f, 0.6f, 0.0f, 0.1f, 0.15f, 0.0f); return 22;
  61. case 'q':
  62. case 'Q': setColor(shadow, 0.6f, 0.8f, 0.0f, 0.15f, 0.2f, 0.0f); return 22;
  63. // cyan
  64. case 's':
  65. case 'S': setColor(shadow, 0.0f, 0.6f, 1.0f, 0.0f, 0.15f, 0.25f); return 22;
  66. case 't':
  67. case 'T': setColor(shadow, 0.4f, 0.8f, 1.0f, 0.1f, 0.2f, 0.25f); return 22;
  68. // red
  69. case 'u':
  70. case 'U': setColor(shadow, 0.6f, 0.2f, 0.0f, 0.15f, 0.05f, 0.0f); return 22;
  71. case 'v':
  72. case 'V': setColor(shadow, 0.8f, 0.4f, 0.0f, 0.2f, 0.1f, 0.0f); return 22;
  73. // violet
  74. case 'w':
  75. case 'W': setColor(shadow, 0.4f, 0.0f, 0.4f, 0.1f, 0.0f, 0.1f); return 22;
  76. case 'x':
  77. case 'X': setColor(shadow, 0.6f, 0.0f, 0.8f, 0.15f, 0.0f, 0.2f); return 22;
  78. // yellow
  79. case 'y':
  80. case 'Y': setColor(shadow, 0.8f, 0.6f, 0.0f, 0.2f, 0.15f, 0.0f); return 22;
  81. case 'z':
  82. case 'Z': setColor(shadow, 1.0f, 0.8f, 0.0f, 0.25f, 0.2f, 0.0f); return 22;
  83. }
  84. return -1;
  85. }
  86. private static void setColor(boolean shadow, float r, float g, float b, float dr, float dg, float db)
  87. {
  88. if(shadow)
  89. {
  90. setColor(dr, dg, db);
  91. }
  92. else
  93. {
  94. setColor(r, g, b);
  95. }
  96. }
  97. private static Method getMethod(Class c, String name, String oName, Class... classes)
  98. {
  99. try
  100. {
  101. return ReflectionHelper.findMethod(c, name, oName, classes);
  102. }
  103. catch(SecurityException | ReflectionHelper.UnableToFindFieldException ex)
  104. {
  105. System.out.println(name + " - " + oName + " - " + ex);
  106. }
  107. return null;
  108. }
  109. private static Field getField(Class c, String... field)
  110. {
  111. try
  112. {
  113. return ReflectionHelper.findField(c, field);
  114. }
  115. catch(SecurityException | ReflectionHelper.UnableToFindFieldException ex)
  116. {
  117. System.out.println(String.join(" - ", field) + " - " + ex);
  118. }
  119. return null;
  120. }
  121. private final static FontRenderer FONT = Minecraft.getMinecraft().fontRenderer;
  122. // /home/kajetan/.gradle/caches/minecraft/de/oceanlabs/mcp/mcp_snapshot/20171003/1.12.2/srgs/mcp-srg.srg
  123. // FD: net/minecraft/client/gui/FontRenderer/alpha net/minecraft/client/gui/FontRenderer/field_78305_q
  124. private final static Field ALPHA = getField(FontRenderer.class, "field_78305_q", "alpha");
  125. public static float getAlpha()
  126. {
  127. try
  128. {
  129. return ALPHA.getFloat(FONT);
  130. }
  131. catch(SecurityException | IllegalAccessException | IllegalArgumentException ex)
  132. {
  133. return 1;
  134. }
  135. }
  136. private final static Method SET_COLOR = getMethod(FontRenderer.class, "setColor", null, float.class, float.class, float.class, float.class);
  137. public static void setColor(float r, float g, float b)
  138. {
  139. try
  140. {
  141. SET_COLOR.invoke(FONT, r, g, b, getAlpha());
  142. }
  143. catch(IllegalAccessException | IllegalArgumentException | InvocationTargetException ex)
  144. {
  145. ex.printStackTrace();
  146. }
  147. }
  148. }