mirror of
https://github.com/MineLittlePony/MineLittlePony.git
synced 2024-11-26 22:38:00 +01:00
Fix skulls causing Pony to load before the texture is loaded.
This commit is contained in:
parent
d9ddd3f842
commit
f54e54da40
7 changed files with 31 additions and 27 deletions
|
@ -4,7 +4,7 @@ import net.minecraft.client.renderer.texture.DynamicTexture;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
|
||||||
public class DynamicTextureImage extends DynamicTexture {
|
public class DynamicTextureImage extends DynamicTexture implements IBufferedTexture {
|
||||||
|
|
||||||
private BufferedImage image;
|
private BufferedImage image;
|
||||||
|
|
||||||
|
@ -13,7 +13,8 @@ public class DynamicTextureImage extends DynamicTexture {
|
||||||
this.image = bufferedImage;
|
this.image = bufferedImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BufferedImage getImage() {
|
@Override
|
||||||
|
public BufferedImage getBufferedImage() {
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,6 @@ import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public final class HDSkinManager implements IResourceManagerReloadListener {
|
public final class HDSkinManager implements IResourceManagerReloadListener {
|
||||||
|
@ -215,9 +214,6 @@ public final class HDSkinManager implements IResourceManagerReloadListener {
|
||||||
skins.invalidateAll();
|
skins.invalidateAll();
|
||||||
reloadSkins();
|
reloadSkins();
|
||||||
|
|
||||||
clearListeners = clearListeners.stream()
|
|
||||||
.filter(this::onSkinCacheCleared)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void clearNetworkSkin(NetworkPlayerInfo player) {
|
private void clearNetworkSkin(NetworkPlayerInfo player) {
|
||||||
|
@ -258,6 +254,7 @@ public final class HDSkinManager implements IResourceManagerReloadListener {
|
||||||
if (playClient != null) {
|
if (playClient != null) {
|
||||||
playClient.getPlayerInfoMap().forEach(this::clearNetworkSkin);
|
playClient.getPlayerInfoMap().forEach(this::clearNetworkSkin);
|
||||||
}
|
}
|
||||||
|
clearListeners.removeIf(this::onSkinCacheCleared);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void parseSkin(Type type, ResourceLocation resource, MinecraftProfileTexture texture) {
|
public void parseSkin(Type type, ResourceLocation resource, MinecraftProfileTexture texture) {
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
package com.voxelmodpack.hdskins;
|
||||||
|
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
public interface IBufferedTexture {
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
BufferedImage getBufferedImage();
|
||||||
|
}
|
|
@ -30,7 +30,7 @@ import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
|
|
||||||
public class ThreadDownloadImageETag extends SimpleTexture {
|
public class ThreadDownloadImageETag extends SimpleTexture implements IBufferedTexture {
|
||||||
|
|
||||||
private static final Logger LOGGER = LogManager.getLogger();
|
private static final Logger LOGGER = LogManager.getLogger();
|
||||||
private static final AtomicInteger THREAD_ID = new AtomicInteger(0);
|
private static final AtomicInteger THREAD_ID = new AtomicInteger(0);
|
||||||
|
@ -84,6 +84,7 @@ public class ThreadDownloadImageETag extends SimpleTexture {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public BufferedImage getBufferedImage() {
|
public BufferedImage getBufferedImage() {
|
||||||
return bufferedImage;
|
return bufferedImage;
|
||||||
|
|
|
@ -1,14 +1,16 @@
|
||||||
package com.minelittlepony.mixin;
|
package com.minelittlepony.mixin;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import com.voxelmodpack.hdskins.IBufferedTexture;
|
||||||
|
import net.minecraft.client.renderer.ThreadDownloadImageData;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||||
|
|
||||||
import net.minecraft.client.renderer.ThreadDownloadImageData;
|
import java.awt.image.BufferedImage;
|
||||||
|
|
||||||
@Mixin(ThreadDownloadImageData.class)
|
@Mixin(ThreadDownloadImageData.class)
|
||||||
public interface MixinThreadDownloadImageData {
|
public interface MixinThreadDownloadImageData extends IBufferedTexture {
|
||||||
|
|
||||||
@Accessor("bufferedImage")
|
@Accessor("bufferedImage")
|
||||||
|
@Override
|
||||||
BufferedImage getBufferedImage();
|
BufferedImage getBufferedImage();
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,9 +2,7 @@ package com.minelittlepony.pony.data;
|
||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
import com.minelittlepony.MineLittlePony;
|
import com.minelittlepony.MineLittlePony;
|
||||||
import com.minelittlepony.mixin.MixinThreadDownloadImageData;
|
import com.voxelmodpack.hdskins.IBufferedTexture;
|
||||||
import com.voxelmodpack.hdskins.DynamicTextureImage;
|
|
||||||
import com.voxelmodpack.hdskins.ThreadDownloadImageETag;
|
|
||||||
import net.minecraft.block.material.Material;
|
import net.minecraft.block.material.Material;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.renderer.texture.ITextureObject;
|
import net.minecraft.client.renderer.texture.ITextureObject;
|
||||||
|
@ -69,7 +67,7 @@ public class Pony {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private BufferedImage getBufferedImage(@Nonnull ResourceLocation resource) {
|
public static BufferedImage getBufferedImage(@Nonnull ResourceLocation resource) {
|
||||||
try {
|
try {
|
||||||
IResource skin = Minecraft.getMinecraft().getResourceManager().getResource(resource);
|
IResource skin = Minecraft.getMinecraft().getResourceManager().getResource(resource);
|
||||||
BufferedImage skinImage = TextureUtil.readBufferedImage(skin.getInputStream());
|
BufferedImage skinImage = TextureUtil.readBufferedImage(skin.getInputStream());
|
||||||
|
@ -78,22 +76,16 @@ public class Pony {
|
||||||
return skinImage;
|
return skinImage;
|
||||||
} catch (IOException ignored) { }
|
} catch (IOException ignored) { }
|
||||||
|
|
||||||
try {
|
|
||||||
ITextureObject texture = Minecraft.getMinecraft().getTextureManager().getTexture(resource);
|
ITextureObject texture = Minecraft.getMinecraft().getTextureManager().getTexture(resource);
|
||||||
|
|
||||||
if (texture instanceof MixinThreadDownloadImageData) {
|
if (texture instanceof IBufferedTexture) {
|
||||||
return ((MixinThreadDownloadImageData) texture).getBufferedImage();
|
return ((IBufferedTexture) texture).getBufferedImage();
|
||||||
} else if (texture instanceof ThreadDownloadImageETag) {
|
|
||||||
return ((ThreadDownloadImageETag) texture).getBufferedImage();
|
|
||||||
} else if (texture instanceof DynamicTextureImage) {
|
|
||||||
return ((DynamicTextureImage) texture).getImage();
|
|
||||||
}
|
}
|
||||||
} catch (Exception ignored) { }
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IPonyData checkSkin(BufferedImage bufferedimage) {
|
private IPonyData checkSkin(@Nullable BufferedImage bufferedimage) {
|
||||||
if (bufferedimage == null) return new PonyData();
|
if (bufferedimage == null) return new PonyData();
|
||||||
MineLittlePony.logger.debug("\tStart skin check for pony #{} with image {}.", ponyId, bufferedimage);
|
MineLittlePony.logger.debug("\tStart skin check for pony #{} with image {}.", ponyId, bufferedimage);
|
||||||
return PonyData.parse(bufferedimage);
|
return PonyData.parse(bufferedimage);
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.minelittlepony.render.skull;
|
||||||
|
|
||||||
import com.minelittlepony.PonyConfig;
|
import com.minelittlepony.PonyConfig;
|
||||||
import com.minelittlepony.model.components.ModelDeadMau5Ears;
|
import com.minelittlepony.model.components.ModelDeadMau5Ears;
|
||||||
|
import com.minelittlepony.pony.data.Pony;
|
||||||
import com.minelittlepony.pony.data.PonyLevel;
|
import com.minelittlepony.pony.data.PonyLevel;
|
||||||
import com.minelittlepony.render.PonySkull;
|
import com.minelittlepony.render.PonySkull;
|
||||||
import com.minelittlepony.render.RenderPony;
|
import com.minelittlepony.render.RenderPony;
|
||||||
|
@ -41,7 +42,7 @@ public class PlayerSkullRenderer extends PonySkull {
|
||||||
deadMau5.setVisible("deadmau5".equals(profile.getName()));
|
deadMau5.setVisible("deadmau5".equals(profile.getName()));
|
||||||
|
|
||||||
ResourceLocation skin = HDSkinManager.INSTANCE.getTextures(profile).get(MinecraftProfileTexture.Type.SKIN);
|
ResourceLocation skin = HDSkinManager.INSTANCE.getTextures(profile).get(MinecraftProfileTexture.Type.SKIN);
|
||||||
if (skin != null) {
|
if (skin != null && Pony.getBufferedImage(skin) != null) {
|
||||||
return skin;
|
return skin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue