diff --git a/src/main/java/robaertschi/environmenttech/client/renderer/EnvStorageRenderer.java b/src/main/java/robaertschi/environmenttech/client/renderer/EnvStorageRenderer.java index 62ac95d..d0f91c2 100644 --- a/src/main/java/robaertschi/environmenttech/client/renderer/EnvStorageRenderer.java +++ b/src/main/java/robaertschi/environmenttech/client/renderer/EnvStorageRenderer.java @@ -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) { if (isMouseAboveArea(mouseX, mouseY, x, y)) { guiGraphics.renderTooltip(font, getTooltips(), Optional.empty(), mouseX - leftPos, mouseY - topPos); diff --git a/src/main/java/robaertschi/environmenttech/client/screen/EnvCollectorScreen.java b/src/main/java/robaertschi/environmenttech/client/screen/EnvCollectorScreen.java index 689444f..9f28d8d 100644 --- a/src/main/java/robaertschi/environmenttech/client/screen/EnvCollectorScreen.java +++ b/src/main/java/robaertschi/environmenttech/client/screen/EnvCollectorScreen.java @@ -11,7 +11,7 @@ import robaertschi.environmenttech.client.renderer.EnvStorageRenderer; import robaertschi.environmenttech.menu.EnvCollectorMenu; public class EnvCollectorScreen extends AbstractContainerScreen { - 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; public EnvCollectorScreen(EnvCollectorMenu pMenu, Inventory pPlayerInventory, Component pTitle) { diff --git a/src/main/java/robaertschi/environmenttech/compat/jei/EnvCollectorRecipeCategory.java b/src/main/java/robaertschi/environmenttech/compat/jei/EnvCollectorRecipeCategory.java new file mode 100644 index 0000000..74a734b --- /dev/null +++ b/src/main/java/robaertschi/environmenttech/compat/jei/EnvCollectorRecipeCategory.java @@ -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> { + private final IDrawable background; + private final IDrawable icon; + + public static final RecipeType> 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> 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 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 recipe, IRecipeSlotsView recipeSlotsView, GuiGraphics guiGraphics, double mouseX, double mouseY) { + + EnvStorageRenderer.render(guiGraphics, recipe.value().envUsed(), 64, getWidth() - 10, 2, 8, 45); + } + + @Override + public List getTooltipStrings(RecipeHolder recipe, IRecipeSlotsView recipeSlotsView, double mouseX, double mouseY) { + List 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; + } + + +} diff --git a/src/main/java/robaertschi/environmenttech/compat/jei/JeiCompatPlugin.java b/src/main/java/robaertschi/environmenttech/compat/jei/JeiCompatPlugin.java new file mode 100644 index 0000000..856d1ab --- /dev/null +++ b/src/main/java/robaertschi/environmenttech/compat/jei/JeiCompatPlugin.java @@ -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); + } +} diff --git a/src/main/java/robaertschi/environmenttech/menu/EnvCollectorMenu.java b/src/main/java/robaertschi/environmenttech/menu/EnvCollectorMenu.java index 4b8a2da..8be1a78 100644 --- a/src/main/java/robaertschi/environmenttech/menu/EnvCollectorMenu.java +++ b/src/main/java/robaertschi/environmenttech/menu/EnvCollectorMenu.java @@ -32,8 +32,11 @@ public class EnvCollectorMenu extends AbstractContainerMenu { this.data = data; addSlot(new SlotItemHandler(blockEntity.getInputInventory(), 0, 54, 34)); addSlot(new SlotItemHandler(blockEntity.getOutputInventory(), 0, 116, 35)); + + layoutPlayerInventorySlots(player.getInventory(), 8, 84); + addDataSlots(data); }