diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/HDSkinManager.java b/src/hdskins/java/com/voxelmodpack/hdskins/HDSkinManager.java index 761a29e2..6430aa7f 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/HDSkinManager.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/HDSkinManager.java @@ -11,6 +11,7 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Streams; +import com.minelittlepony.gui.IconicButton; import com.mojang.authlib.GameProfile; import com.mojang.authlib.minecraft.MinecraftProfileTexture; import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type; @@ -34,6 +35,9 @@ import com.voxelmodpack.hdskins.util.PlayerUtil; import com.voxelmodpack.hdskins.util.ProfileTextureUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiMainMenu; +import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.network.NetworkPlayerInfo; import net.minecraft.client.renderer.ThreadDownloadImageData; import net.minecraft.client.renderer.texture.ITextureObject; @@ -41,6 +45,8 @@ import net.minecraft.client.resources.DefaultPlayerSkin; import net.minecraft.client.resources.IResourceManager; import net.minecraft.client.resources.IResourceManagerReloadListener; import net.minecraft.client.resources.SkinManager; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import org.apache.commons.io.FileUtils; import org.apache.http.impl.client.CloseableHttpClient; @@ -65,6 +71,7 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; +import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Stream; import javax.annotation.Nullable; @@ -112,6 +119,14 @@ public final class HDSkinManager implements IResourceManagerReloadListener { return skinsGuiFunc.apply(ImmutableList.copyOf(this.skinServers)); } + public void displaySkinningGui(GuiScreen screen, Consumer buttons) { + if (screen instanceof GuiMainMenu) { + buttons.accept(new IconicButton(screen.width - 50, screen.height - 50, sender -> { + Minecraft.getMinecraft().displayGuiScreen(HDSkinManager.INSTANCE.createSkinsGui()); + }).setIcon(new ItemStack(Items.LEATHER_LEGGINGS), 0x3c5dcb)); + } + } + private CompletableFuture> loadProfileData(GameProfile profile) { return CompletableFuture.supplyAsync(() -> { diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/mixin/MixinGuiMainMenu.java b/src/hdskins/java/com/voxelmodpack/hdskins/mixin/MixinGuiMainMenu.java deleted file mode 100644 index bbd6b6fb..00000000 --- a/src/hdskins/java/com/voxelmodpack/hdskins/mixin/MixinGuiMainMenu.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.voxelmodpack.hdskins.mixin; - -import com.minelittlepony.gui.IconicButton; -import com.voxelmodpack.hdskins.HDSkinManager; - -import net.minecraft.client.gui.GuiMainMenu; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -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; - -@Mixin(GuiMainMenu.class) -public class MixinGuiMainMenu extends GuiScreen { - - @Inject(method = "initGui()V", at = @At("RETURN")) - private void onInit(CallbackInfo ci) { - addButton(new IconicButton(width - 50, height - 50, sender -> { - mc.displayGuiScreen(HDSkinManager.INSTANCE.createSkinsGui()); - }).setIcon(new ItemStack(Items.LEATHER_LEGGINGS), 0x3c5dcb)); - } -} diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/mixin/MixinGuiScreen.java b/src/hdskins/java/com/voxelmodpack/hdskins/mixin/MixinGuiScreen.java new file mode 100644 index 00000000..363ffac0 --- /dev/null +++ b/src/hdskins/java/com/voxelmodpack/hdskins/mixin/MixinGuiScreen.java @@ -0,0 +1,27 @@ +package com.voxelmodpack.hdskins.mixin; + +import com.voxelmodpack.hdskins.HDSkinManager; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.GuiYesNoCallback; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(GuiScreen.class) +abstract class MixinGuiScreen extends Gui implements GuiYesNoCallback { + + @Shadow + protected abstract T addButton(T buttonIn); + + @Inject(method = "setWorldAndResolution(Lnet/minecraft/client/Minecraft;II)V", at = @At("RETURN")) + private void setWorldAndResolution(Minecraft mc, int width, int height, CallbackInfo info) { + HDSkinManager.INSTANCE.displaySkinningGui((GuiScreen)(Object)this, this::addButton); + } +} diff --git a/src/hdskins/resources/hdskins.mixin.json b/src/hdskins/resources/hdskins.mixin.json index eccc7930..a635ff23 100644 --- a/src/hdskins/resources/hdskins.mixin.json +++ b/src/hdskins/resources/hdskins.mixin.json @@ -3,9 +3,10 @@ "minVersion": "0.7", "package": "com.voxelmodpack.hdskins.mixin", "refmap": "hdskins.mixin.refmap.json", + "compatibilityLevel": "JAVA_8", "mixins": [ "MixinMinecraft", - "MixinGuiMainMenu", + "MixinGuiScreen", "MixinImageBufferDownload", "MixinNetworkPlayerInfo", "MixinSkullRenderer"