diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/HDSkinManager.java b/src/hdskins/java/com/voxelmodpack/hdskins/HDSkinManager.java index 28a009f7..af557221 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/HDSkinManager.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/HDSkinManager.java @@ -27,8 +27,6 @@ import net.minecraft.util.ResourceLocation; import org.apache.commons.codec.binary.Base64; import org.apache.commons.io.FileUtils; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.File; @@ -39,6 +37,8 @@ import java.util.Optional; import java.util.UUID; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; public final class HDSkinManager implements IResourceManagerReloadListener { @@ -201,13 +201,27 @@ public final class HDSkinManager implements IResourceManagerReloadListener { this.enabled = enabled; } - public static PreviewTexture getPreviewTexture(ResourceLocation skinResource, GameProfile profile, Type type, ResourceLocation def) { + public static PreviewTexture getPreviewTexture(ResourceLocation skinResource, GameProfile profile, Type type, ResourceLocation def, @Nullable final SkinAvailableCallback callback) { TextureManager textureManager = Minecraft.getMinecraft().getTextureManager(); String url = INSTANCE.getCustomTextureURLForId(type, UUIDTypeAdapter.fromUUID(profile.getId()), true); - ITextureObject skinTexture = new PreviewTexture(url, def, type == Type.SKIN ? new ImageBufferDownloadHD() : null); + IImageBuffer buffer = new ImageBufferDownloadHD(); + PreviewTexture skinTexture = new PreviewTexture(url, def, type == Type.SKIN ? new IImageBuffer() { + @Override + @Nullable + public BufferedImage parseUserSkin(BufferedImage image) { + return buffer.parseUserSkin(image); + } + + @Override + public void skinAvailable() { + if (callback != null) { + callback.skinAvailable(type, skinResource, new MinecraftProfileTexture(url, Maps.newHashMap())); + } + } + } : null); textureManager.loadTexture(skinResource, skinTexture); - return (PreviewTexture) skinTexture; + return skinTexture; } diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/gui/EntityPlayerModel.java b/src/hdskins/java/com/voxelmodpack/hdskins/gui/EntityPlayerModel.java index 9ae7c8cc..f793c605 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/gui/EntityPlayerModel.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/gui/EntityPlayerModel.java @@ -12,17 +12,18 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.texture.DynamicTexture; import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.client.resources.DefaultPlayerSkin; +import net.minecraft.client.resources.SkinManager; import net.minecraft.entity.EntityLivingBase; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumHandSide; import net.minecraft.util.ResourceLocation; -import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Map; +import javax.imageio.ImageIO; @SuppressWarnings("EntityConstructor") public class EntityPlayerModel extends EntityLivingBase { @@ -64,7 +65,7 @@ public class EntityPlayerModel extends EntityLivingBase { this.textureManager.deleteTexture(this.remoteElytraResource); } - public void reloadRemoteSkin() { + public void reloadRemoteSkin(SkinManager.SkinAvailableCallback listener) { this.remoteSkin = true; if (this.remoteSkinTexture != null) { this.textureManager.deleteTexture(this.remoteSkinResource); @@ -73,8 +74,8 @@ public class EntityPlayerModel extends EntityLivingBase { this.textureManager.deleteTexture(this.remoteElytraResource); } - this.remoteSkinTexture = HDSkinManager.getPreviewTexture(this.remoteSkinResource, this.profile, Type.SKIN, NO_SKIN); - this.remoteElytraTexture = HDSkinManager.getPreviewTexture(this.remoteElytraResource, this.profile, Type.ELYTRA, NO_ELYTRA); + this.remoteSkinTexture = HDSkinManager.getPreviewTexture(this.remoteSkinResource, this.profile, Type.SKIN, NO_SKIN, listener); + this.remoteElytraTexture = HDSkinManager.getPreviewTexture(this.remoteElytraResource, this.profile, Type.ELYTRA, NO_ELYTRA, null); } @@ -128,11 +129,6 @@ public class EntityPlayerModel extends EntityLivingBase { return !this.remoteSkin && this.hasLocalTexture; } -// @Override TODO - public float getBrightness(float par1) { - return 1.0F; - } - public boolean isTextureSetupComplete() { return (this.remoteSkin && this.remoteSkinTexture != null) && this.remoteSkinTexture.isTextureUploaded(); } @@ -189,12 +185,6 @@ public class EntityPlayerModel extends EntityLivingBase { return Minecraft.getMinecraft().gameSettings.mainHand; } -// @Override TODO - public int getBrightnessForRender(float partialTicks) { - return 0xf000f0; - } - - @Override public Iterable getArmorInventoryList() { return armors.values(); diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/gui/GuiSkins.java b/src/hdskins/java/com/voxelmodpack/hdskins/gui/GuiSkins.java index c9da726f..894b3404 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/gui/GuiSkins.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/gui/GuiSkins.java @@ -72,7 +72,7 @@ public class GuiSkins extends GuiScreen { protected EntityPlayerModel localPlayer; protected EntityPlayerModel remotePlayer; - protected DoubleBuffer doubleBuffer; + private DoubleBuffer doubleBuffer; private String uploadError; private volatile String skinMessage = I18n.format("hdskins.choose"); @@ -87,7 +87,6 @@ public class GuiSkins extends GuiScreen { private final Object skinLock = new Object(); private File pendingSkinFile; private File selectedSkin; - private BufferedImage pendingSkinImage; private float uploadOpacity = 0.0F; private float lastPartialTick; private JFrame fileDrop; @@ -128,8 +127,7 @@ public class GuiSkins extends GuiScreen { this.localPlayer.setLocalTexture(this.pendingSkinFile, textureType); this.selectedSkin = this.pendingSkinFile; this.pendingSkinFile = null; - this.onSetLocalSkin(this.pendingSkinImage, textureType); - this.pendingSkinImage = null; + this.onSetLocalSkin(textureType); this.btnUpload.enabled = true; } } @@ -139,7 +137,6 @@ public class GuiSkins extends GuiScreen { this.fetchingSkin = true; this.btnClear.enabled = false; this.reloadRemoteSkin(); - this.onSetRemoteSkin(textureType); } if (this.throttledByMojang) { @@ -156,15 +153,15 @@ public class GuiSkins extends GuiScreen { } - protected void onSetRemoteSkin(MinecraftProfileTexture.Type type) { + protected void onSetRemoteSkin(MinecraftProfileTexture.Type typeIn, ResourceLocation location, MinecraftProfileTexture profileTexture) { } - protected void onSetLocalSkin(BufferedImage skin, MinecraftProfileTexture.Type type) { + protected void onSetLocalSkin(MinecraftProfileTexture.Type type) { } private void reloadRemoteSkin() { try { - this.remotePlayer.reloadRemoteSkin(); + this.remotePlayer.reloadRemoteSkin(this::onSetRemoteSkin); } catch (Exception var2) { var2.printStackTrace(); this.throttledByMojang = true; @@ -192,9 +189,6 @@ public class GuiSkins extends GuiScreen { (this.textureType == SKIN ? this.btnModeSkin : this.btnModeElytra).enabled = false; } - /** - * @wbp.parser.entryPoint - */ private void enableDnd() { if (fileDrop != null) { fileDrop.setVisible(true); @@ -227,7 +221,7 @@ public class GuiSkins extends GuiScreen { } } - public void initPanoramaRenderer() { + private void initPanoramaRenderer() { this.viewportTexture = this.mc.getTextureManager().getDynamicTextureLocation("skinpanorama", new DynamicTexture(256, 256)); } @@ -273,7 +267,6 @@ public class GuiSkins extends GuiScreen { && chosenImage.getHeight() <= MAX_SKIN_DIMENSION) { synchronized (this.skinLock) { this.pendingSkinFile = skinFile; - this.pendingSkinImage = chosenImage; } } else { this.skinMessage = I18n.format("hdskins.error.invalid"); @@ -362,7 +355,7 @@ public class GuiSkins extends GuiScreen { } } - public void setupCubemapCamera() { + private void setupCubemapCamera() { matrixMode(GL11.GL_PROJECTION); pushMatrix(); loadIdentity(); @@ -372,7 +365,7 @@ public class GuiSkins extends GuiScreen { loadIdentity(); } - public void revertPanoramaMatrix() { + private void revertPanoramaMatrix() { matrixMode(GL11.GL_PROJECTION); popMatrix(); matrixMode(GL11.GL_MODELVIEW); @@ -471,7 +464,7 @@ public class GuiSkins extends GuiScreen { disableBlend(); } - public void renderPanorama(float partialTicks) { + private void renderPanorama(float partialTicks) { viewport(0, 0, 256, 256); this.renderCubeMapTexture(partialTicks); disableTexture2D(); @@ -523,7 +516,7 @@ public class GuiSkins extends GuiScreen { super.drawScreen(mouseX, mouseY, partialTick); popAttrib(); - this.enableClipping(30, bottom); + this.enableClipping(bottom); float yPos = this.height * 0.75F; float xPos1 = this.width * 0.25F; @@ -613,13 +606,14 @@ public class GuiSkins extends GuiScreen { Gui.drawRect(0, 0, this.width, this.height, 0xB0000000); this.drawCenteredString(this.fontRenderer, I18n.format("hdskins.failed"), this.width / 2, this.height / 2 - 10, 0xFFFFFF55); this.drawCenteredString(this.fontRenderer, this.uploadError, this.width / 2, this.height / 2 + 2, 0xFFFF5555); + LiteLoaderLogger.warning("Upload Failed: {}", this.uploadError); } depthMask(true); enableDepth(); } - public void renderPlayerModel(EntityPlayerModel thePlayer, float xPosition, float yPosition, float scale, float mouseY, float partialTick) { + private void renderPlayerModel(EntityPlayerModel thePlayer, float xPosition, float yPosition, float scale, float mouseY, float partialTick) { enableColorMaterial(); pushMatrix(); translate(xPosition, yPosition, 300.0F); @@ -645,13 +639,13 @@ public class GuiSkins extends GuiScreen { disableColorMaterial(); } - protected final void enableClipping(int yTop, int yBottom) { + private void enableClipping(int yBottom) { if (this.doubleBuffer == null) { this.doubleBuffer = BufferUtils.createByteBuffer(32).asDoubleBuffer(); } this.doubleBuffer.clear(); - this.doubleBuffer.put(0.0D).put(1.0D).put(0.0D).put((-yTop)).flip(); + this.doubleBuffer.put(0.0D).put(1.0D).put(0.0D).put((-30)).flip(); GL11.glClipPlane(GL11.GL_CLIP_PLANE0, this.doubleBuffer); this.doubleBuffer.clear(); @@ -662,12 +656,12 @@ public class GuiSkins extends GuiScreen { GL11.glEnable(GL11.GL_CLIP_PLANE1); } - protected final void disableClipping() { + private void disableClipping() { GL11.glDisable(GL11.GL_CLIP_PLANE1); GL11.glDisable(GL11.GL_CLIP_PLANE0); } - public static boolean isPowerOfTwo(int number) { + private static boolean isPowerOfTwo(int number) { return number != 0 && (number & number - 1) == 0; } diff --git a/src/main/java/com/minelittlepony/hdskins/gui/GuiSkinsMineLP.java b/src/main/java/com/minelittlepony/hdskins/gui/GuiSkinsMineLP.java index c9b81071..ad052db1 100644 --- a/src/main/java/com/minelittlepony/hdskins/gui/GuiSkinsMineLP.java +++ b/src/main/java/com/minelittlepony/hdskins/gui/GuiSkinsMineLP.java @@ -6,8 +6,7 @@ import com.mojang.authlib.GameProfile; import com.mojang.authlib.minecraft.MinecraftProfileTexture; import com.voxelmodpack.hdskins.gui.EntityPlayerModel; import com.voxelmodpack.hdskins.gui.GuiSkins; - -import java.awt.image.BufferedImage; +import net.minecraft.util.ResourceLocation; public class GuiSkinsMineLP extends GuiSkins { @@ -23,15 +22,19 @@ public class GuiSkinsMineLP extends GuiSkins { } @Override - protected void onSetLocalSkin(BufferedImage skin, MinecraftProfileTexture.Type type) { + protected void onSetLocalSkin(MinecraftProfileTexture.Type type) { MineLittlePony.logger.debug("Invalidating old local skin, checking updated local skin"); - ponyManager.removePony(this.localPlayer.getSkinTexture()); + if (type == MinecraftProfileTexture.Type.SKIN) { + ponyManager.removePony(this.localPlayer.getSkinTexture()); + } } @Override - protected void onSetRemoteSkin(MinecraftProfileTexture.Type type) { + protected void onSetRemoteSkin(MinecraftProfileTexture.Type type, ResourceLocation location, MinecraftProfileTexture profileTexture) { MineLittlePony.logger.debug("Invalidating old remote skin, checking updated remote skin"); - ponyManager.removePony(this.remotePlayer.getSkinTexture()); + if (type == MinecraftProfileTexture.Type.SKIN) { + ponyManager.removePony(location); + } } @Override