From 9ef7b13442aa6c9edd67812bb192f340d0b5edba Mon Sep 17 00:00:00 2001 From: Lex Manos Date: Tue, 9 Jun 2015 15:06:42 -0700 Subject: [PATCH 1/7] Bump version for new RB. --- src/main/java/net/minecraftforge/common/ForgeVersion.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/minecraftforge/common/ForgeVersion.java b/src/main/java/net/minecraftforge/common/ForgeVersion.java index b8dacccf9a..dfa0376ab8 100644 --- a/src/main/java/net/minecraftforge/common/ForgeVersion.java +++ b/src/main/java/net/minecraftforge/common/ForgeVersion.java @@ -23,7 +23,7 @@ public class ForgeVersion //This number is incremented every minecraft release, never reset public static final int minorVersion = 13; //This number is incremented every time a interface changes or new major feature is added, and reset every Minecraft version - public static final int revisionVersion = 3; + public static final int revisionVersion = 4; //This number is incremented every time Jenkins builds Forge, and never reset. Should always be 0 in the repo code. public static final int buildVersion = 0; From 851f9c1da669d9dd42096dfd03bda7f0f47f6fc7 Mon Sep 17 00:00:00 2001 From: Lex Manos Date: Tue, 9 Jun 2015 21:20:53 -0700 Subject: [PATCH 2/7] Cleanup some spammy output. --- .../fml/common/asm/transformers/AccessTransformer.java | 2 +- .../fml/common/asm/transformers/ModAPITransformer.java | 2 +- .../cpw/mods/fml/common/registry/LanguageRegistry.java | 9 ++++++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/fml/src/main/java/cpw/mods/fml/common/asm/transformers/AccessTransformer.java b/fml/src/main/java/cpw/mods/fml/common/asm/transformers/AccessTransformer.java index c428896c6f..62dd29e1ed 100644 --- a/fml/src/main/java/cpw/mods/fml/common/asm/transformers/AccessTransformer.java +++ b/fml/src/main/java/cpw/mods/fml/common/asm/transformers/AccessTransformer.java @@ -118,7 +118,7 @@ public class AccessTransformer implements IClassTransformer rulesResource = Resources.getResource(rulesFile); } processATFile(Resources.asCharSource(rulesResource, Charsets.UTF_8)); - FMLRelaunchLog.fine("Loaded %d rules from AccessTransformer config file %s\n", modifiers.size(), rulesFile); + FMLRelaunchLog.fine("Loaded %d rules from AccessTransformer config file %s", modifiers.size(), rulesFile); } protected void processATFile(CharSource rulesResource) throws IOException { diff --git a/fml/src/main/java/cpw/mods/fml/common/asm/transformers/ModAPITransformer.java b/fml/src/main/java/cpw/mods/fml/common/asm/transformers/ModAPITransformer.java index 4f01d0c0b4..9fd6f45fff 100644 --- a/fml/src/main/java/cpw/mods/fml/common/asm/transformers/ModAPITransformer.java +++ b/fml/src/main/java/cpw/mods/fml/common/asm/transformers/ModAPITransformer.java @@ -25,7 +25,7 @@ import cpw.mods.fml.relauncher.FMLRelaunchLog; public class ModAPITransformer implements IClassTransformer { - private static final boolean logDebugInfo = Boolean.valueOf(System.getProperty("fml.debugAPITransformer", "true")); + private static final boolean logDebugInfo = Boolean.valueOf(System.getProperty("fml.debugAPITransformer", "false")); private ListMultimap optionals; @Override diff --git a/fml/src/main/java/cpw/mods/fml/common/registry/LanguageRegistry.java b/fml/src/main/java/cpw/mods/fml/common/registry/LanguageRegistry.java index 8593295c69..a906f5bb30 100644 --- a/fml/src/main/java/cpw/mods/fml/common/registry/LanguageRegistry.java +++ b/fml/src/main/java/cpw/mods/fml/common/registry/LanguageRegistry.java @@ -20,6 +20,7 @@ import java.io.InputStreamReader; import java.net.URL; import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Properties; @@ -35,6 +36,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.StringTranslate; import com.google.common.base.Charsets; +import com.google.common.base.Joiner; +import com.google.common.collect.Lists; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.FMLLog; @@ -273,13 +276,15 @@ public class LanguageRegistry private void searchZipForLanguages(File source, Side side) throws IOException { ZipFile zf = new ZipFile(source); + List added = Lists.newArrayList(); for (ZipEntry ze : Collections.list(zf.entries())) { Matcher matcher = assetENUSLang.matcher(ze.getName()); if (matcher.matches()) { String lang = matcher.group(2); - FMLLog.fine("Injecting found translation data for lang %s in zip file %s at %s into language system", lang, source.getName(), ze.getName()); + //FMLLog.fine("Injecting found translation data for lang %s in zip file %s at %s into language system", lang, source.getName(), ze.getName()); + added.add(lang); LanguageRegistry.instance().injectLanguage(lang, StringTranslate.parseLangFile(zf.getInputStream(ze))); // Ensure en_US is available to StringTranslate on the server if ("en_US".equals(lang) && side == Side.SERVER) @@ -288,6 +293,8 @@ public class LanguageRegistry } } } + if (added.size() > 0) + FMLLog.fine("Found translations in %s [%s]", source.getName(), Joiner.on(", ").join(added)); zf.close(); } From b985384fab641df8e430ae8d5b4f0211c233d0a7 Mon Sep 17 00:00:00 2001 From: Lex Manos Date: Tue, 9 Jun 2015 21:31:18 -0700 Subject: [PATCH 3/7] Quiet ClassPatchManager debug spam by default. Reenable using -Dfml.debugClassPatchManager=true. --- .../mods/fml/common/patcher/ClassPatchManager.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/fml/src/main/java/cpw/mods/fml/common/patcher/ClassPatchManager.java b/fml/src/main/java/cpw/mods/fml/common/patcher/ClassPatchManager.java index 8df8d6d630..01243dce9e 100644 --- a/fml/src/main/java/cpw/mods/fml/common/patcher/ClassPatchManager.java +++ b/fml/src/main/java/cpw/mods/fml/common/patcher/ClassPatchManager.java @@ -38,6 +38,7 @@ public class ClassPatchManager { public static final ClassPatchManager INSTANCE = new ClassPatchManager(); public static final boolean dumpPatched = Boolean.parseBoolean(System.getProperty("fml.dumpPatchedClasses", "false")); + public static final boolean DEBUG = Boolean.parseBoolean(System.getProperty("fml.debugClassPatchManager", "false")); private GDiffPatcher patcher = new GDiffPatcher(); private ListMultimap patches; @@ -75,7 +76,8 @@ public class ClassPatchManager { return inputData; } boolean ignoredError = false; - FMLRelaunchLog.fine("Runtime patching class %s (input size %d), found %d patch%s", mappedName, (inputData == null ? 0 : inputData.length), list.size(), list.size()!=1 ? "es" : ""); + if (DEBUG) + FMLRelaunchLog.fine("Runtime patching class %s (input size %d), found %d patch%s", mappedName, (inputData == null ? 0 : inputData.length), list.size(), list.size()!=1 ? "es" : ""); for (ClassPatch patch: list) { if (!patch.targetClassName.equals(mappedName) && !patch.sourceClassName.equals(name)) @@ -122,7 +124,7 @@ public class ClassPatchManager { } } } - if (!ignoredError) + if (!ignoredError && DEBUG) { FMLRelaunchLog.fine("Successfully applied runtime patches for %s (new size %d)", mappedName, inputData.length); } @@ -194,13 +196,15 @@ public class ClassPatchManager { } } while (true); FMLRelaunchLog.fine("Read %d binary patches", patches.size()); - FMLRelaunchLog.fine("Patch list :\n\t%s", Joiner.on("\t\n").join(patches.asMap().entrySet())); + if (DEBUG) + FMLRelaunchLog.fine("Patch list :\n\t%s", Joiner.on("\t\n").join(patches.asMap().entrySet())); patchedClasses.clear(); } private ClassPatch readPatch(JarEntry patchEntry, JarInputStream jis) { - FMLRelaunchLog.finer("Reading patch data from %s", patchEntry.getName()); + if (DEBUG) + FMLRelaunchLog.finer("Reading patch data from %s", patchEntry.getName()); ByteArrayDataInput input; try { From 847c0246cd325c1f7ccb2bdc96f8dfb860ea9b9c Mon Sep 17 00:00:00 2001 From: Lex Manos Date: Tue, 9 Jun 2015 21:32:40 -0700 Subject: [PATCH 4/7] Quiet FMLControlledNamespacedRegistry debug spam by default. Reenable using -Dfml.debugRegistryEntries=true. --- .../registry/FMLControlledNamespacedRegistry.java | 12 +++++++++--- .../java/cpw/mods/fml/common/registry/GameData.java | 3 ++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/fml/src/main/java/cpw/mods/fml/common/registry/FMLControlledNamespacedRegistry.java b/fml/src/main/java/cpw/mods/fml/common/registry/FMLControlledNamespacedRegistry.java index e94753f474..ef6a1031fa 100644 --- a/fml/src/main/java/cpw/mods/fml/common/registry/FMLControlledNamespacedRegistry.java +++ b/fml/src/main/java/cpw/mods/fml/common/registry/FMLControlledNamespacedRegistry.java @@ -23,6 +23,7 @@ import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.functions.GenericIterableFactory; public class FMLControlledNamespacedRegistry extends RegistryNamespaced { + public static final boolean DEBUG = Boolean.parseBoolean(System.getProperty("fml.debugRegistryEntries", "false")); private final Class superType; private String optionalDefaultName; private I optionalDefaultObject; @@ -396,14 +397,16 @@ public class FMLControlledNamespacedRegistry extends RegistryNamespaced { } addObjectRaw(idToUse, name, thing); - FMLLog.finer("Registry add: %s %d %s (req. id %d)", name, idToUse, thing, id); + if (DEBUG) + FMLLog.finer("Registry add: %s %d %s (req. id %d)", name, idToUse, thing, id); return idToUse; } void addAlias(String from, String to) { aliases.put(from, to); - FMLLog.finer("Registry alias: %s -> %s", from, to); + if (DEBUG) + FMLLog.finer("Registry alias: %s -> %s", from, to); } Map getEntriesNotIn(FMLControlledNamespacedRegistry registry) @@ -426,6 +429,9 @@ public class FMLControlledNamespacedRegistry extends RegistryNamespaced { void dump() { + if (!DEBUG) + return; + List ids = new ArrayList(); for (I thing : this.typeSafeIterable()) @@ -439,7 +445,7 @@ public class FMLControlledNamespacedRegistry extends RegistryNamespaced { for (int id : ids) { I thing = getRaw(id); - FMLLog.finer("Registry: %s %d %s", getNameForObject(thing), id, thing); + FMLLog.finer("Registry: %d %s %s", id, getNameForObject(thing), thing); } } diff --git a/fml/src/main/java/cpw/mods/fml/common/registry/GameData.java b/fml/src/main/java/cpw/mods/fml/common/registry/GameData.java index ec1f30801d..aa7ec6c3d9 100644 --- a/fml/src/main/java/cpw/mods/fml/common/registry/GameData.java +++ b/fml/src/main/java/cpw/mods/fml/common/registry/GameData.java @@ -834,7 +834,8 @@ public class GameData { } else // ItemBlock after its Block { - FMLLog.fine("Found matching Block %s for ItemBlock %s at id %d, original id requested: %d", block, item, id, idHint); + if (FMLControlledNamespacedRegistry.DEBUG) + FMLLog.fine("Found matching Block %s for ItemBlock %s at id %d, original id requested: %d", block, item, id, idHint); freeSlot(id, item); // temporarily free the slot occupied by the Block for the item registration } From d4f6e9e419d66500ff93c588cd334c5788074996 Mon Sep 17 00:00:00 2001 From: Lex Manos Date: Tue, 9 Jun 2015 21:37:33 -0700 Subject: [PATCH 5/7] Quiet CrashReport class pre-loading debug, no flag to re-enable. --- src/main/java/net/minecraftforge/common/MinecraftForge.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/minecraftforge/common/MinecraftForge.java b/src/main/java/net/minecraftforge/common/MinecraftForge.java index 93692ed9f0..d820f4c295 100644 --- a/src/main/java/net/minecraftforge/common/MinecraftForge.java +++ b/src/main/java/net/minecraftforge/common/MinecraftForge.java @@ -140,16 +140,16 @@ public class MinecraftForge else handlers = ObjectArrays.concat(handlers, server, String.class); - FMLLog.info("Preloading CrashReport classes", ForgeVersion.getVersion()); + //FMLLog.info("Preloading CrashReport classes", ForgeVersion.getVersion()); for (String s : handlers) { - FMLLog.info("\t" + s); + //FMLLog.info("\t" + s); try { Class cls = Class.forName(s, false, MinecraftForge.class.getClassLoader()); if (cls != null && !Callable.class.isAssignableFrom(cls)) { - FMLLog.info("\t% s is not a instance of callable!", s); + //FMLLog.info("\t% s is not a instance of callable!", s); } } catch (Exception e){} From b94c2799abb64762978f3ccadc281daafa164e7f Mon Sep 17 00:00:00 2001 From: Lex Manos Date: Tue, 9 Jun 2015 22:25:13 -0700 Subject: [PATCH 6/7] Cleanup mod signature data table. Easily seperating those mods with signatures vs those with none. --- .../main/java/cpw/mods/fml/common/Loader.java | 23 ++++++++++++++++++- .../fml/common/MinecraftDummyContainer.java | 20 ++++++++++++++++ .../common/ForgeModContainer.java | 10 ++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) diff --git a/fml/src/main/java/cpw/mods/fml/common/Loader.java b/fml/src/main/java/cpw/mods/fml/common/Loader.java index 4de8f74adc..0f46e8ca9c 100644 --- a/fml/src/main/java/cpw/mods/fml/common/Loader.java +++ b/fml/src/main/java/cpw/mods/fml/common/Loader.java @@ -19,6 +19,7 @@ import java.io.FileWriter; import java.io.IOException; import java.net.MalformedURLException; import java.util.ArrayList; +import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.LinkedHashMap; @@ -510,10 +511,30 @@ public class Loader } modController.transition(LoaderState.CONSTRUCTING, false); modController.distributeStateMessage(LoaderState.CONSTRUCTING, modClassLoader, discoverer.getASMTable(), reverseDependencies); + + List mods = Lists.newArrayList(); + mods.addAll(getActiveModList()); + Collections.sort(mods, new Comparator() + { + @Override + public int compare(ModContainer o1, ModContainer o2) + { + return o1.getModId().compareTo(o2.getModId()); + } + }); + FMLLog.fine("Mod signature data"); + FMLLog.fine(" \tValid Signatures:"); for (ModContainer mod : getActiveModList()) { - FMLLog.fine("\t%s(%s:%s): %s (%s)", mod.getModId(), mod.getName(), mod.getVersion(), mod.getSource().getName(), CertificateHelper.getFingerprint(mod.getSigningCertificate())); + if (mod.getSigningCertificate() != null) + FMLLog.fine("\t\t(%s) %s\t(%s\t%s)\t%s", CertificateHelper.getFingerprint(mod.getSigningCertificate()), mod.getModId(), mod.getName(), mod.getVersion(), mod.getSource().getName()); + } + FMLLog.fine(" \tMissing Signatures:"); + for (ModContainer mod : getActiveModList()) + { + if (mod.getSigningCertificate() == null) + FMLLog.fine("\t\t%s\t(%s\t%s)\t%s", mod.getModId(), mod.getName(), mod.getVersion(), mod.getSource().getName()); } if (getActiveModList().isEmpty()) { diff --git a/fml/src/main/java/cpw/mods/fml/common/MinecraftDummyContainer.java b/fml/src/main/java/cpw/mods/fml/common/MinecraftDummyContainer.java index 0ab81d88b8..ed557ae68d 100644 --- a/fml/src/main/java/cpw/mods/fml/common/MinecraftDummyContainer.java +++ b/fml/src/main/java/cpw/mods/fml/common/MinecraftDummyContainer.java @@ -12,8 +12,12 @@ package cpw.mods.fml.common; +import java.security.cert.Certificate; + import cpw.mods.fml.common.versioning.VersionParser; import cpw.mods.fml.common.versioning.VersionRange; +import cpw.mods.fml.relauncher.FMLLaunchHandler; +import cpw.mods.fml.relauncher.Side; public class MinecraftDummyContainer extends DummyModContainer { @@ -33,4 +37,20 @@ public class MinecraftDummyContainer extends DummyModContainer { return staticRange; } + + @Override + public Certificate getSigningCertificate() + { + if (FMLLaunchHandler.side() != Side.CLIENT) + return null; + + try + { + Class cbr = Class.forName("net.minecraft.client.ClientBrandRetriever", false, getClass().getClassLoader()); + Certificate[] certificates = cbr.getProtectionDomain().getCodeSource().getCertificates(); + return certificates != null ? certificates[0] : null; + } + catch (Exception e){} // Errors don't matter just return null. + return null; + } } diff --git a/src/main/java/net/minecraftforge/common/ForgeModContainer.java b/src/main/java/net/minecraftforge/common/ForgeModContainer.java index 70202ad462..6b3a54225a 100644 --- a/src/main/java/net/minecraftforge/common/ForgeModContainer.java +++ b/src/main/java/net/minecraftforge/common/ForgeModContainer.java @@ -12,6 +12,7 @@ import static net.minecraftforge.common.ForgeVersion.revisionVersion; import static net.minecraftforge.common.config.Configuration.CATEGORY_GENERAL; import java.io.File; +import java.security.cert.Certificate; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -381,4 +382,13 @@ public class ForgeModContainer extends DummyModContainer implements WorldAccessC "net.minecraftforge.transformers" ); } + + + + @Override + public Certificate getSigningCertificate() + { + Certificate[] certificates = getClass().getProtectionDomain().getCodeSource().getCertificates(); + return certificates != null ? certificates[0] : null; + } } From b3a1548cfaac77e9756168a8887270f8181487ad Mon Sep 17 00:00:00 2001 From: Lex Manos Date: Tue, 9 Jun 2015 23:06:06 -0700 Subject: [PATCH 7/7] Cleanup mod state dump to be easier to read by displaying the states in abreviation and placing them before the mod info. --- .../cpw/mods/fml/common/LoadController.java | 11 ++++++-- .../java/cpw/mods/fml/common/LoaderState.java | 27 ++++++++++++------- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/fml/src/main/java/cpw/mods/fml/common/LoadController.java b/fml/src/main/java/cpw/mods/fml/common/LoadController.java index 0edfe92fb2..3c4802a7f5 100644 --- a/fml/src/main/java/cpw/mods/fml/common/LoadController.java +++ b/fml/src/main/java/cpw/mods/fml/common/LoadController.java @@ -266,10 +266,17 @@ public class LoadController public void printModStates(StringBuilder ret) { + ret.append("\n\tStates:"); + for (ModState state : ModState.values()) + ret.append(" '").append(state.getMarker()).append("' = ").append(state.toString()); + for (ModContainer mc : loader.getModList()) { - ret.append("\n\t").append(mc.getModId()).append("{").append(mc.getVersion()).append("} [").append(mc.getName()).append("] (").append(mc.getSource().getName()).append(") "); - Joiner.on("->"). appendTo(ret, modStates.get(mc.getModId())); + ret.append("\n\t"); + for (ModState state : modStates.get(mc.getModId())) + ret.append(state.getMarker()); + + ret.append("\t").append(mc.getModId()).append("{").append(mc.getVersion()).append("} [").append(mc.getName()).append("] (").append(mc.getSource().getName()).append(") "); } } diff --git a/fml/src/main/java/cpw/mods/fml/common/LoaderState.java b/fml/src/main/java/cpw/mods/fml/common/LoaderState.java index 8fc26635a4..cb30ba2ad9 100644 --- a/fml/src/main/java/cpw/mods/fml/common/LoaderState.java +++ b/fml/src/main/java/cpw/mods/fml/common/LoaderState.java @@ -95,21 +95,23 @@ public enum LoaderState } public enum ModState { - UNLOADED("Unloaded"), - LOADED("Loaded"), - CONSTRUCTED("Constructed"), - PREINITIALIZED("Pre-initialized"), - INITIALIZED("Initialized"), - POSTINITIALIZED("Post-initialized"), - AVAILABLE("Available"), - DISABLED("Disabled"), - ERRORED("Errored"); + UNLOADED ("Unloaded", "U"), + LOADED ("Loaded", "L"), + CONSTRUCTED ("Constructed", "C"), + PREINITIALIZED ("Pre-initialized", "H"), + INITIALIZED ("Initialized", "I"), + POSTINITIALIZED("Post-initialized", "J"), + AVAILABLE ("Available", "A"), + DISABLED ("Disabled", "D"), + ERRORED ("Errored", "E"); private String label; + private String marker; - private ModState(String label) + private ModState(String label, String marker) { this.label = label; + this.marker = marker; } @Override @@ -117,5 +119,10 @@ public enum LoaderState { return this.label; } + + public String getMarker() + { + return this.marker; + } } }