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 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
|
||||||
|
@ -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
|
@ -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
|
||||||
|
@ -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"
|
||||||
},
|
},
|
||||||
|
@ -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.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/")));
|
||||||
}
|
}
|
||||||
|
@ -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());
|
||||||
|
@ -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"
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user