diff --git a/build.gradle b/build.gradle index a7c01a8a..92829156 100644 --- a/build.gradle +++ b/build.gradle @@ -26,7 +26,7 @@ apply plugin: 'org.spongepowered.mixin' apply plugin: 'mnm.gradle.ap-ide' group = 'com.brohoof.minelp' -version = '1.10.2.2' +version = '1.10.2.3' description = 'Mine Little Pony' minecraft { @@ -35,6 +35,7 @@ minecraft { runDir = 'run' replace '@VERSION@',project.version } + sourceSets { def deps = [ configurations.forgeGradleMcDeps, @@ -49,40 +50,57 @@ sourceSets { refMap = 'mixin.minelp.refmap.json' compileClasspath += hdskins.output } - forge { - compileClasspath += files(deps + [ main.output, api.output ]) - } } + +dependencies.testCompile 'junit:junit:4.12' + litemod.json { - author = "Verdana, Rene_Z, Mumfrey, JoyJoy" - description = "Mine Little Pony turns players and mobs into ponies" - description.litemodminelittlepony = """Mine Little Pony turns players and mobs into ponies - Press F9 ingame to access settings""" - description.litemodhdskinsmod = """Seperate skin server for Mine Little Pony that also supports HD skins. - Access via Skin Manager key binding (default: F1) in the main menu.""" - mixinConfigs += ['mixin.minelp.json', 'mixin.hdskins.json'] + author = 'Verdana, Rene_Z, Mumfrey, JoyJoy' + description = 'Mine Little Pony turns players and mobs into ponies' + description.minelittlepony = '''\ + Mine Little Pony turns players and mobs into ponies + Press F9 ingame to access settings'''.stripIndent() + description.hdskinsmod = '''\ + Seperate skin server for Mine Little Pony that also supports HD skins. + Access via Skin Manager key binding (default: F1) in the main menu.'''.stripIndent() + + mixinConfigs += [ + 'mixin.minelp.json', + 'mixin.hdskins.json' + ] } + afterEvaluate { dependencies { + // add mixin to the factory path + // use same version as liteloader def liteloader = project.plugins['net.minecraftforge.gradle.liteloader'] - def artifact = liteloader.artifact.libraries.collect{it.name}.find{it.contains 'mixin'} + def artifact = liteloader.artifact.libraries + .collect {it.name} + .find {it.contains 'mixin'} factory artifact } processor { + // tell the processor where the reobf file is options.reobfSrgFile = mixin.reobfSrgFile } } + jar { - from sourceSets.findAll { it.name != 'api' }*.output + from sourceSets.hdskins.output from litemod.outputs } +sourceJar { + // add hdskins sources + from sourceSets.hdskins.allSource +} task srgJar(type: Jar) { - from sourceSets.findAll { it.name != 'api' }*.output + from sourceSets.hdskins.output from litemod.outputs - classifier "mc${minecraft.version}-srg" + classifier "mc$minecraft.version-srg" baseName "mod-${project.name.toLowerCase()}" - extension 'litemod' } + reobf { srgJar { mappingType = 'SEARGE' @@ -91,6 +109,8 @@ reobf { mixin { defaultObfuscationEnv notch } + +// windows only task deploy(type: Copy, dependsOn: build) { from jar.archivePath into file("$System.env.APPDATA/.minecraft/mods") diff --git a/build.number b/build.number index d0f8a6b4..e9b83fcf 100644 --- a/build.number +++ b/build.number @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Mon Aug 22 11:16:46 EDT 2016 -build.number=246 +#Wed Aug 24 19:20:55 EDT 2016 +build.number=250 diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/DynamicTextureImage.java b/src/hdskins/java/com/voxelmodpack/hdskins/DynamicTextureImage.java new file mode 100644 index 00000000..b4b05440 --- /dev/null +++ b/src/hdskins/java/com/voxelmodpack/hdskins/DynamicTextureImage.java @@ -0,0 +1,26 @@ +package com.voxelmodpack.hdskins; + +import java.awt.image.BufferedImage; + +import net.minecraft.client.renderer.texture.DynamicTexture; + +public class DynamicTextureImage extends DynamicTexture { + + private BufferedImage image; + + public DynamicTextureImage(BufferedImage bufferedImage) { + super(bufferedImage); + this.image = bufferedImage; + } + + public BufferedImage getImage() { + return image; + } + + @Override + public void deleteGlTexture() { + super.deleteGlTexture(); + this.image = null; + } + +} diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/HDSkinManager.java b/src/hdskins/java/com/voxelmodpack/hdskins/HDSkinManager.java index 0f7a2e6a..a680f6d9 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/HDSkinManager.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/HDSkinManager.java @@ -31,6 +31,7 @@ import com.mojang.authlib.properties.Property; import com.mojang.util.UUIDTypeAdapter; import com.mumfrey.liteloader.core.LiteLoader; import com.mumfrey.liteloader.util.log.LiteLoaderLogger; +import com.voxelmodpack.hdskins.resource.SkinResourceManager; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.IImageBuffer; @@ -38,10 +39,12 @@ import net.minecraft.client.renderer.ThreadDownloadImageData; import net.minecraft.client.renderer.texture.ITextureObject; import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.client.resources.DefaultPlayerSkin; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.client.resources.IResourceManagerReloadListener; import net.minecraft.client.resources.SkinManager.SkinAvailableCallback; import net.minecraft.util.ResourceLocation; -public final class HDSkinManager { +public final class HDSkinManager implements IResourceManagerReloadListener { public static final HDSkinManager INSTANCE = new HDSkinManager(); private static final ResourceLocation LOADING = new ResourceLocation("LOADING"); @@ -55,11 +58,18 @@ public final class HDSkinManager { private Map> skinCache = Maps.newHashMap(); private List skinModifiers = Lists.newArrayList(); - private HDSkinManager() {} + private SkinResourceManager resources = new SkinResourceManager(); + + public HDSkinManager() {} public Optional getSkinLocation(GameProfile profile1, Type type, boolean loadIfAbsent) { if (!enabled) return Optional.absent(); + + ResourceLocation skin = this.resources.getPlayerTexture(profile1, type); + if (skin != null) + return Optional.of(skin); + // try to recreate a broken gameprofile // happens when server sends a random profile with skin and displayname Property prop = Iterables.getFirst(profile1.getProperties().get("textures"), null); @@ -85,7 +95,7 @@ public final class HDSkinManager { this.skinCache.put(profile.getId(), Maps. newHashMap()); } - ResourceLocation skin = this.skinCache.get(profile.getId()).get(type); + skin = this.skinCache.get(profile.getId()).get(type); if (skin == null) { if (loadIfAbsent) { skinCache.get(profile.getId()).put(type, LOADING); @@ -252,4 +262,9 @@ public final class HDSkinManager { skin.convertSkin(image, dest); } } + + @Override + public void onResourceManagerReload(IResourceManager resourceManager) { + this.resources.onResourceManagerReload(resourceManager); + } } diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/gui/EntityPlayerModel.java b/src/hdskins/java/com/voxelmodpack/hdskins/gui/EntityPlayerModel.java index 54a011c6..41f172e4 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/gui/EntityPlayerModel.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/gui/EntityPlayerModel.java @@ -8,6 +8,7 @@ import javax.imageio.ImageIO; import com.google.common.collect.Iterables; import com.mojang.authlib.GameProfile; +import com.voxelmodpack.hdskins.DynamicTextureImage; import com.voxelmodpack.hdskins.HDSkinManager; import com.voxelmodpack.hdskins.IMetaHandler; import com.voxelmodpack.hdskins.ImageBufferDownloadHD; @@ -73,7 +74,7 @@ public class EntityPlayerModel extends EntityLivingBase { return; } - this.localSkinTexture = new DynamicTexture(bufferedImage); + this.localSkinTexture = new DynamicTextureImage(bufferedImage); this.localSkinResource = this.textureManager.getDynamicTextureLocation("localSkinPreview", this.localSkinTexture); this.hasLocalTexture = true; } diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/gui/GuiButtonSkins.java b/src/hdskins/java/com/voxelmodpack/hdskins/gui/GuiButtonSkins.java new file mode 100644 index 00000000..7c53a19b --- /dev/null +++ b/src/hdskins/java/com/voxelmodpack/hdskins/gui/GuiButtonSkins.java @@ -0,0 +1,22 @@ +package com.voxelmodpack.hdskins.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +public class GuiButtonSkins extends GuiButton { + + public GuiButtonSkins(int buttonId, int x, int y) { + super(buttonId, x, y, 20, 20, ""); + } + + @Override + public void drawButton(Minecraft mc, int mouseX, int mouseY) { + super.drawButton(mc, mouseX, mouseY); + + ItemStack stack = new ItemStack(Items.LEATHER_LEGGINGS, 1, 0); + Items.LEATHER_LEGGINGS.setColor(stack, 0x3c5dcb); + mc.getRenderItem().renderItemIntoGUI(stack, this.xPosition + 2, this.yPosition + 2); + } +} diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/gui/GuiMetaHandler.java b/src/hdskins/java/com/voxelmodpack/hdskins/gui/GuiMetaHandler.java index 77b754a7..71b5ae4d 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/gui/GuiMetaHandler.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/gui/GuiMetaHandler.java @@ -239,7 +239,7 @@ public class GuiMetaHandler extends GuiScreen implements IMetaHandler { if (prefs.has(HDSkinManager.METADATA_KEY)) { String meta = prefs.get(HDSkinManager.METADATA_KEY); Map data = Maps.newHashMap(); - for (String key : Splitter.on(',').split(meta)) { + for (String key : Splitter.on(',').omitEmptyStrings().trimResults().split(meta)) { if (prefs.has(key)) { data.put(key, prefs.get(key)); } diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/gui/RenderPlayerModel.java b/src/hdskins/java/com/voxelmodpack/hdskins/gui/RenderPlayerModel.java index e3e09e27..7e85bf7b 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/gui/RenderPlayerModel.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/gui/RenderPlayerModel.java @@ -43,16 +43,19 @@ public class RenderPlayerModel extends RenderLiving return false; } + public ModelPlayer getEntityModel(M entity) { + if (entity.metaHandler != null && entity.metaHandler.get("slim").isPresent()) { + boolean skinny = "true".equals(entity.metaHandler.get("slim").get()); + return skinny ? THIN : FAT; + } + return FAT; + + } + @Override public void doRender(M par1Entity, double par2, double par4, double par6, float par8, float par9) { - if (par1Entity.metaHandler != null && par1Entity.metaHandler.get("slim").isPresent()) { - boolean skinny = "true".equals(par1Entity.metaHandler.get("slim").get()); - this.mainModel = skinny ? THIN : FAT; - } else { - this.mainModel = FAT; - } - - ModelPlayer player = (ModelPlayer) this.getMainModel(); + ModelPlayer player = this.getEntityModel(par1Entity); + this.mainModel = player; Set parts = Minecraft.getMinecraft().gameSettings.getModelParts(); player.bipedHeadwear.isHidden = !parts.contains(EnumPlayerModelParts.HAT); diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/mixin/MixinGuiMainMenu.java b/src/hdskins/java/com/voxelmodpack/hdskins/mixin/MixinGuiMainMenu.java new file mode 100644 index 00000000..a82bd655 --- /dev/null +++ b/src/hdskins/java/com/voxelmodpack/hdskins/mixin/MixinGuiMainMenu.java @@ -0,0 +1,32 @@ +package com.voxelmodpack.hdskins.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import com.voxelmodpack.hdskins.gui.GuiButtonSkins; +import com.voxelmodpack.hdskins.gui.GuiSkins; + +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiMainMenu; +import net.minecraft.client.gui.GuiScreen; + +@Mixin(GuiMainMenu.class) +public class MixinGuiMainMenu extends GuiScreen { + + private static final int SKINS = 5000; + + @Inject(method = "initGui()V", at = @At("RETURN")) + private void onInit(CallbackInfo ci) { + this.buttonList.add(new GuiButtonSkins(SKINS, width - 50, height - 50)); + } + + @Inject(method = "actionPerformed(Lnet/minecraft/client/gui/GuiButton;)V", at = @At("RETURN")) + private void onActionPerformed(GuiButton button, CallbackInfo ci) { + if (button.id == SKINS) { + this.mc.displayGuiScreen(new GuiSkins()); + } + } + +} diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/mod/LiteModHDSkinsMod.java b/src/hdskins/java/com/voxelmodpack/hdskins/mod/LiteModHDSkinsMod.java index ceea1e4f..9d204c61 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/mod/LiteModHDSkinsMod.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/mod/LiteModHDSkinsMod.java @@ -14,6 +14,7 @@ import com.voxelmodpack.hdskins.gui.RenderPlayerModel; import com.voxelmodpack.voxelmenu.IPanoramaRenderer; import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.IReloadableResourceManager; public class LiteModHDSkinsMod implements HDSkinsMod { @Override @@ -38,6 +39,8 @@ public class LiteModHDSkinsMod implements HDSkinsMod { var5.printStackTrace(); } + IReloadableResourceManager irrm = (IReloadableResourceManager) Minecraft.getMinecraft().getResourceManager(); + irrm.registerReloadListener(HDSkinManager.INSTANCE); } @Override diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/resource/SkinData.java b/src/hdskins/java/com/voxelmodpack/hdskins/resource/SkinData.java new file mode 100644 index 00000000..5745b8a7 --- /dev/null +++ b/src/hdskins/java/com/voxelmodpack/hdskins/resource/SkinData.java @@ -0,0 +1,22 @@ +package com.voxelmodpack.hdskins.resource; + +import java.util.List; +import java.util.UUID; + +import net.minecraft.util.ResourceLocation; + +class SkinData { + + List skins; +} + +class Skin { + + String name; + UUID uuid; + private String skin; + + public ResourceLocation getTexture() { + return new ResourceLocation("hdskins", String.format("textures/skins/%s.png", skin)); + } +} diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/resource/SkinResourceManager.java b/src/hdskins/java/com/voxelmodpack/hdskins/resource/SkinResourceManager.java new file mode 100644 index 00000000..29c0f7b6 --- /dev/null +++ b/src/hdskins/java/com/voxelmodpack/hdskins/resource/SkinResourceManager.java @@ -0,0 +1,103 @@ +package com.voxelmodpack.hdskins.resource; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.Map; +import java.util.UUID; + +import javax.annotation.Nullable; + +import org.apache.commons.io.IOUtils; + +import com.google.common.collect.Maps; +import com.google.gson.Gson; +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 net.minecraft.client.resources.IResource; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.client.resources.IResourceManagerReloadListener; +import net.minecraft.util.ResourceLocation; + +public class SkinResourceManager implements IResourceManagerReloadListener { + + private Map uuidSkins = Maps.newHashMap(); + private Map namedSkins = Maps.newHashMap(); + private Map converted = Maps.newHashMap(); + + @Override + public void onResourceManagerReload(IResourceManager resourceManager) { + try { + uuidSkins.clear(); + namedSkins.clear(); + for (SkinThread loc : converted.values()) { + loc.deleteTexture(); + } + converted.clear(); + for (IResource res : resourceManager.getAllResources(new ResourceLocation("hdskins", "textures/skins/skins.json"))) { + try { + SkinData data = getSkinData(res.getInputStream()); + for (Skin s : data.skins) { + if (s.uuid != null) { + uuidSkins.put(s.uuid, s); + } + if (s.name != null) { + namedSkins.put(s.name, s); + } + } + } catch (JsonParseException je) { + LiteLoaderLogger.warning(je, "Invalid skins.json in %s", res.getResourcePackName()); + } + } + } catch (IOException e) { + // ignore + } + + } + + private SkinData getSkinData(InputStream stream) { + try { + return new Gson().fromJson(new InputStreamReader(stream), SkinData.class); + } finally { + IOUtils.closeQuietly(stream); + } + } + + @Nullable + public ResourceLocation getPlayerTexture(GameProfile profile, Type type) { + if (type != Type.SKIN) + // not supported + return null; + + Skin skin = getSkin(profile); + if (skin != null) { + ResourceLocation res = skin.getTexture(); + if (res != null) { + SkinThread conv = this.converted.get(res); + if (conv == null) { + // read and convert in a new thread + this.converted.put(res, conv = new SkinThread(res)); + } + // gotta stay in this thread to load it + if (conv.isReady()) { + conv.uploadSkin(); + } + return conv.getResource(); + } + } + return null; + } + + @Nullable + private Skin getSkin(GameProfile profile) { + Skin skin = this.uuidSkins.get(profile.getId()); + if (skin == null) { + skin = this.namedSkins.get(profile.getName()); + } + return skin; + } + +} diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/resource/SkinThread.java b/src/hdskins/java/com/voxelmodpack/hdskins/resource/SkinThread.java new file mode 100644 index 00000000..1d5e55fa --- /dev/null +++ b/src/hdskins/java/com/voxelmodpack/hdskins/resource/SkinThread.java @@ -0,0 +1,69 @@ +package com.voxelmodpack.hdskins.resource; + +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.io.InputStream; + +import javax.annotation.Nullable; + +import org.apache.commons.io.IOUtils; + +import com.voxelmodpack.hdskins.DynamicTextureImage; +import com.voxelmodpack.hdskins.ImageBufferDownloadHD; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.util.ResourceLocation; + +public class SkinThread implements Runnable { + + private ResourceLocation original; + private ResourceLocation updated; + private BufferedImage image; + + public SkinThread(ResourceLocation loc) { + this.original = loc; + new Thread(this).start(); + } + + @Override + public void run() { + image = new ImageBufferDownloadHD().parseUserSkin(getImage(original)); + } + + @Nullable + private static BufferedImage getImage(ResourceLocation res) { + try { + InputStream in = Minecraft.getMinecraft().getResourceManager().getResource(res).getInputStream(); + try { + return TextureUtil.readBufferedImage(in); + } finally { + IOUtils.closeQuietly(in); + } + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + public ResourceLocation getResource() { + return this.updated; + } + + public void deleteTexture() { + Minecraft.getMinecraft().getTextureManager().deleteTexture(updated); + } + + public boolean isReady() { + return image != null; + } + + public void uploadSkin() { + + ResourceLocation conv = new ResourceLocation("hdskins-converted", original.getResourcePath()); + Minecraft.getMinecraft().getTextureManager().loadTexture(conv, new DynamicTextureImage(image)); + updated = conv; + + image = null; + } +} diff --git a/src/hdskins/resources/mixin.hdskins.json b/src/hdskins/resources/mixin.hdskins.json index 5dbf902e..ac5a2aba 100644 --- a/src/hdskins/resources/mixin.hdskins.json +++ b/src/hdskins/resources/mixin.hdskins.json @@ -4,6 +4,7 @@ "package": "com.voxelmodpack.hdskins.mixin", "refmap": "mixin.hdskins.refmap.json", "mixins": [ + "MixinGuiMainMenu", "MixinImageBufferDownload", "MixinPlayerInfo", "MixinSkullRenderer" diff --git a/src/main/java/com/brohoof/minelittlepony/MineLittlePony.java b/src/main/java/com/brohoof/minelittlepony/MineLittlePony.java index 9207b009..c3d8eaf1 100644 --- a/src/main/java/com/brohoof/minelittlepony/MineLittlePony.java +++ b/src/main/java/com/brohoof/minelittlepony/MineLittlePony.java @@ -17,7 +17,6 @@ import com.voxelmodpack.hdskins.HDSkinManager; import com.voxelmodpack.hdskins.gui.GuiSkins; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiMainMenu; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.resources.IReloadableResourceManager; import net.minecraft.client.settings.KeyBinding; @@ -40,7 +39,6 @@ public class MineLittlePony { private static final String SKIN_SERVER_URL = "minelpskins.voxelmodpack.com"; private static final String GATEWAY_URL = "minelpskinmanager.voxelmodpack.com"; private static final KeyBinding SETTINGS_GUI = new KeyBinding("Settings", Keyboard.KEY_F9, "Mine Little Pony"); - private static final KeyBinding SKIN_MANAGER = new KeyBinding("Skin Manager", Keyboard.KEY_F1, "Mine Little Pony"); private static MineLittlePony instance; @@ -54,7 +52,6 @@ public class MineLittlePony { void init() { LiteLoader.getInput().registerKeyBinding(SETTINGS_GUI); - LiteLoader.getInput().registerKeyBinding(SKIN_MANAGER); this.config = new PonyConfig(); this.ponyManager = new PonyManager(config); @@ -104,11 +101,9 @@ public class MineLittlePony { minecraft.displayGuiScreen(new PonySettingPanel()); } - boolean pressed = minecraft.currentScreen instanceof GuiMainMenu - && Keyboard.isKeyDown(SKIN_MANAGER.getKeyCode()); boolean skins = minecraft.currentScreen instanceof GuiSkins && !(minecraft.currentScreen instanceof GuiSkinsMineLP); - if (pressed || skins) { + if (skins) { minecraft.displayGuiScreen(new GuiSkinsMineLP(ponyManager)); } HDSkinManager.INSTANCE.setEnabled(config.hd); diff --git a/src/main/java/com/brohoof/minelittlepony/Pony.java b/src/main/java/com/brohoof/minelittlepony/Pony.java index 22ede332..6aa1a6c8 100644 --- a/src/main/java/com/brohoof/minelittlepony/Pony.java +++ b/src/main/java/com/brohoof/minelittlepony/Pony.java @@ -4,8 +4,6 @@ import java.awt.image.BufferedImage; import java.io.IOException; import java.util.List; -import javax.imageio.ImageIO; - import com.brohoof.minelittlepony.model.PMAPI; import com.brohoof.minelittlepony.model.PlayerModel; import com.brohoof.minelittlepony.util.MineLPLogger; @@ -17,12 +15,15 @@ import com.google.common.collect.Lists; import com.mojang.authlib.GameProfile; import com.mumfrey.webprefs.WebPreferencesManager; import com.mumfrey.webprefs.interfaces.IWebPreferences; +import com.voxelmodpack.hdskins.DynamicTextureImage; import com.voxelmodpack.hdskins.HDSkinManager; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.AbstractClientPlayer; import net.minecraft.client.renderer.ThreadDownloadImageData; import net.minecraft.client.renderer.texture.ITextureObject; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.client.resources.IResource; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ResourceLocation; @@ -57,6 +58,7 @@ public class Pony { public void invalidateSkinCheck() { this.skinChecked = false; + metadata = new PonyData(); } public void checkSkin() { @@ -119,7 +121,8 @@ public class Pony { public BufferedImage getBufferedImage(ResourceLocation textureResourceLocation) { BufferedImage skinImage = null; try { - skinImage = ImageIO.read(Minecraft.getMinecraft().getResourceManager().getResource(textureResourceLocation).getInputStream()); + IResource skin = Minecraft.getMinecraft().getResourceManager().getResource(textureResourceLocation); + skinImage = TextureUtil.readBufferedImage(skin.getInputStream()); MineLPLogger.debug("Obtained skin from resource location %s", textureResourceLocation); // this.checkSkin(skinImage); } catch (IOException var6) { @@ -134,6 +137,8 @@ public class Pony { MineLPLogger.debug(e, "Successfully reflected downloadedImage from texture object"); // this.checkSkin(skinImage); } + } else if (e2 instanceof DynamicTextureImage) { + skinImage = ((DynamicTextureImage) e2).getImage(); } } catch (Exception var5) { diff --git a/src/main/java/com/brohoof/minelittlepony/PonyData.java b/src/main/java/com/brohoof/minelittlepony/PonyData.java index ada7ba83..253f4f28 100644 --- a/src/main/java/com/brohoof/minelittlepony/PonyData.java +++ b/src/main/java/com/brohoof/minelittlepony/PonyData.java @@ -26,7 +26,7 @@ public class PonyData { .put(0x534b76, PonySize.TALL) .build(); - private PonyRace race = PonyRace.EARTH; + private PonyRace race; private TailLengths tailSize = TailLengths.FULL; private PonyGender gender = PonyGender.MARE; private PonySize size = PonySize.NORMAL; diff --git a/src/forge/java/com/brohoof/minelittlepony/forge/MLPForge.java b/src/main/java/com/brohoof/minelittlepony/forge/MLPForge.java similarity index 100% rename from src/forge/java/com/brohoof/minelittlepony/forge/MLPForge.java rename to src/main/java/com/brohoof/minelittlepony/forge/MLPForge.java diff --git a/src/forge/java/com/brohoof/minelittlepony/forge/PonyArmors.java b/src/main/java/com/brohoof/minelittlepony/forge/PonyArmors.java similarity index 100% rename from src/forge/java/com/brohoof/minelittlepony/forge/PonyArmors.java rename to src/main/java/com/brohoof/minelittlepony/forge/PonyArmors.java diff --git a/src/main/java/com/brohoof/minelittlepony/hdskins/gui/RenderPonyModel.java b/src/main/java/com/brohoof/minelittlepony/hdskins/gui/RenderPonyModel.java index 669ca2b2..b0551fd8 100644 --- a/src/main/java/com/brohoof/minelittlepony/hdskins/gui/RenderPonyModel.java +++ b/src/main/java/com/brohoof/minelittlepony/hdskins/gui/RenderPonyModel.java @@ -10,6 +10,7 @@ import com.brohoof.minelittlepony.model.PlayerModel; import com.google.common.base.Optional; import com.voxelmodpack.hdskins.gui.RenderPlayerModel; +import net.minecraft.client.model.ModelPlayer; import net.minecraft.client.renderer.entity.RenderManager; public class RenderPonyModel extends RenderPlayerModel { @@ -19,8 +20,7 @@ public class RenderPonyModel extends RenderPlayerModel { } @Override - protected void renderModel(EntityPonyModel playermodel, float par2, float par3, float par4, float par5, float par6, float par7) { - this.bindEntityTexture(playermodel); + public ModelPlayer getEntityModel(EntityPonyModel playermodel) { Pony thePony = MineLittlePony.getInstance().getManager().getPonyFromResourceRegistry(this.getEntityTexture(playermodel)); thePony.invalidateSkinCheck(); thePony.checkSkin(); @@ -46,9 +46,9 @@ public class RenderPonyModel extends RenderPlayerModel { // TODO small arms PlayerModel pm = thePony.getModel(true, false); - this.mainModel = pm.getModel(); pm.apply(thePony.metadata); - this.mainModel.render(playermodel, par2, par3, par4, par5, par6, par7); + + return pm.getModel(); } } diff --git a/src/main/resources/assets/hdskins/skins/applebloom.png b/src/main/resources/assets/hdskins/skins/applebloom.png new file mode 100644 index 00000000..975504b2 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/applebloom.png differ diff --git a/src/main/resources/assets/hdskins/skins/applejack.png b/src/main/resources/assets/hdskins/skins/applejack.png new file mode 100644 index 00000000..9d992e9a Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/applejack.png differ diff --git a/src/main/resources/assets/hdskins/skins/babsseed.png b/src/main/resources/assets/hdskins/skins/babsseed.png new file mode 100644 index 00000000..a7623bff Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/babsseed.png differ diff --git a/src/main/resources/assets/hdskins/skins/berrypunch.png b/src/main/resources/assets/hdskins/skins/berrypunch.png new file mode 100644 index 00000000..0fba7944 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/berrypunch.png differ diff --git a/src/main/resources/assets/hdskins/skins/bigmac.png b/src/main/resources/assets/hdskins/skins/bigmac.png new file mode 100644 index 00000000..dea7e140 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/bigmac.png differ diff --git a/src/main/resources/assets/hdskins/skins/blockwork.png b/src/main/resources/assets/hdskins/skins/blockwork.png new file mode 100644 index 00000000..863bab46 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/blockwork.png differ diff --git a/src/main/resources/assets/hdskins/skins/bonbon.png b/src/main/resources/assets/hdskins/skins/bonbon.png new file mode 100644 index 00000000..08f8f17f Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/bonbon.png differ diff --git a/src/main/resources/assets/hdskins/skins/braeburn.png b/src/main/resources/assets/hdskins/skins/braeburn.png new file mode 100644 index 00000000..a8b7e8ea Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/braeburn.png differ diff --git a/src/main/resources/assets/hdskins/skins/cadence.png b/src/main/resources/assets/hdskins/skins/cadence.png new file mode 100644 index 00000000..3ce17fd0 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/cadence.png differ diff --git a/src/main/resources/assets/hdskins/skins/caramel.png b/src/main/resources/assets/hdskins/skins/caramel.png new file mode 100644 index 00000000..f2bfc315 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/caramel.png differ diff --git a/src/main/resources/assets/hdskins/skins/carrottop.png b/src/main/resources/assets/hdskins/skins/carrottop.png new file mode 100644 index 00000000..e6558524 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/carrottop.png differ diff --git a/src/main/resources/assets/hdskins/skins/celestia.png b/src/main/resources/assets/hdskins/skins/celestia.png new file mode 100644 index 00000000..10cd9414 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/celestia.png differ diff --git a/src/main/resources/assets/hdskins/skins/changeling.png b/src/main/resources/assets/hdskins/skins/changeling.png new file mode 100644 index 00000000..e63628cd Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/changeling.png differ diff --git a/src/main/resources/assets/hdskins/skins/cheerilee.png b/src/main/resources/assets/hdskins/skins/cheerilee.png new file mode 100644 index 00000000..8de951e2 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/cheerilee.png differ diff --git a/src/main/resources/assets/hdskins/skins/chrysalis.png b/src/main/resources/assets/hdskins/skins/chrysalis.png new file mode 100644 index 00000000..95451421 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/chrysalis.png differ diff --git a/src/main/resources/assets/hdskins/skins/colgate.png b/src/main/resources/assets/hdskins/skins/colgate.png new file mode 100644 index 00000000..6f1d60a1 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/colgate.png differ diff --git a/src/main/resources/assets/hdskins/skins/cranky.png b/src/main/resources/assets/hdskins/skins/cranky.png new file mode 100644 index 00000000..37b74f8a Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/cranky.png differ diff --git a/src/main/resources/assets/hdskins/skins/daringdo.png b/src/main/resources/assets/hdskins/skins/daringdo.png new file mode 100644 index 00000000..76777553 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/daringdo.png differ diff --git a/src/main/resources/assets/hdskins/skins/derpy.png b/src/main/resources/assets/hdskins/skins/derpy.png new file mode 100644 index 00000000..1574e9ab Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/derpy.png differ diff --git a/src/main/resources/assets/hdskins/skins/diamondtiara.png b/src/main/resources/assets/hdskins/skins/diamondtiara.png new file mode 100644 index 00000000..e81a102f Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/diamondtiara.png differ diff --git a/src/main/resources/assets/hdskins/skins/fleetfoot.png b/src/main/resources/assets/hdskins/skins/fleetfoot.png new file mode 100644 index 00000000..343abe35 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/fleetfoot.png differ diff --git a/src/main/resources/assets/hdskins/skins/fluttershy.png b/src/main/resources/assets/hdskins/skins/fluttershy.png new file mode 100644 index 00000000..bf02b8cb Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/fluttershy.png differ diff --git a/src/main/resources/assets/hdskins/skins/grannysmith.png b/src/main/resources/assets/hdskins/skins/grannysmith.png new file mode 100644 index 00000000..21ee8617 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/grannysmith.png differ diff --git a/src/main/resources/assets/hdskins/skins/lemonhearts.png b/src/main/resources/assets/hdskins/skins/lemonhearts.png new file mode 100644 index 00000000..f25536bd Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/lemonhearts.png differ diff --git a/src/main/resources/assets/hdskins/skins/luna.png b/src/main/resources/assets/hdskins/skins/luna.png new file mode 100644 index 00000000..b01d2fe3 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/luna.png differ diff --git a/src/main/resources/assets/hdskins/skins/lyra.png b/src/main/resources/assets/hdskins/skins/lyra.png new file mode 100644 index 00000000..cfeeffbb Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/lyra.png differ diff --git a/src/main/resources/assets/hdskins/skins/mayormare.png b/src/main/resources/assets/hdskins/skins/mayormare.png new file mode 100644 index 00000000..4206e578 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/mayormare.png differ diff --git a/src/main/resources/assets/hdskins/skins/mrcake.png b/src/main/resources/assets/hdskins/skins/mrcake.png new file mode 100644 index 00000000..c661b9c0 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/mrcake.png differ diff --git a/src/main/resources/assets/hdskins/skins/mrscake.png b/src/main/resources/assets/hdskins/skins/mrscake.png new file mode 100644 index 00000000..5b05dd1a Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/mrscake.png differ diff --git a/src/main/resources/assets/hdskins/skins/octavia.png b/src/main/resources/assets/hdskins/skins/octavia.png new file mode 100644 index 00000000..7b20d4dd Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/octavia.png differ diff --git a/src/main/resources/assets/hdskins/skins/pinkiepie.png b/src/main/resources/assets/hdskins/skins/pinkiepie.png new file mode 100644 index 00000000..61085b12 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/pinkiepie.png differ diff --git a/src/main/resources/assets/hdskins/skins/rainbowdash.png b/src/main/resources/assets/hdskins/skins/rainbowdash.png new file mode 100644 index 00000000..3edc183b Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/rainbowdash.png differ diff --git a/src/main/resources/assets/hdskins/skins/rarity.png b/src/main/resources/assets/hdskins/skins/rarity.png new file mode 100644 index 00000000..370e3957 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/rarity.png differ diff --git a/src/main/resources/assets/hdskins/skins/royalguard.png b/src/main/resources/assets/hdskins/skins/royalguard.png new file mode 100644 index 00000000..775c0d0e Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/royalguard.png differ diff --git a/src/main/resources/assets/hdskins/skins/scootaloo.png b/src/main/resources/assets/hdskins/skins/scootaloo.png new file mode 100644 index 00000000..567e4428 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/scootaloo.png differ diff --git a/src/main/resources/assets/hdskins/skins/shiningarmor.png b/src/main/resources/assets/hdskins/skins/shiningarmor.png new file mode 100644 index 00000000..f8f3dd24 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/shiningarmor.png differ diff --git a/src/main/resources/assets/hdskins/skins/silverspoon.png b/src/main/resources/assets/hdskins/skins/silverspoon.png new file mode 100644 index 00000000..c70a857b Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/silverspoon.png differ diff --git a/src/main/resources/assets/hdskins/skins/skins.json b/src/main/resources/assets/hdskins/skins/skins.json new file mode 100644 index 00000000..30471743 --- /dev/null +++ b/src/main/resources/assets/hdskins/skins/skins.json @@ -0,0 +1,236 @@ +{ + "skins": [ + { + "skin": "applebloom", + "name": "Apple Bloom!" + }, + { + "skin": "applejack", + "name": "Applejack!" + }, + { + "skin": "babsseed", + "name": "Babs Seed!" + }, + { + "skin": "berrypunch", + "name": "Berry Punch!" + }, + { + "skin": "bigmac", + "name": "Big Mac!" + }, + { + "skin": "bigmac", + "name": "Big Macintosh!" + }, + { + "skin": "blockwork", + "name": "Blockwork!" + }, + { + "skin": "bonbon", + "name": "Bon Bon!" + }, + { + "skin": "braeburn", + "name": "Braeburn!" + }, + { + "skin": "cadence", + "name": "Cadance!" + }, + { + "skin": "cadence", + "name": "Cadence!" + }, + { + "skin": "caramel", + "name": "Caramel!" + }, + { + "skin": "carrottop", + "name": "Carrot Top!" + }, + { + "skin": "celestia", + "name": "Celestia!" + }, + { + "skin": "changeling", + "name": "Changeling!" + }, + { + "skin": "changeling", + "name": "Changling!" + }, + { + "skin": "cheerilee", + "name": "Cheerilee!" + }, + { + "skin": "chrysalis", + "name": "Chrysalis!" + }, + { + "skin": "colgate", + "name": "Colgate!" + }, + { + "skin": "cranky", + "name": "Cranky!" + }, + { + "skin": "daringdo", + "name": "Daring Do!" + }, + { + "skin": "derpyhooves", + "name": "Derpy Hooves!" + }, + { + "skin": "derpy", + "name": "Derpy!" + }, + { + "skin": "derpy", + "name": "DerpyHooves!" + }, + { + "skin": "diamondtiara", + "name": "Diamond Tiara!" + }, + { + "skin": "fleetfoot", + "name": "Fleetfoot!" + }, + { + "skin": "fluttershy", + "name": "Fluttershy!" + }, + { + "skin": "grannysmith", + "name": "Granny Smith!" + }, + { + "skin": "lemonhearts", + "name": "Lemon Hearts!" + }, + { + "skin": "lemonhearts", + "name": "LemonHearts!" + }, + { + "skin": "luna", + "name": "Luna!" + }, + { + "skin": "lyra", + "name": "Lyra!" + }, + { + "skin": "mayormare", + "name": "Mayor Mare!" + }, + { + "skin": "mrcake", + "name": "Mr Cake!" + }, + { + "skin": "mrscake", + "name": "Mrs Cake!" + }, + { + "skin": "octavia", + "name": "Octavia!" + }, + { + "skin": "pinkiepie", + "name": "Pinkie Pie!" + }, + { + "skin": "pinkiepie", + "name": "PinkiePie!" + }, + { + "skin": "rainbowdash", + "name": "Rainbow Dash!" + }, + { + "skin": "rainbowdash", + "name": "RainbowDash!" + }, + { + "skin": "rarity", + "name": "Rarity!" + }, + { + "skin": "royalguard", + "name": "Royal Guard!" + }, + { + "skin": "royalguard", + "name": "RoyalGuard!" + }, + { + "skin": "scootaloo", + "name": "Scootaloo!" + }, + { + "skin": "shiningarmor", + "name": "Shining Armor!" + }, + { + "skin": "shiningarmor", + "name": "Shining Armour!" + }, + { + "skin": "silverspoon", + "name": "Silver Spoon!" + }, + { + "skin": "soarin", + "name": "Soarin!" + }, + { + "skin": "soarinoriginal", + "name": "SoarinOriginal!" + }, + { + "skin": "spitfire", + "name": "Spitfire!" + }, + { + "skin": "sweetiebelle", + "name": "Sweetie Belle!" + }, + { + "skin": "trixie", + "name": "Trixie!" + }, + { + "skin": "twilight", + "name": "Twilight!" + }, + { + "skin": "twilight", + "name": "TwilightSparkle!" + }, + { + "skin": "twilightsparkleoriginal", + "name": "TwilightSparkleOriginal!" + }, + { + "skin": "twist", + "name": "Twist!" + }, + { + "skin": "vinylscratch", + "name": "Vinyl Scratch!" + }, + { + "skin": "wonderbolt", + "name": "Wonderbolt!" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/hdskins/skins/soarin.png b/src/main/resources/assets/hdskins/skins/soarin.png new file mode 100644 index 00000000..73e3bbac Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/soarin.png differ diff --git a/src/main/resources/assets/hdskins/skins/soarinoriginal.png b/src/main/resources/assets/hdskins/skins/soarinoriginal.png new file mode 100644 index 00000000..418b36ff Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/soarinoriginal.png differ diff --git a/src/main/resources/assets/hdskins/skins/spitfire.png b/src/main/resources/assets/hdskins/skins/spitfire.png new file mode 100644 index 00000000..0fe41729 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/spitfire.png differ diff --git a/src/main/resources/assets/hdskins/skins/sweetiebelle.png b/src/main/resources/assets/hdskins/skins/sweetiebelle.png new file mode 100644 index 00000000..3f414537 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/sweetiebelle.png differ diff --git a/src/main/resources/assets/hdskins/skins/trixie.png b/src/main/resources/assets/hdskins/skins/trixie.png new file mode 100644 index 00000000..42b7c75a Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/trixie.png differ diff --git a/src/main/resources/assets/hdskins/skins/twilight.png b/src/main/resources/assets/hdskins/skins/twilight.png new file mode 100644 index 00000000..027086e9 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/twilight.png differ diff --git a/src/main/resources/assets/hdskins/skins/twilightsparkleoriginal.png b/src/main/resources/assets/hdskins/skins/twilightsparkleoriginal.png new file mode 100644 index 00000000..027086e9 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/twilightsparkleoriginal.png differ diff --git a/src/main/resources/assets/hdskins/skins/twist.png b/src/main/resources/assets/hdskins/skins/twist.png new file mode 100644 index 00000000..6d838686 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/twist.png differ diff --git a/src/main/resources/assets/hdskins/skins/vinylscratch.png b/src/main/resources/assets/hdskins/skins/vinylscratch.png new file mode 100644 index 00000000..81ae9030 Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/vinylscratch.png differ diff --git a/src/main/resources/assets/hdskins/skins/wonderbolt.png b/src/main/resources/assets/hdskins/skins/wonderbolt.png new file mode 100644 index 00000000..73e3bbac Binary files /dev/null and b/src/main/resources/assets/hdskins/skins/wonderbolt.png differ