ClientReflectionUtils.java 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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.PlayerRenderer;
  13. import net.minecraft.entity.Entity;
  14. import net.minecraftforge.api.distmarker.Dist;
  15. import net.minecraftforge.api.distmarker.OnlyIn;
  16. import org.apache.logging.log4j.LogManager;
  17. @OnlyIn(Dist.CLIENT)
  18. public class ClientReflectionUtils
  19. {
  20. private final static Method CAN_RENDER_NAME = getMethod(EntityRenderer.class, "func_177070_b", Entity.class);
  21. public static boolean canRenderName(EntityRenderer lr, Entity liv)
  22. {
  23. try
  24. {
  25. return (boolean) CAN_RENDER_NAME.invoke(lr, liv);
  26. }
  27. catch(Exception ex)
  28. {
  29. LogManager.getLogger().warn("canRenderName - " + ex);
  30. return false;
  31. }
  32. }
  33. private final static Field BOSS_BAR_MAP = getField(BossOverlayGui.class, "field_184060_g");
  34. public static boolean isRenderingBossBar()
  35. {
  36. return !ReflectionUtils.getFieldValue(Map.class, Minecraft.getInstance().ingameGUI.getBossOverlay(), BOSS_BAR_MAP).isEmpty();
  37. }
  38. private final static Field SKIN_MAP = getField(EntityRendererManager.class, "field_178636_l"); // skinMap
  39. private final static Field PLAYER_RENDERER = getField(EntityRendererManager.class, "field_178637_m"); // playerRenderer
  40. public static void updatePlayerRenderer()
  41. {
  42. EntityRendererManager erm = Minecraft.getInstance().getRenderManager();
  43. ModPlayerRenderer normal = new ModPlayerRenderer(erm, false);
  44. ModPlayerRenderer slim = new ModPlayerRenderer(erm, true);
  45. ReflectionUtils.setFieldValue(erm, PLAYER_RENDERER, normal);
  46. Map<String, PlayerRenderer> map =
  47. ReflectionUtils.getFieldValue(Map.class, erm, SKIN_MAP);
  48. map.put("default", normal);
  49. map.put("slim", slim);
  50. }
  51. }