mirror of
https://github.com/Ellpeck/ActuallyAdditions.git
synced 2024-06-07 16:13:38 +02:00
114 lines
6.9 KiB
Java
114 lines
6.9 KiB
Java
package powercrystals.minefactoryreloaded.api;
|
|
|
|
import cpw.mods.fml.common.Loader;
|
|
import cpw.mods.fml.common.event.FMLInterModComms;
|
|
import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage;
|
|
|
|
import java.lang.reflect.Constructor;
|
|
import java.lang.reflect.Method;
|
|
|
|
/**
|
|
* @author PowerCrystals
|
|
*
|
|
* Class used to register plants and other farming-related things with MFR. Will do nothing if MFR does not exist.
|
|
*
|
|
*/
|
|
public class FactoryRegistry
|
|
{
|
|
/*
|
|
* This may be called at any time during pre-init, init or post-init, assuming all blocks and items
|
|
* that are being accessed from the registry have been appropriately registered.
|
|
* Possible messages:
|
|
*
|
|
* // Registration:
|
|
* addLaserPreferredOre | NBTTag with an ItemStack saved on it, with the color on the "value" attribute,
|
|
* | A ValuedItem with item and value set.
|
|
* registerAutoSpawnerBlacklist | The String identifier of an entity,
|
|
* | A subclass of EntityLivingBase.
|
|
* registerFertilizable | An instance of IFactoryFertilizable.
|
|
* registerFertilizer | An instance of IFactoryFertilizer.
|
|
* registerFruitLog | The String identifier of a block.
|
|
* registerGrindable | An instance of IFactoryGrindable.
|
|
* registerGrinderBlacklist | A subclass of EntityLivingBase.
|
|
* registerHarvestable | An instance of IFactoryHarvestable.
|
|
* registerLaserOre | NBTTag with an ItemStack saved on it, with the weight on the "value" attribute,
|
|
* | A ValuedItem with item and value set.
|
|
* registerLiquidDrinkHandler | A ValuedItem with key and object set; ILiquidDrinkHandler expected.
|
|
* registerMobEggHandler | An instance of IMobEggHandler.
|
|
* registerPickableFruit | An instance of IFactoryFruit.
|
|
* registerPlantable | An instance of IFactoryPlantable.
|
|
* registerRanchable | An instance of IFactoryRanchable.
|
|
* registerRedNetLogicCircuit | An instance of IRedNetLogicCircuit.
|
|
* registerRubberTreeBiome | The biomeName field of a biome to white list for rubber trees to spawn in.
|
|
* registerSafariNetBlacklist | A subclass of EntityLivingBase.
|
|
* registerSafariNetHandler | An instance of ISafariNetHandler.
|
|
* registerSludgeDrop | NBTTag with an ItemStack saved on it, with the weight on the "value" attribute,
|
|
* | A ValuedItem with item and value set.
|
|
* registerSpawnHandler | An instance of IMobSpawnHandler.
|
|
* registerVillagerTradeMob | An instance of IRandomMobProvider.
|
|
*
|
|
* // Simple implementations:
|
|
* { Harvestables
|
|
* registerHarvestable_Standard | The String identifier of a block.
|
|
* registerHarvestable_Log | The String identifier of a block.
|
|
* registerHarvestable_Leaves | The String identifier of a block.
|
|
* registerHarvestable_Vine | The String identifier of a block.
|
|
* registerHarvestable_Shrub | The String identifier of a block.
|
|
* registerHarvestable_Mushroom | The String identifier of a block.
|
|
* registerHarvestable_Crop | An ItemStack of a block, with a damage value indicating the meta value to harvest at.
|
|
* | A ValuedItem with value and object set; Block expected.
|
|
* registerHarvestable_Gourd | An NBTTag with the stem and fruit attributes, both String identifiers of blocks.
|
|
* }
|
|
* { Plantables
|
|
* registerPlantable_Standard | An NBTTag with the seed (Item, String identifier), and
|
|
* crop (Block, String identifier) attributes set, optionally
|
|
* also having the meta (Integer, accepted metadata value of the seed item) attribute set.
|
|
* No special checks for location, just sustainability.
|
|
* registerPlantable_Crop | An NBTTag with the seed (Item, String identifier), and
|
|
* crop (Block, String identifier) attributes set, optionally
|
|
* also having the meta (Integer, accepted metadata value of the seed item) attribute set.
|
|
* Will automatically hoe dirt and grass into farmland when planting.
|
|
* registerPlantable_Sapling | An NBTTag with the sapling (Block, String identifier), and optionally
|
|
* the seed (Item, String identifier) attributes set.
|
|
* }
|
|
* { Fertilizer
|
|
* registerFertilizer_Standard | An NBTTag with the fert (Item, String identifier), meta (Integer), and
|
|
* type (Integer, index into FertilizerType.values()) attributes set.
|
|
* }
|
|
* { Fertilizables
|
|
* registerFertilizable_Grass | The String identifier of a block. Will bonemeal the block and expect
|
|
* tall grass be planted above and around it, must be IGrowable. Works with
|
|
* the GrowPlant and Grass type fertilizers, not recommended for crop plants.
|
|
* registerFertilizable_Gourd | The String identifier of a block. Must be IGrowable, and expects identical
|
|
* behavior to vanilla stems. Works with the GrowPlant fertilizers.
|
|
* registerFertilizable_Crop | An NBTTag with the plant (Block, String identifier, IGrowable), and
|
|
* meta (Integer, max growth phase) attributes set, optionally also having
|
|
* the type (Integer, index into FertilizerType) attribute set.
|
|
* registerFertilizable_Cocoa | An NBTTag with the plant (Block, String identifier), and optionally also
|
|
* the type (Integer, index into FertilizerType) attributes set.
|
|
* Expects metadata of the block to exactly match cocoa pods.
|
|
* registerFertilizable_Standard | An NBTTag with the plant (Block, String identifier, IGrowable), and
|
|
* optionally also the type (Integer, index into FertilizerType) attributes set.
|
|
* Expects the block to change when successfully grown (e.g., saplings).
|
|
* }
|
|
*/
|
|
public static void sendMessage(String message, Object value)
|
|
{
|
|
if (!Loader.isModLoaded("MineFactoryReloaded") ||
|
|
Loader.instance().activeModContainer() == null)
|
|
return;
|
|
try
|
|
{
|
|
Method m = FMLInterModComms.class.getDeclaredMethod("enqueueMessage", Object.class, String.class, IMCMessage.class);
|
|
m.setAccessible(true);
|
|
Constructor<IMCMessage> c = IMCMessage.class.getDeclaredConstructor(String.class, Object.class);
|
|
c.setAccessible(true);
|
|
m.invoke(null, Loader.instance().activeModContainer(), "MineFactoryReloaded", c.newInstance(message, value));
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|