diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/HDSkinManager.java b/src/hdskins/java/com/voxelmodpack/hdskins/HDSkinManager.java index a680f6d9..60165bb3 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/HDSkinManager.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/HDSkinManager.java @@ -9,6 +9,8 @@ import java.util.List; import java.util.Map; import java.util.UUID; +import javax.annotation.Nullable; + import org.apache.commons.codec.binary.Base64; import org.apache.commons.io.FileUtils; @@ -257,6 +259,11 @@ public final class HDSkinManager implements IResourceManagerReloadListener { skinModifiers.add(modifier); } + @Nullable + public ResourceLocation getConvertedSkin(@Nullable ResourceLocation res) { + return resources.getConvertedResource(res); + } + public void convertSkin(BufferedImage image, Graphics dest) { for (ISkinModifier skin : skinModifiers) { skin.convertSkin(image, dest); diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/resource/ImageLoader.java b/src/hdskins/java/com/voxelmodpack/hdskins/resource/ImageLoader.java index bd449663..9874c6f4 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/resource/ImageLoader.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/resource/ImageLoader.java @@ -57,7 +57,7 @@ public class ImageLoader implements Callable { private ResourceLocation loadSkin(BufferedImage image) { - ResourceLocation conv = new ResourceLocation("hdskins-converted", original.getResourcePath()); + ResourceLocation conv = new ResourceLocation(original.getResourceDomain() + "-converted", original.getResourcePath()); this.mc.getTextureManager().loadTexture(conv, new DynamicTextureImage(image)); return conv; } diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/resource/SkinResourceManager.java b/src/hdskins/java/com/voxelmodpack/hdskins/resource/SkinResourceManager.java index 8154212f..0272c2d7 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/resource/SkinResourceManager.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/resource/SkinResourceManager.java @@ -12,6 +12,7 @@ import java.util.concurrent.Future; import javax.annotation.Nullable; import org.apache.commons.io.IOUtils; +import org.apache.logging.log4j.LogManager; import com.google.common.collect.Maps; import com.google.common.util.concurrent.ListenableFuture; @@ -22,6 +23,7 @@ import com.google.gson.JsonParseException; import com.mojang.authlib.GameProfile; import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type; import com.mumfrey.liteloader.util.log.LiteLoaderLogger; +import com.voxelmodpack.hdskins.HDSkinManager; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.IResource; @@ -89,30 +91,45 @@ public class SkinResourceManager implements IResourceManagerReloadListener { Skin skin = getSkin(profile); if (skin != null) { final ResourceLocation res = skin.getTexture(); - if (res != null) { - if (this.inProgress.get(res) == null) { - // read and convert in a new thread - final ListenableFuture conv = executor.submit(new ImageLoader(res)); - conv.addListener(new Runnable() { - @Override - public void run() { - try { - converted.put(res, conv.get()); - } catch (InterruptedException e) { - e.printStackTrace(); - } catch (ExecutionException e) { - e.printStackTrace(); - } - } - }, executor); - this.inProgress.put(res, conv); - } - } - return converted.get(res); + return getConvertedResource(res); } return null; } + /** + * Convert older resources to a newer format. + * + * @param res The skin resource to convert + * @return The converted resource + */ + @Nullable + public ResourceLocation getConvertedResource(@Nullable ResourceLocation res) { + loadSkinResource(res); + return converted.get(res); + } + + private void loadSkinResource(@Nullable final ResourceLocation res) { + if (res != null) { + if (this.inProgress.get(res) == null) { + // read and convert in a new thread + final ListenableFuture conv = executor.submit(new ImageLoader(res)); + conv.addListener(new Runnable() { + @Override + public void run() { + try { + if (!conv.isCancelled()) + converted.put(res, conv.get()); + } catch (Exception e) { + LogManager.getLogger().warn("Errored while processing " + res + ". Using original.", e); + converted.put(res, res); + } + } + }, executor); + this.inProgress.put(res, conv); + } + } + } + @Nullable private Skin getSkin(GameProfile profile) { Skin skin = this.uuidSkins.get(profile.getId()); diff --git a/src/main/java/com/brohoof/minelittlepony/renderer/RenderPonyMob.java b/src/main/java/com/brohoof/minelittlepony/renderer/RenderPonyMob.java index 5b56c745..c2957167 100644 --- a/src/main/java/com/brohoof/minelittlepony/renderer/RenderPonyMob.java +++ b/src/main/java/com/brohoof/minelittlepony/renderer/RenderPonyMob.java @@ -10,6 +10,7 @@ import com.brohoof.minelittlepony.model.PlayerModel; import com.brohoof.minelittlepony.renderer.layer.LayerHeldPonyItem; import com.brohoof.minelittlepony.renderer.layer.LayerPonyArmor; import com.brohoof.minelittlepony.renderer.layer.LayerPonySkull; +import com.voxelmodpack.hdskins.HDSkinManager; import net.minecraft.client.model.ModelBiped.ArmPose; import net.minecraft.client.renderer.entity.RenderLiving; @@ -18,6 +19,7 @@ import net.minecraft.entity.EntityLiving; import net.minecraft.item.EnumAction; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumHandSide; +import net.minecraft.util.ResourceLocation; public abstract class RenderPonyMob extends RenderLiving implements IRenderPony { @@ -105,4 +107,8 @@ public abstract class RenderPonyMob extends RenderLiving public PlayerModel getPony() { return playerModel; } + + protected ResourceLocation getTexture(ResourceLocation res) { + return HDSkinManager.INSTANCE.getConvertedSkin(res); + } } diff --git a/src/main/java/com/brohoof/minelittlepony/renderer/RenderPonyPigman.java b/src/main/java/com/brohoof/minelittlepony/renderer/RenderPonyPigman.java index a8ca60d5..399f7fb2 100644 --- a/src/main/java/com/brohoof/minelittlepony/renderer/RenderPonyPigman.java +++ b/src/main/java/com/brohoof/minelittlepony/renderer/RenderPonyPigman.java @@ -15,7 +15,7 @@ public class RenderPonyPigman extends RenderPonyMob { @Override protected ResourceLocation getEntityTexture(EntityPigZombie entity) { - return PonyManager.PIGMAN; + return getTexture(PonyManager.PIGMAN); } } diff --git a/src/main/java/com/brohoof/minelittlepony/renderer/RenderPonySkeleton.java b/src/main/java/com/brohoof/minelittlepony/renderer/RenderPonySkeleton.java index f5dce382..0403e58d 100644 --- a/src/main/java/com/brohoof/minelittlepony/renderer/RenderPonySkeleton.java +++ b/src/main/java/com/brohoof/minelittlepony/renderer/RenderPonySkeleton.java @@ -63,6 +63,6 @@ public class RenderPonySkeleton extends RenderPonyMob { ResourceLocation loc = PonyManager.SKELETONS.get(type); if (loc == null) loc = PonyManager.SKELETON; - return loc; + return getTexture(loc); } } diff --git a/src/main/java/com/brohoof/minelittlepony/renderer/RenderPonyVillager.java b/src/main/java/com/brohoof/minelittlepony/renderer/RenderPonyVillager.java index a3c03abd..6677cc19 100644 --- a/src/main/java/com/brohoof/minelittlepony/renderer/RenderPonyVillager.java +++ b/src/main/java/com/brohoof/minelittlepony/renderer/RenderPonyVillager.java @@ -27,7 +27,7 @@ public class RenderPonyVillager extends RenderPonyMob { this.shadowSize = 0.5F; } } - ((ModelVillagerPony)this.mainModel).profession = villager.getProfession(); + ((ModelVillagerPony) this.mainModel).profession = villager.getProfession(); GlStateManager.scale(0.9375F, 0.9375F, 0.9375F); } @@ -35,6 +35,6 @@ public class RenderPonyVillager extends RenderPonyMob { @Override protected ResourceLocation getEntityTexture(EntityVillager villager) { Pony aVillagerPony = MineLittlePony.getInstance().getManager().getPonyFromResourceRegistry(villager); - return aVillagerPony.getTextureResourceLocation(); + return getTexture(aVillagerPony.getTextureResourceLocation()); } } diff --git a/src/main/java/com/brohoof/minelittlepony/renderer/RenderPonyZombie.java b/src/main/java/com/brohoof/minelittlepony/renderer/RenderPonyZombie.java index 91254b67..f64dbf21 100644 --- a/src/main/java/com/brohoof/minelittlepony/renderer/RenderPonyZombie.java +++ b/src/main/java/com/brohoof/minelittlepony/renderer/RenderPonyZombie.java @@ -28,7 +28,7 @@ public class RenderPonyZombie extends RenderPonyMob { this.playerModel.getModel().metadata.setGender(rand.nextBoolean() ? PonyGender.MARE : PonyGender.STALLION); // races - switch (rand.nextInt(2)+2) { + switch (rand.nextInt(2) + 2) { case 0: case 1: this.playerModel.getModel().metadata.setRace(PonyRace.EARTH); @@ -77,7 +77,7 @@ public class RenderPonyZombie extends RenderPonyMob { if (loc == null) { loc = zombie.isVillager() ? PonyManager.ZOMBIE_VILLAGER : PonyManager.ZOMBIE; } - return loc; + return getTexture(loc); } }