diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/HDSkinManager.java b/src/hdskins/java/com/voxelmodpack/hdskins/HDSkinManager.java index 14be5fc0..738c86ed 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/HDSkinManager.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/HDSkinManager.java @@ -8,10 +8,8 @@ import com.google.common.collect.Maps; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.mojang.authlib.GameProfile; -import com.mojang.authlib.minecraft.InsecureTextureException; import com.mojang.authlib.minecraft.MinecraftProfileTexture; import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type; -import com.mojang.authlib.minecraft.MinecraftSessionService; import com.mojang.authlib.properties.Property; import com.mojang.util.UUIDTypeAdapter; import com.mumfrey.liteloader.core.LiteLoader; @@ -31,7 +29,7 @@ import org.apache.commons.io.FileUtils; import javax.annotation.Nonnull; import javax.annotation.Nullable; -import java.awt.*; +import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; @@ -114,7 +112,7 @@ public final class HDSkinManager implements IResourceManagerReloadListener { } private void loadTexture(GameProfile profile, final Type type, final SkinAvailableCallback callback) { - if (profile != null && profile.getId() != null) { + if (profile.getId() != null) { Map data = loadProfileData(profile); final MinecraftProfileTexture texture = data.get(type); if (texture == null) { @@ -143,9 +141,7 @@ public final class HDSkinManager implements IResourceManagerReloadListener { if (imagebufferdownload != null) { imagebufferdownload.skinAvailable(); } - if (callback != null) { - callback.skinAvailable(type, skin, texture); - } + callback.skinAvailable(type, skin, texture); } }); @@ -179,26 +175,6 @@ public final class HDSkinManager implements IResourceManagerReloadListener { }); } - private static Map getTexturesForProfile(GameProfile profile) { - LiteLoaderLogger.debug("Get textures for " + profile.getId()); - - Minecraft minecraft = Minecraft.getMinecraft(); - MinecraftSessionService sessionService = minecraft.getSessionService(); - Map textures; - - try { - textures = sessionService.getTextures(profile, true); - } catch (InsecureTextureException var6) { - textures = sessionService.getTextures(profile, false); - } - - if ((textures == null || textures.isEmpty()) - && profile.getId().equals(minecraft.getSession().getProfile().getId())) { - textures = sessionService.getTextures(sessionService.fillProfileProperties(profile, false), false); - } - return textures; - } - public void setSkinUrl(String skinUrl) { this.skinUrl = skinUrl; } diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/ISkinModifier.java b/src/hdskins/java/com/voxelmodpack/hdskins/ISkinModifier.java index 4fbb6302..a29d1d4b 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/ISkinModifier.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/ISkinModifier.java @@ -3,6 +3,7 @@ package com.voxelmodpack.hdskins; import java.awt.Graphics; import java.awt.image.BufferedImage; +@FunctionalInterface public interface ISkinModifier { void convertSkin(BufferedImage skin, Graphics dest); diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/ImageBufferDownloadHD.java b/src/hdskins/java/com/voxelmodpack/hdskins/ImageBufferDownloadHD.java index adcc9d9b..a8257be3 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/ImageBufferDownloadHD.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/ImageBufferDownloadHD.java @@ -2,6 +2,7 @@ package com.voxelmodpack.hdskins; import net.minecraft.client.renderer.IImageBuffer; +import javax.annotation.Nullable; import java.awt.Graphics; import java.awt.image.BufferedImage; @@ -12,8 +13,9 @@ public class ImageBufferDownloadHD implements IImageBuffer { private BufferedImage image; @Override - @SuppressWarnings("SuspiciousNameCombination") - public BufferedImage parseUserSkin(BufferedImage downloadedImage) { + @Nullable + @SuppressWarnings({"SuspiciousNameCombination", "NullableProblems"}) + public BufferedImage parseUserSkin(@Nullable BufferedImage downloadedImage) { if (downloadedImage == null) { return null; } diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/PreviewTexture.java b/src/hdskins/java/com/voxelmodpack/hdskins/PreviewTexture.java index ef520ed1..e2359c26 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/PreviewTexture.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/PreviewTexture.java @@ -4,11 +4,13 @@ import net.minecraft.client.renderer.IImageBuffer; import net.minecraft.client.renderer.ThreadDownloadImageData; import net.minecraft.util.ResourceLocation; +import javax.annotation.Nullable; + public class PreviewTexture extends ThreadDownloadImageData { private boolean uploaded; - public PreviewTexture(String url, ResourceLocation fallbackTexture, IImageBuffer imageBuffer) { + public PreviewTexture(String url, ResourceLocation fallbackTexture, @Nullable IImageBuffer imageBuffer) { super(null, url, fallbackTexture, imageBuffer); } diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/gui/FileDropListener.java b/src/hdskins/java/com/voxelmodpack/hdskins/gui/FileDropListener.java index bcb11925..0aac1ef4 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/gui/FileDropListener.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/gui/FileDropListener.java @@ -11,6 +11,7 @@ import java.io.File; import java.io.IOException; import java.util.List; +@FunctionalInterface public interface FileDropListener extends DropTargetListener { @Override diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/gui/GuiSkins.java b/src/hdskins/java/com/voxelmodpack/hdskins/gui/GuiSkins.java index 69b89d10..1d071cf6 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/gui/GuiSkins.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/gui/GuiSkins.java @@ -51,7 +51,7 @@ import static com.mojang.authlib.minecraft.MinecraftProfileTexture.Type.ELYTRA; import static com.mojang.authlib.minecraft.MinecraftProfileTexture.Type.SKIN; import static net.minecraft.client.renderer.GlStateManager.*; -public class GuiSkins extends GuiScreen implements IUploadCompleteCallback, IOpenFileCallback { +public class GuiSkins extends GuiScreen { private static final int MAX_SKIN_DIMENSION = 8192; private static final String skinServerId = "7853dfddc358333843ad55a2c7485c4aa0380a51"; private int updateCounter = 0; @@ -242,8 +242,7 @@ public class GuiSkins extends GuiScreen implements IUploadCompleteCallback, IOpe this.remotePlayer.releaseTextures(); } - @Override - public void onFileOpenDialogClosed(JFileChooser fileDialog, int dialogResult) { + private void onFileOpenDialogClosed(JFileChooser fileDialog, int dialogResult) { this.openFileThread = null; this.btnBrowse.enabled = true; if (dialogResult == 0) { @@ -293,7 +292,7 @@ public class GuiSkins extends GuiScreen implements IUploadCompleteCallback, IOpe if (guiButton.id == this.btnBrowse.id) { this.selectedSkin = null; this.localPlayer.releaseTextures(); - this.openFileThread = new ThreadOpenFilePNG(this.mc, I18n.format("hdskins.open.title"), this); + this.openFileThread = new ThreadOpenFilePNG(this.mc, I18n.format("hdskins.open.title"), this::onFileOpenDialogClosed); this.openFileThread.start(); guiButton.enabled = false; } @@ -673,14 +672,14 @@ public class GuiSkins extends GuiScreen implements IUploadCompleteCallback, IOpe public static boolean isPowerOfTwo(int number) { return number != 0 && (number & number - 1) == 0; } - + private void clearUploadedSkin(Session session) { if (this.registerServerConnection(session, skinServerId)) { Map sourceData = getClearData(session); this.uploadError = null; this.uploadingSkin = true; this.skinUploadMessage = I18n.format("hdskins.request"); - this.threadSkinUpload = new ThreadMultipartPostUpload(HDSkinManager.INSTANCE.getGatewayUrl(), sourceData, this); + this.threadSkinUpload = new ThreadMultipartPostUpload(HDSkinManager.INSTANCE.getGatewayUrl(), sourceData, this::onUploadComplete); this.threadSkinUpload.start(); } } @@ -691,7 +690,7 @@ public class GuiSkins extends GuiScreen implements IUploadCompleteCallback, IOpe this.uploadError = null; this.uploadingSkin = true; this.skinUploadMessage = I18n.format("hdskins.upload"); - this.threadSkinUpload = new ThreadMultipartPostUpload(HDSkinManager.INSTANCE.getGatewayUrl(), sourceData, this); + this.threadSkinUpload = new ThreadMultipartPostUpload(HDSkinManager.INSTANCE.getGatewayUrl(), sourceData, this::onUploadComplete); this.threadSkinUpload.start(); } } @@ -717,8 +716,7 @@ public class GuiSkins extends GuiScreen implements IUploadCompleteCallback, IOpe this.btnUpload.enabled = true; } - @Override - public void onUploadComplete(String response) { + private void onUploadComplete(String response) { LiteLoaderLogger.info("Upload completed with: %s", response); this.uploadingSkin = false; this.threadSkinUpload = null; diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/gui/package-info.java b/src/hdskins/java/com/voxelmodpack/hdskins/gui/package-info.java new file mode 100644 index 00000000..60837fe6 --- /dev/null +++ b/src/hdskins/java/com/voxelmodpack/hdskins/gui/package-info.java @@ -0,0 +1,7 @@ +@MethodsReturnNonnullByDefault +@ParametersAreNonnullByDefault +package com.voxelmodpack.hdskins.gui; + +import mcp.MethodsReturnNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/mixin/MixinSkullRenderer.java b/src/hdskins/java/com/voxelmodpack/hdskins/mixin/MixinSkullRenderer.java index 56fbce66..dda9662c 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/mixin/MixinSkullRenderer.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/mixin/MixinSkullRenderer.java @@ -12,6 +12,7 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +import javax.annotation.Nullable; import java.util.Optional; @Mixin(TileEntitySkullRenderer.class) @@ -24,7 +25,7 @@ public abstract class MixinSkullRenderer extends TileEntitySpecialRenderer skin = HDSkinManager.INSTANCE.getSkinLocation(profile, Type.SKIN, true); if (skin.isPresent()) diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/mixin/package-info.java b/src/hdskins/java/com/voxelmodpack/hdskins/mixin/package-info.java new file mode 100644 index 00000000..e502527b --- /dev/null +++ b/src/hdskins/java/com/voxelmodpack/hdskins/mixin/package-info.java @@ -0,0 +1,7 @@ +@MethodsReturnNonnullByDefault +@ParametersAreNonnullByDefault +package com.voxelmodpack.hdskins.mixin; + +import mcp.MethodsReturnNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/mod/package-info.java b/src/hdskins/java/com/voxelmodpack/hdskins/mod/package-info.java new file mode 100644 index 00000000..71bed627 --- /dev/null +++ b/src/hdskins/java/com/voxelmodpack/hdskins/mod/package-info.java @@ -0,0 +1,7 @@ +@MethodsReturnNonnullByDefault +@ParametersAreNonnullByDefault +package com.voxelmodpack.hdskins.mod; + +import mcp.MethodsReturnNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/package-info.java b/src/hdskins/java/com/voxelmodpack/hdskins/package-info.java new file mode 100644 index 00000000..4e927d8f --- /dev/null +++ b/src/hdskins/java/com/voxelmodpack/hdskins/package-info.java @@ -0,0 +1,7 @@ +@MethodsReturnNonnullByDefault +@ParametersAreNonnullByDefault +package com.voxelmodpack.hdskins; + +import mcp.MethodsReturnNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/resource/package-info.java b/src/hdskins/java/com/voxelmodpack/hdskins/resource/package-info.java new file mode 100644 index 00000000..e3758569 --- /dev/null +++ b/src/hdskins/java/com/voxelmodpack/hdskins/resource/package-info.java @@ -0,0 +1,7 @@ +@MethodsReturnNonnullByDefault +@ParametersAreNonnullByDefault +package com.voxelmodpack.hdskins.resource; + +import mcp.MethodsReturnNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/upload/IUploadCompleteCallback.java b/src/hdskins/java/com/voxelmodpack/hdskins/upload/IUploadCompleteCallback.java index 95e9c546..1dc27514 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/upload/IUploadCompleteCallback.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/upload/IUploadCompleteCallback.java @@ -1,5 +1,6 @@ package com.voxelmodpack.hdskins.upload; +@FunctionalInterface public interface IUploadCompleteCallback { void onUploadComplete(String response); } diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/upload/ThreadMultipartPostUpload.java b/src/hdskins/java/com/voxelmodpack/hdskins/upload/ThreadMultipartPostUpload.java index 38062f0a..e608a0fb 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/upload/ThreadMultipartPostUpload.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/upload/ThreadMultipartPostUpload.java @@ -2,6 +2,7 @@ package com.voxelmodpack.hdskins.upload; import com.google.common.io.Files; +import javax.annotation.Nullable; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.File; @@ -39,7 +40,7 @@ public class ThreadMultipartPostUpload extends Thread { public String response; - public ThreadMultipartPostUpload(String method, String url, Map sourceData, String authorization, IUploadCompleteCallback callback) { + public ThreadMultipartPostUpload(String method, String url, Map sourceData, @Nullable String authorization, IUploadCompleteCallback callback) { this.method = method; this.urlString = url; this.sourceData = sourceData; diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/upload/awt/IOpenFileCallback.java b/src/hdskins/java/com/voxelmodpack/hdskins/upload/awt/IOpenFileCallback.java index 7a0b0795..2f859b6f 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/upload/awt/IOpenFileCallback.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/upload/awt/IOpenFileCallback.java @@ -7,6 +7,7 @@ import javax.swing.JFileChooser; * * @author Adam Mummery-Smith */ +@FunctionalInterface public interface IOpenFileCallback { /** diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/upload/awt/package-info.java b/src/hdskins/java/com/voxelmodpack/hdskins/upload/awt/package-info.java new file mode 100644 index 00000000..c590c3dc --- /dev/null +++ b/src/hdskins/java/com/voxelmodpack/hdskins/upload/awt/package-info.java @@ -0,0 +1,7 @@ +@MethodsReturnNonnullByDefault +@ParametersAreNonnullByDefault +package com.voxelmodpack.hdskins.upload.awt; + +import mcp.MethodsReturnNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/upload/package-info.java b/src/hdskins/java/com/voxelmodpack/hdskins/upload/package-info.java new file mode 100644 index 00000000..188351cf --- /dev/null +++ b/src/hdskins/java/com/voxelmodpack/hdskins/upload/package-info.java @@ -0,0 +1,7 @@ +@MethodsReturnNonnullByDefault +@ParametersAreNonnullByDefault +package com.voxelmodpack.hdskins.upload; + +import mcp.MethodsReturnNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/java/com/minelittlepony/ForgeProxy.java b/src/main/java/com/minelittlepony/ForgeProxy.java index b4e6cb3f..2425c725 100644 --- a/src/main/java/com/minelittlepony/ForgeProxy.java +++ b/src/main/java/com/minelittlepony/ForgeProxy.java @@ -8,11 +8,13 @@ import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; import net.minecraftforge.client.ForgeHooksClient; +import javax.annotation.Nullable; + public class ForgeProxy { private static boolean forgeLoaded = ModUtilities.fmlIsPresent(); - public static String getArmorTexture(Entity entity, ItemStack armor, String def, EntityEquipmentSlot slot, String type) { + public static String getArmorTexture(Entity entity, ItemStack armor, String def, EntityEquipmentSlot slot, @Nullable String type) { if (forgeLoaded) return ForgeHooksClient.getArmorTexture(entity, armor, def, slot, type); return def; diff --git a/src/main/java/com/minelittlepony/PonyConfig.java b/src/main/java/com/minelittlepony/PonyConfig.java index 39a3f159..ade2d0d1 100644 --- a/src/main/java/com/minelittlepony/PonyConfig.java +++ b/src/main/java/com/minelittlepony/PonyConfig.java @@ -36,8 +36,6 @@ public class PonyConfig implements Exposable { } public void setPonyLevel(PonyLevel ponylevel) { - if (ponylevel == null) - ponylevel = PonyLevel.PONIES; this.ponylevel = ponylevel; } } diff --git a/src/main/java/com/minelittlepony/PonyData.java b/src/main/java/com/minelittlepony/PonyData.java index cbd91db2..ac566463 100644 --- a/src/main/java/com/minelittlepony/PonyData.java +++ b/src/main/java/com/minelittlepony/PonyData.java @@ -27,10 +27,22 @@ public class PonyData implements IPonyData { .build(); private PonyRace race; - private TailLengths tailSize = TailLengths.FULL; - private PonyGender gender = PonyGender.MARE; - private PonySize size = PonySize.NORMAL; - private int glowColor = 0x4444aa; + private TailLengths tailSize; + private PonyGender gender; + private PonySize size; + private int glowColor; + + public PonyData() { + this(PonyRace.HUMAN, TailLengths.FULL, PonyGender.MARE, PonySize.NORMAL, 0x4444aa); + } + + private PonyData(PonyRace race, TailLengths tailSize, PonyGender gender, PonySize size, int glowColor) { + this.race = race; + this.tailSize = tailSize; + this.gender = gender; + this.size = size; + this.glowColor = glowColor; + } public PonyRace getRace() { return race; @@ -77,28 +89,21 @@ public class PonyData implements IPonyData { } static PonyData parse(BufferedImage image) { - PonyData data = new PonyData(); + int racePx = TriggerPixels.RACE.readColor(image); + PonyRace race = RACE_COLORS.getOrDefault(racePx, PonyRace.HUMAN); - int race = TriggerPixels.RACE.readColor(image); - data.race = RACE_COLORS.get(race); + int tailPx = TriggerPixels.TAIL.readColor(image); + TailLengths tail = TAIL_COLORS.getOrDefault(tailPx, TailLengths.FULL); - int tail = TriggerPixels.TAIL.readColor(image); - if (TAIL_COLORS.containsKey(tail)) - data.tailSize = TAIL_COLORS.get(tail); + int sizePx = TriggerPixels.SIZE.readColor(image); + PonySize size = SIZE_COLORS.getOrDefault(sizePx, PonySize.NORMAL); - int gender = TriggerPixels.GENDER.readColor(image); - if (gender == 0xffffff) - data.gender = PonyGender.STALLION; + int genderPx = TriggerPixels.GENDER.readColor(image); + PonyGender gender = genderPx == 0xffffff ? PonyGender.STALLION : PonyGender.MARE; - int size = TriggerPixels.SIZE.readColor(image); - if (SIZE_COLORS.containsKey(size)) - data.size = SIZE_COLORS.get(size); + int glowColor = TriggerPixels.GLOW.readColor(image, -1); - int color = TriggerPixels.GLOW.readColor(image); - if (color != 0x000000) - data.glowColor = color; - - return data; + return new PonyData(race, tail, gender, size, glowColor); } private enum TriggerPixels { @@ -116,7 +121,11 @@ public class PonyData implements IPonyData { } private int readColor(BufferedImage image) { - return image.getRGB(x, y) & 0xffffff; + return readColor(image, 0xffffff); + } + + private int readColor(BufferedImage image, int mask) { + return image.getRGB(x, y) & mask; } } } diff --git a/src/main/java/com/minelittlepony/PonyRace.java b/src/main/java/com/minelittlepony/PonyRace.java index ae0c9f5a..4c4775bf 100644 --- a/src/main/java/com/minelittlepony/PonyRace.java +++ b/src/main/java/com/minelittlepony/PonyRace.java @@ -1,6 +1,8 @@ package com.minelittlepony; public enum PonyRace { + + HUMAN(false, false), EARTH(false, false), PEGASUS(true, false), UNICORN(false, true), diff --git a/src/main/java/com/minelittlepony/mixin/MixinRenderPlayer.java b/src/main/java/com/minelittlepony/mixin/MixinRenderPlayer.java index fe50a5fe..83330036 100644 --- a/src/main/java/com/minelittlepony/mixin/MixinRenderPlayer.java +++ b/src/main/java/com/minelittlepony/mixin/MixinRenderPlayer.java @@ -2,6 +2,7 @@ package com.minelittlepony.mixin; import com.minelittlepony.MineLittlePony; import com.minelittlepony.Pony; +import com.minelittlepony.PonyRace; import com.minelittlepony.PonySize; import com.minelittlepony.ducks.IRenderPony; import com.minelittlepony.model.PMAPI; @@ -28,6 +29,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import javax.annotation.Nonnull; @Mixin(RenderPlayer.class) public abstract class MixinRenderPlayer extends RenderLivingBase implements IRenderPony { @@ -68,20 +70,18 @@ public abstract class MixinRenderPlayer extends RenderLivingBase Math.PI / 3) + if (angle > Math.PI / 3) { angle = Math.PI / 3; - if (angle < -Math.PI / 3) + } + if (angle < -Math.PI / 3) { angle = -Math.PI / 3; + } this.playerModel.getModel().motionPitch = (float) Math.toDegrees(angle); @@ -214,12 +217,14 @@ public abstract class MixinRenderPlayer extends RenderLivingBase