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 | 2 | "required": true, |
3 | - "minVersion": "0.7", | |
3 | + "minVersion": "0.7.4", | |
4 | 4 | "compatibilityLevel": "JAVA_8", |
5 | 5 | "target": "@env(DEFAULT)", |
6 | 6 | "package": "com.mumfrey.liteloader.client.mixin", |
... | ... | @@ -24,6 +24,7 @@ |
24 | 24 | "MixinGuiTextField", |
25 | 25 | "MixinIntIdentityHashBiMap", |
26 | 26 | "MixinGuiOverlayDebug", |
27 | + "MixinClientBrandRetriever", | |
27 | 28 | "IGuiButton", |
28 | 29 | "IKeyBinding" |
29 | 30 | ], | ... | ... |
src/main/java/com/mumfrey/liteloader/core/LiteLoader.java
... | ... | @@ -896,9 +896,6 @@ public final class LiteLoader |
896 | 896 | */ |
897 | 897 | void onStartupComplete() |
898 | 898 | { |
899 | - // Set the loader branding in ClientBrandRetriever using reflection | |
900 | - LiteLoaderBootstrap.setBranding("LiteLoader"); | |
901 | - | |
902 | 899 | this.coreProviders.all().onStartupComplete(); |
903 | 900 | |
904 | 901 | if (this.panelManager != null) | ... | ... |
src/main/java/com/mumfrey/liteloader/core/LiteLoaderBootstrap.java
... | ... | @@ -12,8 +12,6 @@ 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; | |
16 | -import java.lang.reflect.Method; | |
17 | 15 | import java.util.List; |
18 | 16 | import java.util.Properties; |
19 | 17 | |
... | ... | @@ -43,7 +41,6 @@ import com.mumfrey.liteloader.util.log.LiteLoaderLogger; |
43 | 41 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger.Verbosity; |
44 | 42 | |
45 | 43 | import net.minecraft.launchwrapper.ITweaker; |
46 | -import net.minecraft.launchwrapper.Launch; | |
47 | 44 | import net.minecraft.launchwrapper.LaunchClassLoader; |
48 | 45 | |
49 | 46 | /** |
... | ... | @@ -772,52 +769,6 @@ class LiteLoaderBootstrap implements LoaderBootstrap, LoaderEnvironment, LoaderP |
772 | 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 | 772 | /* (non-Javadoc) |
822 | 773 | * @see com.mumfrey.liteloader.launch.LoaderBootstrap |
823 | 774 | * #getRequiredTransformers() | ... | ... |