diff --git a/src/net/bdew/lib/BdLib.scala b/src/net/bdew/lib/BdLib.scala index b4eea38..b1a9dd0 100644 --- a/src/net/bdew/lib/BdLib.scala +++ b/src/net/bdew/lib/BdLib.scala @@ -10,9 +10,10 @@ package net.bdew.lib import cpw.mods.fml.common.Mod -import cpw.mods.fml.common.event.FMLPreInitializationEvent +import cpw.mods.fml.common.event.{FMLServerStartingEvent, FMLPreInitializationEvent} import org.apache.logging.log4j.Logger import cpw.mods.fml.common.Mod.EventHandler +import net.minecraft.command.CommandHandler @Mod(modid = "bdlib", name = "BD lib", version = "BDLIB_VER", modLanguage = "scala") object BdLib { @@ -29,4 +30,10 @@ object BdLib { log = ev.getModLog log.info("bdlib BDLIB_VER loaded") } + + @EventHandler + def serverStarting(event: FMLServerStartingEvent) { + val commandHandler = event.getServer.getCommandManager.asInstanceOf[CommandHandler] + commandHandler.registerCommand(new CommandDumpRegistry) + } } diff --git a/src/net/bdew/lib/CommandDumpRegistry.scala b/src/net/bdew/lib/CommandDumpRegistry.scala new file mode 100644 index 0000000..76fee91 --- /dev/null +++ b/src/net/bdew/lib/CommandDumpRegistry.scala @@ -0,0 +1,64 @@ +/* + * Copyright (c) bdew, 2013 - 2014 + * https://github.com/bdew/bdlib + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/bdlib/master/MMPL-1.0.txt + */ + +package net.bdew.lib + +import net.minecraft.command.{CommandBase, ICommandSender} +import cpw.mods.fml.relauncher.FMLInjectionData +import java.io.{FileWriter, BufferedWriter, File} +import cpw.mods.fml.common.registry.GameData +import com.google.common.collect.Table +import net.minecraft.item.ItemStack +import net.minecraftforge.oredict.OreDictionary +import net.minecraftforge.fluids.FluidRegistry + +class CommandDumpRegistry extends CommandBase { + def getCommandName = "dumpregistry" + override def getRequiredPermissionLevel = 2 + def getCommandUsage(icommandsender: ICommandSender) = "dumpregistry" + + def processCommand(sender: ICommandSender, params: Array[String]) { + val mcHome = FMLInjectionData.data()(6).asInstanceOf[File] //is there a better way to get this? + val dumpFile = new File(mcHome, "registry.dump") + val dumpWriter = new BufferedWriter(new FileWriter(dumpFile)) + import scala.collection.JavaConversions._ + try { + dumpWriter.write("==== BLOCKS ====\n") + dumpWriter.write(GameData.getBlockRegistry.map(GameData.getBlockRegistry.getNameForObject).toList.sorted.mkString("\n")) + dumpWriter.write("\n\n") + + dumpWriter.write("==== ITEMS ====\n") + dumpWriter.write(GameData.getItemRegistry.map(GameData.getItemRegistry.getNameForObject).toList.sorted.mkString("\n")) + dumpWriter.write("\n\n") + + dumpWriter.write("==== CUSTOM STACKS ====\n") + val stacksField = classOf[GameData].getDeclaredField("customItemStacks") + stacksField.setAccessible(true) + val stacksData = stacksField.get(null).asInstanceOf[Table[String, String, ItemStack]] + dumpWriter.write(stacksData.cellSet().map(x => x.getRowKey + ":" + x.getColumnKey).toList.sorted.mkString("\n")) + dumpWriter.write("\n\n") + + dumpWriter.write("==== ORE DICT ====\n") + dumpWriter.write(OreDictionary.getOreNames.sorted.mkString("\n")) + dumpWriter.write("\n\n") + + dumpWriter.write("==== FLUIDS ====\n") + dumpWriter.write(FluidRegistry.getRegisteredFluids.map(_._1).toList.sorted.mkString("\n")) + dumpWriter.write("\n\n") + + CommandBase.notifyAdmins(sender, "Registry dumped to " + dumpFile.getCanonicalPath) + } catch { + case e: Throwable => + CommandBase.notifyAdmins(sender, "Failed to save registry dump: " + e) + BdLib.logErrorException("Failed to save registry dump", e) + } finally { + dumpWriter.close() + } + } +} \ No newline at end of file diff --git a/src/net/bdew/lib/gui/WidgetContainer.scala b/src/net/bdew/lib/gui/WidgetContainer.scala index 16bec07..e8b8ea7 100644 --- a/src/net/bdew/lib/gui/WidgetContainer.scala +++ b/src/net/bdew/lib/gui/WidgetContainer.scala @@ -13,7 +13,6 @@ import scala.collection.mutable import net.bdew.lib.gui.widgets.BaseWidget import net.minecraft.client.gui.FontRenderer import org.lwjgl.opengl.GL11 -import net.minecraft.util.IIcon trait WidgetContainer extends DrawTarget { val rect: Rect diff --git a/src/net/bdew/lib/items/SimpleItem.scala b/src/net/bdew/lib/items/SimpleItem.scala index b88443c..ce10b20 100644 --- a/src/net/bdew/lib/items/SimpleItem.scala +++ b/src/net/bdew/lib/items/SimpleItem.scala @@ -9,12 +9,10 @@ package net.bdew.lib.items -import net.minecraft.item.{ItemTool, Item} +import net.minecraft.item.Item import net.minecraft.client.renderer.texture.IIconRegister import cpw.mods.fml.relauncher.{Side, SideOnly} import net.bdew.lib.Misc -import java.util -import net.minecraft.block.Block trait NamedItem extends Item { def name: String