2013-12-27 23:59:59 +01:00
|
|
|
package appeng.core;
|
|
|
|
|
|
|
|
import java.lang.reflect.Constructor;
|
|
|
|
import java.lang.reflect.Field;
|
|
|
|
|
|
|
|
import net.minecraft.util.WeightedRandomChestContent;
|
|
|
|
import net.minecraft.world.biome.BiomeGenBase;
|
|
|
|
import net.minecraftforge.common.ChestGenHooks;
|
|
|
|
import net.minecraftforge.common.MinecraftForge;
|
|
|
|
import appeng.api.AEApi;
|
2014-01-20 17:41:37 +01:00
|
|
|
import appeng.api.config.Upgrades;
|
2013-12-27 23:59:59 +01:00
|
|
|
import appeng.api.definitions.Blocks;
|
|
|
|
import appeng.api.definitions.Items;
|
|
|
|
import appeng.api.definitions.Materials;
|
|
|
|
import appeng.api.definitions.Parts;
|
2014-02-02 08:32:10 +01:00
|
|
|
import appeng.api.features.IWirelessTermHandler;
|
2014-02-05 01:49:33 +01:00
|
|
|
import appeng.api.networking.IGridCacheRegistry;
|
2013-12-27 23:59:59 +01:00
|
|
|
import appeng.api.networking.energy.IEnergyGrid;
|
|
|
|
import appeng.api.networking.pathing.IPathingGrid;
|
2014-01-27 05:00:36 +01:00
|
|
|
import appeng.api.networking.security.ISecurityGrid;
|
2013-12-27 23:59:59 +01:00
|
|
|
import appeng.api.networking.spatial.ISpatialCache;
|
|
|
|
import appeng.api.networking.storage.IStorageGrid;
|
|
|
|
import appeng.api.networking.ticking.ITickManager;
|
2014-02-05 01:49:33 +01:00
|
|
|
import appeng.api.parts.IPartHelper;
|
2014-01-24 17:30:57 +01:00
|
|
|
import appeng.api.util.AEColor;
|
2013-12-27 23:59:59 +01:00
|
|
|
import appeng.api.util.AEItemDefinition;
|
|
|
|
import appeng.block.grindstone.BlockCrank;
|
|
|
|
import appeng.block.grindstone.BlockGrinder;
|
2014-01-20 17:41:37 +01:00
|
|
|
import appeng.block.misc.BlockCellWorkbench;
|
2013-12-27 23:59:59 +01:00
|
|
|
import appeng.block.misc.BlockCharger;
|
|
|
|
import appeng.block.misc.BlockCondenser;
|
|
|
|
import appeng.block.misc.BlockInterface;
|
|
|
|
import appeng.block.misc.BlockQuartzTorch;
|
2014-01-27 05:00:36 +01:00
|
|
|
import appeng.block.misc.BlockSecurity;
|
2013-12-27 23:59:59 +01:00
|
|
|
import appeng.block.misc.BlockTinyTNT;
|
|
|
|
import appeng.block.misc.BlockVibrationChamber;
|
|
|
|
import appeng.block.networking.BlockCableBus;
|
|
|
|
import appeng.block.networking.BlockController;
|
|
|
|
import appeng.block.networking.BlockCreativeEnergyCell;
|
|
|
|
import appeng.block.networking.BlockDenseEnergyCell;
|
|
|
|
import appeng.block.networking.BlockEnergyAcceptor;
|
|
|
|
import appeng.block.networking.BlockEnergyCell;
|
2014-02-02 08:32:10 +01:00
|
|
|
import appeng.block.networking.BlockWireless;
|
2013-12-27 23:59:59 +01:00
|
|
|
import appeng.block.qnb.BlockQuantumLinkChamber;
|
|
|
|
import appeng.block.qnb.BlockQuantumRing;
|
2014-01-20 17:41:37 +01:00
|
|
|
import appeng.block.solids.BlockFluix;
|
2013-12-27 23:59:59 +01:00
|
|
|
import appeng.block.solids.BlockMatrixFrame;
|
|
|
|
import appeng.block.solids.BlockQuartz;
|
|
|
|
import appeng.block.solids.BlockQuartzChiseled;
|
|
|
|
import appeng.block.solids.BlockQuartzGlass;
|
|
|
|
import appeng.block.solids.BlockQuartzLamp;
|
|
|
|
import appeng.block.solids.BlockQuartzPillar;
|
|
|
|
import appeng.block.solids.OreQuartz;
|
|
|
|
import appeng.block.solids.OreQuartzCharged;
|
|
|
|
import appeng.block.spatial.BlockSpatialIOPort;
|
|
|
|
import appeng.block.spatial.BlockSpatialPylon;
|
|
|
|
import appeng.block.storage.BlockChest;
|
|
|
|
import appeng.block.storage.BlockDrive;
|
|
|
|
import appeng.block.storage.BlockIOPort;
|
|
|
|
import appeng.core.features.AEFeature;
|
2014-01-01 10:01:38 +01:00
|
|
|
import appeng.core.features.AEFeatureHandler;
|
2014-01-24 17:30:57 +01:00
|
|
|
import appeng.core.features.ColoredItemDefinition;
|
2014-01-01 10:01:38 +01:00
|
|
|
import appeng.core.features.DamagedItemDefinition;
|
2013-12-27 23:59:59 +01:00
|
|
|
import appeng.core.features.IAEFeature;
|
2014-02-09 08:55:44 +01:00
|
|
|
import appeng.core.features.ItemStackSrc;
|
2014-01-28 21:20:19 +01:00
|
|
|
import appeng.core.features.NullItemDefinition;
|
2014-01-24 17:30:57 +01:00
|
|
|
import appeng.core.features.registries.P2PTunnelRegistry;
|
2013-12-27 23:59:59 +01:00
|
|
|
import appeng.core.features.registries.entries.BasicCellHandler;
|
|
|
|
import appeng.core.features.registries.entries.CreativeCellHandler;
|
|
|
|
import appeng.core.localization.GuiText;
|
|
|
|
import appeng.core.localization.PlayerMessages;
|
2014-01-20 17:41:37 +01:00
|
|
|
import appeng.debug.BlockChunkloader;
|
|
|
|
import appeng.debug.BlockItemGen;
|
2013-12-27 23:59:59 +01:00
|
|
|
import appeng.debug.ToolDebugCard;
|
2014-01-01 10:01:38 +01:00
|
|
|
import appeng.debug.ToolReplicatorCard;
|
2013-12-27 23:59:59 +01:00
|
|
|
import appeng.helpers.AETrading;
|
|
|
|
import appeng.helpers.PartPlacement;
|
|
|
|
import appeng.helpers.QuartzWorldGen;
|
|
|
|
import appeng.helpers.TickHandler;
|
|
|
|
import appeng.items.materials.ItemMaterial;
|
|
|
|
import appeng.items.materials.MaterialType;
|
|
|
|
import appeng.items.parts.ItemFacade;
|
|
|
|
import appeng.items.parts.ItemPart;
|
|
|
|
import appeng.items.parts.PartType;
|
|
|
|
import appeng.items.storage.ItemBasicStorageCell;
|
|
|
|
import appeng.items.storage.ItemCreativeStorageCell;
|
|
|
|
import appeng.items.storage.ItemSpatialStorageCell;
|
2014-01-29 06:16:10 +01:00
|
|
|
import appeng.items.tools.ToolBiometricCard;
|
2013-12-27 23:59:59 +01:00
|
|
|
import appeng.items.tools.ToolMemoryCard;
|
2014-01-23 17:28:12 +01:00
|
|
|
import appeng.items.tools.ToolNetworkTool;
|
2013-12-27 23:59:59 +01:00
|
|
|
import appeng.items.tools.powered.ToolChargedStaff;
|
|
|
|
import appeng.items.tools.powered.ToolEntropyManipulator;
|
|
|
|
import appeng.items.tools.powered.ToolMassCannon;
|
2014-01-20 17:41:37 +01:00
|
|
|
import appeng.items.tools.powered.ToolPortableCell;
|
2014-02-02 08:32:10 +01:00
|
|
|
import appeng.items.tools.powered.ToolWirelessTerminal;
|
2013-12-27 23:59:59 +01:00
|
|
|
import appeng.items.tools.quartz.ToolQuartzAxe;
|
|
|
|
import appeng.items.tools.quartz.ToolQuartzCuttingKnife;
|
|
|
|
import appeng.items.tools.quartz.ToolQuartzHoe;
|
|
|
|
import appeng.items.tools.quartz.ToolQuartzPickaxe;
|
|
|
|
import appeng.items.tools.quartz.ToolQuartzSpade;
|
|
|
|
import appeng.items.tools.quartz.ToolQuartzSword;
|
|
|
|
import appeng.items.tools.quartz.ToolQuartzWrench;
|
|
|
|
import appeng.me.cache.EnergyGridCache;
|
|
|
|
import appeng.me.cache.GridStorageCache;
|
|
|
|
import appeng.me.cache.P2PCache;
|
|
|
|
import appeng.me.cache.PathGridCache;
|
2014-01-27 05:00:36 +01:00
|
|
|
import appeng.me.cache.SecurityCache;
|
2013-12-27 23:59:59 +01:00
|
|
|
import appeng.me.cache.SpatialPylonCache;
|
|
|
|
import appeng.me.cache.TickManagerCache;
|
|
|
|
import appeng.me.storage.AEExternalHandler;
|
|
|
|
import appeng.recipes.ores.OreDictionaryHandler;
|
|
|
|
|
|
|
|
import com.google.common.collect.ArrayListMultimap;
|
|
|
|
import com.google.common.collect.Multimap;
|
|
|
|
|
2014-02-09 02:34:52 +01:00
|
|
|
import cpw.mods.fml.common.FMLCommonHandler;
|
2013-12-27 23:59:59 +01:00
|
|
|
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.registry.GameRegistry;
|
|
|
|
import cpw.mods.fml.common.registry.VillagerRegistry;
|
|
|
|
|
|
|
|
public class Registration
|
|
|
|
{
|
|
|
|
|
|
|
|
final public static Registration instance = new Registration();
|
|
|
|
|
|
|
|
public BiomeGenBase storageBiome;
|
|
|
|
|
|
|
|
private Registration() {
|
|
|
|
}
|
|
|
|
|
|
|
|
final private Multimap<AEFeature, Class> featuresToEntities = ArrayListMultimap.create();
|
|
|
|
|
|
|
|
public void PreInit(FMLPreInitializationEvent event)
|
|
|
|
{
|
|
|
|
MinecraftForge.EVENT_BUS.register( OreDictionaryHandler.instance );
|
|
|
|
|
2014-01-20 17:41:37 +01:00
|
|
|
Items items = appeng.core.Api.instance.items();
|
|
|
|
Materials materials = appeng.core.Api.instance.materials();
|
|
|
|
Parts parts = appeng.core.Api.instance.parts();
|
|
|
|
Blocks blocks = appeng.core.Api.instance.blocks();
|
2013-12-27 23:59:59 +01:00
|
|
|
|
2014-01-01 10:01:38 +01:00
|
|
|
AEItemDefinition materialItem = (AEFeatureHandler) addFeature( ItemMaterial.class );
|
|
|
|
|
2013-12-27 23:59:59 +01:00
|
|
|
Class materialClass = materials.getClass();
|
|
|
|
for (MaterialType mat : MaterialType.values())
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
Field f = materialClass.getField( "material" + mat.name() );
|
2014-02-09 08:55:44 +01:00
|
|
|
ItemStackSrc is = ((ItemMaterial) materialItem.item()).createMaterial( mat );
|
2014-01-28 21:20:19 +01:00
|
|
|
if ( is != null )
|
|
|
|
f.set( materials, new DamagedItemDefinition( is ) );
|
|
|
|
else
|
2014-01-28 21:38:06 +01:00
|
|
|
f.set( materials, new NullItemDefinition() );
|
2013-12-27 23:59:59 +01:00
|
|
|
}
|
|
|
|
catch (Throwable err)
|
|
|
|
{
|
|
|
|
AELog.severe( "Error creating material: " + mat.name() );
|
|
|
|
throw new RuntimeException( err );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-01-03 19:30:08 +01:00
|
|
|
AEItemDefinition partItem = (AEFeatureHandler) addFeature( ItemPart.class );
|
|
|
|
|
2013-12-27 23:59:59 +01:00
|
|
|
Class partClass = parts.getClass();
|
2014-01-03 19:30:08 +01:00
|
|
|
for (PartType type : PartType.values())
|
2013-12-27 23:59:59 +01:00
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
2014-01-03 19:30:08 +01:00
|
|
|
Field f = partClass.getField( "part" + type.name() );
|
|
|
|
Enum varients[] = type.getVarients();
|
|
|
|
if ( varients == null )
|
|
|
|
{
|
2014-02-09 08:55:44 +01:00
|
|
|
ItemStackSrc is = ((ItemPart) partItem.item()).createPart( type, null );
|
2014-01-28 21:08:51 +01:00
|
|
|
if ( is != null )
|
|
|
|
f.set( parts, new DamagedItemDefinition( is ) );
|
2014-01-28 21:20:19 +01:00
|
|
|
else
|
|
|
|
f.set( parts, new NullItemDefinition() );
|
2014-01-03 19:30:08 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2014-01-24 17:30:57 +01:00
|
|
|
if ( varients[0] instanceof AEColor )
|
2014-01-03 19:30:08 +01:00
|
|
|
{
|
2014-01-24 17:30:57 +01:00
|
|
|
ColoredItemDefinition def = new ColoredItemDefinition();
|
|
|
|
|
|
|
|
for (Enum v : varients)
|
|
|
|
{
|
2014-02-09 08:55:44 +01:00
|
|
|
ItemStackSrc is = ((ItemPart) partItem.item()).createPart( type, v );
|
2014-01-28 21:08:51 +01:00
|
|
|
if ( is != null )
|
|
|
|
def.add( (AEColor) v, is );
|
2014-01-24 17:30:57 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
f.set( parts, def );
|
2014-01-03 19:30:08 +01:00
|
|
|
}
|
|
|
|
}
|
2013-12-27 23:59:59 +01:00
|
|
|
}
|
|
|
|
catch (Throwable err)
|
|
|
|
{
|
2014-01-03 19:30:08 +01:00
|
|
|
AELog.severe( "Error creating part: " + type.name() );
|
2013-12-27 23:59:59 +01:00
|
|
|
throw new RuntimeException( err );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// very important block!
|
|
|
|
blocks.blockMultiPart = addFeature( BlockCableBus.class );
|
|
|
|
|
|
|
|
blocks.blockQuartzOre = addFeature( OreQuartz.class );
|
|
|
|
blocks.blockQuartzOreCharged = addFeature( OreQuartzCharged.class );
|
|
|
|
blocks.blockMatrixFrame = addFeature( BlockMatrixFrame.class );
|
|
|
|
blocks.blockQuartz = addFeature( BlockQuartz.class );
|
2014-01-20 17:41:37 +01:00
|
|
|
blocks.blockFluix = addFeature( BlockFluix.class );
|
|
|
|
|
2013-12-27 23:59:59 +01:00
|
|
|
blocks.blockQuartzGlass = addFeature( BlockQuartzGlass.class );
|
|
|
|
blocks.blockQuartzVibrantGlass = addFeature( BlockQuartzLamp.class );
|
|
|
|
blocks.blockQuartzPiller = addFeature( BlockQuartzPillar.class );
|
|
|
|
blocks.blockQuartzChiseled = addFeature( BlockQuartzChiseled.class );
|
|
|
|
blocks.blockQuartzTorch = addFeature( BlockQuartzTorch.class );
|
|
|
|
blocks.blockCharger = addFeature( BlockCharger.class );
|
|
|
|
|
|
|
|
blocks.blockGrindStone = addFeature( BlockGrinder.class );
|
|
|
|
blocks.blockCrankHandle = addFeature( BlockCrank.class );
|
2014-02-01 19:13:12 +01:00
|
|
|
// blocks.blockInscriber = addFeature( BlockInscriber.class );
|
2014-02-02 08:32:10 +01:00
|
|
|
blocks.blockWireless = addFeature( BlockWireless.class );
|
2013-12-27 23:59:59 +01:00
|
|
|
blocks.blockTinyTNT = addFeature( BlockTinyTNT.class );
|
|
|
|
|
2014-02-07 21:37:22 +01:00
|
|
|
// blocks.blockQuartzCrystalizer = addFeature(
|
|
|
|
// BlockQuartzCrystalizer.class );
|
2014-02-01 19:13:12 +01:00
|
|
|
// blocks.blockNetworkEmitter = addFeature( BlockNetworkEmitter.class );
|
2013-12-27 23:59:59 +01:00
|
|
|
|
2014-02-07 21:37:22 +01:00
|
|
|
// blocks.blockPatternProvider = addFeature( BlockPatternProvider.class
|
|
|
|
// );
|
|
|
|
// blocks.blockAssemblerFieldWall = addFeature(
|
|
|
|
// BlockContainmentWall.class );
|
2014-02-01 19:13:12 +01:00
|
|
|
// blocks.blockHeatVent = addFeature( BlockHeatVent.class );
|
2014-02-07 21:37:22 +01:00
|
|
|
// blocks.blockCraftingCPU = addFeature( BlockCraftingAccelerator.class
|
|
|
|
// );
|
2013-12-27 23:59:59 +01:00
|
|
|
|
|
|
|
blocks.blockQuantumRing = addFeature( BlockQuantumRing.class );
|
|
|
|
blocks.blockQuantumLink = addFeature( BlockQuantumLinkChamber.class );
|
|
|
|
|
|
|
|
blocks.blockSpatialPylon = addFeature( BlockSpatialPylon.class );
|
|
|
|
blocks.blockSpatialIOPort = addFeature( BlockSpatialIOPort.class );
|
|
|
|
|
|
|
|
blocks.blockController = addFeature( BlockController.class );
|
|
|
|
blocks.blockDrive = addFeature( BlockDrive.class );
|
|
|
|
blocks.blockChest = addFeature( BlockChest.class );
|
|
|
|
blocks.blockInterface = addFeature( BlockInterface.class );
|
2014-01-20 17:41:37 +01:00
|
|
|
blocks.blockCellWorkbench = addFeature( BlockCellWorkbench.class );
|
2013-12-27 23:59:59 +01:00
|
|
|
blocks.blockIOPort = addFeature( BlockIOPort.class );
|
|
|
|
blocks.blockCondenser = addFeature( BlockCondenser.class );
|
|
|
|
blocks.blockEnergyAcceptor = addFeature( BlockEnergyAcceptor.class );
|
|
|
|
blocks.blockVibrationChamber = addFeature( BlockVibrationChamber.class );
|
|
|
|
|
|
|
|
blocks.blockEnergyCell = addFeature( BlockEnergyCell.class );
|
|
|
|
blocks.blockEnergyCellDense = addFeature( BlockDenseEnergyCell.class );
|
|
|
|
blocks.blockEnergyCellCreative = addFeature( BlockCreativeEnergyCell.class );
|
|
|
|
|
2014-01-27 05:00:36 +01:00
|
|
|
blocks.blockSecurity = addFeature( BlockSecurity.class );
|
|
|
|
|
2014-02-07 21:37:22 +01:00
|
|
|
// items.itemEncodedAsemblerPattern = addFeature(
|
|
|
|
// ItemEncodedPattern.class );
|
2013-12-27 23:59:59 +01:00
|
|
|
|
|
|
|
items.itemCellCreative = addFeature( ItemCreativeStorageCell.class );
|
|
|
|
|
|
|
|
items.itemCell1k = addFeature( ItemBasicStorageCell.class, MaterialType.Cell1kPart, 1 );
|
|
|
|
items.itemCell4k = addFeature( ItemBasicStorageCell.class, MaterialType.Cell4kPart, 4 );
|
|
|
|
items.itemCell16k = addFeature( ItemBasicStorageCell.class, MaterialType.Cell16kPart, 16 );
|
|
|
|
items.itemCell64k = addFeature( ItemBasicStorageCell.class, MaterialType.Cell64kPart, 64 );
|
|
|
|
|
|
|
|
items.itemSpatialCell2 = addFeature( ItemSpatialStorageCell.class, MaterialType.Cell2SpatialPart, 2 );
|
|
|
|
items.itemSpatialCell16 = addFeature( ItemSpatialStorageCell.class, MaterialType.Cell16SpatialPart, 16 );
|
|
|
|
items.itemSpatialCell128 = addFeature( ItemSpatialStorageCell.class, MaterialType.Cell128SpatialPart, 128 );
|
|
|
|
|
|
|
|
items.itemCertusQuartzKnife = addFeature( ToolQuartzCuttingKnife.class, AEFeature.CertusQuartzTools );
|
|
|
|
items.itemCertusQuartzWrench = addFeature( ToolQuartzWrench.class, AEFeature.CertusQuartzTools );
|
|
|
|
items.itemCertusQuartzAxe = addFeature( ToolQuartzAxe.class, AEFeature.CertusQuartzTools );
|
|
|
|
items.itemCertusQuartzHoe = addFeature( ToolQuartzHoe.class, AEFeature.CertusQuartzTools );
|
|
|
|
items.itemCertusQuartzPick = addFeature( ToolQuartzPickaxe.class, AEFeature.CertusQuartzTools );
|
|
|
|
items.itemCertusQuartzShovel = addFeature( ToolQuartzSpade.class, AEFeature.CertusQuartzTools );
|
|
|
|
items.itemCertusQuartzSword = addFeature( ToolQuartzSword.class, AEFeature.CertusQuartzTools );
|
|
|
|
|
|
|
|
items.itemNetherQuartzKnife = addFeature( ToolQuartzCuttingKnife.class, AEFeature.NetherQuartzTools );
|
|
|
|
items.itemNetherQuartzWrench = addFeature( ToolQuartzWrench.class, AEFeature.NetherQuartzTools );
|
|
|
|
items.itemNetherQuartzAxe = addFeature( ToolQuartzAxe.class, AEFeature.NetherQuartzTools );
|
|
|
|
items.itemNetherQuartzHoe = addFeature( ToolQuartzHoe.class, AEFeature.NetherQuartzTools );
|
|
|
|
items.itemNetherQuartzPick = addFeature( ToolQuartzPickaxe.class, AEFeature.NetherQuartzTools );
|
|
|
|
items.itemNetherQuartzShovel = addFeature( ToolQuartzSpade.class, AEFeature.NetherQuartzTools );
|
|
|
|
items.itemNetherQuartzSword = addFeature( ToolQuartzSword.class, AEFeature.NetherQuartzTools );
|
|
|
|
|
|
|
|
items.itemMassCannon = addFeature( ToolMassCannon.class );
|
|
|
|
items.itemMemoryCard = addFeature( ToolMemoryCard.class );
|
|
|
|
items.itemChargedStaff = addFeature( ToolChargedStaff.class );
|
|
|
|
items.itemEntropyManipulator = addFeature( ToolEntropyManipulator.class );
|
2014-02-02 08:32:10 +01:00
|
|
|
items.itemWirelessTerminal = addFeature( ToolWirelessTerminal.class );
|
2014-01-20 17:41:37 +01:00
|
|
|
items.itemNetworkTool = addFeature( ToolNetworkTool.class );
|
|
|
|
items.itemPortableCell = addFeature( ToolPortableCell.class );
|
2014-01-29 06:16:10 +01:00
|
|
|
items.itemBiometricCard = addFeature( ToolBiometricCard.class );
|
2013-12-27 23:59:59 +01:00
|
|
|
|
|
|
|
items.itemFacade = addFeature( ItemFacade.class );
|
|
|
|
|
|
|
|
addFeature( ToolDebugCard.class );
|
2014-01-01 10:01:38 +01:00
|
|
|
addFeature( ToolReplicatorCard.class );
|
2014-01-20 17:41:37 +01:00
|
|
|
addFeature( BlockItemGen.class );
|
|
|
|
addFeature( BlockChunkloader.class );
|
2013-12-27 23:59:59 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
private AEItemDefinition addFeature(Class c, Object... Args)
|
|
|
|
{
|
|
|
|
|
|
|
|
try
|
|
|
|
{
|
|
|
|
java.lang.reflect.Constructor[] con = c.getConstructors();
|
|
|
|
Object obj = null;
|
|
|
|
|
|
|
|
for (Constructor conItem : con)
|
|
|
|
{
|
2014-01-01 10:01:38 +01:00
|
|
|
Class paramTypes[] = conItem.getParameterTypes();
|
|
|
|
if ( paramTypes.length == Args.length )
|
|
|
|
{
|
|
|
|
boolean valid = true;
|
|
|
|
|
|
|
|
for (int idx = 0; idx < paramTypes.length; idx++)
|
|
|
|
{
|
|
|
|
Class cz = Args[idx].getClass();
|
|
|
|
if ( !isClassMatch( paramTypes[idx], cz, Args[idx] ) )
|
|
|
|
valid = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( valid )
|
|
|
|
{
|
|
|
|
obj = conItem.newInstance( Args );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2013-12-27 23:59:59 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if ( obj instanceof IAEFeature )
|
|
|
|
{
|
|
|
|
IAEFeature feature = (IAEFeature) obj;
|
|
|
|
|
|
|
|
for (AEFeature f : feature.feature().getFeatures())
|
|
|
|
featuresToEntities.put( f, c );
|
|
|
|
|
|
|
|
feature.feature().register();
|
|
|
|
|
2014-01-30 03:47:55 +01:00
|
|
|
feature.postInit();
|
|
|
|
|
2013-12-27 23:59:59 +01:00
|
|
|
return feature.feature();
|
|
|
|
}
|
|
|
|
else if ( obj == null )
|
|
|
|
throw new RuntimeException( "No valid constructor found." );
|
|
|
|
else
|
|
|
|
throw new RuntimeException( "Non AE Feature Registered" );
|
|
|
|
|
|
|
|
}
|
|
|
|
catch (Throwable e)
|
|
|
|
{
|
|
|
|
AELog.severe( "Error with Feature: " + c.getName() );
|
|
|
|
throw new RuntimeException( e );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-01-01 10:01:38 +01:00
|
|
|
private boolean isClassMatch(Class expected, Class got, Object value)
|
|
|
|
{
|
|
|
|
if ( value == null && !expected.isPrimitive() )
|
|
|
|
return true;
|
|
|
|
|
|
|
|
expected = condense( expected, Boolean.class, Character.class, Byte.class, Short.class, Integer.class, Long.class, Float.class, Double.class );
|
|
|
|
got = condense( got, Boolean.class, Character.class, Byte.class, Short.class, Integer.class, Long.class, Float.class, Double.class );
|
|
|
|
|
|
|
|
if ( expected == got || expected.isAssignableFrom( got ) )
|
|
|
|
return true;
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
private Class condense(Class expected, Class... wrappers)
|
|
|
|
{
|
|
|
|
if ( expected.isPrimitive() )
|
|
|
|
{
|
|
|
|
for (Class clz : wrappers)
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
if ( expected == clz.getField( "TYPE" ).get( null ) )
|
|
|
|
return clz;
|
|
|
|
}
|
|
|
|
catch (Throwable t)
|
|
|
|
{
|
2014-02-07 21:37:22 +01:00
|
|
|
AELog.error( t );
|
2014-01-01 10:01:38 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return expected;
|
|
|
|
}
|
|
|
|
|
2013-12-27 23:59:59 +01:00
|
|
|
public void Init(FMLInitializationEvent event)
|
|
|
|
{
|
2014-02-05 01:49:33 +01:00
|
|
|
IPartHelper ph = AEApi.instance().partHelper();
|
|
|
|
ph.registerNewLayer( "appeng.api.parts.layers.LayerIEnergySink", "ic2.api.energy.tile.IEnergySink" );
|
|
|
|
ph.registerNewLayer( "appeng.api.parts.layers.LayerISidedInventory", "net.minecraft.inventory.ISidedInventory" );
|
|
|
|
ph.registerNewLayer( "appeng.api.parts.layers.LayerIPowerEmitter", "buildcraft.api.power.IPowerEmitter" );
|
|
|
|
ph.registerNewLayer( "appeng.api.parts.layers.LayerIPowerReceptor", "buildcraft.api.power.IPowerReceptor" );
|
|
|
|
ph.registerNewLayer( "appeng.api.parts.layers.LayerIFluidHandler", "net.minecraftforge.fluids.IFluidHandler" );
|
|
|
|
ph.registerNewLayer( "appeng.api.parts.layers.LayerITileStorageMonitorable", "appeng.api.implementations.tiles.ITileStorageMonitorable" );
|
2013-12-27 23:59:59 +01:00
|
|
|
|
2014-02-09 02:34:52 +01:00
|
|
|
FMLCommonHandler.instance().bus().register( TickHandler.instance );
|
2013-12-27 23:59:59 +01:00
|
|
|
MinecraftForge.EVENT_BUS.register( new PartPlacement() );
|
|
|
|
|
2014-02-05 01:49:33 +01:00
|
|
|
IGridCacheRegistry gcr = AEApi.instance().registries().gridCache();
|
|
|
|
gcr.registerGridCache( ITickManager.class, TickManagerCache.class );
|
|
|
|
gcr.registerGridCache( IEnergyGrid.class, EnergyGridCache.class );
|
|
|
|
gcr.registerGridCache( IPathingGrid.class, PathGridCache.class );
|
|
|
|
gcr.registerGridCache( IStorageGrid.class, GridStorageCache.class );
|
|
|
|
gcr.registerGridCache( P2PCache.class, P2PCache.class );
|
|
|
|
gcr.registerGridCache( ISpatialCache.class, SpatialPylonCache.class );
|
|
|
|
gcr.registerGridCache( ISecurityGrid.class, SecurityCache.class );
|
2013-12-27 23:59:59 +01:00
|
|
|
|
|
|
|
AEApi.instance().registries().externalStorage().addExternalStorageInterface( new AEExternalHandler() );
|
|
|
|
|
|
|
|
AEApi.instance().registries().cell().addCellHandler( new BasicCellHandler() );
|
|
|
|
AEApi.instance().registries().cell().addCellHandler( new CreativeCellHandler() );
|
|
|
|
|
2014-01-20 17:41:37 +01:00
|
|
|
AEApi.instance().registries().matterCannon().registerAmmo( AEApi.instance().materials().materialMatterBall.stack( 1 ), 32.0 );
|
2013-12-27 23:59:59 +01:00
|
|
|
|
2014-01-24 17:30:57 +01:00
|
|
|
// default settings..
|
|
|
|
((P2PTunnelRegistry) AEApi.instance().registries().p2pTunnel()).configure();
|
|
|
|
|
2014-02-09 02:34:52 +01:00
|
|
|
// NetworkRegistry.instance().registerGuiHandler( AppEng.instance, GuiBridge.GUI_Handler );
|
2013-12-27 23:59:59 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public void PostInit(FMLPostInitializationEvent event)
|
|
|
|
{
|
|
|
|
// add to localizaiton..
|
|
|
|
PlayerMessages.values();
|
|
|
|
GuiText.values();
|
|
|
|
|
|
|
|
Api.instance.partHelper.initFMPSupport();
|
|
|
|
((BlockCableBus) AEApi.instance().blocks().blockMultiPart.block()).setupTile();
|
|
|
|
|
2014-01-20 17:41:37 +01:00
|
|
|
// IO PORT!
|
|
|
|
Upgrades.SPEED.registerItem( AEApi.instance().blocks().blockIOPort.stack( 1 ), 3 );
|
|
|
|
Upgrades.REDSTONE.registerItem( AEApi.instance().blocks().blockIOPort.stack( 1 ), 1 );
|
|
|
|
|
|
|
|
// partLevelEmitter
|
|
|
|
Upgrades.FUZZY.registerItem( AEApi.instance().parts().partLevelEmitter.stack( 1 ), 1 );
|
|
|
|
|
|
|
|
// partImportBus
|
|
|
|
Upgrades.FUZZY.registerItem( AEApi.instance().parts().partImportBus.stack( 1 ), 1 );
|
|
|
|
Upgrades.REDSTONE.registerItem( AEApi.instance().parts().partImportBus.stack( 1 ), 1 );
|
|
|
|
Upgrades.CAPACITY.registerItem( AEApi.instance().parts().partImportBus.stack( 1 ), 2 );
|
|
|
|
Upgrades.SPEED.registerItem( AEApi.instance().parts().partImportBus.stack( 1 ), 4 );
|
|
|
|
|
|
|
|
// partExportBus
|
|
|
|
Upgrades.FUZZY.registerItem( AEApi.instance().parts().partExportBus.stack( 1 ), 1 );
|
|
|
|
Upgrades.REDSTONE.registerItem( AEApi.instance().parts().partExportBus.stack( 1 ), 1 );
|
|
|
|
Upgrades.CAPACITY.registerItem( AEApi.instance().parts().partExportBus.stack( 1 ), 2 );
|
|
|
|
Upgrades.SPEED.registerItem( AEApi.instance().parts().partExportBus.stack( 1 ), 4 );
|
|
|
|
|
|
|
|
// blockCellWorkbench
|
|
|
|
Upgrades.FUZZY.registerItem( AEApi.instance().items().itemCell1k.stack( 1 ), 1 );
|
|
|
|
Upgrades.INVERTER.registerItem( AEApi.instance().items().itemCell1k.stack( 1 ), 1 );
|
|
|
|
|
|
|
|
Upgrades.FUZZY.registerItem( AEApi.instance().items().itemCell4k.stack( 1 ), 1 );
|
|
|
|
Upgrades.INVERTER.registerItem( AEApi.instance().items().itemCell4k.stack( 1 ), 1 );
|
|
|
|
|
|
|
|
Upgrades.FUZZY.registerItem( AEApi.instance().items().itemCell16k.stack( 1 ), 1 );
|
|
|
|
Upgrades.INVERTER.registerItem( AEApi.instance().items().itemCell16k.stack( 1 ), 1 );
|
|
|
|
|
|
|
|
Upgrades.FUZZY.registerItem( AEApi.instance().items().itemCell64k.stack( 1 ), 1 );
|
|
|
|
Upgrades.INVERTER.registerItem( AEApi.instance().items().itemCell64k.stack( 1 ), 1 );
|
|
|
|
|
|
|
|
// partStorageBus
|
|
|
|
Upgrades.FUZZY.registerItem( AEApi.instance().parts().partStorageBus.stack( 1 ), 1 );
|
|
|
|
Upgrades.INVERTER.registerItem( AEApi.instance().parts().partStorageBus.stack( 1 ), 1 );
|
2014-01-24 17:30:57 +01:00
|
|
|
Upgrades.CAPACITY.registerItem( AEApi.instance().parts().partStorageBus.stack( 1 ), 5 );
|
2014-01-20 17:41:37 +01:00
|
|
|
|
|
|
|
// matter cannon
|
|
|
|
Upgrades.FUZZY.registerItem( AEApi.instance().items().itemMassCannon.stack( 1 ), 1 );
|
|
|
|
Upgrades.INVERTER.registerItem( AEApi.instance().items().itemMassCannon.stack( 1 ), 1 );
|
|
|
|
Upgrades.SPEED.registerItem( AEApi.instance().items().itemMassCannon.stack( 1 ), 4 );
|
|
|
|
|
2014-02-02 08:32:10 +01:00
|
|
|
AEApi.instance().registries().wireless().registerWirelessHandler( (IWirelessTermHandler) AEApi.instance().items().itemWirelessTerminal.item() );
|
|
|
|
|
2014-02-09 06:08:27 +01:00
|
|
|
if ( AEConfig.instance.isFeatureEnabled( AEFeature.ChestLoot ) )
|
2013-12-27 23:59:59 +01:00
|
|
|
{
|
|
|
|
ChestGenHooks d = ChestGenHooks.getInfo( ChestGenHooks.MINESHAFT_CORRIDOR );
|
|
|
|
d.addItem( new WeightedRandomChestContent( AEApi.instance().materials().materialCertusQuartzCrystal.stack( 1 ), 1, 4, 2 ) );
|
|
|
|
d.addItem( new WeightedRandomChestContent( AEApi.instance().materials().materialCertusQuartzDust.stack( 1 ), 1, 4, 2 ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
// add villager trading to black smiths for a few basic materials
|
2014-02-09 06:08:27 +01:00
|
|
|
if ( AEConfig.instance.isFeatureEnabled( AEFeature.VillagerTrading ) )
|
2013-12-27 23:59:59 +01:00
|
|
|
VillagerRegistry.instance().registerVillageTradeHandler( 3, new AETrading() );
|
|
|
|
|
2014-02-09 06:08:27 +01:00
|
|
|
if ( AEConfig.instance.isFeatureEnabled( AEFeature.CertusQuartzWorldGen ) )
|
2014-02-09 02:34:52 +01:00
|
|
|
GameRegistry.registerWorldGenerator( new QuartzWorldGen(), 0 );
|
2013-12-27 23:59:59 +01:00
|
|
|
|
|
|
|
}
|
|
|
|
}
|