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 liquids with the straw. * Registers a handler for drinking fluids with the straw.
* *
* @param liquidId The block ID the handler handles. * @param fluidId The block ID the handler handles.
* @param liquidDrinkHandler The drink handler instance. * @param fluidDrinkHandler The drink handler instance.
*/ */
public static void registerLiquidDrinkHandler(int liquidId, ILiquidDrinkHandler liquidDrinkHandler) public static void registerFluidDrinkHandler(int fluidId, IFluidDrinkHandler fluidDrinkHandler) {
{ try {
try Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
{ if (registry != null) {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry"); Method reg = registry.getMethod("registerFluidDrinkHandler", int.class, IFluidDrinkHandler.class);
if(registry != null) reg.invoke(registry, fluidId, fluidDrinkHandler);
{ }
Method reg = registry.getMethod("registerLiquidDrinkHandler", int.class, ILiquidDrinkHandler.class); } catch (Exception e) {
reg.invoke(registry, liquidId, liquidDrinkHandler); e.printStackTrace();
} }
} }
catch(Exception e)
{
e.printStackTrace();
}
}
/** /**
* Registers a possible output with the laser drill. * Registers a possible output with the laser drill.
* *
* @param weight Likelihood that this item will be produced. Lower means rarer. * @param weight Likelihood that this item will be produced. Lower means rarer.
* @param drop The thing being produced by the laser drill. * @param drop The thing being produced by the laser drill.
*/ */
public static void registerLaserOre(int weight, ItemStack drop) public static void registerLaserOre(int weight, ItemStack drop) {
{ try {
try Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
{ if (registry != null) {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry"); Method reg = registry.getMethod("registerLaserOre", int.class, ItemStack.class);
if(registry != null) reg.invoke(registry, weight, drop);
{ }
Method reg = registry.getMethod("registerLaserOre", int.class, ItemStack.class); } catch (Exception e) {
reg.invoke(registry, weight, drop); e.printStackTrace();
} }
} }
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. * Registers a preferred ore with the laser drill. Focuses with the specified color will make the specified ore more likely.
* Note that this will overwrite existing ore preferences - you may want to coordinate with PC before using this one. * Note that this will overwrite existing ore preferences - you may want to coordinate with PC before using this one.
* Used by MFR itself for vanilla: Black (Coal), Light Blue (Diamond), Lime (Emerald), Yellow (Gold), Brown (Iron), Blue (Lapis), * 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). * Red (Redstone), and White (nether quartz).
* * <p/>
* @param color The color that the preferred ore is being set for. White is 0. * In 2.7 this will be replaced by addLaserPreferredOre, because it'll no longer overwrite existing ore preferences.
* @param ore The ore that will be preferred by the drill when a focus with the specified color is present. *
*/ * @param color The color that the preferred ore is being set for. White is 0.
public static void setLaserPreferredOre(int color, ItemStack ore) * @param ore The ore that will be preferred by the drill when a focus with the specified color is present.
{ */
try @Deprecated
{ public static void setLaserPreferredOre(int color, ItemStack ore) {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry"); try {
if(registry != null) Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
{ if (registry != null) {
Method reg = registry.getMethod("setLaserPreferredOre", int.class, ItemStack.class); Method reg = registry.getMethod("setLaserPreferredOre", int.class, ItemStack.class);
reg.invoke(registry, color, ore); reg.invoke(registry, color, ore);
} }
} } catch (Exception e) {
catch(Exception e) e.printStackTrace();
{ }
e.printStackTrace(); }
}
}
/** /**
* Registers a block ID as a fruit tree log. When the Fruit Picker sees this block on the ground, it will * 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. * begin a search in tree mode for any fruit nearby.
* *
* @param fruitLogBlockId The block ID to mark as a fruit tree log. * @param fruitLogBlockId The block ID to mark as a fruit tree log.
*/ */
public static void registerFruitLogBlockId(Integer fruitLogBlockId) public static void registerFruitLogBlockId(Integer fruitLogBlockId) {
{ try {
try Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
{ if (registry != null) {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry"); Method reg = registry.getMethod("registerFruitLogBlockId", Integer.class);
if(registry != null) reg.invoke(registry, fruitLogBlockId);
{ }
Method reg = registry.getMethod("registerFruitLogBlockId", Integer.class); } catch (Exception e) {
reg.invoke(registry, fruitLogBlockId); e.printStackTrace();
} }
} }
catch(Exception e)
{
e.printStackTrace();
}
}
/** /**
* Registers a fruit for the Fruit Picker. * Registers a fruit for the Fruit Picker.
* *
* @param fruit The fruit to be picked. * @param fruit The fruit to be picked.
*/ */
public static void registerFruit(IFactoryFruit fruit) 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("registerFruit", IFactoryFruit.class); } catch (Exception e) {
reg.invoke(registry, fruit); e.printStackTrace();
} }
} }
catch(Exception e)
{
e.printStackTrace();
}
}
/** /**
* Registers an entity string as an invalid entry for the autospawner. * Registers an entity string as an invalid entry for the autospawner.
* See also: {@link net.minecraft.entity.EntityList}'s classToStringMapping and stringToClassMapping. * See also: {@link net.minecraft.entity.EntityList}'s classToStringMapping and stringToClassMapping.
* *
* @param entityString The entity string to blacklist. * @param entityString The entity string to blacklist.
*/ */
public static void registerAutoSpawnerBlacklist(String entityString) public static void registerAutoSpawnerBlacklist(String entityString) {
{ try {
try Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
{ if (registry != null) {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry"); Method reg = registry.getMethod("registerAutoSpawnerBlacklist", String.class);
if(registry != null) reg.invoke(registry, entityString);
{ }
Method reg = registry.getMethod("registerAutoSpawnerBlacklist", String.class); } catch (Exception e) {
reg.invoke(registry, entityString); e.printStackTrace();
} }
} }
catch(Exception e)
{
e.printStackTrace();
}
}
/** /**
* Registers logic circuit to be usable in the Programmable RedNet Controller. * Registers logic circuit to be usable in the Programmable RedNet Controller.
* *
* @param circuit The circuit to be registered. * @param circuit The circuit to be registered.
*/ */
public static void registerRedNetLogicCircuit(IRedNetLogicCircuit circuit) public static void registerRedNetLogicCircuit(IRedNetLogicCircuit circuit) {
{ try {
try Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
{ if (registry != null) {
Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry"); Method reg = registry.getMethod("registerRedNetLogicCircuit", IRedNetLogicCircuit.class);
if(registry != null) reg.invoke(registry, circuit);
{ }
Method reg = registry.getMethod("registerRedNetLogicCircuit", IRedNetLogicCircuit.class); } catch (Exception e) {
reg.invoke(registry, circuit); e.printStackTrace();
} }
} }
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 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 True if the fruit can be picked * @param z The z-coordinate of the fruit
*/ * @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. * Called by the Fruit Picker before the fruit is picked.
* @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
*/ * @param z The z-coordinate of the fruit
public void prePick(World world, int x, int y, int z); */
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. * 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 * @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
*/ * @param z The z-coordinate of the fruit
public List<ItemStack> getDrops(World world, Random rand, int x, int y, int z); */
public List<ItemStack> getDrops(World world, Random rand, int x, int y, int z);
/** /**
* Called by the Fruit Picker after the fruit is picked. * Called by the Fruit Picker after the fruit is picked.
* @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
*/ * @param z The z-coordinate of the fruit
public void postPick(World world, int x, int y, int z); */
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 entity The entity instance being ground.
* @param random A Random instance.
* @return The drops generated when this entity is killed.
*/
public List<MobDrop> grind(World world, EntityLiving entity, Random random);
/**
* @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.
*/
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 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 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 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 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. * Called to perform an injection.
* @param world The world instance. *
* @param entity The entity being injected. *
* @param syringe The syringe ItemStack. *
* @return True if injection was successful. * @param world The world instance.
*/ * @param entity The entity being injected.
public boolean inject(World world, EntityLiving entity, ItemStack syringe); * @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);
super(weight); _stack = stack;
_stack = stack; }
}
public ItemStack getStack() public ItemStack getStack() {
{ if (_stack == null) return null;
if(_stack == null) return null; return _stack.copy();
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);
super(weight); _mob = savedMob;
_mob = savedMob; }
}
public Entity getMob() public Entity getMob() {
{ if (_mob == null) return null;
if(_mob == null) return null; return _mob;
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. * 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. *
* @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 value is required for. * @param z This block's Z coordinate.
* @param subnet The subnet to get the output value for (0-15). * @param side The side the output value is required for.
* @return The output value. * @param subnet The subnet to get the output value for (0-15).
*/ * @return The output value.
public int getOutputValue(World world, int x, int y, int z, ForgeDirection side, int subnet); */
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. * 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 * Do not issue a network value update from inside this method call; it will be ignored. Issue your updates
* on the next tick. * on the next tick.
* @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 input values are being changed on. * @param z This block's Z coordinate.
* @param inputValues The new set of input values. This array will be 16 elements long. * @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.
public void onInputsChanged(World world, int x, int y, int z, ForgeDirection side, int[] inputValues); */
public void onInputsChanged(World world, int x, int y, int z, ForgeDirection side, int[] inputValues);
/** /**
* Called when the input value to this block changes. Only called if your block is connected in "Single" mode. * Called when the input value to this block changes. Only called if your block is connected in "Single" mode.
* Do not issue a network value update from inside this method call; it will be ignored. Issue your updates * Do not issue a network value update from inside this method call; it will be ignored. Issue your updates
* on the next tick. * on the next tick.
* @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 input values are being changed on. * @param z This block's Z coordinate.
* @param inputValue The new input value * @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); */
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 getOutputPinLabel(int pin);
public void readFromNBT(NBTTagCompound tag); public String getInputPinLabel(int pin);
public void writeToNBT(NBTTagCompound tag);
public String getOutputPinLabel(int pin);
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
} }