diff --git a/src/main/java/ellpeck/actuallyadditions/achievement/InitAchievements.java b/src/main/java/ellpeck/actuallyadditions/achievement/InitAchievements.java index 4b4d712b0..3ed79a322 100644 --- a/src/main/java/ellpeck/actuallyadditions/achievement/InitAchievements.java +++ b/src/main/java/ellpeck/actuallyadditions/achievement/InitAchievements.java @@ -14,6 +14,8 @@ public class InitAchievements{ public static final int SMELTING_ACH = 1; public static final int PICKUP_ACH = 2; + public static int pageNumber; + public static AchievementPage theAchievementPage; public static ArrayList achievementList = new ArrayList(); @@ -25,6 +27,7 @@ public class InitAchievements{ } theAchievementPage = new AchievementPage(StringUtil.localize("achievement.page."+ModUtil.MOD_ID_LOWER), achievementList.toArray(new Achievement[achievementList.size()])); + pageNumber = AchievementPage.getAchievementPages().size(); AchievementPage.registerAchievementPage(theAchievementPage); } diff --git a/src/main/java/ellpeck/actuallyadditions/crafting/FoodCrafting.java b/src/main/java/ellpeck/actuallyadditions/crafting/FoodCrafting.java index b82d1e1df..e803c4c98 100644 --- a/src/main/java/ellpeck/actuallyadditions/crafting/FoodCrafting.java +++ b/src/main/java/ellpeck/actuallyadditions/crafting/FoodCrafting.java @@ -9,11 +9,14 @@ import ellpeck.actuallyadditions.util.Util; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; import net.minecraftforge.oredict.ShapedOreRecipe; import net.minecraftforge.oredict.ShapelessOreRecipe; public class FoodCrafting{ + public static IRecipe recipePizza; + public static void init(){ ItemStack knifeStack = new ItemStack(InitItems.itemKnife, 1, Util.WILDCARD); @@ -29,7 +32,7 @@ public class FoodCrafting{ TheMiscItems.DOUGH.ordinal()), new ItemStack(InitItems.itemFoods, 1, TheFoods.BAGUETTE.ordinal()), 1F); //Pizza - if(ConfigCrafting.PIZZA.isEnabled()) + if(ConfigCrafting.PIZZA.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemFoods, 1, TheFoods.PIZZA.ordinal()), "HKH", "MCF", " D ", 'D', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.DOUGH.ordinal()), @@ -38,6 +41,8 @@ public class FoodCrafting{ 'F', new ItemStack(Items.cooked_fished, 1, Util.WILDCARD), 'K', knifeStack, 'H', new ItemStack(InitItems.itemFoods, 1, TheFoods.CHEESE.ordinal()))); + recipePizza = Util.latestIRecipe(); + } //Hamburger if(ConfigCrafting.HAMBURGER.isEnabled()) diff --git a/src/main/java/ellpeck/actuallyadditions/creative/CreativeTab.java b/src/main/java/ellpeck/actuallyadditions/creative/CreativeTab.java index 39dbc09de..a5afe2e79 100644 --- a/src/main/java/ellpeck/actuallyadditions/creative/CreativeTab.java +++ b/src/main/java/ellpeck/actuallyadditions/creative/CreativeTab.java @@ -27,6 +27,7 @@ public class CreativeTab extends CreativeTabs{ public void displayAllReleventItems(List list){ this.list = list; + add(InitItems.itemLexicon); add(InitBlocks.blockSmileyCloud); add(InitBlocks.blockPhantomface); diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/GuiHandler.java b/src/main/java/ellpeck/actuallyadditions/inventory/GuiHandler.java index f280fb69e..fc438ca45 100644 --- a/src/main/java/ellpeck/actuallyadditions/inventory/GuiHandler.java +++ b/src/main/java/ellpeck/actuallyadditions/inventory/GuiHandler.java @@ -4,6 +4,7 @@ import cpw.mods.fml.common.network.IGuiHandler; import cpw.mods.fml.common.network.NetworkRegistry; import ellpeck.actuallyadditions.ActuallyAdditions; import ellpeck.actuallyadditions.inventory.gui.*; +import ellpeck.actuallyadditions.inventory.gui.lexicon.GuiBooklet; import ellpeck.actuallyadditions.tile.TileEntityBase; import ellpeck.actuallyadditions.util.ModUtil; import net.minecraft.entity.player.EntityPlayer; @@ -126,6 +127,8 @@ public class GuiHandler implements IGuiHandler{ return new GuiOreMagnet(entityPlayer.inventory, tile); case CLOUD: return new GuiSmileyCloud(tile, x, y, z, world); + case BOOK: + return new GuiBooklet(); default: return null; } @@ -155,7 +158,8 @@ public class GuiHandler implements IGuiHandler{ ENERVATOR, XP_SOLIDIFIER, ORE_MAGNET, - CLOUD + CLOUD, + BOOK } public static void init(){ diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/gui/lexicon/BookletChapter.java b/src/main/java/ellpeck/actuallyadditions/inventory/gui/lexicon/BookletChapter.java new file mode 100644 index 000000000..5384d249a --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/inventory/gui/lexicon/BookletChapter.java @@ -0,0 +1,30 @@ +package ellpeck.actuallyadditions.inventory.gui.lexicon; + +import ellpeck.actuallyadditions.util.ModUtil; +import ellpeck.actuallyadditions.util.StringUtil; + +public class BookletChapter{ + + public final IBookletPage[] pages; + private final String unlocalizedName; + public final BookletIndexEntry entry; + + public BookletChapter(String unlocalizedName, BookletIndexEntry entry, IBookletPage... pages){ + this.pages = pages.clone(); + this.unlocalizedName = unlocalizedName; + entry.addChapter(this); + this.entry = entry; + + for(IBookletPage page : this.pages){ + page.setChapter(this); + } + } + + public String getUnlocalizedName(){ + return this.unlocalizedName; + } + + public String getLocalizedName(){ + return StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".chapter."+this.unlocalizedName+".name"); + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/gui/lexicon/BookletIndexEntry.java b/src/main/java/ellpeck/actuallyadditions/inventory/gui/lexicon/BookletIndexEntry.java new file mode 100644 index 000000000..355bf0032 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/inventory/gui/lexicon/BookletIndexEntry.java @@ -0,0 +1,30 @@ +package ellpeck.actuallyadditions.inventory.gui.lexicon; + +import ellpeck.actuallyadditions.util.ModUtil; +import ellpeck.actuallyadditions.util.StringUtil; + +import java.util.ArrayList; + +public class BookletIndexEntry{ + + private final String unlocalizedName; + public ArrayList chapters = new ArrayList(); + + public BookletIndexEntry(String unlocalizedName){ + this.unlocalizedName = unlocalizedName; + InitBooklet.entries.add(this); + } + + public String getUnlocalizedName(){ + return this.unlocalizedName; + } + + public void addChapter(BookletChapter chapter){ + this.chapters.add(chapter); + } + + public String getLocalizedName(){ + return StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".indexEntry."+this.unlocalizedName+".name"); + } + +} diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/gui/lexicon/GuiAAAchievements.java b/src/main/java/ellpeck/actuallyadditions/inventory/gui/lexicon/GuiAAAchievements.java new file mode 100644 index 000000000..6b72fc128 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/inventory/gui/lexicon/GuiAAAchievements.java @@ -0,0 +1,25 @@ +package ellpeck.actuallyadditions.inventory.gui.lexicon; + +import cpw.mods.fml.relauncher.ReflectionHelper; +import ellpeck.actuallyadditions.achievement.InitAchievements; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.achievement.GuiAchievements; +import net.minecraft.stats.StatFileWriter; + +public class GuiAAAchievements extends GuiAchievements{ + + public GuiAAAchievements(GuiScreen screen, StatFileWriter writer){ + super(screen, writer); + } + + /** + * (Partially excerpted from Botania with permission, thanks!) + */ + @Override + public void initGui(){ + super.initGui(); + ReflectionHelper.setPrivateValue(GuiAchievements.class, this, InitAchievements.pageNumber, "currentPage"); + ((GuiButton)buttonList.get(1)).displayString = InitAchievements.theAchievementPage.getName(); + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/gui/lexicon/GuiBooklet.java b/src/main/java/ellpeck/actuallyadditions/inventory/gui/lexicon/GuiBooklet.java new file mode 100644 index 000000000..19e8d54f6 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/inventory/gui/lexicon/GuiBooklet.java @@ -0,0 +1,271 @@ +package ellpeck.actuallyadditions.inventory.gui.lexicon; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.config.GuiConfiguration; +import ellpeck.actuallyadditions.util.AssetUtil; +import ellpeck.actuallyadditions.util.ModUtil; +import ellpeck.actuallyadditions.util.StringUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +import java.util.Collections; + +@SideOnly(Side.CLIENT) +public class GuiBooklet extends GuiScreen{ + + public static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiBooklet"); + public FontRenderer unicodeRenderer; + + public int xSize; + public int ySize; + public int guiLeft; + public int guiTop; + + public IBookletPage currentPage; + public BookletChapter currentChapter; + public BookletIndexEntry currentIndexEntry; + + private static final int BUTTON_ACHIEVEMENTS_ID = -2; + private static final int BUTTON_CONFIG_ID = -1; + private static final int BUTTON_FORWARD_ID = 0; + private static final int BUTTON_BACK_ID = 1; + private static final int BUTTON_RETURN_ID = 2; + private static final int CHAPTER_BUTTONS_START = 3; + + public GuiBooklet(){ + this.xSize = 146; + this.ySize = 180; + } + + @SuppressWarnings("unchecked") + @Override + public void initGui(){ + this.guiLeft = (this.width-this.xSize)/2; + this.guiTop = (this.height-this.ySize)/2; + + this.unicodeRenderer = new FontRenderer(this.mc.gameSettings, new ResourceLocation("textures/font/ascii.png"), this.mc.renderEngine, true); + + this.buttonList.add(new TexturedButton(BUTTON_FORWARD_ID, this.guiLeft+this.xSize, this.guiTop+this.ySize+2, 164, 0, 18, 10)); + this.buttonList.add(new TexturedButton(BUTTON_BACK_ID, this.guiLeft-18, this.guiTop+this.ySize+2, 146, 0, 18, 10)); + this.buttonList.add(new TexturedButton(BUTTON_RETURN_ID, this.guiLeft+this.xSize/2-7, this.guiTop+this.ySize+2, 182, 0, 15, 10)); + + for(int i = 0; i < 12; i++){ + this.buttonList.add(new IndexButton(this.unicodeRenderer, CHAPTER_BUTTONS_START+i, guiLeft+13, guiTop+15+(i*11), 120, 10, "")); + } + + this.buttonList.add(new TexturedButton(BUTTON_ACHIEVEMENTS_ID, this.guiLeft+138, this.guiTop, 0, 0, 8, 8)); + this.buttonList.add(new TexturedButton(BUTTON_CONFIG_ID, this.guiLeft+138, this.guiTop+10, 0, 0, 8, 8)); + + this.currentPage = null; + this.currentChapter = null; + this.currentIndexEntry = null; + this.openIndexEntry(null); + } + + private GuiButton getButton(int id){ + return (GuiButton)this.buttonList.get(id); + } + + @Override + public void renderToolTip(ItemStack stack, int x, int y){ + super.renderToolTip(stack, x, y); + } + + @Override + public void drawScreen(int x, int y, float f){ + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(resLoc); + this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize); + + if(this.currentIndexEntry != null){ + if(this.currentChapter == null){ + this.drawCenteredString(this.fontRendererObj, this.currentIndexEntry.getLocalizedName(), this.guiLeft+this.xSize/2, this.guiTop-8, StringUtil.DECIMAL_COLOR_WHITE); + } + else + this.drawCenteredString(this.fontRendererObj, this.currentChapter.getLocalizedName(), this.guiLeft+this.xSize/2, this.guiTop-8, StringUtil.DECIMAL_COLOR_WHITE); + } + else + this.drawCenteredString(this.fontRendererObj, StringUtil.localize("itemGroup."+ModUtil.MOD_ID_LOWER), this.guiLeft+this.xSize/2, this.guiTop-8, StringUtil.DECIMAL_COLOR_WHITE); + + super.drawScreen(x, y, f); + + if(this.currentIndexEntry != null && this.currentChapter != null && this.currentPage != null){ + this.currentPage.render(this, x, y); + } + + //Achievements Hover Text + if(x >= this.guiLeft+138 && x <= this.guiLeft+138+8 && y >= this.guiTop && y <= this.guiTop+8){ + this.func_146283_a(Collections.singletonList("Show Achievements"), x, y); + } + //Config Hover Text + if(x >= this.guiLeft+138 && x <= this.guiLeft+138+8 && y >= this.guiTop+10 && y <= this.guiTop+10+8){ + this.func_146283_a(Collections.singletonList("Show Config"), x, y); + } + } + + private IBookletPage getNextPage(BookletChapter chapter, IBookletPage currentPage){ + for(int i = 0; i < chapter.pages.length; i++){ + if(chapter.pages[i] == currentPage){ + if(i+1 < chapter.pages.length){ + return chapter.pages[i+1]; + } + } + } + return null; + } + + private IBookletPage getPrevPage(BookletChapter chapter, IBookletPage currentPage){ + for(int i = 0; i < chapter.pages.length; i++){ + if(chapter.pages[i] == currentPage){ + if(i-1 >= 0){ + return chapter.pages[i-1]; + } + } + } + return null; + } + + @Override + public void actionPerformed(GuiButton button){ + if(button.id == BUTTON_CONFIG_ID){ + mc.displayGuiScreen(new GuiConfiguration(this)); + } + else if(button.id == BUTTON_ACHIEVEMENTS_ID){ + mc.displayGuiScreen(new GuiAAAchievements(this, mc.thePlayer.getStatFileWriter())); + } + else if(button.id == BUTTON_FORWARD_ID){ + IBookletPage page = this.getNextPage(this.currentChapter, this.currentPage); + if(page != null) this.currentPage = page; + } + else if(button.id == BUTTON_BACK_ID){ + IBookletPage page = this.getPrevPage(this.currentChapter, this.currentPage); + if(page != null) this.currentPage = page; + } + else if(button.id == BUTTON_RETURN_ID){ + if(this.currentChapter != null){ + this.openIndexEntry(this.currentChapter.entry); + this.currentChapter = null; + } + else this.openIndexEntry(null); + } + else if(button.id >= CHAPTER_BUTTONS_START){ + int actualButton = button.id-CHAPTER_BUTTONS_START; + if(this.currentIndexEntry != null){ + if(this.currentChapter == null){ + if(actualButton < InitBooklet.entries.size()){ + this.openChapter(currentIndexEntry.chapters.get(actualButton)); + } + } + } + else{ + if(actualButton < InitBooklet.entries.size()){ + this.openIndexEntry(InitBooklet.entries.get(actualButton)); + } + } + } + + if(button.id == BUTTON_FORWARD_ID || button.id == BUTTON_BACK_ID){ + this.getButton(BUTTON_FORWARD_ID).visible = this.getNextPage(this.currentChapter, this.currentPage) != null; + this.getButton(BUTTON_BACK_ID).visible = this.getPrevPage(this.currentChapter, this.currentPage) != null; + } + } + + private void openIndexEntry(BookletIndexEntry entry){ + this.currentIndexEntry = entry; + + this.getButton(BUTTON_RETURN_ID).visible = entry != null; + this.getButton(BUTTON_FORWARD_ID).visible = false; + this.getButton(BUTTON_BACK_ID).visible = false; + + for(int i = 0; i < 12; i++){ + GuiButton button = this.getButton(CHAPTER_BUTTONS_START+i); + if(entry == null){ + boolean entryExists = InitBooklet.entries.size() > i; + button.visible = entryExists; + if(entryExists) button.displayString = InitBooklet.entries.get(i).getLocalizedName(); + } + else{ + boolean entryExists = entry.chapters.size() > i; + button.visible = entryExists; + if(entryExists) button.displayString = entry.chapters.get(i).getLocalizedName(); + } + } + } + + private void openChapter(BookletChapter chapter){ + if(chapter == null) return; + + this.currentChapter = chapter; + this.currentPage = currentChapter.pages[0]; + + this.getButton(BUTTON_FORWARD_ID).visible = this.getNextPage(chapter, currentPage) != null; + this.getButton(BUTTON_BACK_ID).visible = false; + + for(int i = 0; i < 12; i++){ + GuiButton button = this.getButton(CHAPTER_BUTTONS_START+i); + button.visible = false; + } + } + + private static class IndexButton extends GuiButton{ + + private FontRenderer renderer; + + public IndexButton(FontRenderer renderer, int id, int x, int y, int width, int height, String text){ + super(id, x, y, width, height, text); + this.renderer = renderer; + } + + @Override + public void drawButton(Minecraft minecraft, int mouseX, int mouseY){ + if(this.visible){ + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.field_146123_n = mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition+this.width && mouseY < this.yPosition+this.height; + GL11.glEnable(GL11.GL_BLEND); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + this.mouseDragged(minecraft, mouseX, mouseY); + int color = 0; + if(this.field_146123_n){ + color = 38144; + } + + this.renderer.drawString((this.field_146123_n ? StringUtil.UNDERLINE : "")+this.displayString, this.xPosition, this.yPosition+(this.height-8)/2, color); + } + } + } + + private static class TexturedButton extends GuiButton{ + + private int texturePosX; + private int texturePosY; + + public TexturedButton(int id, int x, int y, int texturePosX, int texturePosY, int width, int height){ + super(id, x, y, width, height, ""); + this.texturePosX = texturePosX; + this.texturePosY = texturePosY; + } + + @Override + public void drawButton(Minecraft minecraft, int x, int y){ + if(this.visible){ + minecraft.getTextureManager().bindTexture(resLoc); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.field_146123_n = x >= this.xPosition && y >= this.yPosition && x < this.xPosition+this.width && y < this.yPosition+this.height; + int k = this.getHoverState(this.field_146123_n); + GL11.glEnable(GL11.GL_BLEND); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + this.drawTexturedModalRect(this.xPosition, this.yPosition, this.texturePosX, this.texturePosY-this.height+k*this.height, this.width, this.height); + this.mouseDragged(minecraft, x, y); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/gui/lexicon/IBookletPage.java b/src/main/java/ellpeck/actuallyadditions/inventory/gui/lexicon/IBookletPage.java new file mode 100644 index 000000000..8dd9ac7c5 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/inventory/gui/lexicon/IBookletPage.java @@ -0,0 +1,12 @@ +package ellpeck.actuallyadditions.inventory.gui.lexicon; + +public interface IBookletPage{ + + int getID(); + + void setChapter(BookletChapter chapter); + + String getText(); + + void render(GuiBooklet gui, int mouseX, int mouseY); +} diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/gui/lexicon/InitBooklet.java b/src/main/java/ellpeck/actuallyadditions/inventory/gui/lexicon/InitBooklet.java new file mode 100644 index 000000000..c8f8fa624 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/inventory/gui/lexicon/InitBooklet.java @@ -0,0 +1,16 @@ +package ellpeck.actuallyadditions.inventory.gui.lexicon; + +import ellpeck.actuallyadditions.crafting.FoodCrafting; + +import java.util.ArrayList; + +public class InitBooklet{ + + public static ArrayList entries = new ArrayList(); + + public static BookletIndexEntry entryFood = new BookletIndexEntry("food"); + + static{ + new BookletChapter("pizza", entryFood, new PageText(1), new PageText(2), new PageCrafting(3, FoodCrafting.recipePizza)); + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/gui/lexicon/PageCrafting.java b/src/main/java/ellpeck/actuallyadditions/inventory/gui/lexicon/PageCrafting.java new file mode 100644 index 000000000..edc3f0e24 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/inventory/gui/lexicon/PageCrafting.java @@ -0,0 +1,88 @@ +package ellpeck.actuallyadditions.inventory.gui.lexicon; + +import cpw.mods.fml.relauncher.ReflectionHelper; +import ellpeck.actuallyadditions.util.Util; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.ShapedRecipes; +import net.minecraft.item.crafting.ShapelessRecipes; +import net.minecraftforge.oredict.ShapedOreRecipe; +import net.minecraftforge.oredict.ShapelessOreRecipe; + +import java.util.ArrayList; + +public class PageCrafting extends PageText{ + + private final IRecipe recipe; + + public PageCrafting(int id, IRecipe recipe){ + super(id); + this.recipe = recipe; + } + + @SuppressWarnings("unchecked") + @Override + public void render(GuiBooklet gui, int mouseX, int mouseY){ + gui.mc.getTextureManager().bindTexture(GuiBooklet.resLoc); + gui.drawTexturedModalRect(gui.guiLeft+37, gui.guiTop+20, 146, 20, 60, 60); + + gui.unicodeRenderer.drawSplitString(gui.currentPage.getText(), gui.guiLeft+14, gui.guiTop+112, 115, 0); + + ItemStack[] stacks = new ItemStack[9]; + int width = 3; + int height = 3; + + if(recipe instanceof ShapedRecipes){ + ShapedRecipes shaped = (ShapedRecipes)recipe; + width = shaped.recipeWidth; + height = shaped.recipeHeight; + stacks = shaped.recipeItems; + } + else if(recipe instanceof ShapelessRecipes){ + ShapelessRecipes shapeless = (ShapelessRecipes)recipe; + for(int i = 0; i < shapeless.recipeItems.size(); i++){ + stacks[i] = (ItemStack)shapeless.recipeItems.get(i); + } + } + else if(recipe instanceof ShapedOreRecipe){ + ShapedOreRecipe shaped = (ShapedOreRecipe)recipe; + width = ReflectionHelper.getPrivateValue(ShapedOreRecipe.class, shaped, 4); + height = ReflectionHelper.getPrivateValue(ShapedOreRecipe.class, shaped, 5); + for(int i = 0; i < shaped.getInput().length; i++){ + Object input = shaped.getInput()[i]; + if(input != null) + stacks[i] = input instanceof ItemStack ? (ItemStack)input : ((ArrayList)input).get(0); + } + } + else if(recipe instanceof ShapelessOreRecipe){ + ShapelessOreRecipe shapeless = (ShapelessOreRecipe)recipe; + for(int i = 0; i < shapeless.getInput().size(); i++){ + Object input = shapeless.getInput().get(i); + stacks[i] = input instanceof ItemStack ? (ItemStack)input : ((ArrayList)input).get(0); + } + } + + for(int i = 0; i < 2; i++){ + boolean tooltip = i == 1; + for(int x = 0; x < width; x++){ + for(int y = 0; y < height; y++){ + ItemStack stack = stacks[y*width+x]; + if(stack != null){ + int xShow = gui.guiLeft+38+x*21; + int yShow = gui.guiTop+23+y*21; + if(!tooltip){ + if(stack.getItemDamage() == Util.WILDCARD) stack.setItemDamage(0); + RenderItem.getInstance().renderItemAndEffectIntoGUI(gui.unicodeRenderer, gui.mc.getTextureManager(), stack, xShow, yShow); + } + else{ + if(mouseX >= xShow && mouseX <= xShow+16 && mouseY >= yShow && mouseY <= yShow+16){ + gui.renderToolTip(stack, mouseX, mouseY); + } + } + } + } + } + } + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/gui/lexicon/PageText.java b/src/main/java/ellpeck/actuallyadditions/inventory/gui/lexicon/PageText.java new file mode 100644 index 000000000..7306dca4c --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/inventory/gui/lexicon/PageText.java @@ -0,0 +1,34 @@ +package ellpeck.actuallyadditions.inventory.gui.lexicon; + +import ellpeck.actuallyadditions.util.ModUtil; +import ellpeck.actuallyadditions.util.StringUtil; + +public class PageText implements IBookletPage{ + + private int id; + private BookletChapter chapter; + + public PageText(int id){ + this.id = id; + } + + @Override + public int getID(){ + return this.id; + } + + @Override + public void setChapter(BookletChapter chapter){ + this.chapter = chapter; + } + + @Override + public String getText(){ + return StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".chapter."+this.chapter.getUnlocalizedName()+".text."+this.id+".name"); + } + + @Override + public void render(GuiBooklet gui, int mouseX, int mouseY){ + gui.unicodeRenderer.drawSplitString(gui.currentPage.getText(), gui.guiLeft+14, gui.guiTop+11, 115, 0); + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/items/InitItems.java b/src/main/java/ellpeck/actuallyadditions/items/InitItems.java index c912fc913..6ca4ca62f 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/InitItems.java +++ b/src/main/java/ellpeck/actuallyadditions/items/InitItems.java @@ -17,6 +17,8 @@ import net.minecraftforge.fluids.FluidContainerRegistry; public class InitItems{ + public static Item itemLexicon; + public static Item itemFertilizer; public static Item itemMisc; public static Item itemFoods; @@ -116,6 +118,9 @@ public class InitItems{ public static void init(){ ModUtil.LOGGER.info("Initializing Items..."); + itemLexicon = new ItemBooklet(); + ItemUtil.register(itemLexicon); + itemGrowthRing = new ItemGrowthRing(); ItemUtil.register(itemGrowthRing); diff --git a/src/main/java/ellpeck/actuallyadditions/items/ItemBooklet.java b/src/main/java/ellpeck/actuallyadditions/items/ItemBooklet.java new file mode 100644 index 000000000..b66d92e3a --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/items/ItemBooklet.java @@ -0,0 +1,60 @@ +package ellpeck.actuallyadditions.items; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.ActuallyAdditions; +import ellpeck.actuallyadditions.inventory.GuiHandler; +import ellpeck.actuallyadditions.util.INameableItem; +import ellpeck.actuallyadditions.util.ItemUtil; +import ellpeck.actuallyadditions.util.ModUtil; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +import java.util.List; + +public class ItemBooklet extends Item implements INameableItem{ + + public ItemBooklet(){ + this.setMaxDamage(0); + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.epic; + } + + @Override + @SuppressWarnings("unchecked") + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld){ + ItemUtil.addInformation(this, list, 1, ""); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(ItemStack stack, int pass){ + return this.itemIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconReg){ + this.itemIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName()); + } + + @Override + public String getName(){ + return "itemBooklet"; + } + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player){ + player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.BOOK.ordinal(), world, (int)player.posX, (int)player.posY, (int)player.posZ); + return stack; + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/util/Util.java b/src/main/java/ellpeck/actuallyadditions/util/Util.java index fac7dc38a..54fbdf64d 100644 --- a/src/main/java/ellpeck/actuallyadditions/util/Util.java +++ b/src/main/java/ellpeck/actuallyadditions/util/Util.java @@ -4,9 +4,13 @@ import cpw.mods.fml.common.FMLCommonHandler; import net.minecraft.block.BlockDispenser; import net.minecraft.dispenser.BehaviorDefaultDispenseItem; import net.minecraft.item.Item; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.oredict.OreDictionary; +import java.util.List; + @SuppressWarnings("unused") public class Util{ @@ -20,4 +24,10 @@ public class Util{ public static void registerDispenserHandler(Item item, BehaviorDefaultDispenseItem handler){ BlockDispenser.dispenseBehaviorRegistry.putObject(item, handler); } + + public static IRecipe latestIRecipe(){ + List list = CraftingManager.getInstance().getRecipeList(); + Object recipe = list.get(list.size()-1); + return recipe instanceof IRecipe ? (IRecipe)recipe : null; + } } \ No newline at end of file