Files
Binnie/src/main/java/binnie/genetics/item/ModuleItem.java
T
2024-12-29 12:37:43 -06:00

339 lines
15 KiB
Java

package binnie.genetics.item;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.ShapedOreRecipe;
import net.minecraftforge.oredict.ShapelessOreRecipe;
import binnie.Binnie;
import binnie.botany.Botany;
import binnie.core.BinnieCore;
import binnie.core.IInitializable;
import binnie.core.Mods;
import binnie.core.liquid.ItemFluidContainer;
import binnie.core.resource.BinnieIcon;
import binnie.extrabees.ExtraBees;
import binnie.extratrees.ExtraTrees;
import binnie.genetics.Genetics;
import binnie.genetics.GeneticsCreativeTab;
import cpw.mods.fml.common.registry.GameRegistry;
import forestry.api.recipes.RecipeManagers;
public class ModuleItem implements IInitializable {
public static BinnieIcon iconNight;
public static BinnieIcon iconDaytime;
public static BinnieIcon iconAllDay;
public static BinnieIcon iconRain;
public static BinnieIcon iconNoRain;
public static BinnieIcon iconSky;
public static BinnieIcon iconNoSky;
public static BinnieIcon iconFire;
public static BinnieIcon iconNoFire;
public static BinnieIcon iconAdd;
public static BinnieIcon iconArrow;
public static BinnieIcon iconAdd0;
public static BinnieIcon iconArrow0;
public static BinnieIcon iconAdd1;
public static BinnieIcon iconArrow1;
@Override
public void preInit() {
Genetics.itemSerum = new ItemSerum();
Genetics.itemSerumArray = new ItemSerumArray();
Genetics.itemSequencer = new ItemSequence();
Genetics.itemGenetics = Binnie.Item.registerMiscItems(GeneticsItems.values(), GeneticsCreativeTab.instance);
Genetics.database = new ItemDatabase();
Genetics.analyst = new ItemAnalyst();
Genetics.registry = new ItemRegistry();
Genetics.masterRegistry = new ItemMasterRegistry();
Binnie.Liquid.createLiquids(GeneticLiquid.values(), ItemFluidContainer.LiquidGenetics);
}
@Override
public void init() {
ModuleItem.iconNight = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.night");
ModuleItem.iconDaytime = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.day");
ModuleItem.iconAllDay = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.allday");
ModuleItem.iconRain = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.rain");
ModuleItem.iconNoRain = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.norain");
ModuleItem.iconSky = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.sky");
ModuleItem.iconNoSky = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.nosky");
ModuleItem.iconFire = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.fire");
ModuleItem.iconNoFire = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.nofire");
ModuleItem.iconAdd = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.add");
ModuleItem.iconArrow = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.arrow");
ModuleItem.iconAdd0 = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.add.0");
ModuleItem.iconArrow0 = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.arrow.0");
ModuleItem.iconAdd1 = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.add.1");
ModuleItem.iconArrow1 = Binnie.Resource.getItemIcon(BinnieCore.instance, "gui/analyst.arrow.1");
}
@Override
public void postInit() {
GameRegistry
.addShapelessRecipe(GeneticsItems.DNADye.get(8), Items.glowstone_dust, new ItemStack(Items.dye, 1, 5));
GameRegistry.addRecipe(
new ShapedOreRecipe(
GeneticsItems.LaboratoryCasing.get(1),
new Object[] { "iii", "iYi", "iii", 'i', "ingotIron", 'Y',
Mods.forestry.item("sturdyMachine") }));
GameRegistry.addRecipe(
new ShapelessOreRecipe(
GeneticsItems.DNADye.get(2),
new Object[] { "dyePurple", "dyeMagenta", "dyePink" }));
GameRegistry.addRecipe(
new ShapelessOreRecipe(
GeneticsItems.FluorescentDye.get(2),
new Object[] { "dyeOrange", "dyeYellow", "dustGlowstone" }));
GameRegistry.addRecipe(
new ShapelessOreRecipe(
GeneticsItems.GrowthMedium.get(2),
new Object[] { new ItemStack(Items.dye, 1, 15), Items.sugar }));
GameRegistry.addRecipe(
new ShapedOreRecipe(
GeneticsItems.EmptySequencer.get(1),
new Object[] { " p ", "iGi", " p ", 'i', "ingotGold", 'G', Blocks.glass_pane, 'p',
Items.paper }));
GameRegistry.addRecipe(
new ShapedOreRecipe(
GeneticsItems.EmptySerum.get(1),
new Object[] { " g ", " G ", "GGG", 'g', "ingotGold", 'G', Blocks.glass_pane }));
GameRegistry.addRecipe(
new ShapedOreRecipe(
GeneticsItems.EmptyGenome.get(1),
new Object[] { "sss", "sss", "sss", 's', GeneticsItems.EmptySerum.get(1) }));
GameRegistry.addRecipe(
new ShapedOreRecipe(
GeneticsItems.Cylinder.get(8),
new Object[] { " g ", "g g", " ", 'g', Blocks.glass_pane }));
GameRegistry.addRecipe(
new ShapedOreRecipe(
GeneticsItems.IntegratedCircuit.get(1),
new Object[] { "l g", " c ", "g l", 'c', Mods.forestry.stack("chipsets", 1, 1), 'l',
new ItemStack(Items.dye, 1, 4), 'g', "dustGlowstone" }));
GameRegistry.addRecipe(
new ShapedOreRecipe(
GeneticsItems.IntegratedCircuit.get(1),
new Object[] { "g l", " c ", "l g", 'c', Mods.forestry.stack("chipsets", 1, 1), 'l',
new ItemStack(Items.dye, 1, 4), 'g', "dustGlowstone" }));
GameRegistry.addRecipe(
new ShapedOreRecipe(
GeneticsItems.IntegratedCasing.get(1),
new Object[] { "ccc", "cdc", "ccc", 'c', GeneticsItems.IntegratedCircuit.get(1), 'd',
GeneticsItems.LaboratoryCasing.get(1) }));
GameRegistry.addRecipe(
new ShapedOreRecipe(
GeneticsItems.IntegratedCPU.get(1),
new Object[] { "ccc", "cdc", "ccc", 'c', GeneticsItems.IntegratedCircuit.get(1), 'd',
Items.diamond }));
RecipeManagers.carpenterManager.addRecipe(
100,
Binnie.Liquid.getLiquidStack("water", 2000),
null,
new ItemStack(Genetics.database),
"X#X",
"YEY",
"RDR",
'#',
Blocks.glass_pane,
'X',
Items.diamond,
'Y',
Items.diamond,
'R',
Items.redstone,
'D',
Items.ender_eye,
'E',
Blocks.obsidian);
GameRegistry.addSmelting(Genetics.itemSequencer, GeneticsItems.EmptySequencer.get(1), 0.0f);
GameRegistry.addSmelting(Genetics.itemSerum, GeneticsItems.EmptySerum.get(1), 0.0f);
GameRegistry.addSmelting(Genetics.itemSerumArray, GeneticsItems.EmptyGenome.get(1), 0.0f);
// TODONE refactor refactor refactor this!
// CombatZAK up to the task!
Item beealyzer = Mods.forestry.item("beealyzer");
Item treealyzer = Mods.forestry.item("treealyzer");
// This bit prevents a crash if the Forestry butterflies module is disabled. You can use whatever placeholder
// item you but a diamond seems reasonable
// theoretically similar checks could be performed for Apiculture and Arboriculture; but I will leave that to
// the mod owner to decide
Item flutterlyzer = BinnieCore.isLepidopteryActive() ? Mods.forestry.item("flutterlyzer") // grab the forestry
// flutterlyzer ONLY
// IF lepidopterology
// is active
: Items.diamond; // otherwise just replace it with another diamond
ItemStack circuit = GeneticsItems.IntegratedCircuit.get(1); // get a reference to Integrated circuit
Item diamond = Items.diamond; // save a reference to diamond
ItemStack analyst = new ItemStack(Genetics.analyst); // save a reference to the analyst, will make the next bit
// easier
// the following code is a sufficient replacement for the 3 nested loops that preceded it; arguably this is
// still
// more trouble than it's worth. A single recipe is probably fine, with the analyzers in a specific arrangement,
// but I will leave it to the mod owner to make that call
// there are literally only six permutations for this recipe, so let's just write them all out and save
// ourselves
// some cycles rather than spinning through an n^3 loop wasting most of the combinations.
// expand the first one out for readability, but the following five are compressed to a single line
GameRegistry.addShapedRecipe(
analyst,
" b ",
"tcf",
" d ",
'b',
beealyzer,
't',
treealyzer,
'f',
flutterlyzer,
'c',
circuit,
'd',
diamond);
GameRegistry.addShapedRecipe(
analyst,
" b ",
"fct",
" d ",
'b',
beealyzer,
't',
treealyzer,
'f',
flutterlyzer,
'c',
circuit,
'd',
diamond);
GameRegistry.addShapedRecipe(
analyst,
" t ",
"bcf",
" d ",
'b',
beealyzer,
't',
treealyzer,
'f',
flutterlyzer,
'c',
circuit,
'd',
diamond);
GameRegistry.addShapedRecipe(
analyst,
" t ",
"fcb",
" d ",
'b',
beealyzer,
't',
treealyzer,
'f',
flutterlyzer,
'c',
circuit,
'd',
diamond);
GameRegistry.addShapedRecipe(
analyst,
" f ",
"bct",
" d ",
'b',
beealyzer,
't',
treealyzer,
'f',
flutterlyzer,
'c',
circuit,
'd',
diamond);
GameRegistry.addShapedRecipe(
analyst,
" f ",
"tcb",
" d ",
'b',
beealyzer,
't',
treealyzer,
'f',
flutterlyzer,
'c',
circuit,
'd',
diamond);
// get some references to dictionary/databases for the various modules; these names are very inconsistent for
// like items.
// should be refactored in their respective modules.
ItemStack registry = new ItemStack(Genetics.registry);
Item beeDb = ExtraBees.dictionary;
Item treeDb = ExtraTrees.itemDictionary;
Item flwrDb = Botany.database;
// do a check to ensure that the butterfly module is enabled before using the butterfly dictionary.
// a similar check could be done for arboriculture and apiculture as well, but that is left to the mod owner
Item lepiDb = BinnieCore.isLepidopteryActive() ? ExtraTrees.itemDictionaryLepi : Items.diamond; // just use a
// diamond if
// Butterflies
// is disabled
// going to use the circuit reference above as well
// as above, there are only 24 permutations here; let's find a way to just get those recipes rather than trying
// 256 combinations in an n^4 loop. This will help performance and maybe be a bit more maintainable.
if (BinnieCore.isExtraBeesActive() && BinnieCore.isExtraTreesActive()) {
// 24 full recipe lines is a bit much to maintain; so we'll use a loop here, but we're only going
// to run it 24 times. Start by making an array of all 24 valid dictionary permutations...
String[] permutations = new String[] { "btlf", "btfl", "bltf", "blft", "bftl", "bflt", "tblf", "tbfl",
"tlbf", "tlfb", "tfbl", "tflb", "lbtf", "lbft", "ltbf", "ltfb", "lfbt", "lftb", "fbtl", "fblt",
"ftbl", "ftlb", "flbt", "fltb" };
// now go through each of the permutations and create a recipe
for (String p : permutations) {
GameRegistry.addShapedRecipe(
registry, // adding the recipe with registry as output
// this line is the 3-string arrangement, with the characters pulled from the current
// permutation
String.format(" %c ", p.charAt(0)),
String.format("%cc%c", p.charAt(1), p.charAt(2)),
String.format(" %c ", p.charAt(3)),
'b',
beeDb,
't',
treeDb,
'l',
lepiDb,
'f',
flwrDb,
'c',
circuit);
}
}
}
}