From 3397632e8791ff0ff4e7633137bd037d90f3d677 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 16 Jan 2016 20:06:25 +0100 Subject: [PATCH] Started JEI Implementation. --- build.gradle | 8 +- .../mod/booklet/GuiAAAchievements.java | 8 +- .../mod/booklet/page/PageCrafting.java | 9 +- .../mod/jei/JEIActuallyAdditionsPlugin.java | 50 +++++++++++ .../jei/booklet/BookletRecipeCategory.java | 70 +++++++++++++++ .../mod/jei/booklet/BookletRecipeHandler.java | 44 ++++++++++ .../mod/jei/booklet/BookletRecipeWrapper.java | 87 +++++++++++++++++++ .../mod/nei/NEIScreenEvents.java | 6 +- 8 files changed, 275 insertions(+), 7 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java diff --git a/build.gradle b/build.gradle index 5d4467b58..0ccb18688 100644 --- a/build.gradle +++ b/build.gradle @@ -17,11 +17,12 @@ group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" minecraft { - version = "1.8.9-11.15.0.1684" + version = "1.8.9-11.15.0.1697" runDir = "idea" mappings = "stable_20" makeObfSourceJar = false + useDepAts = true replaceIn "ModUtil.java" replace "@VERSION@", project.version.toString() @@ -31,12 +32,17 @@ repositories { maven { url "http://chickenbones.net/maven/" } + maven { + url "http://dvs1.progwml6.com/files/maven" + } } dependencies { compile "codechicken:CodeChickenLib:1.8-1.1.2.139:dev" compile "codechicken:CodeChickenCore:1.8-1.0.5.36:dev" compile "codechicken:NotEnoughItems:1.8-1.0.5.104:dev" + + deobfCompile "mezz.jei:jei_1.8.9:2.18.1.88" } processResources { diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiAAAchievements.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiAAAchievements.java index 82e10c8a6..ccbae9e75 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiAAAchievements.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiAAAchievements.java @@ -11,6 +11,7 @@ package de.ellpeck.actuallyadditions.mod.booklet; import de.ellpeck.actuallyadditions.mod.achievement.InitAchievements; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.achievement.GuiAchievements; import net.minecraft.stats.StatFileWriter; @@ -23,7 +24,12 @@ public class GuiAAAchievements extends GuiAchievements{ public GuiAAAchievements(GuiScreen screen, StatFileWriter writer){ super(screen, writer); - ReflectionHelper.setPrivateValue(GuiAchievements.class, this, InitAchievements.pageNumber, 20); + try{ + ReflectionHelper.setPrivateValue(GuiAchievements.class, this, InitAchievements.pageNumber, 20); + } + catch(Exception e){ + ModUtil.LOGGER.error("Something went wrong trying to open the Achievements GUI!", e); + } } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java index bc3b388db..a731d02a6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java @@ -120,8 +120,13 @@ public class PageCrafting extends BookletPageAA{ } else if(recipe instanceof ShapedOreRecipe){ ShapedOreRecipe shaped = (ShapedOreRecipe)recipe; - width = ReflectionHelper.getPrivateValue(ShapedOreRecipe.class, shaped, 4); - height = ReflectionHelper.getPrivateValue(ShapedOreRecipe.class, shaped, 5); + try{ + width = ReflectionHelper.getPrivateValue(ShapedOreRecipe.class, shaped, 4); + height = ReflectionHelper.getPrivateValue(ShapedOreRecipe.class, shaped, 5); + } + catch(Exception e){ + ModUtil.LOGGER.error("Something went wrong trying to get the Crafting Recipe in the booklet to display!", e); + } for(int i = 0; i < shaped.getInput().length; i++){ Object input = shaped.getInput()[i]; if(input != null){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java new file mode 100644 index 000000000..697a25326 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java @@ -0,0 +1,50 @@ +/* + * This file ("JEIActuallyAdditionsPlugin.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense/ + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.jei; + +import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; +import de.ellpeck.actuallyadditions.mod.jei.booklet.BookletRecipeCategory; +import de.ellpeck.actuallyadditions.mod.jei.booklet.BookletRecipeHandler; +import mezz.jei.api.*; + +@JEIPlugin +public class JEIActuallyAdditionsPlugin implements IModPlugin{ + + private IJeiHelpers helpers; + + @Override + public void onJeiHelpersAvailable(IJeiHelpers jeiHelpers){ + this.helpers = jeiHelpers; + } + + @Override + public void onItemRegistryAvailable(IItemRegistry itemRegistry){ + + } + + @Override + public void register(IModRegistry registry){ + registry.addRecipeCategories( + new BookletRecipeCategory(this.helpers.getGuiHelper()) + ); + + registry.addRecipeHandlers( + new BookletRecipeHandler() + ); + + registry.addRecipes(ActuallyAdditionsAPI.bookletPagesWithItemStackData); + } + + @Override + public void onRecipeRegistryAvailable(IRecipeRegistry recipeRegistry){ + + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java new file mode 100644 index 000000000..f103cf149 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java @@ -0,0 +1,70 @@ +/* + * This file ("BookletRecipeCategory.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense/ + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.jei.booklet; + +import de.ellpeck.actuallyadditions.mod.nei.NEIBookletRecipe; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import net.minecraft.client.Minecraft; + +import javax.annotation.Nonnull; +import java.util.Arrays; + +public class BookletRecipeCategory implements IRecipeCategory{ + + private IDrawable background; + + public BookletRecipeCategory(IGuiHelper helper){ + this.background = helper.createBlankDrawable(150, 256); + } + + @Nonnull + @Override + public String getUid(){ + return NEIBookletRecipe.NAME; + } + + @Nonnull + @Override + public String getTitle(){ + return StringUtil.localize("container.nei."+NEIBookletRecipe.NAME+".name"); + } + + @Nonnull + @Override + public IDrawable getBackground(){ + return this.background; + } + + @Override + public void drawExtras(Minecraft minecraft){ + + } + + @Override + public void drawAnimations(Minecraft minecraft){ + + } + + @Override + public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull IRecipeWrapper recipeWrapper){ + if(recipeWrapper instanceof BookletRecipeWrapper){ + BookletRecipeWrapper wrapper = (BookletRecipeWrapper)recipeWrapper; + + recipeLayout.getItemStacks().init(0, true, 62, 23); + recipeLayout.getItemStacks().set(0, Arrays.asList(wrapper.thePage.getItemStacksForPage())); + } + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java new file mode 100644 index 000000000..ddae626ff --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java @@ -0,0 +1,44 @@ +/* + * This file ("BookletRecipeHandler.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense/ + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.jei.booklet; + +import de.ellpeck.actuallyadditions.api.booklet.BookletPage; +import de.ellpeck.actuallyadditions.mod.nei.NEIBookletRecipe; +import mezz.jei.api.recipe.IRecipeHandler; +import mezz.jei.api.recipe.IRecipeWrapper; + +import javax.annotation.Nonnull; + +public class BookletRecipeHandler implements IRecipeHandler{ + + @Nonnull + @Override + public Class getRecipeClass(){ + return BookletPage.class; + } + + @Nonnull + @Override + public String getRecipeCategoryUid(){ + return NEIBookletRecipe.NAME; + } + + @Nonnull + @Override + public IRecipeWrapper getRecipeWrapper(@Nonnull BookletPage recipe){ + return new BookletRecipeWrapper(recipe); + } + + @Override + public boolean isRecipeValid(@Nonnull BookletPage recipe){ + return true; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java new file mode 100644 index 000000000..eca11683c --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java @@ -0,0 +1,87 @@ +/* + * This file ("BookletRecipeWrapper.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense/ + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.jei.booklet; + +import com.google.common.collect.ImmutableList; +import de.ellpeck.actuallyadditions.api.booklet.BookletPage; +import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter; +import de.ellpeck.actuallyadditions.mod.booklet.page.PagePicture; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import mezz.jei.api.recipe.IRecipeWrapper; +import net.minecraft.client.Minecraft; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.fluids.FluidStack; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.Arrays; +import java.util.List; + +public class BookletRecipeWrapper implements IRecipeWrapper{ + + public BookletPage thePage; + + public BookletRecipeWrapper(BookletPage page){ + this.thePage = page; + } + + @Override + public List getInputs(){ + return Arrays.asList(this.thePage.getItemStacksForPage()); + } + + @Override + public List getOutputs(){ + return Arrays.asList(this.thePage.getItemStacksForPage()); + } + + @Override + public List getFluidInputs(){ + return ImmutableList.of(); + } + + @Override + public List getFluidOutputs(){ + return ImmutableList.of(); + } + + @Override + public void drawInfo(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight){ + int yOffset = 30; + + List header = minecraft.fontRendererObj.listFormattedStringToWidth(StringUtil.localize("container.nei."+ModUtil.MOD_ID_LOWER+".booklet.header").replaceAll("", EnumChatFormatting.BLUE+"").replaceAll("", EnumChatFormatting.BLACK+""), 150); + for(int i = 0; i < header.size(); i++){ + minecraft.fontRendererObj.drawString((String)header.get(i), 0, yOffset+18+i*(minecraft.fontRendererObj.FONT_HEIGHT+1), 0, false); + } + + int maxLines = 5; + IBookletChapter chapter = this.thePage.getChapter(); + String aText = (chapter.getPages()[0] instanceof PagePicture && chapter.getPages().length > 1 ? chapter.getPages()[1] : chapter.getPages()[0]).getText(); + List text = minecraft.fontRendererObj.listFormattedStringToWidth(aText != null ? aText : EnumChatFormatting.DARK_RED+StringUtil.localize("container.nei."+ModUtil.MOD_ID_LOWER+".booklet.noText"), 150); + for(int i = 0; i < Math.min(maxLines, text.size()); i++){ + minecraft.fontRendererObj.drawString(text.get(i)+(i == maxLines-1 && text.size() > maxLines ? EnumChatFormatting.RESET+""+EnumChatFormatting.BLACK+"..." : ""), 0, yOffset+18+25+i*(minecraft.fontRendererObj.FONT_HEIGHT+1), 0, false); + } + minecraft.fontRendererObj.drawString(EnumChatFormatting.ITALIC+chapter.getLocalizedName(), 0, yOffset+97, 0, false); + minecraft.fontRendererObj.drawString(EnumChatFormatting.ITALIC+"Page "+this.thePage.getID(), 0, yOffset+107, 0, false); + } + + @Override + public void drawAnimations(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight){ + + } + + @Nullable + @Override + public List getTooltipStrings(int mouseX, int mouseY){ + return null; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIScreenEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIScreenEvents.java index 4ed8915ba..6f869d14d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIScreenEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIScreenEvents.java @@ -33,8 +33,6 @@ public class NEIScreenEvents{ @SubscribeEvent public void onInitGuiForNEI(GuiScreenEvent.InitGuiEvent event){ if(event.gui instanceof GuiRecipe){ - GuiRecipe theGui = (GuiRecipe)event.gui; - int xSize = 176; int ySize = 166; int guiLeft = (event.gui.width-xSize)/2; @@ -50,8 +48,10 @@ public class NEIScreenEvents{ } } }; - event.buttonList.add(this.neiButton); + + GuiRecipe theGui = (GuiRecipe)event.gui; + IRecipeHandler handler = theGui.getCurrentRecipeHandlers().get(theGui.recipetype); this.neiButton.visible = handler instanceof INEIRecipeHandler && ((INEIRecipeHandler)handler).getPageForInfo(theGui.page) != null; }