Updated the MFR API, closes #70, #72

This commit is contained in:
Adubbz 2013-09-21 20:30:47 +10:00
parent 2c394e2722
commit 44d521401d
28 changed files with 1053 additions and 992 deletions

View File

@ -0,0 +1,74 @@
package powercrystals.minefactoryreloaded.api;
import net.minecraft.item.ItemStack;
import java.lang.reflect.Method;
/**
* @author PowerCrystals
* <p/>
* Class used to register plants and other farming-related things with MFR. Will do nothing if MFR does not exist, but your mod should be set to load
* after MFR or things may not work properly.
* <p/>
* To avoid breaking the API, additional FarmingRegistry##s will appear on major MFR versions that contain API additions. On a Minecraft version change,
* these will be rolled back into this class.
*/
public class FactoryRegistry27 {
/**
* Registers a grindable entity with the Grinder using the new grinder interface. This method will be renamed to the standard "registerGrindable"
* on MC 1.6.
*
* @param grindable The entity to grind.
*/
public static void registerGrindable(IFactoryGrindable2 grindable) {
try {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if (registry != null) {
Method reg = registry.getMethod("registerGrindable", IFactoryGrindable2.class);
reg.invoke(registry, grindable);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Registers a grindable entity with the Grinder using the new grinder interface. This method will be renamed to the standard "registerGrindable"
* on MC 1.6.
*
* @param grindable The entity to grind.
*/
public static void registerGrinderBlacklist(Class<?>... ungrindables) {
try {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if (registry != null) {
Method reg = registry.getMethod("registerGrinderBlacklist", Class[].class);
reg.invoke(registry, (Object[]) ungrindables);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Registers a preferred ore with the laser drill. Focuses with the specified color will make the specified ore more likely.
* Used by MFR itself for vanilla: Black (Coal), Light Blue (Diamond), Lime (Emerald), Yellow (Gold), Brown (Iron), Blue (Lapis),
* Red (Redstone), and White (nether quartz).
* <p/>
* This will replace setLaserPreferredOre on MC 1.6.
*
* @param color The color that the preferred ore is being set for. White is 0.
* @param ore The ore that will be preferred by the drill when a focus with the specified color is present.
*/
public static void addLaserPreferredOre(int color, ItemStack ore) {
try {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if (registry != null) {
Method reg = registry.getMethod("addLaserPreferredOre", int.class, ItemStack.class);
reg.invoke(registry, color, ore);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

View File

@ -1,277 +1,243 @@
package powercrystals.minefactoryreloaded.api; package powercrystals.minefactoryreloaded.api;
import java.lang.reflect.Method;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import powercrystals.minefactoryreloaded.api.rednet.IRedNetLogicCircuit; import powercrystals.minefactoryreloaded.api.rednet.IRedNetLogicCircuit;
import java.lang.reflect.Method;
/** /**
* @author PowerCrystals * @author PowerCrystals
* * <p/>
* Class used to register plants and other farming-related things with MFR. Will do nothing if MFR does not exist, but your mod should be set to load * Class used to register plants and other farming-related things with MFR. Will do nothing if MFR does not exist, but your mod should be set to load
* after MFR or things may not work properly. * after MFR or things may not work properly.
* * <p/>
* To avoid breaking the API, additional FactoryRegistry##s will appear on major MFR versions that contain API additions. On a Minecraft version change,
* these will be rolled back into this class.
* <p/>
* This class will be replaced by FactoryRegistry in 1.6.
*/ */
public class FarmingRegistry public class FarmingRegistry {
{ /**
/** * Registers a plantable object with the Planter.
* Registers a plantable object with the Planter. *
* * @param plantable The thing to plant.
* @param plantable The thing to plant. */
*/ public static void registerPlantable(IFactoryPlantable plantable) {
public static void registerPlantable(IFactoryPlantable plantable) try {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if (registry != null) {
Method reg = registry.getMethod("registerPlantable", IFactoryPlantable.class);
reg.invoke(registry, plantable);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Registers a harvestable block with the Harvester.
*
* @param harvestable The thing to harvest.
*/
public static void registerHarvestable(IFactoryHarvestable harvestable) {
try {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if (registry != null) {
Method reg = registry.getMethod("registerHarvestable", IFactoryHarvestable.class);
reg.invoke(registry, harvestable);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Registers a fertilizable block with the Fertilizer.
*
* @param fertilizable The thing to fertilize.
*/
public static void registerFertilizable(IFactoryFertilizable fertilizable) {
try {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if (registry != null) {
Method reg = registry.getMethod("registerFertilizable", IFactoryFertilizable.class);
reg.invoke(registry, fertilizable);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Registers a fertilizer item Fertilizer.
*
* @param fertilizable The thing to fertilize with.
*/
public static void registerFertilizer(IFactoryFertilizer fertilizer) {
try {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if (registry != null) {
Method reg = registry.getMethod("registerFertilizer", IFactoryFertilizer.class);
reg.invoke(registry, fertilizer);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Registers a ranchable entity with the Rancher.
*
* @param ranchable The entity to ranch.
*/
public static void registerRanchable(IFactoryRanchable ranchable) {
try {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if (registry != null) {
Method reg = registry.getMethod("registerRanchable", IFactoryRanchable.class);
reg.invoke(registry, ranchable);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Registers a grindable entity with the Grinder.
*
* @param grindable The entity to grind.
*/
@SuppressWarnings("deprecation")
public static void registerGrindable(IFactoryGrindable grindable) {
try {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if (registry != null) {
Method reg = registry.getMethod("registerGrindable", IFactoryGrindable.class);
reg.invoke(registry, grindable);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Registers a possible output with the sludge boiler.
*
* @param weight Likelihood that this item will be produced. Lower means rarer.
* @param drop The thing being produced by the sludge boiler.
*/
public static void registerSludgeDrop(int weight, ItemStack drop) {
try {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if (registry != null) {
Method reg = registry.getMethod("registerSludgeDrop", int.class, ItemStack.class);
reg.invoke(registry, weight, drop);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Registers specific food to use in the Breeder (instead of wheat) for a given mob.
*
* @param entityToBreed Entity this food will be used with.
* @param food The item to use when breeding this entity.
*/
public static void registerBreederFood(Class<?> entityToBreed, ItemStack food) {
try {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if (registry != null) {
Method reg = registry.getMethod("registerBreederFood", Class.class, ItemStack.class);
reg.invoke(registry, entityToBreed, food);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Registers a Safari Net handler to properly serialize a type of mob.
*
* @param handler The Safari Net handler.
*/
public static void registerSafariNetHandler(ISafariNetHandler handler) {
try {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if (registry != null) {
Method reg = registry.getMethod("registerSafariNetHandler", ISafariNetHandler.class);
reg.invoke(registry, handler);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Registers a mob egg handler, which allows the Safari Net to properly change colors.
*
* @param handler The mob egg handler
*/
public static void registerMobEggHandler(IMobEggHandler handler) {
try {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if (registry != null) {
Method reg = registry.getMethod("registerMobEggHandler", IMobEggHandler.class);
reg.invoke(registry, handler);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Allows Rubber Trees to spawn in the specified biome.
*
* @param biome The biome name.
*/
public static void registerRubberTreeBiome(String biome) {
try {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if (registry != null) {
Method reg = registry.getMethod("registerRubberTreeBiome", String.class);
reg.invoke(registry, biome);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Bans an entity class from being collected by Safari Nets
*
* @param blacklistedEntity Class to blacklist
*/
public static void registerSafariNetBlacklist(Class<?> blacklistedEntity) {
try {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if (registry != null) {
Method reg = registry.getMethod("registerSafariNetBlacklist", Class.class);
reg.invoke(registry, blacklistedEntity);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Bans an entity class from being automatically ground by the Grinder
*
* @param blacklistedEntity Class to blacklist
*/
/*public static void registerGrinderBlacklist(Class<?> blacklistedEntity)
{ {
try try
{ {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry"); Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if(registry != null) if(registry != null)
{ {
Method reg = registry.getMethod("registerPlantable", IFactoryPlantable.class); Method reg = registry.getMethod("registerGrinderBlacklist", Class.class);
reg.invoke(registry, plantable);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* Registers a harvestable block with the Harvester.
*
* @param harvestable The thing to harvest.
*/
public static void registerHarvestable(IFactoryHarvestable harvestable)
{
try
{
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if(registry != null)
{
Method reg = registry.getMethod("registerHarvestable", IFactoryHarvestable.class);
reg.invoke(registry, harvestable);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* Registers a fertilizable block with the Fertilizer.
*
* @param fertilizable The thing to fertilize.
*/
public static void registerFertilizable(IFactoryFertilizable fertilizable)
{
try
{
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if(registry != null)
{
Method reg = registry.getMethod("registerFertilizable", IFactoryFertilizable.class);
reg.invoke(registry, fertilizable);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* Registers a fertilizer item Fertilizer.
*
* @param fertilizable The thing to fertilize with.
*/
public static void registerFertilizer(IFactoryFertilizer fertilizer)
{
try
{
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if(registry != null)
{
Method reg = registry.getMethod("registerFertilizer", IFactoryFertilizer.class);
reg.invoke(registry, fertilizer);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* Registers a ranchable entity with the Rancher.
*
* @param ranchable The entity to ranch.
*/
public static void registerRanchable(IFactoryRanchable ranchable)
{
try
{
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if(registry != null)
{
Method reg = registry.getMethod("registerRanchable", IFactoryRanchable.class);
reg.invoke(registry, ranchable);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* Registers a grindable entity with the Grinder.
*
* @param grindable The entity to grind.
*/
public static void registerGrindable(IFactoryGrindable grindable)
{
try
{
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if(registry != null)
{
Method reg = registry.getMethod("registerGrindable", IFactoryGrindable.class);
reg.invoke(registry, grindable);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* Registers a possible output with the sludge boiler.
*
* @param weight Likelihood that this item will be produced. Lower means rarer.
* @param drop The thing being produced by the sludge boiler.
*/
public static void registerSludgeDrop(int weight, ItemStack drop)
{
try
{
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if(registry != null)
{
Method reg = registry.getMethod("registerSludgeDrop", int.class, ItemStack.class);
reg.invoke(registry, weight, drop);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* Registers specific food to use in the Breeder (instead of wheat) for a given mob.
*
* @param entityToBreed Entity this food will be used with.
* @param food The item to use when breeding this entity.
*/
public static void registerBreederFood(Class<?> entityToBreed, ItemStack food)
{
try
{
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if(registry != null)
{
Method reg = registry.getMethod("registerBreederFood", Class.class, ItemStack.class);
reg.invoke(registry, entityToBreed, food);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* Registers a Safari Net handler to properly serialize a type of mob.
*
* @param handler The Safari Net handler.
*/
public static void registerSafariNetHandler(ISafariNetHandler handler)
{
try
{
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if(registry != null)
{
Method reg = registry.getMethod("registerSafariNetHandler", ISafariNetHandler.class);
reg.invoke(registry, handler);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* Registers a mob egg handler, which allows the Safari Net to properly change colors.
*
* @param handler The mob egg handler
*/
public static void registerMobEggHandler(IMobEggHandler handler)
{
try
{
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if(registry != null)
{
Method reg = registry.getMethod("registerMobEggHandler", IMobEggHandler.class);
reg.invoke(registry, handler);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* Allows Rubber Trees to spawn in the specified biome.
*
* @param biome The biome name.
*/
public static void registerRubberTreeBiome(String biome)
{
try
{
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if(registry != null)
{
Method reg = registry.getMethod("registerRubberTreeBiome", String.class);
reg.invoke(registry, biome);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* Bans an entity class from being collected by Safari Nets
*
* @param blacklistedEntity Class to blacklist
*/
public static void registerSafariNetBlacklist(Class<?> blacklistedEntity)
{
try
{
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if(registry != null)
{
Method reg = registry.getMethod("registerSafariNetBlacklist", Class.class);
reg.invoke(registry, blacklistedEntity); reg.invoke(registry, blacklistedEntity);
} }
} }
@ -279,191 +245,154 @@ public class FarmingRegistry
{ {
e.printStackTrace(); e.printStackTrace();
} }
} }//*/
/** /**
* Registers an entity as a possible output from villager random safari nets. Note that the "id" field must be initialized * Registers an entity as a possible output from villager random safari nets. Note that the "id" field must be initialized
* (i.e. with Entity.addEntityID()) for it to work correctly. * (i.e. with Entity.addEntityID()) for it to work correctly.
* *
* @param savedMob A serialized mob that will be unloaded by the safari net * @param savedMob A serialized mob that will be unloaded by the safari net
* @param weight The weight of this mob in the random selection * @param weight The weight of this mob in the random selection
*/ */
public static void registerVillagerTradeMob(IRandomMobProvider mobProvider) public static void registerVillagerTradeMob(IRandomMobProvider mobProvider) {
{ try {
try Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
{ if (registry != null) {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry"); Method reg = registry.getMethod("registerVillagerTradeMob", IRandomMobProvider.class);
if(registry != null) reg.invoke(registry, mobProvider);
{ }
Method reg = registry.getMethod("registerVillagerTradeMob", IRandomMobProvider.class); } catch (Exception e) {
reg.invoke(registry, mobProvider); e.printStackTrace();
} }
} }
catch(Exception e)
{ /**
e.printStackTrace(); * Registers a handler for drinking fluids with the straw.
} *
} * @param fluidId The block ID the handler handles.
* @param fluidDrinkHandler The drink handler instance.
/** */
* Registers a handler for drinking liquids with the straw. public static void registerFluidDrinkHandler(int fluidId, IFluidDrinkHandler fluidDrinkHandler) {
* try {
* @param liquidId The block ID the handler handles. Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
* @param liquidDrinkHandler The drink handler instance. if (registry != null) {
*/ Method reg = registry.getMethod("registerFluidDrinkHandler", int.class, IFluidDrinkHandler.class);
public static void registerLiquidDrinkHandler(int liquidId, ILiquidDrinkHandler liquidDrinkHandler) reg.invoke(registry, fluidId, fluidDrinkHandler);
{ }
try } catch (Exception e) {
{ e.printStackTrace();
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry"); }
if(registry != null) }
{
Method reg = registry.getMethod("registerLiquidDrinkHandler", int.class, ILiquidDrinkHandler.class); /**
reg.invoke(registry, liquidId, liquidDrinkHandler); * Registers a possible output with the laser drill.
} *
} * @param weight Likelihood that this item will be produced. Lower means rarer.
catch(Exception e) * @param drop The thing being produced by the laser drill.
{ */
e.printStackTrace(); public static void registerLaserOre(int weight, ItemStack drop) {
} try {
} Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if (registry != null) {
/** Method reg = registry.getMethod("registerLaserOre", int.class, ItemStack.class);
* Registers a possible output with the laser drill. reg.invoke(registry, weight, drop);
* }
* @param weight Likelihood that this item will be produced. Lower means rarer. } catch (Exception e) {
* @param drop The thing being produced by the laser drill. e.printStackTrace();
*/ }
public static void registerLaserOre(int weight, ItemStack drop) }
{
try /**
{ * Registers a preferred ore with the laser drill. Focuses with the specified color will make the specified ore more likely.
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry"); * Note that this will overwrite existing ore preferences - you may want to coordinate with PC before using this one.
if(registry != null) * Used by MFR itself for vanilla: Black (Coal), Light Blue (Diamond), Lime (Emerald), Yellow (Gold), Brown (Iron), Blue (Lapis),
{ * Red (Redstone), and White (nether quartz).
Method reg = registry.getMethod("registerLaserOre", int.class, ItemStack.class); * <p/>
reg.invoke(registry, weight, drop); * In 2.7 this will be replaced by addLaserPreferredOre, because it'll no longer overwrite existing ore preferences.
} *
} * @param color The color that the preferred ore is being set for. White is 0.
catch(Exception e) * @param ore The ore that will be preferred by the drill when a focus with the specified color is present.
{ */
e.printStackTrace(); @Deprecated
} public static void setLaserPreferredOre(int color, ItemStack ore) {
} try {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
/** if (registry != null) {
* Registers a preferred ore with the laser drill. Focuses with the specified color will make the specified ore more likely. Method reg = registry.getMethod("setLaserPreferredOre", int.class, ItemStack.class);
* Note that this will overwrite existing ore preferences - you may want to coordinate with PC before using this one. reg.invoke(registry, color, ore);
* Used by MFR itself for vanilla: Black (Coal), Light Blue (Diamond), Lime (Emerald), Yellow (Gold), Brown (Iron), Blue (Lapis), }
* Red (Redstone), and White (nether quartz). } catch (Exception e) {
* e.printStackTrace();
* @param color The color that the preferred ore is being set for. White is 0. }
* @param ore The ore that will be preferred by the drill when a focus with the specified color is present. }
*/
public static void setLaserPreferredOre(int color, ItemStack ore) /**
{ * Registers a block ID as a fruit tree log. When the Fruit Picker sees this block on the ground, it will
try * begin a search in tree mode for any fruit nearby.
{ *
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry"); * @param fruitLogBlockId The block ID to mark as a fruit tree log.
if(registry != null) */
{ public static void registerFruitLogBlockId(Integer fruitLogBlockId) {
Method reg = registry.getMethod("setLaserPreferredOre", int.class, ItemStack.class); try {
reg.invoke(registry, color, ore); Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
} if (registry != null) {
} Method reg = registry.getMethod("registerFruitLogBlockId", Integer.class);
catch(Exception e) reg.invoke(registry, fruitLogBlockId);
{ }
e.printStackTrace(); } catch (Exception e) {
} e.printStackTrace();
} }
}
/**
* Registers a block ID as a fruit tree log. When the Fruit Picker sees this block on the ground, it will /**
* begin a search in tree mode for any fruit nearby. * Registers a fruit for the Fruit Picker.
* *
* @param fruitLogBlockId The block ID to mark as a fruit tree log. * @param fruit The fruit to be picked.
*/ */
public static void registerFruitLogBlockId(Integer fruitLogBlockId) public static void registerFruit(IFactoryFruit fruit) {
{ try {
try Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
{ if (registry != null) {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry"); Method reg = registry.getMethod("registerFruit", IFactoryFruit.class);
if(registry != null) reg.invoke(registry, fruit);
{ }
Method reg = registry.getMethod("registerFruitLogBlockId", Integer.class); } catch (Exception e) {
reg.invoke(registry, fruitLogBlockId); e.printStackTrace();
} }
} }
catch(Exception e)
{ /**
e.printStackTrace(); * Registers an entity string as an invalid entry for the autospawner.
} * See also: {@link net.minecraft.entity.EntityList}'s classToStringMapping and stringToClassMapping.
} *
* @param entityString The entity string to blacklist.
/** */
* Registers a fruit for the Fruit Picker. public static void registerAutoSpawnerBlacklist(String entityString) {
* try {
* @param fruit The fruit to be picked. Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
*/ if (registry != null) {
public static void registerFruit(IFactoryFruit fruit) Method reg = registry.getMethod("registerAutoSpawnerBlacklist", String.class);
{ reg.invoke(registry, entityString);
try }
{ } catch (Exception e) {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry"); e.printStackTrace();
if(registry != null) }
{ }
Method reg = registry.getMethod("registerFruit", IFactoryFruit.class);
reg.invoke(registry, fruit); /**
} * Registers logic circuit to be usable in the Programmable RedNet Controller.
} *
catch(Exception e) * @param circuit The circuit to be registered.
{ */
e.printStackTrace(); public static void registerRedNetLogicCircuit(IRedNetLogicCircuit circuit) {
} try {
} Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if (registry != null) {
/** Method reg = registry.getMethod("registerRedNetLogicCircuit", IRedNetLogicCircuit.class);
* Registers an entity string as an invalid entry for the autospawner. reg.invoke(registry, circuit);
* See also: {@link net.minecraft.entity.EntityList}'s classToStringMapping and stringToClassMapping. }
* } catch (Exception e) {
* @param entityString The entity string to blacklist. e.printStackTrace();
*/ }
public static void registerAutoSpawnerBlacklist(String entityString) }
{
try
{
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if(registry != null)
{
Method reg = registry.getMethod("registerAutoSpawnerBlacklist", String.class);
reg.invoke(registry, entityString);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* Registers logic circuit to be usable in the Programmable RedNet Controller.
*
* @param circuit The circuit to be registered.
*/
public static void registerRedNetLogicCircuit(IRedNetLogicCircuit circuit)
{
try
{
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
if(registry != null)
{
Method reg = registry.getMethod("registerRedNetLogicCircuit", IRedNetLogicCircuit.class);
reg.invoke(registry, circuit);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
} }

View File

@ -2,22 +2,21 @@ package powercrystals.minefactoryreloaded.api;
/** /**
* @author PowerCrystals * @author PowerCrystals
* * <p/>
* Determines what kind of action a given fertilizer can perform. Your IFactoryFertilizable instances should check this before * Determines what kind of action a given fertilizer can perform. Your IFactoryFertilizable instances should check this before
* performing any action to maintain future compatibility. * performing any action to maintain future compatibility.
*/ */
public enum FertilizerType public enum FertilizerType {
{ /**
/** * The fertilizer will fertilize grass.
* The fertilizer will fertilize grass. */
*/ Grass,
Grass, /**
/** * The fertilizer will grow a plant.
* The fertilizer will grow a plant. */
*/ GrowPlant,
GrowPlant, /**
/** * The fertilizer will grow magical crops.
* The fertilizer will grow magical crops. */
*/ GrowMagicalCrop,
GrowMagicalCrop,
} }

View File

@ -2,33 +2,32 @@ package powercrystals.minefactoryreloaded.api;
/** /**
* @author PowerCrystals * @author PowerCrystals
* * <p/>
* Determines what algorithm the Harvester uses when it encounters this IFactoryHarvestable in the world. * Determines what algorithm the Harvester uses when it encounters this IFactoryHarvestable in the world.
*/ */
public enum HarvestType public enum HarvestType {
{ /**
/** * Just break the single block - no special action needed. Carrots, flowers, etc.
* Just break the single block - no special action needed. Carrots, flowers, etc. */
*/ Normal,
Normal, /**
/** * Search for identical blocks above.
* Search for identical blocks above. */
*/ Column,
Column, /**
/** * Search for identical blocks above but leave this bottom one for the future. Cactus and sugarcane.
* Search for identical blocks above but leave this bottom one for the future. Cactus and sugarcane. */
*/ LeaveBottom,
LeaveBottom, /**
/** * This block is the base of a tree and the harvester should enter tree-cutting mode.
* This block is the base of a tree and the harvester should enter tree-cutting mode. */
*/ Tree,
Tree, /**
/** * This block is the base of the tree and the harvester should enter tree-cutting mode, but the tree grows upside-down.
* This block is the base of the tree and the harvester should enter tree-cutting mode, but the tree grows upside-down. */
*/ TreeFlipped,
TreeFlipped, /**
/** * This block is part of a tree as above, but leaves are cut before tree logs so that leaves do not decay more than necessary.
* This block is part of a tree as above, but leaves are cut before tree logs so that leaves do not decay more than necessary. */
*/ TreeLeaf
TreeLeaf
} }

View File

@ -2,25 +2,24 @@ package powercrystals.minefactoryreloaded.api;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
public interface IDeepStorageUnit public interface IDeepStorageUnit {
{ /**
/** * @return A populated ItemStack with stackSize for the full amount of materials in the DSU. May have a stackSize > getMaxStackSize().
* @return A populated ItemStack with stackSize for the full amount of materials in the DSU. May have a stackSize > getMaxStackSize(). */
*/ ItemStack getStoredItemType();
ItemStack getStoredItemType();
/**
/** * Sets the total amount of the item currently being stored, or zero if it wants to remove all items.
* Sets the total amount of the item currently being stored, or zero if it wants to remove all items. */
*/ void setStoredItemCount(int amount);
void setStoredItemCount(int amount);
/**
/** * Sets the type of the stored item and initializes the number of stored items to count. Will overwrite any existing stored items.
* Sets the type of the stored item and initializes the number of stored items to count. Will overwrite any existing stored items. */
*/ void setStoredItemType(int itemID, int meta, int Count);
void setStoredItemType(int itemID, int meta, int Count);
/**
/** * @return The maximum number of items the DSU can hold.
* @return The maximum number of items the DSU can hold. */
*/ int getMaxStoredCount();
int getMaxStoredCount();
} }

View File

@ -1,40 +1,39 @@
package powercrystals.minefactoryreloaded.api; package powercrystals.minefactoryreloaded.api;
import java.util.Random;
import net.minecraft.world.World; import net.minecraft.world.World;
import java.util.Random;
/** /**
* @author PowerCrystals * @author PowerCrystals
* * <p/>
* Defines a fertilizable block, and the process to fertilize it. You can assume that you will never have to check that block ID matches the one returned by * Defines a fertilizable block, and the process to fertilize it. You can assume that you will never have to check that block ID matches the one returned by
* getFertilizableBlockId(). * getFertilizableBlockId().
*/ */
public interface IFactoryFertilizable public interface IFactoryFertilizable {
{ /**
/** * @return The block ID this instance is managing.
* @return The block ID this instance is managing. */
*/ public int getFertilizableBlockId();
public int getFertilizableBlockId();
/**
/** * @param world The world this block belongs to.
* @param world The world this block belongs to. * @param x The X coordinate of this block.
* @param x The X coordinate of this block. * @param y The Y coordinate of this block.
* @param y The Y coordinate of this block. * @param z The Z coordinate of this block.
* @param z The Z coordinate of this block. * @param fertilizerType The kind of fertilizer being used.
* @param fertilizerType The kind of fertilizer being used. * @return True if the block at (x,y,z) can be fertilized with the given type of fertilizer.
* @return True if the block at (x,y,z) can be fertilized with the given type of fertilizer. */
*/ public boolean canFertilizeBlock(World world, int x, int y, int z, FertilizerType fertilizerType);
public boolean canFertilizeBlock(World world, int x, int y, int z, FertilizerType fertilizerType);
/**
/** * @param world The world this block belongs to.
* @param world The world this block belongs to. * @param rand A Random instance to use when fertilizing, if necessary.
* @param rand A Random instance to use when fertilizing, if necessary. * @param x The X coordinate of this block.
* @param x The X coordinate of this block. * @param y The Y coordinate of this block.
* @param y The Y coordinate of this block. * @param z The Z coordinate of this block.
* @param z The Z coordinate of this block. * @param fertilizerType The kind of fertilizer being used.
* @param fertilizerType The kind of fertilizer being used. * @return True if fertilization was successful. If false, the Fertilizer will not consume a fertilizer item and will not drain power.
* @return True if fertilization was successful. If false, the Fertilizer will not consume a fertilizer item and will not drain power. */
*/ public boolean fertilize(World world, Random rand, int x, int y, int z, FertilizerType fertilizerType);
public boolean fertilize(World world, Random rand, int x, int y, int z, FertilizerType fertilizerType);
} }

View File

@ -4,30 +4,29 @@ import net.minecraft.item.ItemStack;
/** /**
* @author PowerCrystals * @author PowerCrystals
* * <p/>
* Defines a fertilizer item for use in the Fertilizer. * Defines a fertilizer item for use in the Fertilizer.
*/ */
public interface IFactoryFertilizer public interface IFactoryFertilizer {
{ /**
/** * @return The ID of this fertilizer item.
* @return The ID of this fertilizer item. */
*/ int getFertilizerId();
int getFertilizerId();
/**
/** * @return The metadata of this fertilizer item.
* @return The metadata of this fertilizer item. */
*/ int getFertilizerMeta();
int getFertilizerMeta();
/**
/** * @return The type of fertilizer this is.
* @return The type of fertilizer this is. */
*/ FertilizerType getFertilizerType();
FertilizerType getFertilizerType();
/**
/** * Called when a fertilization is successful. If you set the ItemStack size to 0, it will be deleted by the fertilizer.
* Called when a fertilization is successful. If you set the ItemStack size to 0, it will be deleted by the fertilizer. *
* * @param fertilizer The ItemStack used to fertilize.
* @param fertilizer The ItemStack used to fertilize. */
*/ void consume(ItemStack fertilizer);
void consume(ItemStack fertilizer);
} }

View File

@ -1,69 +1,72 @@
package powercrystals.minefactoryreloaded.api; package powercrystals.minefactoryreloaded.api;
import java.util.List;
import java.util.Random;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.world.World; import net.minecraft.world.World;
import java.util.List;
import java.util.Random;
/** /**
* Defines a fruit entry for the Fruit Picker. * Defines a fruit entry for the Fruit Picker.
*
* @author powercrystals
* *
* @author powercrystals
*/ */
public interface IFactoryFruit public interface IFactoryFruit {
{ /**
/** * @return The block ID this fruit has in the world.
* @return The block ID this fruit has in the world. */
*/ public int getSourceBlockId();
public int getSourceBlockId();
/**
/** * Used to determine if this fruit can be picked (is it ripe yet, etc)
* Used to determine if this fruit can be picked (is it ripe yet, etc) *
* @param world The world where the fruit is being picked * @param world The world where the fruit is being picked
* @param x The x-coordinate of the fruit * @param x The x-coordinate of the fruit
* @param y The y-coordinate of the fruit * @param y The y-coordinate of the fruit
* @param z The z-coordinate of the fruit * @param z The z-coordinate of the fruit
* @return True if the fruit can be picked * @return True if the fruit can be picked
*/ */
public boolean canBePicked(World world, int x, int y, int z); public boolean canBePicked(World world, int x, int y, int z);
/** /**
* Called by the Fruit Picker to determine what block to replace the picked block with. Only ID and meta/damage will be used. * Called by the Fruit Picker to determine what block to replace the picked block with. Only ID and meta/damage will be used.
* At the time this method is called, the fruit still exists. Do not pass an item ID as the return value. * At the time this method is called, the fruit still exists. Do not pass an item ID as the return value.
* @param world The world where the fruit is being picked *
* @param x The x-coordinate of the fruit * @param world The world where the fruit is being picked
* @param y The y-coordinate of the fruit * @param x The x-coordinate of the fruit
* @param z The z-coordinate of the fruit * @param y The y-coordinate of the fruit
* @return The block to replace the fruit block with, or null for air. * @param z The z-coordinate of the fruit
*/ * @return The block to replace the fruit block with, or null for air.
public ItemStack getReplacementBlock(World world, int x, int y, int z); */
public ItemStack getReplacementBlock(World world, int x, int y, int z);
/**
* Called by the Fruit Picker before the fruit is picked. /**
* @param world The world where the fruit is being picked * Called by the Fruit Picker before the fruit is picked.
* @param x The x-coordinate of the fruit *
* @param y The y-coordinate of the fruit * @param world The world where the fruit is being picked
* @param z The z-coordinate of the fruit * @param x The x-coordinate of the fruit
*/ * @param y The y-coordinate of the fruit
public void prePick(World world, int x, int y, int z); * @param z The z-coordinate of the fruit
*/
/** public void prePick(World world, int x, int y, int z);
* Called by the Fruit Picker to determine what drops to generate. At the time this method is called, the fruit still exists.
* @param world The world where the fruit is being picked /**
* @param x The x-coordinate of the fruit * Called by the Fruit Picker to determine what drops to generate. At the time this method is called, the fruit still exists.
* @param y The y-coordinate of the fruit *
* @param z The z-coordinate of the fruit * @param world The world where the fruit is being picked
*/ * @param x The x-coordinate of the fruit
public List<ItemStack> getDrops(World world, Random rand, int x, int y, int z); * @param y The y-coordinate of the fruit
* @param z The z-coordinate of the fruit
/** */
* Called by the Fruit Picker after the fruit is picked. public List<ItemStack> getDrops(World world, Random rand, int x, int y, int z);
* @param world The world where the fruit is being picked
* @param x The x-coordinate of the fruit /**
* @param y The y-coordinate of the fruit * Called by the Fruit Picker after the fruit is picked.
* @param z The z-coordinate of the fruit *
*/ * @param world The world where the fruit is being picked
public void postPick(World world, int x, int y, int z); * @param x The x-coordinate of the fruit
* @param y The y-coordinate of the fruit
* @param z The z-coordinate of the fruit
*/
public void postPick(World world, int x, int y, int z);
} }

View File

@ -1,29 +1,30 @@
package powercrystals.minefactoryreloaded.api; package powercrystals.minefactoryreloaded.api;
import java.util.List;
import java.util.Random;
import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLiving;
import net.minecraft.world.World; import net.minecraft.world.World;
import java.util.List;
import java.util.Random;
/** /**
* @author PowerCrystals * @author PowerCrystals
* * <p/>
* Defines a grindable entity for the Grinder. * Defines a grindable entity for the Grinder.
*/ */
public interface IFactoryGrindable @Deprecated
{ public interface IFactoryGrindable {
/** /**
* @return The class that this grindable instance is handling. This must be a subtype of EntityLiving or the entity will never * @return The class that this grindable instance is handling. This must be a subtype of EntityLiving or the entity will never
* be noticed by the Grinder. * be noticed by the Grinder.
*/ */
public Class<?> getGrindableEntity(); public Class<?> getGrindableEntity();
/** /**
* @param world The world this entity is in. * @param world The world this entity is in.
* @param entity The entity instance being ground. * @param entity The entity instance being ground.
* @param random A Random instance. * @param random A Random instance.
* @return The drops generated when this entity is killed. * @return The drops generated when this entity is killed.
*/ */
public List<MobDrop> grind(World world, EntityLiving entity, Random random); public List<MobDrop> grind(World world, EntityLiving entity, Random random);
} }

View File

@ -0,0 +1,37 @@
package powercrystals.minefactoryreloaded.api;
import net.minecraft.entity.EntityLiving;
import net.minecraft.world.World;
import java.util.List;
import java.util.Random;
/**
* @author PowerCrystals
* <p/>
* Defines a grindable entity for the Grinder.
*/
@SuppressWarnings("deprecation")
public interface IFactoryGrindable2 extends IFactoryGrindable {
/**
* @return The class that this grindable instance is handling. This must be a subtype of EntityLiving or the entity will never
* be noticed by the Grinder.
*/
@Override
public Class<?> getGrindableEntity();
/**
* @param world The world this entity is in.
* @param entity The entity instance being ground.
* @param random A Random instance.
* @return The drops generated when this entity is killed.
*/
@Override
public List<MobDrop> grind(World world, EntityLiving entity, Random random);
/**
* @param entity The entity instance being ground.
* @return Whether this entity has been fully processed or not.
*/
public boolean processEntity(EntityLiving entity);
}

View File

@ -1,71 +1,72 @@
package powercrystals.minefactoryreloaded.api; package powercrystals.minefactoryreloaded.api;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Random; import java.util.Random;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
/** /**
* @author PowerCrystals * @author PowerCrystals
* * <p/>
* Defines a harvestable block for the Harvester. * Defines a harvestable block for the Harvester.
*/ */
public interface IFactoryHarvestable public interface IFactoryHarvestable {
{ /**
/** * @return The block ID this harvestable instance is managing.
* @return The block ID this harvestable instance is managing. */
*/ public int getPlantId();
public int getPlantId();
/**
/** * @return The type of harvest the Harvester should perform on this block.
* @return The type of harvest the Harvester should perform on this block. */
*/ public HarvestType getHarvestType();
public HarvestType getHarvestType();
/**
/** * @return Whether or not the Harvester should break the block when harvesting. If false, no changes will be performed by the Harvester itself.
* @return Whether or not the Harvester should break the block when harvesting. If false, no changes will be performed by the Harvester itself. */
*/ public boolean breakBlock();
public boolean breakBlock();
/**
/** * @param world The world this block is in.
* @param world The world this block is in. * @param harvesterSettings The harvester's current settings. Do not modify these.
* @param harvesterSettings The harvester's current settings. Do not modify these. * @param x The X coordinate of the block being harvested.
* @param x The X coordinate of the block being harvested. * @param y The Y coordinate of the block being harvested.
* @param y The Y coordinate of the block being harvested. * @param z The Z coordinate of the block being harvested.
* @param z The Z coordinate of the block being harvested. * @return True if this block can be harvested.
* @return True if this block can be harvested. */
*/ public boolean canBeHarvested(World world, Map<String, Boolean> harvesterSettings, int x, int y, int z);
public boolean canBeHarvested(World world, Map<String, Boolean> harvesterSettings, int x, int y, int z);
/**
/** * @param world The world this block is in.
* @param world The world this block is in. * @param rand A Random instance to use when generating drops.
* @param rand A Random instance to use when generating drops. * @param harvesterSettings The harvester's current settings. Do not modify these.
* @param harvesterSettings The harvester's current settings. Do not modify these. * @param x The X coordinate of the block being harvested.
* @param x The X coordinate of the block being harvested. * @param y The Y coordinate of the block being harvested.
* @param y The Y coordinate of the block being harvested. * @param z The Z coordinate of the block being harvested.
* @param z The Z coordinate of the block being harvested. * @return The drops generated by breaking this block. For a default implementation, calling Block.getBlockDropped() is usually sufficient.
* @return The drops generated by breaking this block. For a default implementation, calling Block.getBlockDropped() is usually sufficient. */
*/ public List<ItemStack> getDrops(World world, Random rand, Map<String, Boolean> harvesterSettings, int x, int y, int z);
public List<ItemStack> getDrops(World world, Random rand, Map<String, Boolean> harvesterSettings, int x, int y, int z);
/**
/** * Called before the block is going to be harvested. Usually empty.
* Called before the block is going to be harvested. Usually empty. *
* @param world The world this block is in. * @param world The world this block is in.
* @param x The X coordinate of the block being harvested. * @param x The X coordinate of the block being harvested.
* @param y The Y coordinate of the block being harvested. * @param y The Y coordinate of the block being harvested.
* @param z The Z coordinate of the block being harvested. * @param z The Z coordinate of the block being harvested.
*/ */
public void preHarvest(World world, int x, int y, int z); public void preHarvest(World world, int x, int y, int z);
/** /**
* Called after the block is going to be harvested. Used to re-till soil, for example. * Called after the block is going to be harvested. Used to re-till soil, for example.
* @param world The world this block is in. *
* @param x The X coordinate of the block being harvested. * @param world The world this block is in.
* @param y The Y coordinate of the block being harvested. * @param x The X coordinate of the block being harvested.
* @param z The Z coordinate of the block being harvested. * @param y The Y coordinate of the block being harvested.
*/ * @param z The Z coordinate of the block being harvested.
public void postHarvest(World world, int x, int y, int z); */
public void postHarvest(World world, int x, int y, int z);
} }

View File

@ -5,63 +5,64 @@ import net.minecraft.world.World;
/** /**
* @author PowerCrystals * @author PowerCrystals
* * <p/>
* Defines a plantable object for use in the Planter. * Defines a plantable object for use in the Planter.
*/ */
public interface IFactoryPlantable public interface IFactoryPlantable {
{ /**
/** * @return The block or item ID this plantable is managing.
* @return The block or item ID this plantable is managing. */
*/ public int getSeedId();
public int getSeedId();
/**
/** * @param world The world instance this block or item will be placed into.
* @param world The world instance this block or item will be placed into. * @param x The destination X coordinate.
* @param x The destination X coordinate. * @param y The destination Y coordinate.
* @param y The destination Y coordinate. * @param z The destination Z coordinate.
* @param z The destination Z coordinate. * @param stack The stack being planted.
* @param stack The stack being planted. * @return The block ID that will be placed into the world.
* @return The block ID that will be placed into the world. */
*/ public int getPlantedBlockId(World world, int x, int y, int z, ItemStack stack);
public int getPlantedBlockId(World world, int x, int y, int z, ItemStack stack);
/**
/** * @param world The world instance this block or item will be placed into.
* @param world The world instance this block or item will be placed into. * @param x The destination X coordinate.
* @param x The destination X coordinate. * @param y The destination Y coordinate.
* @param y The destination Y coordinate. * @param z The destination Z coordinate.
* @param z The destination Z coordinate. * @param stack The stack being planted.
* @param stack The stack being planted. * @return The block metadata that will be placed into the world.
* @return The block metadata that will be placed into the world. */
*/ public int getPlantedBlockMetadata(World world, int x, int y, int z, ItemStack stack);
public int getPlantedBlockMetadata(World world, int x, int y, int z, ItemStack stack);
/**
/** * @param world The world instance this block or item will be placed into.
* @param world The world instance this block or item will be placed into. * @param x The destination X coordinate.
* @param x The destination X coordinate. * @param y The destination Y coordinate.
* @param y The destination Y coordinate. * @param z The destination Z coordinate.
* @param z The destination Z coordinate. * @param stack The stack being planted.
* @param stack The stack being planted. * @return True if this plantable can be placed at the provided coordinates.
* @return True if this plantable can be placed at the provided coordinates. */
*/ public boolean canBePlantedHere(World world, int x, int y, int z, ItemStack stack);
public boolean canBePlantedHere(World world, int x, int y, int z, ItemStack stack);
/**
/** * Called before planting is performed. Used to till soil, for example.
* Called before planting is performed. Used to till soil, for example. *
* @param world The world instance this block or item will be placed into. * @param world The world instance this block or item will be placed into.
* @param x The destination X coordinate. * @param x The destination X coordinate.
* @param y The destination Y coordinate. * @param y The destination Y coordinate.
* @param z The destination Z coordinate. * @param z The destination Z coordinate.
* @param stack The stack being planted. * @param stack The stack being planted.
*/ */
public void prePlant(World world, int x, int y, int z, ItemStack stack); public void prePlant(World world, int x, int y, int z, ItemStack stack);
/** /**
* Called after planting is performed. Usually empty. * Called after planting is performed. Usually empty.
* @param world The world instance this block or item will be placed into. *
* @param x The destination X coordinate. * @param world The world instance this block or item will be placed into.
* @param y The destination Y coordinate. * @param x The destination X coordinate.
* @param z The destination Z coordinate. * @param y The destination Y coordinate.
* @param stack The stack being planted. * @param z The destination Z coordinate.
*/ * @param stack The stack being planted.
public void postPlant(World world, int x, int y, int z, ItemStack stack); */
public void postPlant(World world, int x, int y, int z, ItemStack stack);
} }

View File

@ -1,29 +1,28 @@
package powercrystals.minefactoryreloaded.api; package powercrystals.minefactoryreloaded.api;
import java.util.List;
import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLiving;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.world.World; import net.minecraft.world.World;
import java.util.List;
/** /**
* @author PowerCrystals * @author PowerCrystals
* * <p/>
* Defines a ranchable entity for use in the Rancher. * Defines a ranchable entity for use in the Rancher.
*/ */
public interface IFactoryRanchable public interface IFactoryRanchable {
{ /**
/** * @return The entity being ranched. Must be a subtype of EntityLiving.
* @return The entity being ranched. Must be a subtype of EntityLiving. */
*/ public Class<? extends EntityLiving> getRanchableEntity();
public Class<?> getRanchableEntity();
/**
/** * @param world The world this entity is in.
* @param world The world this entity is in. * @param entity The entity instance being ranched.
* @param entity The entity instance being ranched. * @param rancher The rancher instance doing the ranching. Used to access the Rancher's inventory when milking cows, for example.
* @param rancher The rancher instance doing the ranching. Used to access the Rancher's inventory when milking cows, for example. * @return A list of drops.
* @return A list of drops. */
*/ public List<ItemStack> ranch(World world, EntityLiving entity, IInventory rancher);
public List<ItemStack> ranch(World world, EntityLiving entity, IInventory rancher);
} }

View File

@ -2,7 +2,6 @@ package powercrystals.minefactoryreloaded.api;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
public interface ILiquidDrinkHandler public interface IFluidDrinkHandler {
{ public void onDrink(EntityPlayer player);
public void onDrink(EntityPlayer player);
} }

View File

@ -5,14 +5,13 @@ import net.minecraft.item.ItemStack;
/** /**
* @author PowerCrystals * @author PowerCrystals
* * <p/>
* Defines a class that MFR will use to local egg info for a given mob. This is used to color the Safari Net based on the captured mob. * Defines a class that MFR will use to local egg info for a given mob. This is used to color the Safari Net based on the captured mob.
*/ */
public interface IMobEggHandler public interface IMobEggHandler {
{ /**
/** * @param safariNet The Safari Net that is looking for egg info.
* @param safariNet The Safari Net that is looking for egg info. * @return An EntityEggInfo, or null if this instance cannot handle this mob.
* @return An EntityEggInfo, or null if this instance cannot handle this mob. */
*/ public EntityEggInfo getEgg(ItemStack safariNet);
public EntityEggInfo getEgg(ItemStack safariNet);
} }

View File

@ -0,0 +1,13 @@
package powercrystals.minefactoryreloaded.api;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;
public interface INeedleAmmo {
public boolean onHitEntity(EntityPlayer owner, Entity hit, double distance);
public void onHitBlock(EntityPlayer owner, World world, int x, int y, int z, int side, double distance);
public float getSpread();
}

View File

@ -1,11 +1,10 @@
package powercrystals.minefactoryreloaded.api; package powercrystals.minefactoryreloaded.api;
import java.util.List;
import net.minecraft.world.World; import net.minecraft.world.World;
import java.util.List;
public interface IRandomMobProvider
{ public interface IRandomMobProvider {
public List<RandomMob> getRandomMobs(World world); public List<RandomMob> getRandomMobs(World world);
} }

View File

@ -1,28 +1,27 @@
package powercrystals.minefactoryreloaded.api; package powercrystals.minefactoryreloaded.api;
import java.util.List;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import java.util.List;
/** /**
* @author PowerCrystals * @author PowerCrystals
* * <p/>
* Defines an object that can display information about a captured mob in a Safari net. * Defines an object that can display information about a captured mob in a Safari net.
*/ */
public interface ISafariNetHandler public interface ISafariNetHandler {
{ /**
/** * @return The class of mob that this handler applies to.
* @return The class of mob that this handler applies to. */
*/ public Class<?> validFor();
public Class<?> validFor();
/**
/** * @param safariNetStack The Safari Net that is requesting information.
* @param safariNetStack The Safari Net that is requesting information. * @param player The player holding the Safari Net.
* @param player The player holding the Safari Net. * @param infoList The current list of information strings. Add yours to this.
* @param infoList The current list of information strings. Add yours to this. * @param advancedTooltips True if the advanced tooltips option is on.
* @param advancedTooltips True if the advanced tooltips option is on. */
*/ @SuppressWarnings("rawtypes")
@SuppressWarnings("rawtypes") public void addInformation(ItemStack safariNetStack, EntityPlayer player, List infoList, boolean advancedTooltips);
public void addInformation(ItemStack safariNetStack, EntityPlayer player, List infoList, boolean advancedTooltips);
} }

View File

@ -6,26 +6,31 @@ import net.minecraft.world.World;
/** /**
* @author PowerCrystals * @author PowerCrystals
* * <p/>
* Defines a syringe for use in the Vet machine. * Defines a syringe for use in the Vet machine.
*/ */
public interface ISyringe public interface ISyringe {
{ /**
/** * Called when the vet is deciding if it should use this syringe.
* Called when the vet is deciding if it should use this syringe. *
* @param world The world instance. *
* @param entity The entity being injected. *
* @param syringe The syringe ItemStack. * @param world The world instance.
* @return True if the entity can be injected by this syringe. * @param entity The entity being injected.
*/ * @param syringe The syringe ItemStack.
public boolean canInject(World world, EntityLiving entity, ItemStack syringe); * @return True if the entity can be injected by this syringe.
*/
/** public boolean canInject(World world, EntityLiving entity, ItemStack syringe);
* Called to perform an injection.
* @param world The world instance. /**
* @param entity The entity being injected. * Called to perform an injection.
* @param syringe The syringe ItemStack. *
* @return True if injection was successful. *
*/ *
public boolean inject(World world, EntityLiving entity, ItemStack syringe); * @param world The world instance.
* @param entity The entity being injected.
* @param syringe The syringe ItemStack.
* @return True if injection was successful.
*/
public boolean inject(World world, EntityLiving entity, ItemStack syringe);
} }

View File

@ -2,8 +2,7 @@ package powercrystals.minefactoryreloaded.api;
/** /**
* @author PowerCrystals * @author PowerCrystals
* Defines a tool that can rotate MFR machines. Implement on an Item class. Requires no additional work on your part. * Defines a tool that can rotate MFR machines. Implement on an Item class. Requires no additional work on your part.
*/ */
public interface IToolHammer public interface IToolHammer {
{
} }

View File

@ -4,13 +4,12 @@ import net.minecraft.item.ItemStack;
/** /**
* @author PowerCrystals * @author PowerCrystals
* * <p/>
* This interface is like IToolHammer, but is for items that change state on a per-stack basis. Implement this * This interface is like IToolHammer, but is for items that change state on a per-stack basis. Implement this
* instead of IToolHammer - not both! * instead of IToolHammer - not both!
* * <p/>
* This interface will replace IToolHammer in MC 1.6. * This interface will replace IToolHammer in MC 1.6.
*/ */
public interface IToolHammerAdvanced public interface IToolHammerAdvanced {
{ public boolean isActive(ItemStack stack);
public boolean isActive(ItemStack stack);
} }

View File

@ -3,19 +3,16 @@ package powercrystals.minefactoryreloaded.api;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.WeightedRandomItem; import net.minecraft.util.WeightedRandomItem;
public class MobDrop extends WeightedRandomItem public class MobDrop extends WeightedRandomItem {
{ private ItemStack _stack;
private ItemStack _stack;
public MobDrop(int weight, ItemStack stack) {
public MobDrop(int weight, ItemStack stack) super(weight);
{ _stack = stack;
super(weight); }
_stack = stack;
} public ItemStack getStack() {
if (_stack == null) return null;
public ItemStack getStack() return _stack.copy();
{ }
if(_stack == null) return null;
return _stack.copy();
}
} }

View File

@ -3,19 +3,16 @@ package powercrystals.minefactoryreloaded.api;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.util.WeightedRandomItem; import net.minecraft.util.WeightedRandomItem;
public class RandomMob extends WeightedRandomItem public class RandomMob extends WeightedRandomItem {
{ private Entity _mob;
private Entity _mob;
public RandomMob(Entity savedMob, int weight) {
public RandomMob(Entity savedMob, int weight) super(weight);
{ _mob = savedMob;
super(weight); }
_mob = savedMob;
} public Entity getMob() {
if (_mob == null) return null;
public Entity getMob() return _mob;
{ }
if(_mob == null) return null;
return _mob;
}
} }

View File

@ -4,7 +4,7 @@ import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
/** /**
* Defines a Block that can connect to RedNet wires. This must be implemented on your Block class. * Defines a Block that can connect to RedNet cables. This must be implemented on your Block class.
* Note that when you implement this, the RedNet network makes several assumptions about your code - * Note that when you implement this, the RedNet network makes several assumptions about your code -
* primarily, it will not clamp values to 0 <= x <= 15. This means you must be able to accept any * primarily, it will not clamp values to 0 <= x <= 15. This means you must be able to accept any
* possible integer without crashing, even negatives. It will also assume that calling the onInput(s)Changed() * possible integer without crashing, even negatives. It will also assume that calling the onInput(s)Changed()
@ -12,69 +12,79 @@ import net.minecraftforge.common.ForgeDirection;
* output methods in All mode, and will only query the methods contained in this interface in that case. In Single * output methods in All mode, and will only query the methods contained in this interface in that case. In Single
* mode, it will call onInputChanged, and will check for strong power (or weak if in Plate mode) through the vanilla * mode, it will call onInputChanged, and will check for strong power (or weak if in Plate mode) through the vanilla
* method calls. * method calls.
* <p/>
* RedNet cables have their subnets indicated to the user by colored bands on the cable.
* The color of a given subnet is the same as the wool with metadata equal to the subnet number.
* For reference:
* 0:White, 1:Orange, 2:Magenta, 3:LightBlue, 4:Yellow, 5:Lime, 6:Pink, 7:Gray,
* 8:LightGray, 9:Cyan, 10:Purple, 11:Blue, 12:Brown, 13:Green, 14:Red, 15:Black
*/ */
public interface IConnectableRedNet public interface IConnectableRedNet {
{ /**
/** * Returns the connection type of this Block. "All" types will cause getOutputValues() and onInputsChanged() to be used,
* Returns the connection type of this Block. "All" types will cause getOutputValues() and onInputsChanged() to be used, * whereas "Single" types will onInputChanged() to be called for input changes and the normal redstone power output methods
* whereas "Single" types will onInputChanged() to be called for input changes and the normal redstone power output methods * to be called for output. If this value must be changed while the block is alive, it must perform a block update on any
* to be called for output. If this value must be changed while the block is alive, it must perform a block update on any * adjacent RedNet wires.
* adjacent RedNet wires. *
* @param world The world this block is in. * @param world The world this block is in.
* @param x This block's X coordinate. * @param x This block's X coordinate.
* @param y This block's Y coordinate. * @param y This block's Y coordinate.
* @param z This block's Z coordinate. * @param z This block's Z coordinate.
* @param side The side that connection information is required for. * @param side The side that connection information is required for.
* @return The connection type. * @return The connection type.
*/ */
public RedNetConnectionType getConnectionType(World world, int x, int y, int z, ForgeDirection side); public RedNetConnectionType getConnectionType(World world, int x, int y, int z, ForgeDirection side);
/** /**
* Returns the output values of this RedNet node. This array must be 16 elements long. Only called if your block is connected in "All" mode. * Returns the output values of this RedNet node. This array must be 16 elements long. Only called if your block is connected in "All" mode.
* @param world The world this block is in. *
* @param x This block's X coordinate. * @param world The world this block is in.
* @param y This block's Y coordinate. * @param x This block's X coordinate.
* @param z This block's Z coordinate. * @param y This block's Y coordinate.
* @param side The side the output values are required for. * @param z This block's Z coordinate.
* @return The output values. * @param side The side the output values are required for.
*/ * @return The output values.
public int[] getOutputValues(World world, int x, int y, int z, ForgeDirection side); */
public int[] getOutputValues(World world, int x, int y, int z, ForgeDirection side);
/**
* Returns the output value of this RedNet node for a given subnet. Only called if your block is connected in "All" mode. /**
* @param world The world this block is in. * Returns the output value of this RedNet node for a given subnet. Only called if your block is connected in "All" mode.
* @param x This block's X coordinate. *
* @param y This block's Y coordinate. * @param world The world this block is in.
* @param z This block's Z coordinate. * @param x This block's X coordinate.
* @param side The side the output value is required for. * @param y This block's Y coordinate.
* @param subnet The subnet to get the output value for (0-15). * @param z This block's Z coordinate.
* @return The output value. * @param side The side the output value is required for.
*/ * @param subnet The subnet to get the output value for (0-15).
public int getOutputValue(World world, int x, int y, int z, ForgeDirection side, int subnet); * @return The output value.
*/
/** public int getOutputValue(World world, int x, int y, int z, ForgeDirection side, int subnet);
* Called when the input values to this block change. Only called if your block is connected in "All" mode.
* Do not issue a network value update from inside this method call; it will be ignored. Issue your updates /**
* on the next tick. * Called when the input values to this block change. Only called if your block is connected in "All" mode.
* @param world The world this block is in. * Do not issue a network value update from inside this method call; it will be ignored. Issue your updates
* @param x This block's X coordinate. * on the next tick.
* @param y This block's Y coordinate. *
* @param z This block's Z coordinate. * @param world The world this block is in.
* @param side The side the input values are being changed on. * @param x This block's X coordinate.
* @param inputValues The new set of input values. This array will be 16 elements long. * @param y This block's Y coordinate.
*/ * @param z This block's Z coordinate.
public void onInputsChanged(World world, int x, int y, int z, ForgeDirection side, int[] inputValues); * @param side The side the input values are being changed on.
* @param inputValues The new set of input values. This array will be 16 elements long.
/** */
* Called when the input value to this block changes. Only called if your block is connected in "Single" mode. public void onInputsChanged(World world, int x, int y, int z, ForgeDirection side, int[] inputValues);
* Do not issue a network value update from inside this method call; it will be ignored. Issue your updates
* on the next tick. /**
* @param world The world this block is in. * Called when the input value to this block changes. Only called if your block is connected in "Single" mode.
* @param x This block's X coordinate. * Do not issue a network value update from inside this method call; it will be ignored. Issue your updates
* @param y This block's Y coordinate. * on the next tick.
* @param z This block's Z coordinate. *
* @param side The side the input values are being changed on. * @param world The world this block is in.
* @param inputValue The new input value * @param x This block's X coordinate.
*/ * @param y This block's Y coordinate.
public void onInputChanged(World world, int x, int y, int z, ForgeDirection side, int inputValue); * @param z This block's Z coordinate.
* @param side The side the input values are being changed on.
* @param inputValue The new input value
*/
public void onInputChanged(World world, int x, int y, int z, ForgeDirection side, int inputValue);
} }

View File

@ -2,18 +2,20 @@ package powercrystals.minefactoryreloaded.api.rednet;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
public interface IRedNetLogicCircuit public interface IRedNetLogicCircuit {
{ public int getInputCount();
public int getInputCount();
public int getOutputCount();
public int getOutputCount();
public int[] recalculateOutputValues(long worldTime, int[] inputValues);
public int[] recalculateOutputValues(long worldTime, int[] inputValues);
public String getUnlocalizedName();
public String getUnlocalizedName();
public String getInputPinLabel(int pin); public String getInputPinLabel(int pin);
public String getOutputPinLabel(int pin);
public String getOutputPinLabel(int pin);
public void readFromNBT(NBTTagCompound tag);
public void writeToNBT(NBTTagCompound tag); public void readFromNBT(NBTTagCompound tag);
public void writeToNBT(NBTTagCompound tag);
} }

View File

@ -3,29 +3,28 @@ package powercrystals.minefactoryreloaded.api.rednet;
import net.minecraft.world.World; import net.minecraft.world.World;
/** /**
*
* You should not implement this yourself. Instead, use this to look for cables to notify from your IConnectableRedNet as this does not * You should not implement this yourself. Instead, use this to look for cables to notify from your IConnectableRedNet as this does not
* require a block update. This will be implemented on the cable's Block class. * require a block update. This will be implemented on the cable's Block class.
*
*/ */
public interface IRedNetNetworkContainer public interface IRedNetNetworkContainer {
{ /**
/** * Tells the network to recalculate all subnets.
* Tells the network to recalculate all subnets. *
* @param world The world this cable is in. * @param world The world this cable is in.
* @param x The x-coordinate of this cable. * @param x The x-coordinate of this cable.
* @param x The y-coordinate of this cable. * @param x The y-coordinate of this cable.
* @param x The z-coordinate of this cable. * @param x The z-coordinate of this cable.
*/ */
public void updateNetwork(World world, int x, int y, int z); public void updateNetwork(World world, int x, int y, int z);
/** /**
* Tells the network to recalculate a specific subnet. * Tells the network to recalculate a specific subnet.
* @param world The world this cable is in. *
* @param x The x-coordinate of this cable. * @param world The world this cable is in.
* @param x The y-coordinate of this cable. * @param x The x-coordinate of this cable.
* @param x The z-coordinate of this cable. * @param x The y-coordinate of this cable.
* @param subnet The subnet to recalculate. * @param x The z-coordinate of this cable.
*/ * @param subnet The subnet to recalculate.
public void updateNetwork(World world, int x, int y, int z, int subnet); */
public void updateNetwork(World world, int x, int y, int z, int subnet);
} }

View File

@ -0,0 +1,5 @@
package powercrystals.minefactoryreloaded.api.rednet;
public interface IRedNetNoConnection {
}

View File

@ -1,10 +1,9 @@
package powercrystals.minefactoryreloaded.api.rednet; package powercrystals.minefactoryreloaded.api.rednet;
public enum RedNetConnectionType public enum RedNetConnectionType {
{ None,
None, CableSingle,
CableSingle, PlateSingle,
PlateSingle, CableAll,
CableAll, PlateAll
PlateAll
} }