emi compat

This commit is contained in:
Robin 2024-06-30 22:25:13 +02:00
parent 054cddd246
commit 4e67873f2c
10 changed files with 143 additions and 16 deletions

View File

@ -32,7 +32,15 @@ val jeiVersion: String by project
val jeiMcVersion: String by project val jeiMcVersion: String by project
val emiVersion: String by project val emiVersion: String by project
enum class RecipeViewer {
None,
JEI,
EMI,
REI
}
val withTop = true val withTop = true
val recipeViewer: RecipeViewer = RecipeViewer.EMI
version = modVersion version = modVersion
group = modGroupId group = modGroupId
@ -181,14 +189,29 @@ dependencies {
implementation ("net.neoforged:neoforge:${neoVersion}") implementation ("net.neoforged:neoforge:${neoVersion}")
compileOnly("mcjty.theoneprobe:theoneprobe:${topVersion}") compileOnly("mcjty.theoneprobe:theoneprobe:${topVersion}")
if (withTop) if (withTop) {
runtimeOnly("mcjty.theoneprobe:theoneprobe:${topVersion}") runtimeOnly("mcjty.theoneprobe:theoneprobe:${topVersion}")
// compileOnly("dev.emi:emi-neoforge:${emiVersion}:api") }
// runtimeOnly("dev.emi:emi-neoforge:${emiVersion}")
// runtimeOnly("me.shedaniel:RoughlyEnoughItems-neoforge:${reiVersion}")
// compileOnly("me.shedaniel:RoughlyEnoughItems-api-neoforge:${reiVersion}")
// compileOnly("me.shedaniel:RoughlyEnoughItems-default-plugin-neoforge:${reiVersion}")
when (recipeViewer) {
RecipeViewer.None -> {}
RecipeViewer.JEI -> {
runtimeOnly("mezz.jei:jei-${jeiMcVersion}-neoforge:${jeiVersion}")
}
RecipeViewer.EMI -> {
runtimeOnly("dev.emi:emi-neoforge:${emiVersion}")
}
RecipeViewer.REI -> {
runtimeOnly("me.shedaniel:RoughlyEnoughItems-neoforge:${reiVersion}")
compileOnly("me.shedaniel:RoughlyEnoughItems-api-neoforge:${reiVersion}")
compileOnly("me.shedaniel:RoughlyEnoughItems-default-plugin-neoforge:${reiVersion}")
}
}
// API's
compileOnly("mezz.jei:jei-${jeiMcVersion}-common-api:${jeiVersion}")
compileOnly("mezz.jei:jei-${jeiMcVersion}-neoforge-api:${jeiVersion}")
compileOnly("dev.emi:emi-neoforge:${emiVersion}:api")
// Testing // Testing
junitImplementation(platform("org.junit:junit-bom:${junitVersion}")) junitImplementation(platform("org.junit:junit-bom:${junitVersion}"))
@ -199,9 +222,6 @@ dependencies {
// Example mod dependency with JEI // Example mod dependency with JEI
// The JEI API is declared for compile time use, while the full JEI artifact is used at runtime // The JEI API is declared for compile time use, while the full JEI artifact is used at runtime
compileOnly("mezz.jei:jei-${jeiMcVersion}-common-api:${jeiVersion}")
compileOnly("mezz.jei:jei-${jeiMcVersion}-neoforge-api:${jeiVersion}")
runtimeOnly("mezz.jei:jei-${jeiMcVersion}-neoforge:${jeiVersion}")
// Example mod dependency using a mod jar from ./libs with a flat dir repository // Example mod dependency using a mod jar from ./libs with a flat dir repository
// This maps to ./libs/coolmod-${mc_version}-${coolmod_version}.jar // This maps to ./libs/coolmod-${mc_version}-${coolmod_version}.jar

View File

@ -48,4 +48,4 @@ topVersion=1.21_neo-12.0.0-1
reiVersion=16.0.729 reiVersion=16.0.729
jeiVersion=19.0.0.11 jeiVersion=19.0.0.11
jeiMcVersion=1.21 jeiMcVersion=1.21
emiVersion=1.1.7+1.21 emiVersion=1.1.8+1.21

View File

@ -1,9 +1,9 @@
// 1.21 2024-06-16T13:02:59.3382935 Recipes // 1.21 2024-06-30T22:00:58.313201409 Recipes
375ee3cb8eaf222bd0d5576061d1741b5b3d5cff data/environmenttech/advancement/recipes/environmental_essence.json 375ee3cb8eaf222bd0d5576061d1741b5b3d5cff data/environmenttech/advancement/recipes/environmental_essence.json
99b83974e5a7a570c2111cab62a292d126c36524 data/environmenttech/advancement/recipes/misc/env_collector_block_item.json 99b83974e5a7a570c2111cab62a292d126c36524 data/environmenttech/advancement/recipes/misc/env_collector_block_item.json
6962e07757d0b7087542bf51dddde36d4beb3ee4 data/environmenttech/advancement/recipes/misc/glass_tank.json 6962e07757d0b7087542bf51dddde36d4beb3ee4 data/environmenttech/advancement/recipes/misc/glass_tank.json
76b6b2850a79c80b2f2969b93b26bc3832a77ab4 data/environmenttech/advancement/recipes/tools/env_detector_item.json 76b6b2850a79c80b2f2969b93b26bc3832a77ab4 data/environmenttech/advancement/recipes/tools/env_detector_item.json
d462a41d1b0fda35660ed3e4c807f83f6dc0e0cd data/environmenttech/recipe/environmental_essence.json
23bb508829cafa270f61c06c8cc5aa3ad58e54e1 data/environmenttech/recipe/env_collector_block_item.json 23bb508829cafa270f61c06c8cc5aa3ad58e54e1 data/environmenttech/recipe/env_collector_block_item.json
17b9bb86d970f10b3784048b790ba541ed3bf8fd data/environmenttech/recipe/env_detector_item.json 17b9bb86d970f10b3784048b790ba541ed3bf8fd data/environmenttech/recipe/env_detector_item.json
63c5fdb8c8563f643e4f502a3132c0d049c2c17b data/environmenttech/recipe/environmental_essence.json
935db7eeeeb437ba83909ba578f14109f62485ef data/environmenttech/recipe/glass_tank.json 935db7eeeeb437ba83909ba578f14109f62485ef data/environmenttech/recipe/glass_tank.json

View File

@ -1,6 +1,7 @@
{ {
"type": "environmenttech:env_collector", "type": "environmenttech:env_collector",
"envUsed": 10, "envUsed": 10,
"id": "environmenttech:environmental_essence",
"ingredient": { "ingredient": {
"item": "minecraft:iron_ingot" "item": "minecraft:iron_ingot"
}, },

View File

@ -0,0 +1,39 @@
package robaertschi.environmenttech.compat.emi;
import dev.emi.emi.api.EmiEntrypoint;
import dev.emi.emi.api.EmiPlugin;
import dev.emi.emi.api.EmiRegistry;
import dev.emi.emi.api.recipe.EmiRecipeCategory;
import dev.emi.emi.api.render.EmiTexture;
import dev.emi.emi.api.stack.EmiStack;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.crafting.RecipeHolder;
import net.minecraft.world.item.crafting.RecipeManager;
import robaertschi.environmenttech.ET;
import robaertschi.environmenttech.data.recipes.ETRecipes;
import robaertschi.environmenttech.data.recipes.EnvCollectorRecipe;
import robaertschi.environmenttech.level.item.ETItems;
import robaertschi.environmenttech.menu.ETMenus;
@EmiEntrypoint
public class EmiCompatPlugin implements EmiPlugin {
public static final ResourceLocation ENV_COLLECTOR_SHEET = ET.id("textures/gui/container/env_collector.png");
public static final EmiStack ENV_COLLECTOR = EmiStack.of(ETItems.ENV_COLLECTOR_BLOCK_ITEM);
public static final EmiRecipeCategory ENV_COLLECTOR_CATEGORY = new EmiRecipeCategory(ET.id("env_collector"), ENV_COLLECTOR, new EmiTexture(ENV_COLLECTOR_SHEET,48, 18, 110, 50));
@Override
public void register(EmiRegistry registry) {
registry.addCategory(ENV_COLLECTOR_CATEGORY);
registry.addWorkstation(ENV_COLLECTOR_CATEGORY, ENV_COLLECTOR);
RecipeManager manager = registry.getRecipeManager();
for (RecipeHolder<EnvCollectorRecipe> recipe : manager.getAllRecipesFor(ETRecipes.ENV_COLLECTOR_RECIPE_TYPE.get())) {
registry.addRecipe(new EnvCollectorEmiRecipe(recipe.value()));
}
registry.addRecipeHandler(ETMenus.ENV_COLLECTOR_MENU.get(), new EnvCollectorEmiRecipeHandler());
}
}

View File

@ -0,0 +1,29 @@
package robaertschi.environmenttech.compat.emi;
import dev.emi.emi.api.recipe.BasicEmiRecipe;
import dev.emi.emi.api.render.EmiTexture;
import dev.emi.emi.api.stack.EmiIngredient;
import dev.emi.emi.api.stack.EmiStack;
import dev.emi.emi.api.widget.WidgetHolder;
import net.minecraft.network.chat.Component;
import robaertschi.environmenttech.client.renderer.EnvStorageRenderer;
import robaertschi.environmenttech.data.recipes.EnvCollectorRecipe;
public class EnvCollectorEmiRecipe extends BasicEmiRecipe {
private final EnvCollectorRecipe recipe;
public EnvCollectorEmiRecipe(EnvCollectorRecipe recipe) {
super(EmiCompatPlugin.ENV_COLLECTOR_CATEGORY, recipe.id(), 76, 30);
this.inputs.add(EmiIngredient.of(recipe.input()));
this.outputs.add(EmiStack.of(recipe.output()));
this.recipe = recipe;
}
@Override
public void addWidgets(WidgetHolder widgets) {
widgets.addTexture(EmiTexture.EMPTY_ARROW, 26, 1);
widgets.addText(Component.literal(recipe.envUsed() + " ENV"), 42, 20, EnvStorageRenderer.to, true);
widgets.addSlot(inputs.getFirst(), 0, 0);
widgets.addSlot(outputs.getFirst(), 58, 0).recipeContext(this);
}
}

View File

@ -0,0 +1,32 @@
package robaertschi.environmenttech.compat.emi;
import dev.emi.emi.api.recipe.EmiRecipe;
import dev.emi.emi.api.recipe.handler.StandardRecipeHandler;
import net.minecraft.world.inventory.Slot;
import org.apache.commons.compress.utils.Lists;
import robaertschi.environmenttech.menu.EnvCollectorMenu;
import java.util.List;
public class EnvCollectorEmiRecipeHandler implements StandardRecipeHandler<EnvCollectorMenu> {
@Override
public List<Slot> getInputSources(EnvCollectorMenu handler) {
List<Slot> list = Lists.newArrayList();
list.add(handler.getSlot(0));
int invStart = 2;
for (int i = invStart; i < invStart + 36; i++) {
list.add(handler.getSlot(i));
}
return list;
}
@Override
public List<Slot> getCraftingSlots(EnvCollectorMenu handler) {
return List.of(handler.getSlot(0));
}
@Override
public boolean supportsRecipe(EmiRecipe recipe) {
return recipe.getCategory() == EmiCompatPlugin.ENV_COLLECTOR_CATEGORY && recipe.supportsRecipeTree();
}
}

View File

@ -28,7 +28,7 @@ import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.*; import net.minecraft.world.item.crafting.*;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
public record EnvCollectorRecipe(Ingredient input, ItemStack output, int envUsed) implements Recipe<RecipeInput> { public record EnvCollectorRecipe(ResourceLocation id, Ingredient input, ItemStack output, int envUsed) implements Recipe<RecipeInput> {
@Override @Override
public boolean matches(@NotNull RecipeInput pContainer, @NotNull Level pLevel) { public boolean matches(@NotNull RecipeInput pContainer, @NotNull Level pLevel) {
return this.input.test(pContainer.getItem(0)); return this.input.test(pContainer.getItem(0));
@ -99,7 +99,7 @@ public record EnvCollectorRecipe(Ingredient input, ItemStack output, int envUsed
this.criteria.forEach(advancementBuilder::addCriterion); this.criteria.forEach(advancementBuilder::addCriterion);
EnvCollectorRecipe envCollectorRecipe = new EnvCollectorRecipe(this.ingredient, this.output, this.envUsed); EnvCollectorRecipe envCollectorRecipe = new EnvCollectorRecipe(pId, this.ingredient, this.output, this.envUsed);
pRecipeOutput.accept(pId, envCollectorRecipe, advancementBuilder.build(pId.withPrefix("recipes/"))); pRecipeOutput.accept(pId, envCollectorRecipe, advancementBuilder.build(pId.withPrefix("recipes/")));
} }

View File

@ -6,6 +6,7 @@
*/ */
package robaertschi.environmenttech.data.recipes; package robaertschi.environmenttech.data.recipes;
import net.minecraft.resources.ResourceLocation;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.RegistryFriendlyByteBuf;
@ -21,6 +22,7 @@ import com.mojang.serialization.codecs.RecordCodecBuilder;
public class EnvCollectorRecipeSerializer implements RecipeSerializer<EnvCollectorRecipe> { public class EnvCollectorRecipeSerializer implements RecipeSerializer<EnvCollectorRecipe> {
public static final MapCodec<EnvCollectorRecipe> CODEC = RecordCodecBuilder.mapCodec( public static final MapCodec<EnvCollectorRecipe> CODEC = RecordCodecBuilder.mapCodec(
envCollectorRecipeInstance -> envCollectorRecipeInstance.group( envCollectorRecipeInstance -> envCollectorRecipeInstance.group(
ResourceLocation.CODEC.fieldOf("id").forGetter(EnvCollectorRecipe::id),
Ingredient.CODEC_NONEMPTY.fieldOf("ingredient").forGetter(EnvCollectorRecipe::input), Ingredient.CODEC_NONEMPTY.fieldOf("ingredient").forGetter(EnvCollectorRecipe::input),
ItemStack.CODEC.fieldOf("output").forGetter(EnvCollectorRecipe::output), ItemStack.CODEC.fieldOf("output").forGetter(EnvCollectorRecipe::output),
Codec.INT.fieldOf("envUsed").forGetter(EnvCollectorRecipe::envUsed) Codec.INT.fieldOf("envUsed").forGetter(EnvCollectorRecipe::envUsed)
@ -39,13 +41,15 @@ public class EnvCollectorRecipeSerializer implements RecipeSerializer<EnvCollect
} }
private EnvCollectorRecipe fromNetwork(RegistryFriendlyByteBuf byteBuf) { private EnvCollectorRecipe fromNetwork(RegistryFriendlyByteBuf byteBuf) {
ResourceLocation id = ResourceLocation.STREAM_CODEC.decode(byteBuf);
Ingredient ingredient = Ingredient.CONTENTS_STREAM_CODEC.decode(byteBuf); Ingredient ingredient = Ingredient.CONTENTS_STREAM_CODEC.decode(byteBuf);
ItemStack itemStack = ItemStack.STREAM_CODEC.decode(byteBuf); ItemStack itemStack = ItemStack.STREAM_CODEC.decode(byteBuf);
int envUsed = byteBuf.readInt(); int envUsed = byteBuf.readInt();
return new EnvCollectorRecipe(ingredient, itemStack, envUsed); return new EnvCollectorRecipe(id, ingredient, itemStack, envUsed);
} }
private void toNetwork(RegistryFriendlyByteBuf byteBuf, EnvCollectorRecipe recipe) { private void toNetwork(RegistryFriendlyByteBuf byteBuf, EnvCollectorRecipe recipe) {
ResourceLocation.STREAM_CODEC.encode(byteBuf, recipe.id());
Ingredient.CONTENTS_STREAM_CODEC.encode(byteBuf, recipe.input()); Ingredient.CONTENTS_STREAM_CODEC.encode(byteBuf, recipe.input());
ItemStack.STREAM_CODEC.encode(byteBuf, recipe.output()); ItemStack.STREAM_CODEC.encode(byteBuf, recipe.output());
byteBuf.writeInt(recipe.envUsed()); byteBuf.writeInt(recipe.envUsed());

View File

@ -10,5 +10,7 @@
"screen.environmenttech.debug": "Debug Menu", "screen.environmenttech.debug": "Debug Menu",
"key.environmenttech.open_debug_menu": "Open Debug Menu", "key.environmenttech.open_debug_menu": "Open Debug Menu",
"key.categories.environmenttech": "Environment Tech" "key.categories.environmenttech": "Environment Tech",
"emi.category.environmenttech.env_collector": "ENV Collector"
} }