JEI compat

This commit is contained in:
Robin Bärtschi 2024-06-27 11:13:08 +02:00
parent 3899edad0b
commit eac35f1db2
5 changed files with 164 additions and 1 deletions

View File

@ -65,6 +65,16 @@ public class EnvStorageRenderer {
} }
// Context less alternative method
public static void render(GuiGraphics guiGraphics, long envStored, long maxEnv, int x, int y, int width, int height) {
int stored = (int)(height * (envStored / (float)maxEnv));
new ContentBoxRenderer(x, y, width, height).render(guiGraphics);
guiGraphics.fillGradient(x, y + (height - stored), x + width, y + height,
from, to);
}
public void renderTooltip(GuiGraphics guiGraphics, int mouseX, int mouseY, int leftPos, int topPos, Font font) { public void renderTooltip(GuiGraphics guiGraphics, int mouseX, int mouseY, int leftPos, int topPos, Font font) {
if (isMouseAboveArea(mouseX, mouseY, x, y)) { if (isMouseAboveArea(mouseX, mouseY, x, y)) {
guiGraphics.renderTooltip(font, getTooltips(), Optional.empty(), mouseX - leftPos, mouseY - topPos); guiGraphics.renderTooltip(font, getTooltips(), Optional.empty(), mouseX - leftPos, mouseY - topPos);

View File

@ -11,7 +11,7 @@ import robaertschi.environmenttech.client.renderer.EnvStorageRenderer;
import robaertschi.environmenttech.menu.EnvCollectorMenu; import robaertschi.environmenttech.menu.EnvCollectorMenu;
public class EnvCollectorScreen extends AbstractContainerScreen<EnvCollectorMenu> { public class EnvCollectorScreen extends AbstractContainerScreen<EnvCollectorMenu> {
private final ResourceLocation GUI = EnvironmentTech.id("textures/gui/container/env_collector.png"); public static final ResourceLocation GUI = EnvironmentTech.id("textures/gui/container/env_collector.png");
private EnvStorageRenderer storageRenderer; private EnvStorageRenderer storageRenderer;
public EnvCollectorScreen(EnvCollectorMenu pMenu, Inventory pPlayerInventory, Component pTitle) { public EnvCollectorScreen(EnvCollectorMenu pMenu, Inventory pPlayerInventory, Component pTitle) {

View File

@ -0,0 +1,92 @@
package robaertschi.environmenttech.compat.jei;
import mezz.jei.api.gui.builder.IRecipeLayoutBuilder;
import mezz.jei.api.gui.drawable.IDrawable;
import mezz.jei.api.gui.ingredient.IRecipeSlotsView;
import mezz.jei.api.helpers.IGuiHelper;
import mezz.jei.api.recipe.IFocusGroup;
import mezz.jei.api.recipe.RecipeIngredientRole;
import mezz.jei.api.recipe.RecipeType;
import mezz.jei.api.recipe.category.IRecipeCategory;
import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.network.chat.Component;
import net.minecraft.util.Mth;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.RecipeHolder;
import robaertschi.environmenttech.client.renderer.EnvStorageRenderer;
import robaertschi.environmenttech.client.screen.EnvCollectorScreen;
import robaertschi.environmenttech.data.recipes.ETRecipes;
import robaertschi.environmenttech.data.recipes.EnvCollectorRecipe;
import robaertschi.environmenttech.level.block.ETBlocks;
import robaertschi.environmenttech.utils.MouseUtils;
import javax.annotation.ParametersAreNonnullByDefault;
import java.util.ArrayList;
import java.util.List;
@MethodsReturnNonnullByDefault
@ParametersAreNonnullByDefault
public class EnvCollectorRecipeCategory implements IRecipeCategory<RecipeHolder<EnvCollectorRecipe>> {
private final IDrawable background;
private final IDrawable icon;
public static final RecipeType<RecipeHolder<EnvCollectorRecipe>> ENV_COLLECTOR = RecipeType.createFromVanilla(ETRecipes.ENV_COLLECTOR_RECIPE_TYPE.get());
public EnvCollectorRecipeCategory(IGuiHelper guiHelper) {
background = guiHelper.createDrawable(EnvCollectorScreen.GUI, 48, 18, 110, 50);
icon = guiHelper.createDrawableItemStack(new ItemStack(ETBlocks.ENV_COLLECTOR_BLOCK));
}
@Override
public RecipeType<RecipeHolder<EnvCollectorRecipe>> getRecipeType() {
return ENV_COLLECTOR;
}
@Override
public Component getTitle() {
return Component.translatable("screen.environmenttech.env_collector");
}
@Override
public IDrawable getBackground() {
return background;
}
@Override
public IDrawable getIcon() {
return icon;
}
@Override
public void setRecipe(IRecipeLayoutBuilder builder, RecipeHolder<EnvCollectorRecipe> recipeHolder, IFocusGroup focuses) {
//54, 34))
// 116, 35
EnvCollectorRecipe recipe = recipeHolder.value();
builder.addSlot(RecipeIngredientRole.INPUT, 6, 16).addIngredients(recipe.input());
builder.addSlot(RecipeIngredientRole.OUTPUT, 68, 17).addItemStack(recipe.output());
}
@Override
public void draw(RecipeHolder<EnvCollectorRecipe> recipe, IRecipeSlotsView recipeSlotsView, GuiGraphics guiGraphics, double mouseX, double mouseY) {
EnvStorageRenderer.render(guiGraphics, recipe.value().envUsed(), 64, getWidth() - 10, 2, 8, 45);
}
@Override
public List<Component> getTooltipStrings(RecipeHolder<EnvCollectorRecipe> recipe, IRecipeSlotsView recipeSlotsView, double mouseX, double mouseY) {
List<Component> components = new ArrayList<>();
int x = getWidth() - 10;
if (MouseUtils.isMouseOver(Mth.floor(mouseX), Mth.floor(mouseY), x, 2, 8, 45)) {
components.add(Component.literal(recipe.value().envUsed() + " / " + 64 + " ENV"));
}
return components;
}
}

View File

@ -0,0 +1,58 @@
package robaertschi.environmenttech.compat.jei;
import mezz.jei.api.IModPlugin;
import mezz.jei.api.JeiPlugin;
import mezz.jei.api.registration.IRecipeCatalystRegistration;
import mezz.jei.api.registration.IRecipeCategoryRegistration;
import mezz.jei.api.registration.IRecipeRegistration;
import mezz.jei.api.registration.IRecipeTransferRegistration;
import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.client.Minecraft;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.item.ItemStack;
import org.jetbrains.annotations.NotNull;
import robaertschi.environmenttech.EnvironmentTech;
import robaertschi.environmenttech.data.recipes.ETRecipes;
import robaertschi.environmenttech.level.block.ETBlocks;
import robaertschi.environmenttech.level.block.entity.EnvCollectorBlockEntity;
import robaertschi.environmenttech.menu.ETMenus;
import robaertschi.environmenttech.menu.EnvCollectorMenu;
import javax.annotation.ParametersAreNonnullByDefault;
@JeiPlugin
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public class JeiCompatPlugin implements IModPlugin {
@Override
public @NotNull ResourceLocation getPluginUid() {
return EnvironmentTech.id("jei_default");
}
@Override
public void registerCategories(IRecipeCategoryRegistration registration) {
registration.addRecipeCategories(new EnvCollectorRecipeCategory(registration.getJeiHelpers().getGuiHelper()));
}
@Override
public void registerRecipes(IRecipeRegistration registration) {
assert Minecraft.getInstance().level != null;
registration.addRecipes(EnvCollectorRecipeCategory.ENV_COLLECTOR, Minecraft.getInstance().level.getRecipeManager().getAllRecipesFor(ETRecipes.ENV_COLLECTOR_RECIPE_TYPE.get()).stream().toList());
}
@Override
public void registerRecipeCatalysts(IRecipeCatalystRegistration registration) {
registration.addRecipeCatalyst(new ItemStack(ETBlocks.ENV_COLLECTOR_BLOCK), EnvCollectorRecipeCategory.ENV_COLLECTOR);
}
@Override
public void registerRecipeTransferHandlers(IRecipeTransferRegistration registration) {
registration.addRecipeTransferHandler(EnvCollectorMenu.class, ETMenus.ENV_COLLECTOR_MENU.get(), EnvCollectorRecipeCategory.ENV_COLLECTOR,
EnvCollectorBlockEntity.SLOT_INPUT,
EnvCollectorBlockEntity.SLOT_INPUT_COUNT,
EnvCollectorBlockEntity.SLOT_COUNT,
Inventory.INVENTORY_SIZE);
}
}

View File

@ -32,8 +32,11 @@ public class EnvCollectorMenu extends AbstractContainerMenu {
this.data = data; this.data = data;
addSlot(new SlotItemHandler(blockEntity.getInputInventory(), 0, 54, 34)); addSlot(new SlotItemHandler(blockEntity.getInputInventory(), 0, 54, 34));
addSlot(new SlotItemHandler(blockEntity.getOutputInventory(), 0, 116, 35)); addSlot(new SlotItemHandler(blockEntity.getOutputInventory(), 0, 116, 35));
layoutPlayerInventorySlots(player.getInventory(), 8, 84); layoutPlayerInventorySlots(player.getInventory(), 8, 84);
addDataSlots(data); addDataSlots(data);
} }