From d73ac867df775174dafdd2da193fabd7c3e7407e Mon Sep 17 00:00:00 2001 From: Christian Date: Sat, 23 Mar 2013 15:39:34 -0400 Subject: [PATCH] Add a mechanism to dump the registry- useful for mod developers. --- common/cpw/mods/fml/common/Loader.java | 11 +++++++ .../mods/fml/common/registry/GameData.java | 32 +++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/common/cpw/mods/fml/common/Loader.java b/common/cpw/mods/fml/common/Loader.java index f5a73142c7..320defe7c7 100644 --- a/common/cpw/mods/fml/common/Loader.java +++ b/common/cpw/mods/fml/common/Loader.java @@ -13,6 +13,7 @@ package cpw.mods.fml.common; import java.io.File; +import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.net.MalformedURLException; @@ -26,15 +27,20 @@ import java.util.concurrent.Callable; import java.util.logging.Level; import net.minecraft.crash.CallableMinecraftVersion; +import net.minecraft.item.ItemStack; import com.google.common.base.CharMatcher; +import com.google.common.base.Charsets; import com.google.common.base.Function; import com.google.common.base.Joiner; +import com.google.common.base.Joiner.MapJoiner; import com.google.common.base.Splitter; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableListMultimap; +import com.google.common.collect.ImmutableListMultimap.Builder; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMultiset; import com.google.common.collect.Iterables; @@ -47,7 +53,9 @@ import com.google.common.collect.Multiset.Entry; import com.google.common.collect.Multisets; import com.google.common.collect.Ordering; import com.google.common.collect.Sets.SetView; +import com.google.common.collect.Table; import com.google.common.collect.TreeMultimap; +import com.google.common.io.Files; import cpw.mods.fml.common.LoaderState.ModState; import cpw.mods.fml.common.discovery.ModDiscoverer; @@ -686,6 +694,8 @@ public class Loader modController.distributeStateMessage(LoaderState.POSTINITIALIZATION); modController.transition(LoaderState.AVAILABLE); modController.distributeStateMessage(LoaderState.AVAILABLE); + // Dump the custom registry data map, if necessary + GameData.dumpRegistry(minecraftDir); FMLLog.info("Forge Mod Loader has successfully loaded %d mod%s", mods.size(), mods.size()==1 ? "" : "s"); } @@ -810,4 +820,5 @@ public class Loader } return true; } + } diff --git a/common/cpw/mods/fml/common/registry/GameData.java b/common/cpw/mods/fml/common/registry/GameData.java index aeb74ce130..6af788e878 100644 --- a/common/cpw/mods/fml/common/registry/GameData.java +++ b/common/cpw/mods/fml/common/registry/GameData.java @@ -29,9 +29,13 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; +import com.google.common.base.Charsets; import com.google.common.base.Function; +import com.google.common.base.Joiner; import com.google.common.base.Throwables; +import com.google.common.base.Joiner.MapJoiner; import com.google.common.collect.HashBasedTable; +import com.google.common.collect.ImmutableListMultimap; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableTable; import com.google.common.collect.ImmutableTable.Builder; @@ -42,6 +46,7 @@ import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.google.common.collect.Table; import com.google.common.collect.Table.Cell; +import com.google.common.io.Files; import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.Loader; @@ -329,4 +334,31 @@ public class GameData { { customItemStacks.put(Loader.instance().activeModContainer().getModId(), name, itemStack); } + + public static void dumpRegistry(File minecraftDir) + { + if (customItemStacks == null) + { + return; + } + if (Boolean.valueOf(System.getProperty("fml.dumpRegistry", "false")).booleanValue()) + { + ImmutableListMultimap.Builder builder = ImmutableListMultimap.builder(); + for (String modId : customItemStacks.rowKeySet()) + { + builder.putAll(modId, customItemStacks.row(modId).keySet()); + } + + File f = new File(minecraftDir, "itemStackRegistry.csv"); + MapJoiner mapJoiner = Joiner.on("\n").withKeyValueSeparator(","); + try + { + Files.write(mapJoiner.join(builder.build().entries()), f, Charsets.UTF_8); + } + catch (IOException e) + { + FMLLog.log(Level.SEVERE, e, "Failed to write registry data to %s", f.getAbsolutePath()); + } + } + } }