Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Material Tree JEI page returns #66

Merged
merged 14 commits into from
Aug 21, 2021
10 changes: 10 additions & 0 deletions src/main/java/gregtech/integration/jei/GTJeiPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ public void registerCategories(IRecipeCategoryRegistration registry) {
}
registry.addRecipeCategories(new OreByProductCategory(registry.getJeiHelpers().getGuiHelper()));
registry.addRecipeCategories(new GTOreCategory(registry.getJeiHelpers().getGuiHelper()));
registry.addRecipeCategories(new MaterialTreeCategory(registry.getJeiHelpers().getGuiHelper()));
}

@Override
Expand Down Expand Up @@ -187,6 +188,15 @@ public void register(IModRegistry registry) {
registry.addRecipeCatalyst(machine.getStackForm(), oreByProductId);
}

//Material Tree
List<MaterialTree> materialTreeList = new CopyOnWriteArrayList<>();
for (Material material : MaterialRegistry.MATERIAL_REGISTRY) {
if (material.hasProperty(PropertyKey.DUST)) {
materialTreeList.add(new MaterialTree(material));
}
}
registry.addRecipes(materialTreeList, GTValues.MODID + ":" + "material_tree");

//Ore Veins
List<OreDepositDefinition> oreVeins = WorldGenRegistry.getOreDeposits();
List<GTOreInfo> oreInfoList = new CopyOnWriteArrayList<>();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
package gregtech.integration.jei.recipe.primitive;

import com.google.common.collect.ImmutableList;
import gregtech.api.unification.OreDictUnifier;
import gregtech.api.unification.material.Material;
import gregtech.api.unification.material.properties.PropertyKey;
import gregtech.api.unification.ore.OrePrefix;
import mezz.jei.api.ingredients.IIngredients;
import mezz.jei.api.ingredients.VanillaTypes;
import mezz.jei.api.recipe.IRecipeWrapper;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;

import java.util.List;
import java.util.ArrayList;

public class MaterialTree implements IRecipeWrapper {
private final static ImmutableList<OrePrefix> PREFIXES = ImmutableList.of(
OrePrefix.dustTiny,
OrePrefix.dust,
OrePrefix.dustSmall,
OrePrefix.cableGtSingle,
OrePrefix.ingotHot,
OrePrefix.ingot,
OrePrefix.gem,
OrePrefix.block,
OrePrefix.wireGtSingle,
OrePrefix.stick,
OrePrefix.nugget,
OrePrefix.plate,
OrePrefix.wireFine,
OrePrefix.frameGt,
OrePrefix.round,
OrePrefix.pipeNormalFluid,
OrePrefix.pipeNormalItem,
OrePrefix.screw,
OrePrefix.bolt,
OrePrefix.gear,
OrePrefix.plateDouble,
OrePrefix.spring,
OrePrefix.stickLong,
OrePrefix.gearSmall,
OrePrefix.plateDense,
OrePrefix.springSmall,
OrePrefix.ring,
// fluid,
OrePrefix.lens,
OrePrefix.foil
);

private final List<List<ItemStack>> itemInputs = new ArrayList<>();
private final List<List<FluidStack>> fluidInputs = new ArrayList<>();

private final String name;
private final String formula;
private final int blastTemp;
private final long avgM;
private final long avgP;
private final long avgN;

public MaterialTree(Material material) {
// adding an empty list to itemInputs/fluidInputs makes checking if a prefix exists later much easier
List<ItemStack> inputDusts = new ArrayList<>();
for (OrePrefix prefix : PREFIXES) {
inputDusts.add(OreDictUnifier.get(prefix, material));
}
for (ItemStack stack : inputDusts) {
List<ItemStack> matItemsStack = new ArrayList<>();
matItemsStack.add(stack);
this.itemInputs.add(matItemsStack);
}

List<FluidStack> matFluidsStack = new ArrayList<>();
if (material.hasProperty(PropertyKey.FLUID)) {
matFluidsStack.add(material.getFluid(1000));
}
this.fluidInputs.add(matFluidsStack);

name = material.getLocalizedName();
formula = material.getChemicalFormula();
avgM = material.getAverageMass();
avgP = material.getAverageProtons();
avgN = material.getAverageNeutrons();
if (material.hasProperty(PropertyKey.BLAST)) {
blastTemp = material.getBlastTemperature();
} else {
blastTemp = 0;
}
}

@Override
public void getIngredients(IIngredients ingredients) {
ingredients.setInputLists(VanillaTypes.ITEM, this.itemInputs);
ingredients.setInputLists(VanillaTypes.FLUID, this.fluidInputs);
// these don't get displayed, but allow the material tree to show up on left *or* right click
ingredients.setOutputLists(VanillaTypes.ITEM, this.itemInputs);
ingredients.setOutputLists(VanillaTypes.FLUID, this.fluidInputs);
}

public String getMaterialName() {
return name;
}

public String getMaterialFormula() {
return formula;
}

public long getAvgM() {
return avgM;
}

public long getAvgP() {
return avgP;
}

public long getAvgN() {
return avgN;
}

public int getBlastTemp() {
return blastTemp;
}
}
Loading