Commit 6763ac3e5b0787f41a1319613b872867fcd9eae1
1 parent
611d0208
Set client brand with mixin instead of using reflection
Showing
5 changed files
with
39 additions
and
54 deletions
src/client/java/com/mumfrey/liteloader/client/mixin/MixinClientBrandRetriever.java
0 → 100644
1 | +/* | ||
2 | + * This file is part of LiteLoader. | ||
3 | + * Copyright (C) 2012-16 Adam Mummery-Smith | ||
4 | + * All Rights Reserved. | ||
5 | + */ | ||
6 | +package com.mumfrey.liteloader.client.mixin; | ||
7 | + | ||
8 | +import org.spongepowered.asm.mixin.Mixin; | ||
9 | +import org.spongepowered.asm.mixin.injection.At; | ||
10 | +import org.spongepowered.asm.mixin.injection.Inject; | ||
11 | +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; | ||
12 | + | ||
13 | +import net.minecraft.client.ClientBrandRetriever; | ||
14 | + | ||
15 | +@Mixin(value = ClientBrandRetriever.class, remap = false) | ||
16 | +public abstract class MixinClientBrandRetriever | ||
17 | +{ | ||
18 | + private static final String BRANDING_VANILLA = "vanilla"; | ||
19 | + private static final String BRANDING_LITELOADER = "liteloader"; | ||
20 | + | ||
21 | + @Inject(method = "getClientModName", at = @At("RETURN"), cancellable = true) | ||
22 | + private static void appendLiteLoaderBranding(CallbackInfoReturnable<String> cir) | ||
23 | + { | ||
24 | + String branding = cir.getReturnValue(); | ||
25 | + if (MixinClientBrandRetriever.BRANDING_VANILLA.equals(branding)) | ||
26 | + { | ||
27 | + // If the branding is vanilla, just overwrite it | ||
28 | + cir.setReturnValue(MixinClientBrandRetriever.BRANDING_LITELOADER); | ||
29 | + } | ||
30 | + else | ||
31 | + { | ||
32 | + // Otherwise append it | ||
33 | + cir.setReturnValue(branding + "," + MixinClientBrandRetriever.BRANDING_LITELOADER); | ||
34 | + } | ||
35 | + } | ||
36 | +} |
src/client/resources/mixins.liteloader.client.json
1 | { | 1 | { |
2 | "required": true, | 2 | "required": true, |
3 | - "minVersion": "0.7", | 3 | + "minVersion": "0.7.4", |
4 | "compatibilityLevel": "JAVA_8", | 4 | "compatibilityLevel": "JAVA_8", |
5 | "target": "@env(DEFAULT)", | 5 | "target": "@env(DEFAULT)", |
6 | "package": "com.mumfrey.liteloader.client.mixin", | 6 | "package": "com.mumfrey.liteloader.client.mixin", |
@@ -24,6 +24,7 @@ | @@ -24,6 +24,7 @@ | ||
24 | "MixinGuiTextField", | 24 | "MixinGuiTextField", |
25 | "MixinIntIdentityHashBiMap", | 25 | "MixinIntIdentityHashBiMap", |
26 | "MixinGuiOverlayDebug", | 26 | "MixinGuiOverlayDebug", |
27 | + "MixinClientBrandRetriever", | ||
27 | "IGuiButton", | 28 | "IGuiButton", |
28 | "IKeyBinding" | 29 | "IKeyBinding" |
29 | ], | 30 | ], |
src/main/java/com/mumfrey/liteloader/core/LiteLoader.java
@@ -896,9 +896,6 @@ public final class LiteLoader | @@ -896,9 +896,6 @@ public final class LiteLoader | ||
896 | */ | 896 | */ |
897 | void onStartupComplete() | 897 | void onStartupComplete() |
898 | { | 898 | { |
899 | - // Set the loader branding in ClientBrandRetriever using reflection | ||
900 | - LiteLoaderBootstrap.setBranding("LiteLoader"); | ||
901 | - | ||
902 | this.coreProviders.all().onStartupComplete(); | 899 | this.coreProviders.all().onStartupComplete(); |
903 | 900 | ||
904 | if (this.panelManager != null) | 901 | if (this.panelManager != null) |
src/main/java/com/mumfrey/liteloader/core/LiteLoaderBootstrap.java
@@ -12,8 +12,6 @@ import java.io.FileWriter; | @@ -12,8 +12,6 @@ import java.io.FileWriter; | ||
12 | import java.io.IOException; | 12 | import java.io.IOException; |
13 | import java.io.InputStream; | 13 | import java.io.InputStream; |
14 | import java.io.Serializable; | 14 | import java.io.Serializable; |
15 | -import java.lang.reflect.Field; | ||
16 | -import java.lang.reflect.Method; | ||
17 | import java.util.List; | 15 | import java.util.List; |
18 | import java.util.Properties; | 16 | import java.util.Properties; |
19 | 17 | ||
@@ -43,7 +41,6 @@ import com.mumfrey.liteloader.util.log.LiteLoaderLogger; | @@ -43,7 +41,6 @@ import com.mumfrey.liteloader.util.log.LiteLoaderLogger; | ||
43 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger.Verbosity; | 41 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger.Verbosity; |
44 | 42 | ||
45 | import net.minecraft.launchwrapper.ITweaker; | 43 | import net.minecraft.launchwrapper.ITweaker; |
46 | -import net.minecraft.launchwrapper.Launch; | ||
47 | import net.minecraft.launchwrapper.LaunchClassLoader; | 44 | import net.minecraft.launchwrapper.LaunchClassLoader; |
48 | 45 | ||
49 | /** | 46 | /** |
@@ -772,52 +769,6 @@ class LiteLoaderBootstrap implements LoaderBootstrap, LoaderEnvironment, LoaderP | @@ -772,52 +769,6 @@ class LiteLoaderBootstrap implements LoaderBootstrap, LoaderEnvironment, LoaderP | ||
772 | return this.branding; | 769 | return this.branding; |
773 | } | 770 | } |
774 | 771 | ||
775 | - /** | ||
776 | - * Set the brand in ClientBrandRetriever to the specified brand | ||
777 | - * | ||
778 | - * @param brand | ||
779 | - */ | ||
780 | - static void setBranding(String brand) | ||
781 | - { | ||
782 | - try | ||
783 | - { | ||
784 | - Method mGetClientModName; | ||
785 | - | ||
786 | - try | ||
787 | - { | ||
788 | - Class<?> cbrClass = Class.forName("net.minecraft.client.ClientBrandRetriever", false, Launch.classLoader); | ||
789 | - mGetClientModName = cbrClass.getDeclaredMethod("getClientModName"); | ||
790 | - } | ||
791 | - catch (ClassNotFoundException ex) | ||
792 | - { | ||
793 | - return; | ||
794 | - } | ||
795 | - | ||
796 | - String oldBrand = (String)mGetClientModName.invoke(null); | ||
797 | - | ||
798 | - if ("vanilla".equals(oldBrand)) | ||
799 | - { | ||
800 | - char[] newValue = brand.toCharArray(); | ||
801 | - | ||
802 | - Field stringValue = String.class.getDeclaredField("value"); | ||
803 | - stringValue.setAccessible(true); | ||
804 | - stringValue.set(oldBrand, newValue); | ||
805 | - | ||
806 | - try | ||
807 | - { | ||
808 | - Field stringCount = String.class.getDeclaredField("count"); | ||
809 | - stringCount.setAccessible(true); | ||
810 | - stringCount.set(oldBrand, newValue.length); | ||
811 | - } | ||
812 | - catch (NoSuchFieldException ex) {} // java 1.7 doesn't have this member | ||
813 | - } | ||
814 | - } | ||
815 | - catch (Throwable th) | ||
816 | - { | ||
817 | - LiteLoaderLogger.warning(th, "Setting branding failed"); | ||
818 | - } | ||
819 | - } | ||
820 | - | ||
821 | /* (non-Javadoc) | 772 | /* (non-Javadoc) |
822 | * @see com.mumfrey.liteloader.launch.LoaderBootstrap | 773 | * @see com.mumfrey.liteloader.launch.LoaderBootstrap |
823 | * #getRequiredTransformers() | 774 | * #getRequiredTransformers() |
src/main/resources/mixins.liteloader.core.json
1 | { | 1 | { |
2 | "required": true, | 2 | "required": true, |
3 | - "minVersion": "0.7", | 3 | + "minVersion": "0.7.4", |
4 | "compatibilityLevel": "JAVA_8", | 4 | "compatibilityLevel": "JAVA_8", |
5 | "target": "@env(DEFAULT)", | 5 | "target": "@env(DEFAULT)", |
6 | "package": "com.mumfrey.liteloader.common.mixin", | 6 | "package": "com.mumfrey.liteloader.common.mixin", |