mirror of
https://github.com/MineLittlePony/MineLittlePony.git
synced 2024-11-26 14:27:59 +01:00
Convert entity resource textures.
This commit is contained in:
parent
72a6387397
commit
130c927780
8 changed files with 57 additions and 27 deletions
|
@ -9,6 +9,8 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import org.apache.commons.codec.binary.Base64;
|
import org.apache.commons.codec.binary.Base64;
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
|
|
||||||
|
@ -257,6 +259,11 @@ public final class HDSkinManager implements IResourceManagerReloadListener {
|
||||||
skinModifiers.add(modifier);
|
skinModifiers.add(modifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public ResourceLocation getConvertedSkin(@Nullable ResourceLocation res) {
|
||||||
|
return resources.getConvertedResource(res);
|
||||||
|
}
|
||||||
|
|
||||||
public void convertSkin(BufferedImage image, Graphics dest) {
|
public void convertSkin(BufferedImage image, Graphics dest) {
|
||||||
for (ISkinModifier skin : skinModifiers) {
|
for (ISkinModifier skin : skinModifiers) {
|
||||||
skin.convertSkin(image, dest);
|
skin.convertSkin(image, dest);
|
||||||
|
|
|
@ -57,7 +57,7 @@ public class ImageLoader implements Callable<ResourceLocation> {
|
||||||
|
|
||||||
private ResourceLocation loadSkin(BufferedImage image) {
|
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));
|
this.mc.getTextureManager().loadTexture(conv, new DynamicTextureImage(image));
|
||||||
return conv;
|
return conv;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ import java.util.concurrent.Future;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import com.google.common.util.concurrent.ListenableFuture;
|
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.GameProfile;
|
||||||
import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type;
|
import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type;
|
||||||
import com.mumfrey.liteloader.util.log.LiteLoaderLogger;
|
import com.mumfrey.liteloader.util.log.LiteLoaderLogger;
|
||||||
|
import com.voxelmodpack.hdskins.HDSkinManager;
|
||||||
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.resources.IResource;
|
import net.minecraft.client.resources.IResource;
|
||||||
|
@ -89,30 +91,45 @@ public class SkinResourceManager implements IResourceManagerReloadListener {
|
||||||
Skin skin = getSkin(profile);
|
Skin skin = getSkin(profile);
|
||||||
if (skin != null) {
|
if (skin != null) {
|
||||||
final ResourceLocation res = skin.getTexture();
|
final ResourceLocation res = skin.getTexture();
|
||||||
if (res != null) {
|
return getConvertedResource(res);
|
||||||
if (this.inProgress.get(res) == null) {
|
|
||||||
// read and convert in a new thread
|
|
||||||
final ListenableFuture<ResourceLocation> 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 null;
|
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<ResourceLocation> 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
|
@Nullable
|
||||||
private Skin getSkin(GameProfile profile) {
|
private Skin getSkin(GameProfile profile) {
|
||||||
Skin skin = this.uuidSkins.get(profile.getId());
|
Skin skin = this.uuidSkins.get(profile.getId());
|
||||||
|
|
|
@ -10,6 +10,7 @@ import com.brohoof.minelittlepony.model.PlayerModel;
|
||||||
import com.brohoof.minelittlepony.renderer.layer.LayerHeldPonyItem;
|
import com.brohoof.minelittlepony.renderer.layer.LayerHeldPonyItem;
|
||||||
import com.brohoof.minelittlepony.renderer.layer.LayerPonyArmor;
|
import com.brohoof.minelittlepony.renderer.layer.LayerPonyArmor;
|
||||||
import com.brohoof.minelittlepony.renderer.layer.LayerPonySkull;
|
import com.brohoof.minelittlepony.renderer.layer.LayerPonySkull;
|
||||||
|
import com.voxelmodpack.hdskins.HDSkinManager;
|
||||||
|
|
||||||
import net.minecraft.client.model.ModelBiped.ArmPose;
|
import net.minecraft.client.model.ModelBiped.ArmPose;
|
||||||
import net.minecraft.client.renderer.entity.RenderLiving;
|
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.EnumAction;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.EnumHandSide;
|
import net.minecraft.util.EnumHandSide;
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
|
||||||
public abstract class RenderPonyMob<T extends EntityLiving> extends RenderLiving<T> implements IRenderPony {
|
public abstract class RenderPonyMob<T extends EntityLiving> extends RenderLiving<T> implements IRenderPony {
|
||||||
|
|
||||||
|
@ -105,4 +107,8 @@ public abstract class RenderPonyMob<T extends EntityLiving> extends RenderLiving
|
||||||
public PlayerModel getPony() {
|
public PlayerModel getPony() {
|
||||||
return playerModel;
|
return playerModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected ResourceLocation getTexture(ResourceLocation res) {
|
||||||
|
return HDSkinManager.INSTANCE.getConvertedSkin(res);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@ public class RenderPonyPigman extends RenderPonyMob<EntityPigZombie> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ResourceLocation getEntityTexture(EntityPigZombie entity) {
|
protected ResourceLocation getEntityTexture(EntityPigZombie entity) {
|
||||||
return PonyManager.PIGMAN;
|
return getTexture(PonyManager.PIGMAN);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,6 +63,6 @@ public class RenderPonySkeleton extends RenderPonyMob<EntitySkeleton> {
|
||||||
ResourceLocation loc = PonyManager.SKELETONS.get(type);
|
ResourceLocation loc = PonyManager.SKELETONS.get(type);
|
||||||
if (loc == null)
|
if (loc == null)
|
||||||
loc = PonyManager.SKELETON;
|
loc = PonyManager.SKELETON;
|
||||||
return loc;
|
return getTexture(loc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@ public class RenderPonyVillager extends RenderPonyMob<EntityVillager> {
|
||||||
this.shadowSize = 0.5F;
|
this.shadowSize = 0.5F;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
((ModelVillagerPony)this.mainModel).profession = villager.getProfession();
|
((ModelVillagerPony) this.mainModel).profession = villager.getProfession();
|
||||||
|
|
||||||
GlStateManager.scale(0.9375F, 0.9375F, 0.9375F);
|
GlStateManager.scale(0.9375F, 0.9375F, 0.9375F);
|
||||||
}
|
}
|
||||||
|
@ -35,6 +35,6 @@ public class RenderPonyVillager extends RenderPonyMob<EntityVillager> {
|
||||||
@Override
|
@Override
|
||||||
protected ResourceLocation getEntityTexture(EntityVillager villager) {
|
protected ResourceLocation getEntityTexture(EntityVillager villager) {
|
||||||
Pony aVillagerPony = MineLittlePony.getInstance().getManager().getPonyFromResourceRegistry(villager);
|
Pony aVillagerPony = MineLittlePony.getInstance().getManager().getPonyFromResourceRegistry(villager);
|
||||||
return aVillagerPony.getTextureResourceLocation();
|
return getTexture(aVillagerPony.getTextureResourceLocation());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ public class RenderPonyZombie extends RenderPonyMob<EntityZombie> {
|
||||||
this.playerModel.getModel().metadata.setGender(rand.nextBoolean() ? PonyGender.MARE : PonyGender.STALLION);
|
this.playerModel.getModel().metadata.setGender(rand.nextBoolean() ? PonyGender.MARE : PonyGender.STALLION);
|
||||||
|
|
||||||
// races
|
// races
|
||||||
switch (rand.nextInt(2)+2) {
|
switch (rand.nextInt(2) + 2) {
|
||||||
case 0:
|
case 0:
|
||||||
case 1:
|
case 1:
|
||||||
this.playerModel.getModel().metadata.setRace(PonyRace.EARTH);
|
this.playerModel.getModel().metadata.setRace(PonyRace.EARTH);
|
||||||
|
@ -77,7 +77,7 @@ public class RenderPonyZombie extends RenderPonyMob<EntityZombie> {
|
||||||
if (loc == null) {
|
if (loc == null) {
|
||||||
loc = zombie.isVillager() ? PonyManager.ZOMBIE_VILLAGER : PonyManager.ZOMBIE;
|
loc = zombie.isVillager() ? PonyManager.ZOMBIE_VILLAGER : PonyManager.ZOMBIE;
|
||||||
}
|
}
|
||||||
return loc;
|
return getTexture(loc);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue