Skip to content

Commit e375fe0

Browse files
KaupenjoeKaupenjoe
authored andcommitted
jei compatibility
1 parent 3154963 commit e375fe0

4 files changed

Lines changed: 126 additions & 0 deletions

File tree

build.gradle

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,16 @@ group = mod_group_id
2020

2121
repositories {
2222
mavenLocal()
23+
maven {
24+
// location of the maven that hosts JEI files since January 2023
25+
name = "Jared's maven"
26+
url = "https://maven.blamejared.com/"
27+
}
28+
maven {
29+
// location of a maven mirror for JEI files, as a fallback
30+
name = "ModMaven"
31+
url = "https://modmaven.dev"
32+
}
2333
}
2434

2535
base {
@@ -121,6 +131,11 @@ dependencies {
121131
// We add the full version to localRuntime, not runtimeOnly, so that we do not publish a dependency on it
122132
// localRuntime "mezz.jei:jei-${mc_version}-neoforge:${jei_version}"
123133

134+
// compile against the JEI API but do not include it at runtime
135+
compileOnly("mezz.jei:jei-${minecraft_version}-neoforge-api:${jei_version}")
136+
// at runtime, use the full JEI jar for NeoForge
137+
runtimeOnly("mezz.jei:jei-${minecraft_version}-neoforge:${jei_version}")
138+
124139
// Example mod dependency using a mod jar from ./libs with a flat dir repository
125140
// This maps to ./libs/coolmod-${mc_version}-${coolmod_version}.jar
126141
// The group id is ignored when searching -- in this case, it is "blank"

gradle.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ neo_version_range=[21.0.0-beta,)
2424
# The loader version range can only use the major version of FML as bounds
2525
loader_version_range=[4,)
2626

27+
jei_version=19.21.1.248
28+
2729
## Mod Properties
2830

2931
# The unique mod identifier for the mod. Must be lowercase in English locale. Must fit the regex [a-z][a-z0-9_]{1,63}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package net.kaupenjoe.tutorialmod.compat;
2+
3+
import mezz.jei.api.constants.VanillaTypes;
4+
import mezz.jei.api.gui.builder.IRecipeLayoutBuilder;
5+
import mezz.jei.api.gui.drawable.IDrawable;
6+
import mezz.jei.api.gui.ingredient.IRecipeSlotsView;
7+
import mezz.jei.api.helpers.IGuiHelper;
8+
import mezz.jei.api.recipe.IFocusGroup;
9+
import mezz.jei.api.recipe.RecipeIngredientRole;
10+
import mezz.jei.api.recipe.RecipeType;
11+
import mezz.jei.api.recipe.category.IRecipeCategory;
12+
import net.kaupenjoe.tutorialmod.TutorialMod;
13+
import net.kaupenjoe.tutorialmod.block.ModBlocks;
14+
import net.kaupenjoe.tutorialmod.recipe.GrowthChamberRecipe;
15+
import net.minecraft.client.gui.GuiGraphics;
16+
import net.minecraft.network.chat.Component;
17+
import net.minecraft.resources.ResourceLocation;
18+
import net.minecraft.world.item.ItemStack;
19+
import org.jetbrains.annotations.Nullable;
20+
21+
public class GrowthChamberRecipeCategory implements IRecipeCategory<GrowthChamberRecipe> {
22+
public static final ResourceLocation UID = ResourceLocation.fromNamespaceAndPath(TutorialMod.MOD_ID, "growth_chamber");
23+
public static final ResourceLocation TEXTURE = ResourceLocation.fromNamespaceAndPath(TutorialMod.MOD_ID,
24+
"textures/gui/growth_chamber/growth_chamber_gui.png");
25+
26+
public static final RecipeType<GrowthChamberRecipe> GROWTH_CHAMBER_RECIPE_RECIPE_TYPE =
27+
new RecipeType<>(UID, GrowthChamberRecipe.class);
28+
29+
private final IDrawable background;
30+
private final IDrawable icon;
31+
32+
public GrowthChamberRecipeCategory(IGuiHelper helper) {
33+
this.background = helper.createDrawable(TEXTURE,0 ,0, 176, 85);
34+
this.icon = helper.createDrawableIngredient(VanillaTypes.ITEM_STACK, new ItemStack(ModBlocks.GROWTH_CHAMBER));
35+
}
36+
37+
@Override
38+
public RecipeType<GrowthChamberRecipe> getRecipeType() {
39+
return GROWTH_CHAMBER_RECIPE_RECIPE_TYPE;
40+
}
41+
42+
@Override
43+
public Component getTitle() {
44+
return Component.translatable("block.tutorialmod.growth_chamber");
45+
}
46+
47+
@Override
48+
public @Nullable IDrawable getIcon() {
49+
return icon;
50+
}
51+
52+
@Override
53+
public IDrawable getBackground() {
54+
return background;
55+
}
56+
57+
@Override
58+
public void setRecipe(IRecipeLayoutBuilder builder, GrowthChamberRecipe recipe, IFocusGroup focuses) {
59+
builder.addSlot(RecipeIngredientRole.INPUT, 54, 34).addIngredients(recipe.getIngredients().get(0));
60+
61+
builder.addSlot(RecipeIngredientRole.OUTPUT, 104, 34).addItemStack(recipe.getResultItem(null));
62+
}
63+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package net.kaupenjoe.tutorialmod.compat;
2+
3+
import mezz.jei.api.IModPlugin;
4+
import mezz.jei.api.JeiPlugin;
5+
import mezz.jei.api.registration.IGuiHandlerRegistration;
6+
import mezz.jei.api.registration.IRecipeCategoryRegistration;
7+
import mezz.jei.api.registration.IRecipeRegistration;
8+
import net.kaupenjoe.tutorialmod.TutorialMod;
9+
import net.kaupenjoe.tutorialmod.recipe.GrowthChamberRecipe;
10+
import net.kaupenjoe.tutorialmod.recipe.ModRecipes;
11+
import net.kaupenjoe.tutorialmod.screen.custom.GrowthChamberScreen;
12+
import net.minecraft.client.Minecraft;
13+
import net.minecraft.resources.ResourceLocation;
14+
import net.minecraft.world.item.crafting.RecipeHolder;
15+
import net.minecraft.world.item.crafting.RecipeManager;
16+
17+
import java.util.List;
18+
19+
@JeiPlugin
20+
public class JEITutorialModPlugin implements IModPlugin {
21+
@Override
22+
public ResourceLocation getPluginUid() {
23+
return ResourceLocation.fromNamespaceAndPath(TutorialMod.MOD_ID, "jei_plugin");
24+
}
25+
26+
@Override
27+
public void registerCategories(IRecipeCategoryRegistration registration) {
28+
registration.addRecipeCategories(new GrowthChamberRecipeCategory(
29+
registration.getJeiHelpers().getGuiHelper()));
30+
}
31+
32+
@Override
33+
public void registerRecipes(IRecipeRegistration registration) {
34+
RecipeManager recipeManager = Minecraft.getInstance().level.getRecipeManager();
35+
36+
List<GrowthChamberRecipe> growthChamberRecipes = recipeManager
37+
.getAllRecipesFor(ModRecipes.GROWTH_CHAMBER_TYPE.get()).stream().map(RecipeHolder::value).toList();
38+
registration.addRecipes(GrowthChamberRecipeCategory.GROWTH_CHAMBER_RECIPE_RECIPE_TYPE, growthChamberRecipes);
39+
}
40+
41+
@Override
42+
public void registerGuiHandlers(IGuiHandlerRegistration registration) {
43+
registration.addRecipeClickArea(GrowthChamberScreen.class, 74, 30, 22, 20,
44+
GrowthChamberRecipeCategory.GROWTH_CHAMBER_RECIPE_RECIPE_TYPE);
45+
}
46+
}

0 commit comments

Comments
 (0)