/
JEIPlugin.java
110 lines (97 loc) · 4.06 KB
/
JEIPlugin.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package knightminer.tcomplement.plugin.jei;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import com.google.common.collect.ImmutableList;
import knightminer.tcomplement.TinkersComplement;
import knightminer.tcomplement.common.Config;
import knightminer.tcomplement.feature.ModuleFeature;
import knightminer.tcomplement.feature.client.GuiMelter;
import knightminer.tcomplement.plugin.chisel.ChiselPlugin;
import knightminer.tcomplement.plugin.exnihilo.ExNihiloPlugin;
import knightminer.tcomplement.plugin.jei.melter.MeltingRecipeCategory;
import knightminer.tcomplement.plugin.jei.melter.MeltingRecipeChecker;
import knightminer.tcomplement.plugin.jei.melter.MeltingRecipeWrapper;
import mezz.jei.api.IGuiHelper;
import mezz.jei.api.IModPlugin;
import mezz.jei.api.IModRegistry;
import mezz.jei.api.gui.IAdvancedGuiHandler;
import mezz.jei.api.recipe.IRecipeCategoryRegistration;
import mezz.jei.api.recipe.VanillaRecipeCategoryUid;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.item.ItemStack;
import slimeknights.tconstruct.library.smeltery.MeltingRecipe;
import slimeknights.tconstruct.smeltery.client.IGuiLiquidTank;
import slimeknights.tconstruct.tools.TinkerMaterials;
@mezz.jei.api.JEIPlugin
public class JEIPlugin implements IModPlugin {
private static final String FURNACE_FUEL = VanillaRecipeCategoryUid.FUEL;
private static final String TINKERS_SMELTERY = "tconstruct.smeltery";
private static final String EXNIHILO_HAMMER = "exnihilocreatio:hammer";
private static final String CHISEL_CHISELING = "chisel.chiseling";
public static MeltingRecipeCategory meltingCategory;
@Override
public void registerCategories(IRecipeCategoryRegistration registry) {
final IGuiHelper guiHelper = registry.getJeiHelpers().getGuiHelper();
// Melter
if(Config.separateMelterTab && TinkersComplement.pulseManager.isPulseLoaded(ModuleFeature.pulseID)) {
registry.addRecipeCategories(meltingCategory = new MeltingRecipeCategory(guiHelper));
}
}
@Override
public void register(IModRegistry registry) {
if(TinkersComplement.pulseManager.isPulseLoaded(ModuleFeature.pulseID)) {
String melterCategory = TINKERS_SMELTERY;
if(Config.separateMelterTab) {
melterCategory = MeltingRecipeCategory.CATEGORY;
registry.handleRecipes(MeltingRecipe.class, MeltingRecipeWrapper::new, MeltingRecipeCategory.CATEGORY);
registry.addRecipes(MeltingRecipeChecker.getMeltingRecipes(), MeltingRecipeCategory.CATEGORY);
}
// smeltery alternatives
if(ModuleFeature.melter != null) {
registry.addRecipeCatalyst(new ItemStack(ModuleFeature.melter), melterCategory);
registry.addRecipeCatalyst(new ItemStack(ModuleFeature.melter, 1, 8), FURNACE_FUEL);
}
if(ModuleFeature.porcelainMelter != null) {
registry.addRecipeCatalyst(new ItemStack(ModuleFeature.porcelainMelter), melterCategory);
registry.addRecipeCatalyst(new ItemStack(ModuleFeature.porcelainMelter, 1, 8), FURNACE_FUEL);
}
// liquid recipe lookup
registry.addAdvancedGuiHandlers(new TinkerGuiTankHandler<>(GuiMelter.class));
}
// add our chisel to the chisel chisel group
if(ChiselPlugin.chisel != null) {
registry.addRecipeCatalyst(
ChiselPlugin.chisel.buildItem(ImmutableList.of(
TinkerMaterials.wood,
TinkerMaterials.iron
)),
CHISEL_CHISELING);
}
// add our hammer to the ex nihilo hammer group
if(ExNihiloPlugin.sledgeHammer != null) {
registry.addRecipeCatalyst(
ExNihiloPlugin.sledgeHammer.buildItem(ImmutableList.of(
TinkerMaterials.wood,
TinkerMaterials.iron,
TinkerMaterials.paper
)),
EXNIHILO_HAMMER);
}
}
private static class TinkerGuiTankHandler<T extends GuiContainer & IGuiLiquidTank> implements IAdvancedGuiHandler<T> {
private Class<T> clazz;
public TinkerGuiTankHandler(Class<T> clazz) {
this.clazz = clazz;
}
@Nonnull
@Override
public Class<T> getGuiContainerClass() {
return clazz;
}
@Nullable
@Override
public Object getIngredientUnderMouse(T guiContainer, int mouseX, int mouseY) {
return guiContainer.getFluidStackAtPosition(mouseX, mouseY);
}
}
}