PlayerCapeLoader.java 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package me.km.overrides;
  2. import java.net.HttpURLConnection;
  3. import java.net.URL;
  4. import java.util.HashMap;
  5. import java.util.UUID;
  6. import java.util.function.Consumer;
  7. import net.minecraft.client.Minecraft;
  8. import net.minecraft.client.renderer.texture.DynamicTexture;
  9. import net.minecraft.client.renderer.texture.NativeImage;
  10. import net.minecraft.client.renderer.texture.TextureManager;
  11. import net.minecraft.util.ResourceLocation;
  12. import net.minecraftforge.api.distmarker.Dist;
  13. import net.minecraftforge.api.distmarker.OnlyIn;
  14. import org.apache.logging.log4j.LogManager;
  15. @OnlyIn(Dist.CLIENT)
  16. public class PlayerCapeLoader {
  17. private static class Data {
  18. private ResourceLocation cape;
  19. }
  20. public final static PlayerCapeLoader INSTANCE = new PlayerCapeLoader();
  21. private final HashMap<UUID, Data> skins = new HashMap<>();
  22. private final TextureManager manager = Minecraft.getInstance().getRenderManager().textureManager;
  23. private PlayerCapeLoader() {
  24. }
  25. public ResourceLocation getTexture(UUID uuid) {
  26. Data oldData = skins.get(uuid);
  27. if(oldData != null) {
  28. return oldData.cape;
  29. }
  30. Data newData = new Data();
  31. skins.put(uuid, newData);
  32. downloadCape(uuid, image -> {
  33. newData.cape = manager.getDynamicTextureLocation("cape_" + uuid, new DynamicTexture(image));
  34. });
  35. return null;
  36. }
  37. private void downloadCape(UUID uuid, Consumer<NativeImage> delayed) {
  38. new Thread(() -> {
  39. HttpURLConnection httpurlconnection = null;
  40. try {
  41. httpurlconnection = (HttpURLConnection) (new URL(String.format("http://skins.hammerle.me/cape_%s.png", uuid)))
  42. .openConnection(Minecraft.getInstance().getProxy());
  43. httpurlconnection.setDoInput(true);
  44. httpurlconnection.setDoOutput(false);
  45. httpurlconnection.connect();
  46. int code = httpurlconnection.getResponseCode();
  47. if(code != 200) {
  48. return;
  49. }
  50. NativeImage image = NativeImage.read(httpurlconnection.getInputStream());
  51. Minecraft.getInstance().enqueue(() -> delayed.accept(image));
  52. } catch(Exception ex) {
  53. LogManager.getLogger().warn("Error occurred when downloading skin, however, skin servers seem to be up.");
  54. } finally {
  55. if(httpurlconnection != null) {
  56. httpurlconnection.disconnect();
  57. }
  58. }
  59. }).start();
  60. }
  61. }