Skip to content

Commit

Permalink
Close #2023 Add support for custom smelting/smoking/campfire cooking/…
Browse files Browse the repository at this point in the history
…blasting time
  • Loading branch information
mezz committed Aug 23, 2020
1 parent ed871e2 commit 20da04a
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 13 deletions.
@@ -1,12 +1,9 @@
package mezz.jei.plugins.vanilla.cooking;

import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.mojang.blaze3d.matrix.MatrixStack;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.AbstractCookingRecipe;

import mezz.jei.api.constants.VanillaTypes;
import mezz.jei.api.gui.IRecipeLayout;
import mezz.jei.api.gui.drawable.IDrawable;
Expand All @@ -16,21 +13,37 @@
import mezz.jei.api.ingredients.IIngredients;
import mezz.jei.config.Constants;
import mezz.jei.util.Translator;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.AbstractCookingRecipe;
import net.minecraft.util.text.TranslationTextComponent;

public abstract class AbstractCookingCategory<T extends AbstractCookingRecipe> extends FurnaceVariantCategory<T> {
private final IDrawable background;
private final IDrawable icon;
private final String localizedName;
protected final IDrawableAnimated arrow;
protected final LoadingCache<T, IDrawableAnimated> cachedArrows;

public AbstractCookingCategory(IGuiHelper guiHelper, Block icon, String translationKey, int regularCookTime) {
super(guiHelper);
background = guiHelper.createDrawable(Constants.RECIPE_GUI_VANILLA, 0, 114, 82, 54);
this.background = guiHelper.createDrawable(Constants.RECIPE_GUI_VANILLA, 0, 114, 82, 54);
this.icon = guiHelper.createDrawableIngredient(new ItemStack(icon));
localizedName = Translator.translateToLocal(translationKey);
arrow = guiHelper.drawableBuilder(Constants.RECIPE_GUI_VANILLA, 82, 128, 24, 17)
.buildAnimated(regularCookTime, IDrawableAnimated.StartDirection.LEFT, false);
this.localizedName = Translator.translateToLocal(translationKey);
this.cachedArrows = CacheBuilder.newBuilder()
.maximumSize(25)
.build(new CacheLoader<T, IDrawableAnimated>() {
@Override
public IDrawableAnimated load(T key) {
int cookTime = key.getCookTime();
if (cookTime <= 0) {
cookTime = regularCookTime;
}
return guiHelper.drawableBuilder(Constants.RECIPE_GUI_VANILLA, 82, 128, 24, 17)
.buildAnimated(cookTime, IDrawableAnimated.StartDirection.LEFT, false);
}
});
}

@Override
Expand All @@ -52,15 +65,34 @@ public void setIngredients(T recipe, IIngredients ingredients) {
@Override
public void draw(T recipe, MatrixStack matrixStack, double mouseX, double mouseY) {
animatedFlame.draw(matrixStack, 1, 20);

IDrawableAnimated arrow = cachedArrows.getUnchecked(recipe);
arrow.draw(matrixStack, 24, 18);

drawExperience(recipe, matrixStack, 0);
drawCookTime(recipe, matrixStack, 45);
}

protected void drawExperience(T recipe, MatrixStack matrixStack, int y) {
float experience = recipe.getExperience();
if (experience > 0) {
TranslationTextComponent experienceString = new TranslationTextComponent("gui.jei.category.smelting.experience", experience);
Minecraft minecraft = Minecraft.getInstance();
FontRenderer fontRenderer = minecraft.fontRenderer;
int stringWidth = fontRenderer.func_238414_a_(experienceString);
fontRenderer.func_243248_b(matrixStack, experienceString, background.getWidth() - stringWidth, 0, 0xFF808080);
fontRenderer.func_243248_b(matrixStack, experienceString, background.getWidth() - stringWidth, y, 0xFF808080);
}
}

protected void drawCookTime(T recipe, MatrixStack matrixStack, int y) {
int cookTime = recipe.getCookTime();
if (cookTime > 0) {
int cookTimeSeconds = cookTime / 20;
TranslationTextComponent timeString = new TranslationTextComponent("gui.jei.category.smelting.time.seconds", cookTimeSeconds);
Minecraft minecraft = Minecraft.getInstance();
FontRenderer fontRenderer = minecraft.fontRenderer;
int stringWidth = fontRenderer.func_238414_a_(timeString);
fontRenderer.func_243248_b(matrixStack, timeString, background.getWidth() - stringWidth, y, 0xFF808080);
}
}

Expand Down
@@ -1,6 +1,7 @@
package mezz.jei.plugins.vanilla.cooking;

import com.mojang.blaze3d.matrix.MatrixStack;
import mezz.jei.api.gui.drawable.IDrawableAnimated;
import net.minecraft.block.Blocks;
import net.minecraft.item.crafting.CampfireCookingRecipe;
import net.minecraft.util.ResourceLocation;
Expand All @@ -18,7 +19,9 @@ public class CampfireCategory extends AbstractCookingCategory<CampfireCookingRec

public CampfireCategory(IGuiHelper guiHelper) {
super(guiHelper, Blocks.CAMPFIRE, "gui.jei.category.campfire", 400);
background = guiHelper.createDrawable(Constants.RECIPE_GUI_VANILLA, 0, 186, 82, 34);
background = guiHelper.drawableBuilder(Constants.RECIPE_GUI_VANILLA, 0, 186, 82, 34)
.addPadding(0, 10, 0, 0)
.build();
}

@Override
Expand All @@ -39,7 +42,9 @@ public IDrawable getBackground() {
@Override
public void draw(CampfireCookingRecipe recipe, MatrixStack matrixStack, double mouseX, double mouseY) {
animatedFlame.draw(matrixStack, 1, 20);
IDrawableAnimated arrow = cachedArrows.getUnchecked(recipe);
arrow.draw(matrixStack, 24, 8);
drawCookTime(recipe, matrixStack, 35);
}

@Override
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/assets/jei/lang/en_us.json
Expand Up @@ -117,6 +117,7 @@
"gui.jei.category.blasting": "Blasting",
"gui.jei.category.campfire": "Campfire Cooking",
"gui.jei.category.smelting.experience": "%s XP",
"gui.jei.category.smelting.time.seconds": "%ss",
"gui.jei.category.fuel": "Fuel",
"gui.jei.category.fuel.smeltCount.single": "Smelts 1 item",
"gui.jei.category.fuel.smeltCount": "Smelts %s items",
Expand Down

0 comments on commit 20da04a

Please sign in to comment.