From 0ac4d4cba6376b985f521ccd7e2c03a22cea344f Mon Sep 17 00:00:00 2001 From: Sollace Date: Tue, 28 May 2019 12:41:06 +0200 Subject: [PATCH] Sort out loading errors --- .../com/minelittlepony/client/FabMod.java | 14 +++-- .../minelittlepony/client/MineLPClient.java | 34 ++--------- .../client/gui/hdskins/MineLPHDSkins.java | 57 +++++++++++++++++++ .../client/mixin/MixinMinecraftClient.java | 24 ++++++++ src/main/resources/minelp.mixin.json | 1 + 5 files changed, 97 insertions(+), 33 deletions(-) create mode 100644 src/main/java/com/minelittlepony/client/gui/hdskins/MineLPHDSkins.java create mode 100644 src/main/java/com/minelittlepony/client/mixin/MixinMinecraftClient.java diff --git a/src/main/java/com/minelittlepony/client/FabMod.java b/src/main/java/com/minelittlepony/client/FabMod.java index c518ffb6..edcb7b81 100644 --- a/src/main/java/com/minelittlepony/client/FabMod.java +++ b/src/main/java/com/minelittlepony/client/FabMod.java @@ -9,6 +9,7 @@ import net.minecraft.client.render.entity.EntityRenderDispatcher; import net.minecraft.client.render.entity.EntityRenderer; import net.minecraft.entity.Entity; +import com.minelittlepony.client.gui.hdskins.MineLPHDSkins; import com.minelittlepony.client.settings.ClientPonyConfig; import com.minelittlepony.hdskins.mixin.MixinEntityRenderDispatcher; import com.minelittlepony.settings.SensibleJsonConfig; @@ -18,12 +19,17 @@ import java.util.function.Function; public class FabMod implements ClientModInitializer, IModUtilities { - private final MineLPClient mlp = new MineLPClient(this); - @Override public void onInitializeClient() { - mlp.init(SensibleJsonConfig.of(getConfigDirectory(), ClientPonyConfig::new)); - mlp.postInit(MinecraftClient.getInstance()); + MineLPClient mlp; + + if (FabricLoader.getInstance().isModLoaded("hdskins")) { + mlp = new MineLPHDSkins(this); + } else { + mlp = new MineLPClient(this); + } + + mlp.init(SensibleJsonConfig.of(getConfigDirectory().resolve("minelp.json"), ClientPonyConfig::new)); } @Override diff --git a/src/main/java/com/minelittlepony/client/MineLPClient.java b/src/main/java/com/minelittlepony/client/MineLPClient.java index e277a254..f7bdc171 100644 --- a/src/main/java/com/minelittlepony/client/MineLPClient.java +++ b/src/main/java/com/minelittlepony/client/MineLPClient.java @@ -2,14 +2,9 @@ package com.minelittlepony.client; import com.minelittlepony.MineLittlePony; import com.minelittlepony.client.gui.GuiPonySettings; -import com.minelittlepony.client.gui.hdskins.GuiSkinsMineLP; import com.minelittlepony.client.pony.PonyManager; import com.minelittlepony.client.render.tileentities.skull.PonySkullRenderer; import com.minelittlepony.common.client.gui.GuiHost; -import com.minelittlepony.hdskins.HDSkins; -import com.minelittlepony.hdskins.net.LegacySkinServer; -import com.minelittlepony.hdskins.net.SkinServer; -import com.minelittlepony.hdskins.net.ValhallaSkinServer; import com.minelittlepony.settings.PonyConfig; import net.minecraft.ChatFormat; @@ -30,9 +25,6 @@ import org.lwjgl.glfw.GLFW; */ public class MineLPClient extends MineLittlePony { - private static final String MINELP_VALHALLA_SERVER = "http://skins.minelittlepony-mod.com"; - private static final String MINELP_LEGACY_SERVER = "http://minelpskins.voxelmodpack.com"; - private static final String MINELP_LEGACY_GATEWAY = "http://minelpskinmanager.voxelmodpack.com"; static final KeyBinding SETTINGS_GUI = new KeyBinding("Settings", GLFW.GLFW_KEY_F9, "Mine Little Pony"); @@ -54,36 +46,20 @@ public class MineLPClient extends MineLittlePony { utilities = utils; } - void init(PonyConfig newConfig) { + protected void init(PonyConfig newConfig) { config = newConfig; ponyManager = new PonyManager(config); - - ReloadableResourceManager irrm = (ReloadableResourceManager) MinecraftClient.getInstance().getResourceManager(); - irrm.registerListener(ponyManager); - - // This also makes it the default gateway server. - SkinServer.defaultServers.add(new LegacySkinServer(MINELP_LEGACY_SERVER, MINELP_LEGACY_GATEWAY)); - SkinServer.defaultServers.add(0, new ValhallaSkinServer(MINELP_VALHALLA_SERVER)); } /** * Called when the game is ready. */ - void postInit(MinecraftClient minecraft) { - - HDSkins manager = HDSkins.getInstance(); -// manager.setSkinUrl(SKIN_SERVER_URL); -// manager.setGatewayURL(GATEWAY_URL); - manager.addSkinModifier(new PonySkinModifier()); - manager.addSkinParser(new PonySkinParser()); -// logger.info("Set MineLP skin server URL."); - manager.addClearListener(ponyManager); - - manager.setSkinsGui(GuiSkinsMineLP::new); - + public void postInit(MinecraftClient minecraft) { EntityRenderDispatcher rm = minecraft.getEntityRenderManager(); - renderManager.initialiseRenderers(rm); + + ReloadableResourceManager irrm = (ReloadableResourceManager) MinecraftClient.getInstance().getResourceManager(); + irrm.registerListener(ponyManager); } void onTick(MinecraftClient minecraft, boolean inGame) { diff --git a/src/main/java/com/minelittlepony/client/gui/hdskins/MineLPHDSkins.java b/src/main/java/com/minelittlepony/client/gui/hdskins/MineLPHDSkins.java new file mode 100644 index 00000000..fe6a7469 --- /dev/null +++ b/src/main/java/com/minelittlepony/client/gui/hdskins/MineLPHDSkins.java @@ -0,0 +1,57 @@ +package com.minelittlepony.client.gui.hdskins; + +import net.minecraft.client.MinecraftClient; + +import com.minelittlepony.client.IModUtilities; +import com.minelittlepony.client.MineLPClient; +import com.minelittlepony.client.PonySkinModifier; +import com.minelittlepony.client.PonySkinParser; + +import com.minelittlepony.hdskins.HDSkins; +import com.minelittlepony.hdskins.net.LegacySkinServer; +import com.minelittlepony.hdskins.net.SkinServer; +import com.minelittlepony.hdskins.net.ValhallaSkinServer; +import com.minelittlepony.settings.PonyConfig; + +/** + * All the interactions with HD Skins. + */ +public class MineLPHDSkins extends MineLPClient { + private static final String MINELP_VALHALLA_SERVER = "http://skins.minelittlepony-mod.com"; + + private static final String MINELP_LEGACY_SERVER = "http://minelpskins.voxelmodpack.com"; + private static final String MINELP_LEGACY_GATEWAY = "http://minelpskinmanager.voxelmodpack.com"; + + public MineLPHDSkins(IModUtilities utils) { + super(utils); + } + + @Override + protected void init(PonyConfig newConfig) { + super.init(newConfig); + + // Register pony servers + SkinServer.defaultServers.add(new LegacySkinServer(MINELP_LEGACY_SERVER, MINELP_LEGACY_GATEWAY)); + // And make valhalla the default + SkinServer.defaultServers.add(0, new ValhallaSkinServer(MINELP_VALHALLA_SERVER)); + } + + /** + * Called when the game is ready. + */ + @Override + public void postInit(MinecraftClient minecraft) { + super.postInit(minecraft); + + HDSkins manager = HDSkins.getInstance(); + + // Convert legacy pony skins + manager.addSkinModifier(new PonySkinModifier()); + // Parse trigger pixel data + manager.addSkinParser(new PonySkinParser()); + // Clear ponies when skins are cleared + manager.addClearListener(getManager()); + // Ponify the skins GUI. + manager.setSkinsGui(GuiSkinsMineLP::new); + } +} diff --git a/src/main/java/com/minelittlepony/client/mixin/MixinMinecraftClient.java b/src/main/java/com/minelittlepony/client/mixin/MixinMinecraftClient.java new file mode 100644 index 00000000..1fdab27f --- /dev/null +++ b/src/main/java/com/minelittlepony/client/mixin/MixinMinecraftClient.java @@ -0,0 +1,24 @@ +package com.minelittlepony.client.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.minelittlepony.client.MineLPClient; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.WindowEventHandler; +import net.minecraft.util.NonBlockingThreadExecutor; +import net.minecraft.util.snooper.SnooperListener; + +@Mixin(MinecraftClient.class) +public abstract class MixinMinecraftClient extends NonBlockingThreadExecutor implements SnooperListener, WindowEventHandler, AutoCloseable { + + public MixinMinecraftClient() { super(null); } + + @Inject(method = "init()V", at = @At("RETURN")) + private void onInit(CallbackInfo info) { + MineLPClient.getInstance().postInit(MinecraftClient.getInstance()); + } +} diff --git a/src/main/resources/minelp.mixin.json b/src/main/resources/minelp.mixin.json index 3c3e49e8..0e448c81 100644 --- a/src/main/resources/minelp.mixin.json +++ b/src/main/resources/minelp.mixin.json @@ -10,6 +10,7 @@ "MixinFirstPersonRenderer", "MixinGlStateManager", "MixinItemRenderer", + "MixinMinecraftClient", "MixinRenderManager", "MixinThreadDownloadImageData" ]