2014-01-11 04:31:21 +01:00
package resonantinduction.electrical ;
import ic2.api.item.Items ;
import java.util.Map ;
import net.minecraft.block.Block ;
import net.minecraft.item.Item ;
import net.minecraft.item.ItemStack ;
import net.minecraft.tileentity.TileEntity ;
import net.minecraft.tileentity.TileEntityFurnace ;
import net.minecraftforge.oredict.ShapedOreRecipe ;
import net.minecraftforge.oredict.ShapelessOreRecipe ;
import resonantinduction.core.Reference ;
import resonantinduction.core.ResonantInduction ;
import resonantinduction.core.ResonantInductionTabs ;
import resonantinduction.core.Settings ;
import resonantinduction.core.part.BlockMachinePart ;
import resonantinduction.electrical.battery.BlockBattery ;
import resonantinduction.electrical.battery.ItemBlockBattery ;
import resonantinduction.electrical.battery.TileBattery ;
import resonantinduction.electrical.generator.solar.BlockSolarPanel ;
import resonantinduction.electrical.generator.solar.TileSolarPanel ;
import resonantinduction.electrical.levitator.BlockLevitator ;
import resonantinduction.electrical.levitator.ItemBlockContractor ;
import resonantinduction.electrical.levitator.TileEMLevitator ;
import resonantinduction.electrical.multimeter.ItemMultimeter ;
import resonantinduction.electrical.tesla.BlockTesla ;
import resonantinduction.electrical.tesla.TileTesla ;
import resonantinduction.electrical.transformer.ItemTransformer ;
import resonantinduction.electrical.wire.EnumWireMaterial ;
import resonantinduction.electrical.wire.ItemWire ;
import resonantinduction.mechanical.grinder.BlockGrinderWheel ;
import resonantinduction.mechanical.grinder.TileGrinderWheel ;
import resonantinduction.mechanical.grinder.TilePurifier ;
import resonantinduction.old.mechanics.furnace.BlockAdvancedFurnace ;
import resonantinduction.old.mechanics.furnace.TileAdvancedFurnace ;
import resonantinduction.old.mechanics.purifier.BlockPurifier ;
import calclavia.lib.network.PacketHandler ;
import calclavia.lib.recipe.UniversalRecipe ;
import cpw.mods.fml.common.Loader ;
import cpw.mods.fml.common.Mod ;
import cpw.mods.fml.common.Mod.EventHandler ;
import cpw.mods.fml.common.Mod.Instance ;
import cpw.mods.fml.common.ModMetadata ;
import cpw.mods.fml.common.ObfuscationReflectionHelper ;
import cpw.mods.fml.common.SidedProxy ;
import cpw.mods.fml.common.event.FMLInitializationEvent ;
import cpw.mods.fml.common.event.FMLPostInitializationEvent ;
import cpw.mods.fml.common.event.FMLPreInitializationEvent ;
import cpw.mods.fml.common.network.NetworkMod ;
import cpw.mods.fml.common.network.NetworkRegistry ;
import cpw.mods.fml.common.registry.GameRegistry ;
/ * *
* Resonant Induction Electrical Module
*
* @author Calclavia
*
* /
@Mod ( modid = Electrical . ID , name = Electrical . NAME , version = Reference . VERSION , dependencies = " before:ThermalExpansion;after: " + ResonantInduction . ID + " |Mechanical;required-after: " + ResonantInduction . ID )
@NetworkMod ( channels = Reference . CHANNEL , clientSideRequired = true , serverSideRequired = false , packetHandler = PacketHandler . class )
public class Electrical
{
/** Mod Information */
public static final String ID = " ResonantInduction|Electrical " ;
public static final String NAME = Reference . NAME + " Electrical " ;
@Instance ( ID )
public static Electrical INSTANCE ;
2014-07-14 04:53:45 +02:00
@SidedProxy ( clientSide = " ClientProxy " , serverSide = " CommonProxy " )
2014-01-11 04:31:21 +01:00
public static CommonProxy proxy ;
@Mod.Metadata ( ID )
public static ModMetadata metadata ;
// Energy
private static Item itemPartWire ;
public static Item itemMultimeter ;
public static Item itemTransformer ;
public static Block blockTesla ;
public static Block blockBattery ;
// Generators
public static Block blockSolarPanel ;
// Machines
public static Block blockAdvancedFurnace , blockMachinePart , blockGrinderWheel , blockPurifier ;
// Transport
public static Block blockEMContractor ;
@EventHandler
public void preInit ( FMLPreInitializationEvent evt )
{
NetworkRegistry . instance ( ) . registerGuiHandler ( this , proxy ) ;
2014-07-14 22:20:02 +02:00
Settings . config . load ( ) ;
2014-01-11 04:31:21 +01:00
// Energy
itemPartWire = new ItemWire ( Settings . getNextItemID ( ) ) ;
itemMultimeter = new ItemMultimeter ( Settings . getNextItemID ( ) ) ;
itemTransformer = new ItemTransformer ( Settings . getNextItemID ( ) ) ;
blockTesla = new BlockTesla ( Settings . getNextBlockID ( ) ) ;
blockBattery = new BlockBattery ( Settings . getNextBlockID ( ) ) ;
// Transport
blockEMContractor = new BlockLevitator ( ) ;
// Machines
blockMachinePart = new BlockMachinePart ( ) ;
blockGrinderWheel = new BlockGrinderWheel ( Settings . getNextBlockID ( ) ) ;
blockPurifier = new BlockPurifier ( Settings . getNextBlockID ( ) ) ;
// Generator
blockSolarPanel = new BlockSolarPanel ( ) ;
if ( Settings . REPLACE_FURNACE )
{
blockAdvancedFurnace = BlockAdvancedFurnace . createNew ( false ) ;
GameRegistry . registerBlock ( blockAdvancedFurnace , " ri_ " + blockAdvancedFurnace . getUnlocalizedName ( ) ) ;
GameRegistry . registerTileEntity ( TileAdvancedFurnace . class , " ri_ " + blockAdvancedFurnace . getUnlocalizedName ( ) ) ;
}
2014-07-14 22:20:02 +02:00
Settings . config . save ( ) ;
2014-01-11 04:31:21 +01:00
GameRegistry . registerItem ( itemMultimeter , itemMultimeter . getUnlocalizedName ( ) ) ;
GameRegistry . registerItem ( itemTransformer , itemTransformer . getUnlocalizedName ( ) ) ;
GameRegistry . registerBlock ( blockSolarPanel , blockSolarPanel . getUnlocalizedName ( ) ) ;
GameRegistry . registerBlock ( blockTesla , blockTesla . getUnlocalizedName ( ) ) ;
GameRegistry . registerBlock ( blockBattery , ItemBlockBattery . class , blockBattery . getUnlocalizedName ( ) ) ;
GameRegistry . registerBlock ( blockGrinderWheel , blockGrinderWheel . getUnlocalizedName ( ) ) ;
GameRegistry . registerBlock ( blockPurifier , blockPurifier . getUnlocalizedName ( ) ) ;
GameRegistry . registerBlock ( blockMachinePart , blockMachinePart . getUnlocalizedName ( ) ) ;
GameRegistry . registerBlock ( blockEMContractor , ItemBlockContractor . class , blockEMContractor . getUnlocalizedName ( ) ) ;
// Tiles
GameRegistry . registerTileEntity ( TileTesla . class , blockTesla . getUnlocalizedName ( ) ) ;
GameRegistry . registerTileEntity ( TileBattery . class , blockBattery . getUnlocalizedName ( ) ) ;
GameRegistry . registerTileEntity ( TileSolarPanel . class , blockSolarPanel . getUnlocalizedName ( ) ) ;
GameRegistry . registerTileEntity ( TilePurifier . class , blockPurifier . getUnlocalizedName ( ) ) ;
GameRegistry . registerTileEntity ( TileGrinderWheel . class , blockGrinderWheel . getUnlocalizedName ( ) ) ;
GameRegistry . registerTileEntity ( TileEMLevitator . class , blockEMContractor . getUnlocalizedName ( ) ) ;
/ * *
* Set reference itemstacks
* /
ResonantInductionTabs . ITEMSTACK = new ItemStack ( blockBattery ) ;
for ( EnumWireMaterial material : EnumWireMaterial . values ( ) )
{
material . setWire ( itemPartWire ) ;
}
proxy . preInit ( ) ;
2014-07-14 22:20:02 +02:00
Settings . config . save ( ) ;
2014-01-11 04:31:21 +01:00
}
@EventHandler
public void init ( FMLInitializationEvent evt )
{
Settings . setModMetadata ( metadata , ID , NAME ) ;
MultipartElectrical . INSTANCE = new MultipartElectrical ( ) ;
proxy . init ( ) ;
}
@EventHandler
public void postInit ( FMLPostInitializationEvent evt )
{
/ * *
* Recipes
* /
final ItemStack defaultWire = EnumWireMaterial . IRON . getWire ( ) ;
/** Tesla - by Jyzarc */
GameRegistry . addRecipe ( new ShapedOreRecipe ( blockTesla , " WEW " , " C " , " I " , 'W' , defaultWire , 'E' , Item . eyeOfEnder , 'C' , UniversalRecipe . BATTERY . get ( ) , 'I' , UniversalRecipe . PRIMARY_PLATE . get ( ) ) ) ;
/** Multimeter */
GameRegistry . addRecipe ( new ShapedOreRecipe ( itemMultimeter , " WWW " , " ICI " , 'W' , defaultWire , 'C' , UniversalRecipe . BATTERY . get ( ) , 'I' , UniversalRecipe . PRIMARY_METAL . get ( ) ) ) ;
/** Battery */
GameRegistry . addRecipe ( new ShapedOreRecipe ( blockBattery , " III " , " IRI " , " III " , 'R' , Block . blockRedstone , 'I' , UniversalRecipe . PRIMARY_METAL . get ( ) ) ) ;
/** Wires **/
GameRegistry . addRecipe ( new ShapedOreRecipe ( EnumWireMaterial . COPPER . getWire ( 3 ) , " MMM " , 'M' , " ingotCopper " ) ) ;
GameRegistry . addRecipe ( new ShapedOreRecipe ( EnumWireMaterial . TIN . getWire ( 3 ) , " MMM " , 'M' , " ingotTin " ) ) ;
GameRegistry . addRecipe ( new ShapedOreRecipe ( EnumWireMaterial . IRON . getWire ( 3 ) , " MMM " , 'M' , Item . ingotIron ) ) ;
GameRegistry . addRecipe ( new ShapedOreRecipe ( EnumWireMaterial . ALUMINUM . getWire ( 3 ) , " MMM " , 'M' , " ingotAluminum " ) ) ;
GameRegistry . addRecipe ( new ShapedOreRecipe ( EnumWireMaterial . SILVER . getWire ( ) , " MMM " , 'M' , " ingotSilver " ) ) ;
GameRegistry . addRecipe ( new ShapedOreRecipe ( EnumWireMaterial . SUPERCONDUCTOR . getWire ( 3 ) , " MMM " , 'M' , " ingotSuperconductor " ) ) ;
GameRegistry . addRecipe ( new ShapedOreRecipe ( EnumWireMaterial . SUPERCONDUCTOR . getWire ( 3 ) , " MMM " , " MEM " , " MMM " , 'M' , Item . ingotGold , 'E' , Item . eyeOfEnder ) ) ;
/** Wire Compatiblity **/
if ( Loader . isModLoaded ( " IC2 " ) )
{
GameRegistry . addRecipe ( new ShapelessOreRecipe ( EnumWireMaterial . COPPER . getWire ( ) , Items . getItem ( " copperCableItem " ) ) ) ;
GameRegistry . addRecipe ( new ShapelessOreRecipe ( EnumWireMaterial . TIN . getWire ( ) , Items . getItem ( " tinCableItem " ) ) ) ;
GameRegistry . addRecipe ( new ShapelessOreRecipe ( EnumWireMaterial . IRON . getWire ( ) , Items . getItem ( " ironCableItem " ) ) ) ;
GameRegistry . addRecipe ( new ShapelessOreRecipe ( EnumWireMaterial . SUPERCONDUCTOR . getWire ( ) , Items . getItem ( " glassFiberCableItem " ) ) ) ;
}
if ( Loader . isModLoaded ( " Mekanism " ) )
{
GameRegistry . addRecipe ( new ShapelessOreRecipe ( EnumWireMaterial . COPPER . getWire ( ) , " universalCable " ) ) ;
}
proxy . postInit ( ) ;
/** Inject new furnace tile class */
replaceTileEntity ( TileEntityFurnace . class , TileAdvancedFurnace . class ) ;
}
public static void replaceTileEntity ( Class < ? extends TileEntity > findTile , Class < ? extends TileEntity > replaceTile )
{
try
{
Map < String , Class > nameToClassMap = ObfuscationReflectionHelper . getPrivateValue ( TileEntity . class , null , " field_ " + " 70326_a " , " nameToClassMap " , " a " ) ;
Map < Class , String > classToNameMap = ObfuscationReflectionHelper . getPrivateValue ( TileEntity . class , null , " field_ " + " 70326_b " , " classToNameMap " , " b " ) ;
String findTileID = classToNameMap . get ( findTile ) ;
if ( findTileID ! = null )
{
nameToClassMap . put ( findTileID , replaceTile ) ;
classToNameMap . put ( replaceTile , findTileID ) ;
classToNameMap . remove ( findTile ) ;
ResonantInduction . LOGGER . fine ( " Replaced TileEntity: " + findTile ) ;
}
else
{
ResonantInduction . LOGGER . severe ( " Failed to replace TileEntity: " + findTile ) ;
}
}
catch ( Exception e )
{
ResonantInduction . LOGGER . severe ( " Failed to replace TileEntity: " + findTile ) ;
e . printStackTrace ( ) ;
}
}
}