ClientReflectionUtils.java 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package me.km.utils;
  2. import java.lang.reflect.Field;
  3. import java.lang.reflect.Method;
  4. import java.util.Map;
  5. import me.km.overrides.ModPlayerRenderer;
  6. import static me.km.utils.ReflectionUtils.getField;
  7. import static me.km.utils.ReflectionUtils.getMethod;
  8. import net.minecraft.client.Minecraft;
  9. import net.minecraft.client.gui.overlay.BossOverlayGui;
  10. import net.minecraft.client.renderer.entity.EntityRenderer;
  11. import net.minecraft.client.renderer.entity.EntityRendererManager;
  12. import net.minecraft.client.renderer.entity.LivingRenderer;
  13. import net.minecraft.client.renderer.entity.PlayerRenderer;
  14. import net.minecraft.entity.Entity;
  15. import net.minecraft.entity.LivingEntity;
  16. import net.minecraftforge.api.distmarker.Dist;
  17. import net.minecraftforge.api.distmarker.OnlyIn;
  18. import org.apache.logging.log4j.LogManager;
  19. @OnlyIn(Dist.CLIENT)
  20. public class ClientReflectionUtils
  21. {
  22. private final static Method CAN_RENDER_NAME = getMethod(EntityRenderer.class, "func_177070_b", Entity.class);
  23. private final static Method RENDER_ENTITY_NAME = getMethod(EntityRenderer.class, "func_188296_a", Entity.class, double.class, double.class, double.class, String.class, double.class);
  24. public static boolean canRenderName(EntityRenderer lr, Entity liv)
  25. {
  26. try
  27. {
  28. return (boolean) CAN_RENDER_NAME.invoke(lr, liv);
  29. }
  30. catch(Exception ex)
  31. {
  32. LogManager.getLogger().warn("canRenderName - " + ex);
  33. return false;
  34. }
  35. }
  36. public static void renderEntityName(LivingRenderer lr, LivingEntity liv, double x, double y, double z, String name, double distanceSq)
  37. {
  38. try
  39. {
  40. RENDER_ENTITY_NAME.invoke(lr, liv, x, y, z, name, distanceSq);
  41. }
  42. catch(Exception ex)
  43. {
  44. LogManager.getLogger().warn("renderEntityName - " + ex);
  45. }
  46. }
  47. private final static Field BOSS_BAR_MAP = getField(BossOverlayGui.class, "field_184060_g");
  48. public static boolean isRenderingBossBar()
  49. {
  50. return !ReflectionUtils.getFieldValue(Map.class, Minecraft.getInstance().ingameGUI.getBossOverlay(), BOSS_BAR_MAP).isEmpty();
  51. }
  52. private final static Field SKIN_MAP = getField(EntityRendererManager.class, "field_178636_l"); // skinMap
  53. private final static Field PLAYER_RENDERER = getField(EntityRendererManager.class, "field_178637_m"); // playerRenderer
  54. public static void updatePlayerRenderer()
  55. {
  56. EntityRendererManager erm = Minecraft.getInstance().getRenderManager();
  57. ModPlayerRenderer normal = new ModPlayerRenderer(erm, false);
  58. ModPlayerRenderer slim = new ModPlayerRenderer(erm, true);
  59. ReflectionUtils.setFieldValue(erm, PLAYER_RENDERER, normal);
  60. Map<String, PlayerRenderer> map =
  61. ReflectionUtils.getFieldValue(Map.class, erm, SKIN_MAP);
  62. map.put("default", normal);
  63. map.put("slim", slim);
  64. }
  65. }