IndustrialWires/src/main/java/malte0811/industrialwires/compat/JEIMarx.java
2018-09-03 20:35:23 +02:00

150 lines
5.3 KiB
Java

/*
* This file is part of Industrial Wires.
* Copyright (C) 2016-2018 malte0811
* Industrial Wires is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* Industrial Wires is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with Industrial Wires. If not, see <http://www.gnu.org/licenses/>.
*/
package malte0811.industrialwires.compat;
import blusunrize.immersiveengineering.common.util.Utils;
import com.google.common.collect.ImmutableList;
import malte0811.industrialwires.IndustrialWires;
import malte0811.industrialwires.blocks.hv.BlockTypes_HVMultiblocks;
import malte0811.industrialwires.hv.MarxOreHandler;
import malte0811.industrialwires.hv.MarxOreHandler.OreInfo;
import mezz.jei.api.*;
import mezz.jei.api.gui.IDrawable;
import mezz.jei.api.gui.IGuiItemStackGroup;
import mezz.jei.api.gui.IRecipeLayout;
import mezz.jei.api.ingredients.IIngredients;
import mezz.jei.api.ingredients.IModIngredientRegistration;
import mezz.jei.api.recipe.IRecipeCategory;
import mezz.jei.api.recipe.IRecipeCategoryRegistration;
import mezz.jei.api.recipe.IRecipeWrapper;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.I18n;
import net.minecraft.item.ItemStack;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@JEIPlugin
public class JEIMarx implements IModPlugin {
public static IJeiHelpers jeiHelpers;
private static JEIMarx.MarxCategory marx;
@Override
public void registerItemSubtypes(ISubtypeRegistry subtypeRegistry) {
}
@Override
public void registerIngredients(IModIngredientRegistration registry) {
}
@Override
public void registerCategories(IRecipeCategoryRegistration registry) {
jeiHelpers = registry.getJeiHelpers();
marx = new MarxCategory();
registry.addRecipeCategories(marx);
}
@Override
public void register(IModRegistry registryIn) {
registryIn.handleRecipes(OreInfo.class, MarxRecipeWrapper::new, IndustrialWires.MODID+".marx");
registryIn.addRecipes(MarxOreHandler.getRecipes(), IndustrialWires.MODID+".marx");
registryIn.addRecipeCatalyst(new ItemStack(IndustrialWires.hvMultiblocks, 1,
BlockTypes_HVMultiblocks.MARX.getMeta()), marx.getUid());
}
@Override
public void onRuntimeAvailable(IJeiRuntime jeiRuntime) {
Compat.addMarx = (o) -> jeiRuntime.getRecipeRegistry().addRecipe(new MarxRecipeWrapper(o), marx.getUid());
Compat.removeMarx = (o) -> jeiRuntime.getRecipeRegistry().removeRecipe(new MarxRecipeWrapper(o), marx.getUid());
}
private class MarxCategory implements IRecipeCategory<MarxRecipeWrapper> {
@Nonnull
@Override
public String getUid() {
return IndustrialWires.MODID + ".marx";
}
@Nonnull
@Override
public String getTitle() {
return I18n.format(IndustrialWires.MODID + ".desc.jei.marx");
}
@Nonnull
@Override
public String getModName() {
return IndustrialWires.MODNAME;
}
@Nonnull
@Override
public IDrawable getBackground() {
IGuiHelper guiHelper = jeiHelpers.getGuiHelper();
return guiHelper.createBlankDrawable(140, 50);
}
@Override
public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull MarxRecipeWrapper recipeWrapper, @Nonnull IIngredients ingredients) {
IGuiItemStackGroup guiItemStacks = recipeLayout.getItemStacks();
guiItemStacks.init(0, true, 10, 17);
guiItemStacks.init(1, false, 62, 4);
guiItemStacks.init(2, false, 62, 29);
guiItemStacks.set(ingredients);
}
@Nullable
@Override
public IDrawable getIcon() {
return null;
}
}
private class MarxRecipeWrapper implements IRecipeWrapper {
OreInfo recipe;
public MarxRecipeWrapper(OreInfo recipe) {
this.recipe = recipe;
}
@Override
public void getIngredients(@Nonnull IIngredients ingredients) {
ingredients.setInputLists(ItemStack.class, ImmutableList.of(recipe.exampleInput));
if (recipe.outputSmall!=null) {
ingredients.setOutputs(ItemStack.class, ImmutableList.of(
recipe.output.get(),
recipe.outputSmall.get()));
} else {
ingredients.setOutputs(ItemStack.class, ImmutableList.of(recipe.output.get(), ItemStack.EMPTY));//TODO remove second output?
}
}
@Override
public void drawInfo(Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY) {
IDrawable slot = jeiHelpers.getGuiHelper().getSlotDrawable();
slot.draw(minecraft, 10, 17);
slot.draw(minecraft, 62, 4);
if (recipe.outputSmall!=null&&!recipe.outputSmall.get().isEmpty()) {
slot.draw(minecraft, 62, 29);
minecraft.fontRenderer.drawString("x"+ recipe.smallMax+I18n.format(IndustrialWires.MODID+".desc.jei.alt"), 85, 33, 0xff000000);
}
minecraft.fontRenderer.drawString("x"+ Utils.formatDouble(recipe.maxYield, "0.#") + I18n.format(IndustrialWires.MODID+".desc.jei.max"), 85, 8, 0xff000000);
minecraft.fontRenderer.drawString("~", 0, 3, 0xff000000);
minecraft.fontRenderer.drawString((int) (recipe.avgEnergy*MarxOreHandler.defaultEnergy/1000)+" kJ",
minecraft.fontRenderer.getCharWidth('~'), 0, 0xff000000);
}
}
}