Commit 47e1f2f2e41ccbae12932d87101eeee88a02127a
1 parent
0b584ff1
Fix applying brand when loading as a forge mod
Showing
5 changed files
with
60 additions
and
7 deletions
src/client/resources/mixins.liteloader.client.preinit.json
| 1 | 1 | { |
| 2 | - "required": true, | |
| 2 | + "required": false, | |
| 3 | 3 | "minVersion": "0.7.4", |
| 4 | 4 | "compatibilityLevel": "JAVA_8", |
| 5 | 5 | "target": "@env(PREINIT)", |
| ... | ... | @@ -7,8 +7,5 @@ |
| 7 | 7 | "refmap": "mixins.liteloader.client.refmap.json", |
| 8 | 8 | "mixins": [ |
| 9 | 9 | "MixinClientBrandRetriever" |
| 10 | - ], | |
| 11 | - "injectors": { | |
| 12 | - "defaultRequire": 1 | |
| 13 | - } | |
| 10 | + ] | |
| 14 | 11 | } |
| 15 | 12 | \ No newline at end of file | ... | ... |
src/main/java/com/mumfrey/liteloader/core/LiteLoader.java
src/main/java/com/mumfrey/liteloader/core/LiteLoaderBootstrap.java
| ... | ... | @@ -12,7 +12,9 @@ import java.io.FileWriter; |
| 12 | 12 | import java.io.IOException; |
| 13 | 13 | import java.io.InputStream; |
| 14 | 14 | import java.io.Serializable; |
| 15 | +import java.lang.reflect.Field; | |
| 15 | 16 | import java.util.List; |
| 17 | +import java.util.Map; | |
| 16 | 18 | import java.util.Properties; |
| 17 | 19 | |
| 18 | 20 | import org.apache.commons.io.Charsets; |
| ... | ... | @@ -22,6 +24,7 @@ import org.apache.logging.log4j.core.appender.FileAppender; |
| 22 | 24 | import org.apache.logging.log4j.core.layout.PatternLayout; |
| 23 | 25 | import org.spongepowered.asm.mixin.MixinEnvironment; |
| 24 | 26 | |
| 27 | +import com.google.common.collect.ImmutableMap; | |
| 25 | 28 | import com.mumfrey.liteloader.api.LiteAPI; |
| 26 | 29 | import com.mumfrey.liteloader.api.manager.APIAdapter; |
| 27 | 30 | import com.mumfrey.liteloader.api.manager.APIProvider; |
| ... | ... | @@ -40,6 +43,7 @@ import com.mumfrey.liteloader.util.ObfuscationUtilities; |
| 40 | 43 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; |
| 41 | 44 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger.Verbosity; |
| 42 | 45 | |
| 46 | +import net.minecraft.client.ClientBrandRetriever; | |
| 43 | 47 | import net.minecraft.launchwrapper.ITweaker; |
| 44 | 48 | import net.minecraft.launchwrapper.LaunchClassLoader; |
| 45 | 49 | |
| ... | ... | @@ -768,6 +772,56 @@ class LiteLoaderBootstrap implements LoaderBootstrap, LoaderEnvironment, LoaderP |
| 768 | 772 | { |
| 769 | 773 | return this.branding; |
| 770 | 774 | } |
| 775 | + | |
| 776 | + /** | |
| 777 | + * Check that the branding was applied and if not, attempt to set it in the | |
| 778 | + * fml branding directly using reflection | |
| 779 | + */ | |
| 780 | + @SuppressWarnings("unchecked") | |
| 781 | + static void onStartupComplete() | |
| 782 | + { | |
| 783 | + try | |
| 784 | + { | |
| 785 | + // If this field exists, the mixin was successfully applied so we can stop | |
| 786 | + | |
| 787 | + try | |
| 788 | + { | |
| 789 | + ClientBrandRetriever.class.getDeclaredField("BRANDING_LITELOADER"); | |
| 790 | + return; | |
| 791 | + } | |
| 792 | + catch (NoSuchFieldException ex) | |
| 793 | + { | |
| 794 | + // Field doesn't exist so the mixin was not applied | |
| 795 | + } | |
| 796 | + | |
| 797 | + // Get loader | |
| 798 | + Class<?> clLoader = Class.forName("net.minecraftforge.fml.common.Loader"); | |
| 799 | + | |
| 800 | + // Get instance | |
| 801 | + Object instance = clLoader.getMethod("instance").invoke(null); | |
| 802 | + | |
| 803 | + // Get branding properties | |
| 804 | + Map<String, String> properties = (Map<String, String>)clLoader.getMethod("getFMLBrandingProperties").invoke(instance); | |
| 805 | + | |
| 806 | + // Retrieve the current snooper branding | |
| 807 | + String branding = properties.get("snooperbranding"); | |
| 808 | + | |
| 809 | + // If it's blank, set ourself, if it's already set then append ourself | |
| 810 | + branding = branding == null ? "LiteLoader" : branding + ",LiteLoader"; | |
| 811 | + | |
| 812 | + // Find the field in Loader | |
| 813 | + Field fdProperties = clLoader.getDeclaredField("fmlBrandingProperties"); | |
| 814 | + fdProperties.setAccessible(true); | |
| 815 | + | |
| 816 | + // Set new properties into field | |
| 817 | + fdProperties.set(instance, ImmutableMap.<String, String>builder().putAll(properties).put("snooperbranding", branding).build()); | |
| 818 | + } | |
| 819 | + catch (Exception ex) | |
| 820 | + { | |
| 821 | + // Oh well, we tried | |
| 822 | + ex.printStackTrace(); | |
| 823 | + } | |
| 824 | + } | |
| 771 | 825 | |
| 772 | 826 | /* (non-Javadoc) |
| 773 | 827 | * @see com.mumfrey.liteloader.launch.LoaderBootstrap | ... | ... |
src/main/java/com/mumfrey/liteloader/crashreport/CrashSectionLiteLoaderBrand.java
src/main/java/com/mumfrey/liteloader/crashreport/CrashSectionLiteLoaderMods.java