mirror of
https://github.com/GTNewHorizons/ForestryMC.git
synced 2026-11-14 01:04:12 +00:00
Multifarm support for all plant based crops. Plants/Tree Fruit ferment-able/squeezable (Add Fluid Vegetable Juice) Seeds squeezable into Seed Oil Honey squeezable into Honey Beeswax can be made into wax capsules Grain crops can be used for Compost HarvestCraft Integration part 2 Add Basic Orchard Tube (Apple Infused) Supports all trees, bark and fruit-ish All crops should now be supported Vegetables produce Vegetable juice and go into the Vegetables tube Everything else ground based goes to the Wheat(Crop) tube Lastminute typos are the best. mezz - Have regular orchard handle HarvestCraft too
353 lines
16 KiB
Java
353 lines
16 KiB
Java
/*******************************************************************************
|
|
* Copyright (c) 2011-2014 SirSengir.
|
|
* All rights reserved. This program and the accompanying materials
|
|
* are made available under the terms of the GNU Lesser Public License v3
|
|
* which accompanies this distribution, and is available at
|
|
* http://www.gnu.org/licenses/lgpl-3.0.txt
|
|
*
|
|
* Various Contributors including, but not limited to:
|
|
* SirSengir (original work), CovertJaguar, Player, Binnie, MysteriousAges
|
|
******************************************************************************/
|
|
package forestry.plugins;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.init.Blocks;
|
|
import net.minecraft.init.Items;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
|
|
import net.minecraftforge.common.MinecraftForge;
|
|
|
|
import cpw.mods.fml.common.SidedProxy;
|
|
import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage;
|
|
import cpw.mods.fml.common.network.IGuiHandler;
|
|
import cpw.mods.fml.common.registry.GameData;
|
|
import cpw.mods.fml.common.registry.GameRegistry;
|
|
|
|
import forestry.api.circuits.ChipsetManager;
|
|
import forestry.api.circuits.ICircuitLayout;
|
|
import forestry.api.farming.Farmables;
|
|
import forestry.api.farming.IFarmable;
|
|
import forestry.core.circuits.Circuit;
|
|
import forestry.core.circuits.CircuitLayout;
|
|
import forestry.core.config.Config;
|
|
import forestry.core.config.Defaults;
|
|
import forestry.core.config.ForestryBlock;
|
|
import forestry.core.config.ForestryItem;
|
|
import forestry.core.interfaces.IOreDictionaryHandler;
|
|
import forestry.core.interfaces.ISaveEventHandler;
|
|
import forestry.core.items.ItemTypedBlock;
|
|
import forestry.core.proxy.Proxies;
|
|
import forestry.core.utils.ShapedRecipeCustom;
|
|
import forestry.farming.EventHandlerFarming;
|
|
import forestry.farming.FarmHelper;
|
|
import forestry.farming.GuiHandlerFarming;
|
|
import forestry.farming.circuits.CircuitFarmLogic;
|
|
import forestry.farming.gadgets.BlockFarm;
|
|
import forestry.farming.gadgets.BlockMushroom;
|
|
import forestry.farming.gadgets.EnumFarmBlock;
|
|
import forestry.farming.gadgets.TileControl;
|
|
import forestry.farming.gadgets.TileFarmPlain;
|
|
import forestry.farming.gadgets.TileGearbox;
|
|
import forestry.farming.gadgets.TileHatch;
|
|
import forestry.farming.gadgets.TileValve;
|
|
import forestry.farming.items.ItemFarmBlock;
|
|
import forestry.farming.logic.FarmLogicArboreal;
|
|
import forestry.farming.logic.FarmLogicCereal;
|
|
import forestry.farming.logic.FarmLogicCocoa;
|
|
import forestry.farming.logic.FarmLogicGourd;
|
|
import forestry.farming.logic.FarmLogicInfernal;
|
|
import forestry.farming.logic.FarmLogicOrchard;
|
|
import forestry.farming.logic.FarmLogicPeat;
|
|
import forestry.farming.logic.FarmLogicPoale;
|
|
import forestry.farming.logic.FarmLogicShroom;
|
|
import forestry.farming.logic.FarmLogicSucculent;
|
|
import forestry.farming.logic.FarmLogicVegetable;
|
|
import forestry.farming.logic.FarmableGE;
|
|
import forestry.farming.logic.FarmableGenericCrop;
|
|
import forestry.farming.logic.FarmableGenericSapling;
|
|
import forestry.farming.logic.FarmableGourd;
|
|
import forestry.farming.logic.FarmableStacked;
|
|
import forestry.farming.logic.FarmableVanillaSapling;
|
|
import forestry.farming.logic.FarmableVanillaShroom;
|
|
import forestry.farming.proxy.ProxyFarming;
|
|
import forestry.farming.triggers.FarmingTriggers;
|
|
|
|
@Plugin(pluginID = "Farming", name = "Farming", author = "SirSengir", url = Defaults.URL, unlocalizedDescription = "for.plugin.farming.description")
|
|
public class PluginFarming extends ForestryPlugin {
|
|
|
|
@SidedProxy(clientSide = "forestry.farming.proxy.ClientProxyFarming", serverSide = "forestry.farming.proxy.ProxyFarming")
|
|
public static ProxyFarming proxy;
|
|
public static int modelIdFarmBlock;
|
|
public static ItemStack farmFertilizer;
|
|
|
|
@Override
|
|
public void preInit() {
|
|
super.preInit();
|
|
|
|
Farmables.farmInterface = new FarmHelper();
|
|
|
|
ForestryBlock.mushroom.registerBlock(new BlockMushroom(), ItemTypedBlock.class, "mushroom");
|
|
|
|
Farmables.farmables.put("farmArboreal", new ArrayList<IFarmable>());
|
|
Farmables.farmables.get("farmArboreal").add(new FarmableVanillaSapling());
|
|
Farmables.farmables.get("farmArboreal").add(new FarmableGE());
|
|
|
|
Farmables.farmables.put("farmOrchard", new ArrayList<IFarmable>());
|
|
|
|
Farmables.farmables.put("farmShroom", new ArrayList<IFarmable>());
|
|
Farmables.farmables.get("farmShroom").add(new FarmableVanillaShroom(Blocks.brown_mushroom, 0));
|
|
Farmables.farmables.get("farmShroom").add(new FarmableVanillaShroom(Blocks.red_mushroom, 0));
|
|
|
|
Farmables.farmables.put("farmWheat", new ArrayList<IFarmable>());
|
|
Farmables.farmables.get("farmWheat").add(new FarmableGenericCrop(new ItemStack(Items.wheat_seeds), Blocks.wheat, 7));
|
|
|
|
Farmables.farmables.put("farmGourd", new ArrayList<IFarmable>());
|
|
Farmables.farmables.get("farmGourd").add(
|
|
new FarmableGourd(new ItemStack(Items.pumpkin_seeds), new ItemStack(Blocks.pumpkin_stem), new ItemStack(Blocks.pumpkin)));
|
|
Farmables.farmables.get("farmGourd").add(new FarmableGourd(new ItemStack(Items.melon_seeds), new ItemStack(Blocks.melon_stem), new ItemStack(Blocks.melon_block)));
|
|
|
|
Farmables.farmables.put("farmInfernal", new ArrayList<IFarmable>());
|
|
Farmables.farmables.get("farmInfernal").add(new FarmableGenericCrop(new ItemStack(Items.nether_wart), Blocks.nether_wart, 3));
|
|
|
|
Farmables.farmables.put("farmPoales", new ArrayList<IFarmable>());
|
|
Farmables.farmables.get("farmPoales").add(new FarmableStacked(Blocks.reeds, 3));
|
|
|
|
Farmables.farmables.put("farmSucculentes", new ArrayList<IFarmable>());
|
|
Farmables.farmables.get("farmSucculentes").add(new FarmableStacked(Blocks.cactus, 3));
|
|
|
|
Farmables.farmables.put("farmVegetables", new ArrayList<IFarmable>());
|
|
Farmables.farmables.get("farmVegetables").add(new FarmableGenericCrop(new ItemStack(Items.potato), Blocks.potatoes, 7));
|
|
Farmables.farmables.get("farmVegetables").add(new FarmableGenericCrop(new ItemStack(Items.carrot), Blocks.carrots, 7));
|
|
|
|
ForestryBlock.farm.registerBlock(new BlockFarm(), ItemFarmBlock.class, "ffarm");
|
|
/*Item.itemsList[ForestryBlock.farm] = null;
|
|
Item.itemsList[ForestryBlock.farm] = (new ItemFarmBlock(ForestryBlock.farm - 256, "ffarm"));*/
|
|
ForestryBlock.farm.block().setHarvestLevel("pickaxe", 0);
|
|
|
|
proxy.initializeRendering();
|
|
|
|
// Triggers
|
|
if (PluginManager.Module.BUILDCRAFT_STATEMENTS.isEnabled()) {
|
|
FarmingTriggers.initialize();
|
|
}
|
|
|
|
// Layouts
|
|
ICircuitLayout layoutManaged = new CircuitLayout("farms.managed");
|
|
ChipsetManager.circuitRegistry.registerLayout(layoutManaged);
|
|
ICircuitLayout layoutManual = new CircuitLayout("farms.manual");
|
|
ChipsetManager.circuitRegistry.registerLayout(layoutManual);
|
|
}
|
|
|
|
@Override
|
|
public void doInit() {
|
|
super.doInit();
|
|
|
|
GameRegistry.registerTileEntity(TileFarmPlain.class, "forestry.Farm");
|
|
GameRegistry.registerTileEntity(TileGearbox.class, "forestry.FarmGearbox");
|
|
GameRegistry.registerTileEntity(TileHatch.class, "forestry.FarmHatch");
|
|
GameRegistry.registerTileEntity(TileValve.class, "forestry.FarmValve");
|
|
GameRegistry.registerTileEntity(TileControl.class, "forestry.FarmControl");
|
|
|
|
Circuit.farmArborealManaged = new CircuitFarmLogic("managedArboreal", FarmLogicArboreal.class);
|
|
Circuit.farmShroomManaged = new CircuitFarmLogic("managedShroom", FarmLogicShroom.class);
|
|
Circuit.farmPeatManaged = new CircuitFarmLogic("managedPeat", FarmLogicPeat.class);
|
|
Circuit.farmCerealManaged = new CircuitFarmLogic("managedCereal", FarmLogicCereal.class);
|
|
Circuit.farmVegetableManaged = new CircuitFarmLogic("managedVegetable", FarmLogicVegetable.class);
|
|
Circuit.farmInfernalManaged = new CircuitFarmLogic("managedInfernal", FarmLogicInfernal.class);
|
|
|
|
Circuit.farmPeatManual = new CircuitFarmLogic("manualPeat", FarmLogicPeat.class).setManual();
|
|
Circuit.farmShroomManual = new CircuitFarmLogic("manualShroom", FarmLogicShroom.class).setManual();
|
|
Circuit.farmCerealManual = new CircuitFarmLogic("manualCereal", FarmLogicCereal.class).setManual();
|
|
Circuit.farmVegetableManual = new CircuitFarmLogic("manualVegetable", FarmLogicVegetable.class).setManual();
|
|
Circuit.farmSucculentManual = new CircuitFarmLogic("manualSucculent", FarmLogicSucculent.class).setManual();
|
|
Circuit.farmPoalesManual = new CircuitFarmLogic("manualPoales", FarmLogicPoale.class).setManual();
|
|
Circuit.farmGourdManual = new CircuitFarmLogic("manualGourd", FarmLogicGourd.class).setManual();
|
|
Circuit.farmCocoaManual = new CircuitFarmLogic("manualCocoa", FarmLogicCocoa.class).setManual();
|
|
|
|
Circuit.farmOrchardManual = new CircuitFarmLogic("manualOrchard", FarmLogicOrchard.class);
|
|
|
|
MinecraftForge.EVENT_BUS.register(new EventHandlerFarming());
|
|
}
|
|
|
|
@Override
|
|
public void postInit() {
|
|
super.postInit();
|
|
farmFertilizer = ForestryItem.fertilizerCompound.getItemStack();
|
|
}
|
|
|
|
@Override
|
|
public boolean processIMCMessage(IMCMessage message) {
|
|
|
|
if (message.key.equals("add-farmable-sapling")) {
|
|
String[] tokens = message.getStringValue().split("@");
|
|
String errormsg = String.format("Received an invalid 'add-farmable-sapling' request '%s' from mod %s", message.getStringValue(),
|
|
message.getSender());
|
|
if (tokens.length != 2) {
|
|
Proxies.log.info(errormsg + ".");
|
|
return true;
|
|
}
|
|
|
|
if (!Farmables.farmables.containsKey(tokens[0])) {
|
|
Proxies.log.info("%s for non-existent farm %s.", errormsg, tokens[0]);
|
|
return true;
|
|
}
|
|
|
|
String[] items = tokens[1].split("[\\.]+");
|
|
if (items.length != 2 && items.length != 4) {
|
|
Proxies.log.info("%s for farm '%s': id definitions did not match.", errormsg, tokens[0]);
|
|
return true;
|
|
}
|
|
|
|
try {
|
|
Block sapling = GameData.getBlockRegistry().getRaw(items[0]);
|
|
if (sapling == null || sapling == Blocks.air) {
|
|
throw new RuntimeException("can't find block for " + items[0]);
|
|
}
|
|
|
|
if (items.length == 2) {
|
|
Farmables.farmables.get(tokens[0]).add(new FarmableGenericSapling(sapling, Integer.parseInt(items[1])));
|
|
} else {
|
|
Item windfall = GameData.getItemRegistry().getRaw(items[2]);
|
|
if (windfall == null) {
|
|
throw new RuntimeException("can't find item for " + items[2]);
|
|
}
|
|
|
|
Farmables.farmables.get(tokens[0]).add(
|
|
new FarmableGenericSapling(sapling, Integer.parseInt(items[1]),
|
|
new ItemStack(windfall, 1, Integer.parseInt(items[3]))));
|
|
}
|
|
} catch (Exception ex) {
|
|
Proxies.log.info("%s for farm '%s': ", errormsg, tokens[0], ex.getMessage());
|
|
}
|
|
return true;
|
|
|
|
} else if (message.key.equals("add-farmable-crop")) {
|
|
|
|
String[] tokens = message.getStringValue().split("@");
|
|
String errormsg = String.format("Received an invalid 'add-farmable-crop' request '%s' from mod %s", message.getStringValue(), message.getSender());
|
|
if (tokens.length != 2) {
|
|
Proxies.log.info(errormsg + ".");
|
|
return true;
|
|
}
|
|
|
|
if (!Farmables.farmables.containsKey(tokens[0])) {
|
|
Proxies.log.info("%s for non-existent farm %s.", errormsg, tokens[0]);
|
|
return true;
|
|
}
|
|
|
|
String[] items = tokens[1].split("[\\.]+");
|
|
if (items.length != 4) {
|
|
Proxies.log.info("%s for farm '%s': id definitions did not match.", errormsg, tokens[0]);
|
|
return true;
|
|
}
|
|
|
|
try {
|
|
Item seed = GameData.getItemRegistry().getRaw(items[0]);
|
|
if (seed == null) {
|
|
throw new RuntimeException("can't find item for " + items[0]);
|
|
}
|
|
Block crop = GameData.getBlockRegistry().getRaw(items[2]);
|
|
if (crop == null || crop == Blocks.air) {
|
|
throw new RuntimeException("can't find block for " + items[2]);
|
|
}
|
|
|
|
Farmables.farmables.get(tokens[0]).add(
|
|
new FarmableGenericCrop(new ItemStack(seed, 1, Integer.parseInt(items[1])),
|
|
crop,
|
|
Integer.parseInt(items[3])));
|
|
} catch (Exception ex) {
|
|
Proxies.log.info("%s for farm '%s': ", errormsg, tokens[0], ex.getMessage());
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public IGuiHandler getGuiHandler() {
|
|
return new GuiHandlerFarming();
|
|
}
|
|
|
|
@Override
|
|
public ISaveEventHandler getSaveEventHandler() {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public IOreDictionaryHandler getDictionaryHandler() {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
protected void registerItems() {
|
|
}
|
|
|
|
@Override
|
|
protected void registerBackpackItems() {
|
|
}
|
|
|
|
@Override
|
|
protected void registerCrates() {
|
|
}
|
|
|
|
@Override
|
|
protected void registerRecipes() {
|
|
|
|
ItemStack basic = ForestryBlock.farm.getItemStack(1, 0);
|
|
for (EnumFarmBlock block : EnumFarmBlock.values()) {
|
|
NBTTagCompound compound = new NBTTagCompound();
|
|
block.saveToCompound(compound);
|
|
|
|
basic.setTagCompound((NBTTagCompound) compound.copy());
|
|
ShapedRecipeCustom.buildRecipe(basic.copy(), "I#I", "WCW", '#', block.getBase(), 'W', "slabWood", 'C', ForestryItem.tubes.getItemStack(1, 1), 'I', "ingotCopper");
|
|
}
|
|
|
|
ItemStack gearbox = ForestryBlock.farm.getItemStack(1, 2);
|
|
ShapedRecipeCustom.buildRecipe(gearbox, " # ", "TTT", '#', basic, 'T', "gearTin").setPreserveNBT();
|
|
|
|
ItemStack hatch = ForestryBlock.farm.getItemStack(1, 3);
|
|
ShapedRecipeCustom.buildRecipe(hatch, " # ", "TDT", '#', basic, 'T', "gearTin", 'D', Blocks.trapdoor).setPreserveNBT();
|
|
|
|
ItemStack valve = ForestryBlock.farm.getItemStack(1, 4);
|
|
ShapedRecipeCustom.buildRecipe(valve, " # ", "XTX", '#', basic, 'T', "gearTin", 'X', Blocks.glass).setPreserveNBT();
|
|
|
|
ItemStack control = ForestryBlock.farm.getItemStack(1, 5);
|
|
ShapedRecipeCustom.buildRecipe(control, " # ", "XTX", '#', basic, 'T', ForestryItem.tubes.getItemStack(1, 4), 'X', Items.redstone).setPreserveNBT();
|
|
|
|
// Circuits
|
|
ICircuitLayout layoutManaged = ChipsetManager.circuitRegistry.getLayout("forestry.farms.managed");
|
|
ICircuitLayout layoutManual = ChipsetManager.circuitRegistry.getLayout("forestry.farms.manual");
|
|
|
|
ChipsetManager.solderManager.addRecipe(layoutManaged, ForestryItem.tubes.getItemStack(1, 0), Circuit.farmArborealManaged);
|
|
ChipsetManager.solderManager.addRecipe(layoutManaged, ForestryItem.tubes.getItemStack(1, 1), Circuit.farmPeatManaged);
|
|
ChipsetManager.solderManager.addRecipe(layoutManaged, ForestryItem.tubes.getItemStack(1, 2), Circuit.farmCerealManaged);
|
|
ChipsetManager.solderManager.addRecipe(layoutManaged, ForestryItem.tubes.getItemStack(1, 3), Circuit.farmVegetableManaged);
|
|
ChipsetManager.solderManager.addRecipe(layoutManaged, ForestryItem.tubes.getItemStack(1, 7), Circuit.farmInfernalManaged);
|
|
ChipsetManager.solderManager.addRecipe(layoutManaged, ForestryItem.tubes.getItemStack(1, 10), Circuit.farmShroomManaged);
|
|
|
|
ChipsetManager.solderManager.addRecipe(layoutManual, ForestryItem.tubes.getItemStack(1, 0), Circuit.farmOrchardManual);
|
|
ChipsetManager.solderManager.addRecipe(layoutManual, ForestryItem.tubes.getItemStack(1, 1), Circuit.farmPeatManual);
|
|
ChipsetManager.solderManager.addRecipe(layoutManual, ForestryItem.tubes.getItemStack(1, 2), Circuit.farmCerealManual);
|
|
ChipsetManager.solderManager.addRecipe(layoutManual, ForestryItem.tubes.getItemStack(1, 3), Circuit.farmVegetableManual);
|
|
ChipsetManager.solderManager.addRecipe(layoutManual, ForestryItem.tubes.getItemStack(1, 4), Circuit.farmSucculentManual);
|
|
ChipsetManager.solderManager.addRecipe(layoutManual, ForestryItem.tubes.getItemStack(1, 5), Circuit.farmPoalesManual);
|
|
ChipsetManager.solderManager.addRecipe(layoutManual, ForestryItem.tubes.getItemStack(1, 6), Circuit.farmGourdManual);
|
|
ChipsetManager.solderManager.addRecipe(layoutManual, ForestryItem.tubes.getItemStack(1, 10), Circuit.farmShroomManual);
|
|
ChipsetManager.solderManager.addRecipe(layoutManual, ForestryItem.tubes.getItemStack(1, 11), Circuit.farmCocoaManual);
|
|
|
|
if (PluginIC2.resin != null && PluginIC2.rubberwood != null) {
|
|
ChipsetManager.solderManager.addRecipe(layoutManual, ForestryItem.tubes.getItemStack(1, 8), Circuit.farmRubberManual);
|
|
}
|
|
|
|
if (PluginExtraUtilities.ExUEnderLilly != null && Config.isExUtilEnderLilyEnabled()) {
|
|
ChipsetManager.solderManager.addRecipe(layoutManaged, ForestryItem.tubes.getItemStack(1, 12), Circuit.farmEnderManaged);
|
|
}
|
|
}
|
|
}
|