CreateMod/src/main/java/com/simibubi/create/compat/jei/category/sequencedAssembly/SequencedAssemblySubCategory.java
zelophed 25f259e0bc Pondering Alone, Part V
- merge mc1.18/dev
- reuse transform interfaces from Flywheel and include them in catnip
- extend SBB interface slightly
- copy .editorconfig to catnip and ponder
2022-10-14 00:15:44 +02:00

152 lines
4.6 KiB
Java

package com.simibubi.create.compat.jei.category.sequencedAssembly;
import com.mojang.blaze3d.vertex.PoseStack;
import com.simibubi.create.compat.jei.category.CreateRecipeCategory;
import com.simibubi.create.compat.jei.category.animations.AnimatedDeployer;
import com.simibubi.create.compat.jei.category.animations.AnimatedPress;
import com.simibubi.create.compat.jei.category.animations.AnimatedSaw;
import com.simibubi.create.compat.jei.category.animations.AnimatedSpout;
import com.simibubi.create.content.contraptions.components.deployer.DeployerApplicationRecipe;
import com.simibubi.create.content.contraptions.itemAssembly.SequencedRecipe;
import com.simibubi.create.foundation.fluid.FluidIngredient;
import com.simibubi.create.foundation.utility.CreateLang;
import mezz.jei.api.forge.ForgeTypes;
import mezz.jei.api.gui.builder.IRecipeLayoutBuilder;
import mezz.jei.api.gui.builder.IRecipeSlotBuilder;
import mezz.jei.api.recipe.IFocusGroup;
import mezz.jei.api.recipe.RecipeIngredientRole;
import net.minecraft.ChatFormatting;
public abstract class SequencedAssemblySubCategory {
private final int width;
public SequencedAssemblySubCategory(int width) {
this.width = width;
}
public int getWidth() {
return width;
}
public void setRecipe(IRecipeLayoutBuilder builder, SequencedRecipe<?> recipe, IFocusGroup focuses, int x) {}
public abstract void draw(SequencedRecipe<?> recipe, PoseStack ms, double mouseX, double mouseY, int index);
public static class AssemblyPressing extends SequencedAssemblySubCategory {
AnimatedPress press;
public AssemblyPressing() {
super(25);
press = new AnimatedPress(false);
}
@Override
public void draw(SequencedRecipe<?> recipe, PoseStack ms, double mouseX, double mouseY, int index) {
press.offset = index;
ms.pushPose();
ms.translate(-5, 50, 0);
ms.scale(.6f, .6f, .6f);
press.draw(ms, getWidth() / 2, 0);
ms.popPose();
}
}
public static class AssemblySpouting extends SequencedAssemblySubCategory {
AnimatedSpout spout;
public AssemblySpouting() {
super(25);
spout = new AnimatedSpout();
}
@Override
public void setRecipe(IRecipeLayoutBuilder builder, SequencedRecipe<?> recipe, IFocusGroup focuses, int x) {
FluidIngredient fluidIngredient = recipe.getRecipe()
.getFluidIngredients()
.get(0);
builder
.addSlot(RecipeIngredientRole.INPUT, x + 4, 15)
.setBackground(CreateRecipeCategory.getRenderedSlot(), -1, -1)
.addIngredients(ForgeTypes.FLUID_STACK, CreateRecipeCategory.withImprovedVisibility(fluidIngredient.getMatchingFluidStacks()))
.addTooltipCallback(CreateRecipeCategory.addFluidTooltip(fluidIngredient.getRequiredAmount()));
}
@Override
public void draw(SequencedRecipe<?> recipe, PoseStack ms, double mouseX, double mouseY, int index) {
spout.offset = index;
ms.pushPose();
ms.translate(-7, 50, 0);
ms.scale(.75f, .75f, .75f);
spout.withFluids(recipe.getRecipe()
.getFluidIngredients()
.get(0)
.getMatchingFluidStacks())
.draw(ms, getWidth() / 2, 0);
ms.popPose();
}
}
public static class AssemblyDeploying extends SequencedAssemblySubCategory {
AnimatedDeployer deployer;
public AssemblyDeploying() {
super(25);
deployer = new AnimatedDeployer();
}
@Override
public void setRecipe(IRecipeLayoutBuilder builder, SequencedRecipe<?> recipe, IFocusGroup focuses, int x) {
IRecipeSlotBuilder slot = builder
.addSlot(RecipeIngredientRole.INPUT, x + 4, 15)
.setBackground(CreateRecipeCategory.getRenderedSlot(), -1, -1)
.addIngredients(recipe.getRecipe().getIngredients().get(1));
if (recipe.getAsAssemblyRecipe() instanceof DeployerApplicationRecipe deployerRecipe && deployerRecipe.shouldKeepHeldItem()) {
slot.addTooltipCallback(
(recipeSlotView, tooltip) -> tooltip.add(1, CreateLang.translateDirect("recipe.deploying.not_consumed").withStyle(ChatFormatting.GOLD))
);
}
}
@Override
public void draw(SequencedRecipe<?> recipe, PoseStack ms, double mouseX, double mouseY, int index) {
deployer.offset = index;
ms.pushPose();
ms.translate(-7, 50, 0);
ms.scale(.75f, .75f, .75f);
deployer.draw(ms, getWidth() / 2, 0);
ms.popPose();
}
}
public static class AssemblyCutting extends SequencedAssemblySubCategory {
AnimatedSaw saw;
public AssemblyCutting() {
super(25);
saw = new AnimatedSaw();
}
@Override
public void draw(SequencedRecipe<?> recipe, PoseStack ms, double mouseX, double mouseY, int index) {
ms.pushPose();
ms.translate(0, 51.5f, 0);
ms.scale(.6f, .6f, .6f);
saw.draw(ms, getWidth() / 2, 30);
ms.popPose();
}
}
}