From ee4071384dddeebd6688fd9841709b9adde4ff97 Mon Sep 17 00:00:00 2001 From: Chicken-Bones Date: Tue, 12 Nov 2013 17:52:14 +1000 Subject: [PATCH] Added IMC microblock material registering. modId = "ForgeMicroblock", key = "microMaterial", value = ItemStack(block, _, meta) Fixed some material icon loading inconsistencies. --- .../microblock/BlockMicroMaterial.scala | 11 +++++--- codechicken/microblock/ConfigContent.scala | 26 +++++++++++++++++-- .../microblock/MicroMaterialRegistry.scala | 3 ++- .../microblock/handler/EventHandler.scala | 2 +- .../microblock/handler/ModContainer.scala | 23 +++++++++------- 5 files changed, 49 insertions(+), 16 deletions(-) diff --git a/codechicken/microblock/BlockMicroMaterial.scala b/codechicken/microblock/BlockMicroMaterial.scala index 9e11aff..67a8918 100644 --- a/codechicken/microblock/BlockMicroMaterial.scala +++ b/codechicken/microblock/BlockMicroMaterial.scala @@ -120,12 +120,17 @@ object BlockMicroMaterial { def createAndRegister(block:Block) { - MicroMaterialRegistry.registerMaterial(new BlockMicroMaterial(block), block.getUnlocalizedName) + createAndRegister(block, 0) + } + + def createAndRegister(block:Block, meta:Int) + { + MicroMaterialRegistry.registerMaterial(new BlockMicroMaterial(block, meta), + block.getUnlocalizedName+(if(meta > 0) "_"+meta else "")) } def createAndRegister(block:Block, meta:Seq[Int]) { - val name = block.getUnlocalizedName - meta.foreach(m => MicroMaterialRegistry.registerMaterial(new BlockMicroMaterial(block, m), name+(if(m > 0) "_"+m else ""))) + meta.foreach(m => createAndRegister(block, m)) } } \ No newline at end of file diff --git a/codechicken/microblock/ConfigContent.scala b/codechicken/microblock/ConfigContent.scala index 1dc8419..6411dee 100644 --- a/codechicken/microblock/ConfigContent.scala +++ b/codechicken/microblock/ConfigContent.scala @@ -8,6 +8,9 @@ import java.io.FileReader import scala.collection.mutable.{Map => MMap} import net.minecraft.block.Block import java.lang.Exception +import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage +import net.minecraft.item.ItemStack +import BlockMicroMaterial.createAndRegister object ConfigContent { @@ -113,8 +116,6 @@ object ConfigContent def load() { - import BlockMicroMaterial._ - for(i <- 0 until idMap.length) { val block = Block.blocksList(i) @@ -139,4 +140,25 @@ object ConfigContent nameMap.foreach(e => System.err.println("Warning: Unable to add micro material for block with unlocalised name "+e._1+" as it doesn't exist")) } + + def handleIMC(messages:Seq[IMCMessage]) { + messages.filter(_.key == "microMaterial").foreach{msg => + + def error(s:String) { + System.err.println("Invalid microblock IMC message from "+msg.getSender+": "+s) + } + + if(msg.getMessageType != classOf[ItemStack]) + error("value is not an instanceof ItemStack") + else { + val stack = msg.getItemStackValue + if(stack.itemID >= Block.blocksList.length || Block.blocksList(stack.itemID) == null) + System.err.println("Invalid blockID: "+stack.itemID) + else if(stack.getItemDamage < 0 || stack.getItemDamage >= 16) + System.err.println("Invalid metadata: "+stack.getItemDamage) + else + createAndRegister(Block.blocksList(stack.itemID), stack.getItemDamage) + } + } + } } \ No newline at end of file diff --git a/codechicken/microblock/MicroMaterialRegistry.scala b/codechicken/microblock/MicroMaterialRegistry.scala index 9b17183..2e84a97 100644 --- a/codechicken/microblock/MicroMaterialRegistry.scala +++ b/codechicken/microblock/MicroMaterialRegistry.scala @@ -110,6 +110,7 @@ object MicroMaterialRegistry private val nameMap:HashMap[String, Int] = new HashMap private var idMap:Array[(String, IMicroMaterial)] = _ private val idWriter = new IDWriter + private var state = 0 private val highlightRenderers = ListBuffer[IMicroHighlightRenderer]() @@ -152,7 +153,7 @@ object MicroMaterialRegistry highlightRenderers+=handler } - def setupIDMap() + private [microblock] def setupIDMap() { idMap = typeMap.toList.sortBy(_._1).toArray idWriter.setMax(idMap.length) diff --git a/codechicken/microblock/handler/EventHandler.scala b/codechicken/microblock/handler/EventHandler.scala index a6f0e8c..2723803 100644 --- a/codechicken/microblock/handler/EventHandler.scala +++ b/codechicken/microblock/handler/EventHandler.scala @@ -28,7 +28,7 @@ object MicroblockEventHandler extends IConnectionHandler @SideOnly(Side.CLIENT) def postTextureStitch(event:TextureStitchEvent.Post) { - if(Loader.instance.hasReachedState(LoaderState.POSTINITIALIZATION)) + if(event.map.textureType == 0 && Loader.instance.hasReachedState(LoaderState.POSTINITIALIZATION)) MicroMaterialRegistry.getIdMap.foreach(e => e._2.loadIcons()) } diff --git a/codechicken/microblock/handler/ModContainer.scala b/codechicken/microblock/handler/ModContainer.scala index bec8d1f..ae99328 100644 --- a/codechicken/microblock/handler/ModContainer.scala +++ b/codechicken/microblock/handler/ModContainer.scala @@ -4,10 +4,7 @@ import cpw.mods.fml.common.Mod import cpw.mods.fml.common.event.FMLInitializationEvent import cpw.mods.fml.common.event.FMLPreInitializationEvent import cpw.mods.fml.common.SidedProxy -import cpw.mods.fml.common.Mod.PreInit -import cpw.mods.fml.common.Mod.Init -import cpw.mods.fml.common.Mod.PostInit -import cpw.mods.fml.common.Mod.ServerAboutToStart +import cpw.mods.fml.common.Mod.EventHandler import cpw.mods.fml.common.event.FMLServerAboutToStartEvent import cpw.mods.fml.common.network.NetworkMod import cpw.mods.fml.common.Mod.Instance @@ -15,12 +12,14 @@ import codechicken.microblock.MicroMaterialRegistry import codechicken.microblock.DefaultContent import cpw.mods.fml.common.event.FMLPostInitializationEvent import codechicken.microblock.ConfigContent +import cpw.mods.fml.common.event.FMLInterModComms.IMCEvent +import scala.collection.JavaConversions._ @Mod(modid = "ForgeMicroblock", acceptedMinecraftVersions = "[1.6.4]", dependencies="required-after:ForgeMultipart;after:*", modLanguage="scala") object MicroblockMod { - @PreInit + @EventHandler def preInit(event:FMLPreInitializationEvent) { MicroblockProxy.preInit() @@ -28,23 +27,29 @@ object MicroblockMod ConfigContent.parse(event.getModConfigurationDirectory) } - @Init + @EventHandler def init(event:FMLInitializationEvent) { MicroblockProxy.init() ConfigContent.load() - MicroMaterialRegistry.setupIDMap() } - @PostInit + @EventHandler def postInit(event:FMLPostInitializationEvent) { MicroblockProxy.postInit() + MicroMaterialRegistry.setupIDMap() } - @ServerAboutToStart + @EventHandler def beforeServerStart(event:FMLServerAboutToStartEvent) { MicroMaterialRegistry.setupIDMap() } + + @EventHandler + def handleIMC(event:IMCEvent) + { + ConfigContent.handleIMC(event.getMessages) + } } \ No newline at end of file