mirror of
https://github.com/RoBaertschi/EnvironmentTech.git
synced 2025-04-19 23:03:28 +00:00
emi compat
This commit is contained in:
parent
054cddd246
commit
4e67873f2c
@ -32,7 +32,15 @@ val jeiVersion: String by project
|
||||
val jeiMcVersion: String by project
|
||||
val emiVersion: String by project
|
||||
|
||||
enum class RecipeViewer {
|
||||
None,
|
||||
JEI,
|
||||
EMI,
|
||||
REI
|
||||
}
|
||||
|
||||
val withTop = true
|
||||
val recipeViewer: RecipeViewer = RecipeViewer.EMI
|
||||
|
||||
version = modVersion
|
||||
group = modGroupId
|
||||
@ -181,14 +189,29 @@ dependencies {
|
||||
implementation ("net.neoforged:neoforge:${neoVersion}")
|
||||
|
||||
compileOnly("mcjty.theoneprobe:theoneprobe:${topVersion}")
|
||||
if (withTop)
|
||||
if (withTop) {
|
||||
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
|
||||
junitImplementation(platform("org.junit:junit-bom:${junitVersion}"))
|
||||
@ -199,9 +222,6 @@ dependencies {
|
||||
|
||||
// Example mod dependency with JEI
|
||||
// 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
|
||||
// This maps to ./libs/coolmod-${mc_version}-${coolmod_version}.jar
|
||||
|
@ -48,4 +48,4 @@ topVersion=1.21_neo-12.0.0-1
|
||||
reiVersion=16.0.729
|
||||
jeiVersion=19.0.0.11
|
||||
jeiMcVersion=1.21
|
||||
emiVersion=1.1.7+1.21
|
||||
emiVersion=1.1.8+1.21
|
@ -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
|
||||
99b83974e5a7a570c2111cab62a292d126c36524 data/environmenttech/advancement/recipes/misc/env_collector_block_item.json
|
||||
6962e07757d0b7087542bf51dddde36d4beb3ee4 data/environmenttech/advancement/recipes/misc/glass_tank.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
|
||||
17b9bb86d970f10b3784048b790ba541ed3bf8fd data/environmenttech/recipe/env_detector_item.json
|
||||
63c5fdb8c8563f643e4f502a3132c0d049c2c17b data/environmenttech/recipe/environmental_essence.json
|
||||
935db7eeeeb437ba83909ba578f14109f62485ef data/environmenttech/recipe/glass_tank.json
|
||||
|
@ -1,6 +1,7 @@
|
||||
{
|
||||
"type": "environmenttech:env_collector",
|
||||
"envUsed": 10,
|
||||
"id": "environmenttech:environmental_essence",
|
||||
"ingredient": {
|
||||
"item": "minecraft:iron_ingot"
|
||||
},
|
||||
|
@ -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());
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
@ -28,7 +28,7 @@ import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.crafting.*;
|
||||
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
|
||||
public boolean matches(@NotNull RecipeInput pContainer, @NotNull Level pLevel) {
|
||||
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);
|
||||
|
||||
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/")));
|
||||
}
|
||||
|
@ -6,6 +6,7 @@
|
||||
*/
|
||||
package robaertschi.environmenttech.data.recipes;
|
||||
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||
@ -21,6 +22,7 @@ import com.mojang.serialization.codecs.RecordCodecBuilder;
|
||||
public class EnvCollectorRecipeSerializer implements RecipeSerializer<EnvCollectorRecipe> {
|
||||
public static final MapCodec<EnvCollectorRecipe> CODEC = RecordCodecBuilder.mapCodec(
|
||||
envCollectorRecipeInstance -> envCollectorRecipeInstance.group(
|
||||
ResourceLocation.CODEC.fieldOf("id").forGetter(EnvCollectorRecipe::id),
|
||||
Ingredient.CODEC_NONEMPTY.fieldOf("ingredient").forGetter(EnvCollectorRecipe::input),
|
||||
ItemStack.CODEC.fieldOf("output").forGetter(EnvCollectorRecipe::output),
|
||||
Codec.INT.fieldOf("envUsed").forGetter(EnvCollectorRecipe::envUsed)
|
||||
@ -39,13 +41,15 @@ public class EnvCollectorRecipeSerializer implements RecipeSerializer<EnvCollect
|
||||
}
|
||||
|
||||
private EnvCollectorRecipe fromNetwork(RegistryFriendlyByteBuf byteBuf) {
|
||||
ResourceLocation id = ResourceLocation.STREAM_CODEC.decode(byteBuf);
|
||||
Ingredient ingredient = Ingredient.CONTENTS_STREAM_CODEC.decode(byteBuf);
|
||||
ItemStack itemStack = ItemStack.STREAM_CODEC.decode(byteBuf);
|
||||
int envUsed = byteBuf.readInt();
|
||||
return new EnvCollectorRecipe(ingredient, itemStack, envUsed);
|
||||
return new EnvCollectorRecipe(id, ingredient, itemStack, envUsed);
|
||||
}
|
||||
|
||||
private void toNetwork(RegistryFriendlyByteBuf byteBuf, EnvCollectorRecipe recipe) {
|
||||
ResourceLocation.STREAM_CODEC.encode(byteBuf, recipe.id());
|
||||
Ingredient.CONTENTS_STREAM_CODEC.encode(byteBuf, recipe.input());
|
||||
ItemStack.STREAM_CODEC.encode(byteBuf, recipe.output());
|
||||
byteBuf.writeInt(recipe.envUsed());
|
||||
|
@ -10,5 +10,7 @@
|
||||
"screen.environmenttech.debug": "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"
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user