Commit 4cc2bb00c8eff08863c9f7625be08983951546a5
1 parent
74e458a3
Fix snooper branding application when Forge is present
Showing
1 changed file
with
19 additions
and
3 deletions
src/main/java/com/mumfrey/liteloader/core/LiteLoaderBootstrap.java
@@ -15,6 +15,7 @@ import java.io.Serializable; | @@ -15,6 +15,7 @@ import java.io.Serializable; | ||
15 | import java.lang.reflect.Field; | 15 | import java.lang.reflect.Field; |
16 | import java.util.List; | 16 | import java.util.List; |
17 | import java.util.Map; | 17 | import java.util.Map; |
18 | +import java.util.Map.Entry; | ||
18 | import java.util.Properties; | 19 | import java.util.Properties; |
19 | 20 | ||
20 | import org.apache.commons.io.Charsets; | 21 | import org.apache.commons.io.Charsets; |
@@ -25,6 +26,7 @@ import org.apache.logging.log4j.core.layout.PatternLayout; | @@ -25,6 +26,7 @@ import org.apache.logging.log4j.core.layout.PatternLayout; | ||
25 | import org.spongepowered.asm.mixin.MixinEnvironment; | 26 | import org.spongepowered.asm.mixin.MixinEnvironment; |
26 | 27 | ||
27 | import com.google.common.collect.ImmutableMap; | 28 | import com.google.common.collect.ImmutableMap; |
29 | +import com.google.common.collect.ImmutableMap.Builder; | ||
28 | import com.mumfrey.liteloader.api.LiteAPI; | 30 | import com.mumfrey.liteloader.api.LiteAPI; |
29 | import com.mumfrey.liteloader.api.manager.APIAdapter; | 31 | import com.mumfrey.liteloader.api.manager.APIAdapter; |
30 | import com.mumfrey.liteloader.api.manager.APIProvider; | 32 | import com.mumfrey.liteloader.api.manager.APIProvider; |
@@ -813,13 +815,27 @@ class LiteLoaderBootstrap implements LoaderBootstrap, LoaderEnvironment, LoaderP | @@ -813,13 +815,27 @@ class LiteLoaderBootstrap implements LoaderBootstrap, LoaderEnvironment, LoaderP | ||
813 | Field fdProperties = clLoader.getDeclaredField("fmlBrandingProperties"); | 815 | Field fdProperties = clLoader.getDeclaredField("fmlBrandingProperties"); |
814 | fdProperties.setAccessible(true); | 816 | fdProperties.setAccessible(true); |
815 | 817 | ||
818 | + // Build a new immutable property set, but remove any existing | ||
819 | + // snooperbranding because the immutable map builder doesn't like | ||
820 | + // duplicate keys! | ||
821 | + Builder<String, String> newProperties = ImmutableMap.<String, String>builder(); | ||
822 | + for (Entry<String, String> property : properties.entrySet()) | ||
823 | + { | ||
824 | + if (!"snooperbranding".equals(property.getKey())) | ||
825 | + { | ||
826 | + newProperties.put(property); | ||
827 | + } | ||
828 | + } | ||
829 | + | ||
830 | + newProperties.put("snooperbranding", branding); | ||
831 | + | ||
816 | // Set new properties into field | 832 | // Set new properties into field |
817 | - fdProperties.set(instance, ImmutableMap.<String, String>builder().putAll(properties).put("snooperbranding", branding).build()); | 833 | + fdProperties.set(instance, newProperties.build()); |
818 | } | 834 | } |
819 | catch (Exception ex) | 835 | catch (Exception ex) |
820 | { | 836 | { |
821 | - // Oh well, we tried | ||
822 | - ex.printStackTrace(); | 837 | + LiteLoaderLogger.info("Unable to apply snooper branding, servers will not receive LiteLoader in branding packets from this client: %s %s", |
838 | + ex.getClass().getName(), ex.getMessage()); | ||
823 | } | 839 | } |
824 | } | 840 | } |
825 | 841 |