mirror of
https://github.com/MineLittlePony/MineLittlePony.git
synced 2024-12-02 00:37:59 +01:00
Asynchronously fetch preview textures
java.io.FileNotFoundException: minecraft:skins/preview_${profile.getname()}.png ... Seriously?
This commit is contained in:
parent
d483e460c3
commit
946231f57d
4 changed files with 28 additions and 11 deletions
|
@ -87,7 +87,7 @@ public final class HDSkinManager implements IResourceManagerReloadListener {
|
|||
private Class<? extends GuiSkins> skinsClass = null;
|
||||
|
||||
public static PreviewTextureManager getPreviewTextureManager(GameProfile profile) {
|
||||
return new PreviewTextureManager(INSTANCE.getGatewayServer().getPreviewTextures(profile));
|
||||
return new PreviewTextureManager(profile);
|
||||
}
|
||||
|
||||
private HDSkinManager() {
|
||||
|
|
|
@ -19,8 +19,8 @@ public class LocalTexture {
|
|||
|
||||
private final TextureManager textureManager = Minecraft.getMinecraft().getTextureManager();
|
||||
|
||||
private DynamicTexture local;
|
||||
private PreviewTexture remote;
|
||||
private volatile DynamicTexture local;
|
||||
private volatile PreviewTexture remote;
|
||||
|
||||
private ResourceLocation remoteResource;
|
||||
private ResourceLocation localResource;
|
||||
|
@ -33,7 +33,7 @@ public class LocalTexture {
|
|||
this.blank = blank;
|
||||
this.type = type;
|
||||
|
||||
String file = type.name().toLowerCase() + "s/preview_${profile.getName()}.png";
|
||||
String file = String.format("%ss/preview_%s.png", type.name().toLowerCase(), profile.getName());
|
||||
|
||||
remoteResource = new ResourceLocation(file);
|
||||
textureManager.deleteTexture(remoteResource);
|
||||
|
@ -76,7 +76,9 @@ public class LocalTexture {
|
|||
public void setRemote(PreviewTextureManager ptm, SkinAvailableCallback callback) {
|
||||
clearRemote();
|
||||
|
||||
remote = ptm.getPreviewTexture(remoteResource, type, blank.getBlankSkin(type), callback);
|
||||
ptm.getPreviewTexture(remoteResource, type, blank.getBlankSkin(type), callback).thenAccept(texture -> {
|
||||
remote = texture;
|
||||
});
|
||||
}
|
||||
|
||||
public void setLocal(File file) {
|
||||
|
|
|
@ -1,15 +1,17 @@
|
|||
package com.voxelmodpack.hdskins;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import com.mojang.authlib.minecraft.MinecraftProfileTexture;
|
||||
import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type;
|
||||
import com.voxelmodpack.hdskins.skins.CallableFutures;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.IImageBuffer;
|
||||
import net.minecraft.client.resources.SkinManager.SkinAvailableCallback;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
|
@ -19,14 +21,26 @@ import javax.annotation.Nullable;
|
|||
*/
|
||||
public class PreviewTextureManager {
|
||||
|
||||
private final Map<Type, MinecraftProfileTexture> textures;
|
||||
private final GameProfile profile;
|
||||
|
||||
PreviewTextureManager(Map<Type, MinecraftProfileTexture> textures) {
|
||||
this.textures = textures;
|
||||
private Map<Type, MinecraftProfileTexture> textures = null;
|
||||
|
||||
PreviewTextureManager(GameProfile profile) {
|
||||
this.profile = profile;
|
||||
}
|
||||
|
||||
public CompletableFuture<PreviewTexture> getPreviewTexture(ResourceLocation location, Type type, ResourceLocation def, @Nullable SkinAvailableCallback callback) {
|
||||
return CallableFutures.asyncFailableFuture(() ->
|
||||
loadPreviewTexture(location, type, def, callback)
|
||||
, HDSkinManager.skinUploadExecutor);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public PreviewTexture getPreviewTexture(ResourceLocation location, Type type, ResourceLocation def, @Nullable SkinAvailableCallback callback) {
|
||||
private PreviewTexture loadPreviewTexture(ResourceLocation location, Type type, ResourceLocation def, @Nullable SkinAvailableCallback callback) {
|
||||
if (textures == null) {
|
||||
textures = HDSkinManager.INSTANCE.getGatewayServer().getPreviewTextures(profile);
|
||||
}
|
||||
|
||||
if (!textures.containsKey(type)) {
|
||||
return null;
|
||||
}
|
||||
|
@ -41,7 +55,7 @@ public class PreviewTextureManager {
|
|||
|
||||
PreviewTexture skinTexture = new PreviewTexture(texture, def, buffer);
|
||||
|
||||
Minecraft.getMinecraft().getTextureManager().loadTexture(location, skinTexture);
|
||||
TextureLoader.loadTexture(location, skinTexture);
|
||||
|
||||
return skinTexture;
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ public class CallableFutures {
|
|||
try {
|
||||
ret.complete(call.call());
|
||||
} catch (Throwable e) {
|
||||
e.printStackTrace();
|
||||
ret.completeExceptionally(e);
|
||||
}
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue