mirror of
https://github.com/Ellpeck/ActuallyAdditions.git
synced 2024-12-22 19:39:24 +01:00
Started JEI Implementation.
This commit is contained in:
parent
07c24cf8dc
commit
3397632e87
8 changed files with 275 additions and 7 deletions
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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){
|
||||
|
|
|
@ -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){
|
||||
|
||||
}
|
||||
}
|
|
@ -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()));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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<BookletPage>{
|
||||
|
||||
@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;
|
||||
}
|
||||
}
|
|
@ -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<FluidStack> getFluidInputs(){
|
||||
return ImmutableList.of();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FluidStack> 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("<item>", EnumChatFormatting.BLUE+"").replaceAll("<r>", 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<String> getTooltipStrings(int mouseX, int mouseY){
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue