From 5b7ab95eb6ff03a149816b0005d25230e8a9ae9d Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 29 Aug 2015 15:40:12 +0200 Subject: [PATCH] Addet a Search Bar to the Booklet --- .../crafting/ItemCrafting.java | 113 +++++++++++++----- .../gui/booklet/BookletEntryAllSearch.java | 29 +++++ .../inventory/gui/booklet/GuiBooklet.java | 87 ++++++++++++-- .../inventory/gui/booklet/InitBooklet.java | 7 +- .../assets/actuallyadditions/lang/en_US.lang | 4 +- .../textures/gui/guiBooklet.png | Bin 17789 -> 18204 bytes 6 files changed, 195 insertions(+), 45 deletions(-) create mode 100644 src/main/java/ellpeck/actuallyadditions/inventory/gui/booklet/BookletEntryAllSearch.java diff --git a/src/main/java/ellpeck/actuallyadditions/crafting/ItemCrafting.java b/src/main/java/ellpeck/actuallyadditions/crafting/ItemCrafting.java index 657e798cf..86c524f6e 100644 --- a/src/main/java/ellpeck/actuallyadditions/crafting/ItemCrafting.java +++ b/src/main/java/ellpeck/actuallyadditions/crafting/ItemCrafting.java @@ -24,6 +24,7 @@ import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemFood; import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; import net.minecraftforge.common.IPlantable; import net.minecraftforge.oredict.OreDictionary; import net.minecraftforge.oredict.ShapedOreRecipe; @@ -31,6 +32,8 @@ import net.minecraftforge.oredict.ShapelessOreRecipe; public class ItemCrafting{ + public static IRecipe recipePhantomConnector; + public static void init(){ //Rice Stuff @@ -49,30 +52,33 @@ public class ItemCrafting{ } //Leaf Blower - if(ConfigCrafting.LEAF_BLOWER.isEnabled()) + if(ConfigCrafting.LEAF_BLOWER.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemLeafBlower), " F", "IP", "IC", 'F', new ItemStack(Items.flint), 'I', "ingotIron", 'P', new ItemStack(Blocks.piston), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); + } //Drill - if(ConfigCrafting.DRILL.isEnabled()) + if(ConfigCrafting.DRILL.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemDrill), "DDD", "CRC", "III", 'D', "gemDiamond", 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()), 'R', "dustRedstone", 'I', "blockIron")); + } //Tele Staff - if(ConfigCrafting.TELE_STAFF.isEnabled()) + if(ConfigCrafting.TELE_STAFF.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemTeleStaff), " E", " S ", "SB ", 'E', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ENDERPEARL_BLOCK.ordinal()), 'S', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ENDER_CASING.ordinal()), 'B', new ItemStack(InitItems.itemBattery, 1, Util.WILDCARD))); + } //Drill Speed if(ConfigCrafting.DRILL_SPEED.isEnabled()){ @@ -126,126 +132,142 @@ public class ItemCrafting{ } //Drill Silk Touch - if(ConfigCrafting.DRILL_SILK_TOUCH.isEnabled()) + if(ConfigCrafting.DRILL_SILK_TOUCH.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemDrillUpgradeSilkTouch), "DSD", "SCS", "DSD", 'D', "gemEmerald", 'S', "gemDiamond", 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); + } //Drill Placing - if(ConfigCrafting.DRILL_PLACING.isEnabled()) + if(ConfigCrafting.DRILL_PLACING.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemDrillUpgradeBlockPlacing), "CEC", "RAR", "CEC", 'C', "cobblestone", 'E', Items.ender_pearl, 'A', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL.ordinal()), 'R', "ingotIron")); + } //Battery - if(ConfigCrafting.BATTERY.isEnabled()) + if(ConfigCrafting.BATTERY.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemBattery), " R ", "ICI", "III", 'R', "dustRedstone", 'I', "ingotIron", 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); + } //Double Battery - if(ConfigCrafting.DOUBLE_BATTERY.isEnabled()) + if(ConfigCrafting.DOUBLE_BATTERY.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemBatteryDouble), " R ", "ICI", "III", 'R', new ItemStack(InitItems.itemBattery), 'I', "ingotIron", 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); + } //Magnet Ring - if(ConfigCrafting.MAGNET_RING.isEnabled()) + if(ConfigCrafting.MAGNET_RING.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemMagnetRing), "RIB", "IOI", "BIR", 'R', "dustRedstone", 'I', "ingotIron", 'B', new ItemStack(Items.dye, 1, 4), 'O', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.RING.ordinal()))); + } //Growth Ring - if(ConfigCrafting.GROWTH_RING.isEnabled()) + if(ConfigCrafting.GROWTH_RING.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemGrowthRing), "SIS", "IOI", "SIS", 'S', new ItemStack(Items.wheat_seeds), 'I', "ingotIron", 'O', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.RING.ordinal()))); + } //Water Ring - if(ConfigCrafting.WATER_RING.isEnabled()) + if(ConfigCrafting.WATER_RING.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemWaterRemovalRing), "BIB", "IOI", "BIB", 'B', new ItemStack(Items.water_bucket), 'I', "ingotIron", 'O', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.RING.ordinal()))); + } //Triple Battery - if(ConfigCrafting.TRIPLE_BATTERY.isEnabled()) + if(ConfigCrafting.TRIPLE_BATTERY.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemBatteryTriple), " R ", "ICI", "III", 'R', new ItemStack(InitItems.itemBatteryDouble), 'I', "ingotIron", 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); + } //Quadruple Battery - if(ConfigCrafting.QUADRUPLE_BATTERY.isEnabled()) + if(ConfigCrafting.QUADRUPLE_BATTERY.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemBatteryQuadruple), " R ", "ICI", "III", 'R', new ItemStack(InitItems.itemBatteryTriple), 'I', "ingotIron", 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); + } //Quintuple Battery - if(ConfigCrafting.QUINTUPLE_BATTERY.isEnabled()) + if(ConfigCrafting.QUINTUPLE_BATTERY.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemBatteryQuintuple), " R ", "ICI", "III", 'R', new ItemStack(InitItems.itemBatteryQuadruple), 'I', "ingotIron", 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); + } //Bat Wings - if(ConfigCrafting.BAT_WINGS.isEnabled()) + if(ConfigCrafting.BAT_WINGS.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemWingsOfTheBats), "WNW", "WDW", "WNW", 'W', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.BAT_WING.ordinal()), 'N', "blockDiamond", 'D', new ItemStack(Items.nether_star))); + } //Quartz - if(ConfigCrafting.QUARTZ.isEnabled()) + if(ConfigCrafting.QUARTZ.isEnabled()){ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), new ItemStack(Items.coal), new ItemStack(Items.quartz))); + } //Coil - if(ConfigCrafting.COIL.isEnabled()) + if(ConfigCrafting.COIL.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL.ordinal()), " R ", "RIR", " R ", 'I', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), 'R', "dustRedstone")); + } //Cup - if(ConfigCrafting.CUP.isEnabled()) + if(ConfigCrafting.CUP.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.CUP.ordinal()), "S S", "SCS", "SSS", 'S', "stone", 'C', InitItems.itemCoffeeBean)); + } //Resonant Rice - if(ConfigCrafting.RESONANT_RICE.isEnabled() && !OreDictionary.getOres("nuggetEnderium", false).isEmpty()) + if(ConfigCrafting.RESONANT_RICE.isEnabled() && !OreDictionary.getOres("nuggetEnderium", false).isEmpty()){ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemResonantRice), new ItemStack(InitItems.itemFoods, 1, TheFoods.RICE.ordinal()), "nuggetEnderium", Items.gunpowder)); + } //Advanced Coil - if(ConfigCrafting.ADV_COIL.isEnabled()) + if(ConfigCrafting.ADV_COIL.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()), " G ", "GCG", " G ", 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL.ordinal()), 'G', "ingotGold")); + } //Ender Pearl GameRegistry.addRecipe(new ItemStack(Items.ender_pearl), @@ -258,37 +280,42 @@ public class ItemCrafting{ 'X', new ItemStack(InitItems.itemSpecialDrop, 1, TheSpecialDrops.EMERALD_SHARD.ordinal())); //Advanced Leaf Blower - if(ConfigCrafting.LEAF_BLOWER_ADVANCED.isEnabled()) + if(ConfigCrafting.LEAF_BLOWER_ADVANCED.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemLeafBlowerAdvanced), " F", "DP", "DC", 'F', new ItemStack(Items.flint), 'D', "gemDiamond", 'P', new ItemStack(Blocks.piston), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); + } //Phantom Connector - if(ConfigCrafting.PHANTOM_CONNECTOR.isEnabled()) + if(ConfigCrafting.PHANTOM_CONNECTOR.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemPhantomConnector), "YE", "EY", "S ", 'Y', Items.ender_eye, 'E', Items.ender_pearl, 'S', "stickWood")); + recipePhantomConnector = Util.lastIRecipe(); + } //Quartz GameRegistry.addSmelting(new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ORE_QUARTZ.ordinal()), new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), 1F); //Knife - if(ConfigCrafting.KNIFE.isEnabled()) + if(ConfigCrafting.KNIFE.isEnabled()){ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemKnife), new ItemStack(InitItems.itemMisc, 1, TheMiscItems.KNIFE_BLADE.ordinal()), new ItemStack(InitItems.itemMisc, 1, TheMiscItems.KNIFE_HANDLE.ordinal()))); + } //Crafter on a Stick - if(ConfigCrafting.STICK_CRAFTER.isEnabled()) + if(ConfigCrafting.STICK_CRAFTER.isEnabled()){ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemCrafterOnAStick), new ItemStack(Blocks.crafting_table), new ItemStack(Items.sign))); + } //Tiny Coal GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemMisc, 8, TheMiscItems.TINY_COAL.ordinal()), @@ -334,16 +361,36 @@ public class ItemCrafting{ 'I', "ingotIron", 'D', "dustGlowstone")); - if(ConfigCrafting.RING_SPEED.isEnabled()) addRingRecipeWithStack(ThePotionRings.SPEED.craftingItem, ThePotionRings.SPEED.ordinal()); - if(ConfigCrafting.RING_HASTE.isEnabled()) addRingRecipeWithStack(ThePotionRings.HASTE.craftingItem, ThePotionRings.HASTE.ordinal()); - if(ConfigCrafting.RING_STRENGTH.isEnabled()) addRingRecipeWithStack(ThePotionRings.STRENGTH.craftingItem, ThePotionRings.STRENGTH.ordinal()); - if(ConfigCrafting.RING_JUMP_BOOST.isEnabled()) addRingRecipeWithStack(ThePotionRings.JUMP_BOOST.craftingItem, ThePotionRings.JUMP_BOOST.ordinal()); - if(ConfigCrafting.RING_REGEN.isEnabled()) addRingRecipeWithStack(ThePotionRings.REGEN.craftingItem, ThePotionRings.REGEN.ordinal()); - if(ConfigCrafting.RING_RESISTANCE.isEnabled()) addRingRecipeWithStack(ThePotionRings.RESISTANCE.craftingItem, ThePotionRings.RESISTANCE.ordinal()); - if(ConfigCrafting.RING_FIRE_RESISTANCE.isEnabled()) addRingRecipeWithStack(ThePotionRings.FIRE_RESISTANCE.craftingItem, ThePotionRings.FIRE_RESISTANCE.ordinal()); - if(ConfigCrafting.RING_WATER_BREATHING.isEnabled()) addRingRecipeWithStack(ThePotionRings.WATER_BREATHING.craftingItem, ThePotionRings.WATER_BREATHING.ordinal()); - if(ConfigCrafting.RING_INVISIBILITY.isEnabled()) addRingRecipeWithStack(ThePotionRings.INVISIBILITY.craftingItem, ThePotionRings.INVISIBILITY.ordinal()); - if(ConfigCrafting.RING_NIGHT_VISION.isEnabled()) addRingRecipeWithStack(ThePotionRings.NIGHT_VISION.craftingItem, ThePotionRings.NIGHT_VISION.ordinal()); + if(ConfigCrafting.RING_SPEED.isEnabled()){ + addRingRecipeWithStack(ThePotionRings.SPEED.craftingItem, ThePotionRings.SPEED.ordinal()); + } + if(ConfigCrafting.RING_HASTE.isEnabled()){ + addRingRecipeWithStack(ThePotionRings.HASTE.craftingItem, ThePotionRings.HASTE.ordinal()); + } + if(ConfigCrafting.RING_STRENGTH.isEnabled()){ + addRingRecipeWithStack(ThePotionRings.STRENGTH.craftingItem, ThePotionRings.STRENGTH.ordinal()); + } + if(ConfigCrafting.RING_JUMP_BOOST.isEnabled()){ + addRingRecipeWithStack(ThePotionRings.JUMP_BOOST.craftingItem, ThePotionRings.JUMP_BOOST.ordinal()); + } + if(ConfigCrafting.RING_REGEN.isEnabled()){ + addRingRecipeWithStack(ThePotionRings.REGEN.craftingItem, ThePotionRings.REGEN.ordinal()); + } + if(ConfigCrafting.RING_RESISTANCE.isEnabled()){ + addRingRecipeWithStack(ThePotionRings.RESISTANCE.craftingItem, ThePotionRings.RESISTANCE.ordinal()); + } + if(ConfigCrafting.RING_FIRE_RESISTANCE.isEnabled()){ + addRingRecipeWithStack(ThePotionRings.FIRE_RESISTANCE.craftingItem, ThePotionRings.FIRE_RESISTANCE.ordinal()); + } + if(ConfigCrafting.RING_WATER_BREATHING.isEnabled()){ + addRingRecipeWithStack(ThePotionRings.WATER_BREATHING.craftingItem, ThePotionRings.WATER_BREATHING.ordinal()); + } + if(ConfigCrafting.RING_INVISIBILITY.isEnabled()){ + addRingRecipeWithStack(ThePotionRings.INVISIBILITY.craftingItem, ThePotionRings.INVISIBILITY.ordinal()); + } + if(ConfigCrafting.RING_NIGHT_VISION.isEnabled()){ + addRingRecipeWithStack(ThePotionRings.NIGHT_VISION.craftingItem, ThePotionRings.NIGHT_VISION.ordinal()); + } } public static void addRingRecipeWithStack(ItemStack mainStack, int meta){ diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/gui/booklet/BookletEntryAllSearch.java b/src/main/java/ellpeck/actuallyadditions/inventory/gui/booklet/BookletEntryAllSearch.java new file mode 100644 index 000000000..63507ec15 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/inventory/gui/booklet/BookletEntryAllSearch.java @@ -0,0 +1,29 @@ +/* + * This file ("BookletEntryAllSearch.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://github.com/Ellpeck/ActuallyAdditions/blob/master/README.md + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015 Ellpeck + */ + +package ellpeck.actuallyadditions.inventory.gui.booklet; + +import java.util.ArrayList; + +public class BookletEntryAllSearch extends BookletIndexEntry{ + + public ArrayList allChapters = new ArrayList(); + + public BookletEntryAllSearch(String unlocalizedName){ + super(unlocalizedName); + } + + @SuppressWarnings("unchecked") + @Override + public void addChapter(BookletChapter chapter){ + this.allChapters.add(chapter); + this.chapters = (ArrayList)this.allChapters.clone(); + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/gui/booklet/GuiBooklet.java b/src/main/java/ellpeck/actuallyadditions/inventory/gui/booklet/GuiBooklet.java index 54936e32b..02b73a5ae 100644 --- a/src/main/java/ellpeck/actuallyadditions/inventory/gui/booklet/GuiBooklet.java +++ b/src/main/java/ellpeck/actuallyadditions/inventory/gui/booklet/GuiBooklet.java @@ -20,11 +20,13 @@ 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.gui.GuiTextField; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; +import java.util.ArrayList; import java.util.Collections; @SideOnly(Side.CLIENT) @@ -44,6 +46,8 @@ public class GuiBooklet extends GuiScreen{ public int pageOpenInIndex; public int indexPageAmount; + private GuiTextField searchField; + private static final int BUTTON_ACHIEVEMENTS_ID = -2; private static final int BUTTON_CONFIG_ID = -1; private static final int BUTTON_FORWARD_ID = 0; @@ -56,6 +60,46 @@ public class GuiBooklet extends GuiScreen{ this.ySize = 180; } + @Override + public void updateScreen(){ + super.updateScreen(); + this.searchField.updateCursorCounter(); + } + + @SuppressWarnings("unchecked") + @Override + public void keyTyped(char theChar, int key){ + if(key != 1 && this.searchField.isFocused()){ + this.searchField.textboxKeyTyped(theChar, key); + + if(this.currentIndexEntry == InitBooklet.allAndSearch){ + BookletEntryAllSearch currentEntry = (BookletEntryAllSearch)this.currentIndexEntry; + if(this.searchField.getText() != null && !this.searchField.getText().isEmpty()){ + currentEntry.chapters.clear(); + + for(BookletChapter chapter : currentEntry.allChapters){ + if(chapter.getLocalizedName().toLowerCase().contains(this.searchField.getText().toLowerCase())){ + currentEntry.chapters.add(chapter); + } + } + } + else{ + currentEntry.chapters = (ArrayList)currentEntry.allChapters.clone(); + } + this.openIndexEntry(this.currentIndexEntry, this.pageOpenInIndex, false); + } + } + else{ + super.keyTyped(theChar, key); + } + } + + @Override + protected void mouseClicked(int par1, int par2, int par3){ + this.searchField.mouseClicked(par1, par2, par3); + super.mouseClicked(par1, par2, par3); + } + @SuppressWarnings("unchecked") @Override public void initGui(){ @@ -75,10 +119,16 @@ public class GuiBooklet extends GuiScreen{ this.buttonList.add(new TexturedButton(BUTTON_ACHIEVEMENTS_ID, this.guiLeft+138, this.guiTop, 205, 0, 8, 8)); this.buttonList.add(new TexturedButton(BUTTON_CONFIG_ID, this.guiLeft+138, this.guiTop+10, 197, 0, 8, 8)); + this.searchField = new GuiTextField(this.unicodeRenderer, guiLeft+148, guiTop+162, 66, 10); + this.searchField.setMaxStringLength(30); + this.searchField.setEnableBackgroundDrawing(false); + this.searchField.setVisible(false); + this.currentPage = null; this.currentChapter = null; this.currentIndexEntry = null; - this.openIndexEntry(null, 1); + + this.openIndexEntry(null, 1, true); } private GuiButton getButton(int id){ @@ -96,6 +146,10 @@ public class GuiBooklet extends GuiScreen{ this.mc.getTextureManager().bindTexture(resLoc); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize); + if(this.currentIndexEntry == InitBooklet.allAndSearch && this.currentChapter == null){ + this.drawTexturedModalRect(this.guiLeft+146, this.guiTop+160, 146, 80, 70, 14); + } + 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); @@ -119,6 +173,7 @@ public class GuiBooklet extends GuiScreen{ } super.drawScreen(x, y, f); + this.searchField.drawTextBox(); //Achievements Hover Text if(x >= this.guiLeft+138 && x <= this.guiLeft+138+7 && y >= this.guiTop && y <= this.guiTop+7){ @@ -171,7 +226,7 @@ public class GuiBooklet extends GuiScreen{ if(page != null) this.currentPage = page; } else{ - this.openIndexEntry(this.currentIndexEntry, this.pageOpenInIndex+1); + this.openIndexEntry(this.currentIndexEntry, this.pageOpenInIndex+1, true); } } } @@ -182,16 +237,16 @@ public class GuiBooklet extends GuiScreen{ if(page != null) this.currentPage = page; } else{ - this.openIndexEntry(this.currentIndexEntry, this.pageOpenInIndex-1); + this.openIndexEntry(this.currentIndexEntry, this.pageOpenInIndex-1, true); } } } else if(button.id == BUTTON_RETURN_ID){ if(this.currentChapter != null){ - this.openIndexEntry(this.currentIndexEntry, this.pageOpenInIndex); + this.openIndexEntry(this.currentIndexEntry, this.pageOpenInIndex, true); } else{ - this.openIndexEntry(null, 1); + this.openIndexEntry(null, 1, true); } } else if(button.id >= CHAPTER_BUTTONS_START){ @@ -205,7 +260,7 @@ public class GuiBooklet extends GuiScreen{ } else{ if(actualButton < InitBooklet.entries.size()){ - this.openIndexEntry(InitBooklet.entries.get(actualButton), 1); + this.openIndexEntry(InitBooklet.entries.get(actualButton), 1, true); } } } @@ -220,7 +275,17 @@ public class GuiBooklet extends GuiScreen{ } } - private void openIndexEntry(BookletIndexEntry entry, int page){ + @SuppressWarnings("unchecked") + private void openIndexEntry(BookletIndexEntry entry, int page, boolean resetTextField){ + if(resetTextField){ + this.searchField.setVisible(entry == InitBooklet.allAndSearch); + this.searchField.setFocused(entry == InitBooklet.allAndSearch); + this.searchField.setText(""); + if(entry == InitBooklet.allAndSearch){ + entry.chapters = (ArrayList)((BookletEntryAllSearch)entry).allChapters.clone(); + } + } + this.currentPage = null; this.currentChapter = null; @@ -244,7 +309,9 @@ public class GuiBooklet extends GuiScreen{ else{ boolean entryExists = entry.chapters.size() > i+(12*this.pageOpenInIndex-12); button.visible = entryExists; - if(entryExists) button.displayString = entry.chapters.get(i+(12*this.pageOpenInIndex-12)).getLocalizedName(); + if(entryExists){ + button.displayString = entry.chapters.get(i+(12*this.pageOpenInIndex-12)).getLocalizedName(); + } } } } @@ -252,6 +319,10 @@ public class GuiBooklet extends GuiScreen{ private void openChapter(BookletChapter chapter){ if(chapter == null) return; + this.searchField.setVisible(false); + this.searchField.setFocused(false); + this.searchField.setText(""); + this.currentChapter = chapter; this.currentPage = currentChapter.pages[0]; diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/gui/booklet/InitBooklet.java b/src/main/java/ellpeck/actuallyadditions/inventory/gui/booklet/InitBooklet.java index 648262213..95518c8c7 100644 --- a/src/main/java/ellpeck/actuallyadditions/inventory/gui/booklet/InitBooklet.java +++ b/src/main/java/ellpeck/actuallyadditions/inventory/gui/booklet/InitBooklet.java @@ -12,6 +12,7 @@ package ellpeck.actuallyadditions.inventory.gui.booklet; import ellpeck.actuallyadditions.crafting.BlockCrafting; import ellpeck.actuallyadditions.crafting.FoodCrafting; +import ellpeck.actuallyadditions.crafting.ItemCrafting; import ellpeck.actuallyadditions.items.InitItems; import ellpeck.actuallyadditions.items.metalists.TheFoods; import net.minecraft.item.ItemStack; @@ -24,12 +25,12 @@ public class InitBooklet{ public static BookletIndexEntry entryFunctionalNonRF = new BookletIndexEntry("functionalNoRF"); public static BookletIndexEntry entryMisc = new BookletIndexEntry("misc"); - public static BookletIndexEntry allAndSearch = new BookletIndexEntry("allAndSearch"); + public static BookletEntryAllSearch allAndSearch = new BookletEntryAllSearch("allAndSearch"); static{ new BookletChapter("breaker", entryFunctionalNonRF, new PageCrafting(1, BlockCrafting.recipeBreaker), new PageCrafting(2, BlockCrafting.recipePlacer), new PageCrafting(3, BlockCrafting.recipeLiquidPlacer), new PageCrafting(4, BlockCrafting.recipeLiquidCollector)); - new BookletChapter("phantomfaces", entryFunctionalNonRF, new PageText(1), new PageCrafting(2, BlockCrafting.recipePhantomface), new PageCrafting(3, BlockCrafting.recipeLiquiface), new PageCrafting(4, BlockCrafting.recipeEnergyface)); - new BookletChapter("phantomBreaker", entryFunctionalNonRF, new PageText(1), new PageCrafting(2, BlockCrafting.recipePhantomPlacer), new PageCrafting(3, BlockCrafting.recipePhantomBreaker)); + new BookletChapter("phantomfaces", entryFunctionalNonRF, new PageText(1), new PageCrafting(2, BlockCrafting.recipePhantomface), new PageCrafting(3, BlockCrafting.recipeLiquiface), new PageCrafting(4, BlockCrafting.recipeEnergyface), new PageCrafting(5, ItemCrafting.recipePhantomConnector)); + new BookletChapter("phantomBreaker", entryFunctionalNonRF, new PageText(1), new PageCrafting(2, BlockCrafting.recipePhantomPlacer), new PageCrafting(3, BlockCrafting.recipePhantomBreaker), new PageCrafting(4, ItemCrafting.recipePhantomConnector)); new BookletChapter("cloud", entryMisc, new PageText(1), new PageCrafting(2, BlockCrafting.recipeSmileyCloud)); new BookletChapter("foods", entryMisc, new PageCrafting(1, FoodCrafting.recipePizza), new PageFurnace(2, new ItemStack(InitItems.itemFoods, 1, TheFoods.RICE_BREAD.ordinal())), new PageCrafting(3, FoodCrafting.recipeHamburger), new PageCrafting(4, FoodCrafting.recipeBigCookie), new PageCrafting(5, FoodCrafting.recipeSubSandwich), new PageCrafting(6, FoodCrafting.recipeFrenchFry), new PageCrafting(7, FoodCrafting.recipeFrenchFries), new PageCrafting(8, FoodCrafting.recipeFishNChips), new PageCrafting(9, FoodCrafting.recipeCheese), new PageCrafting(10, FoodCrafting.recipePumpkinStew), new PageCrafting(11, FoodCrafting.recipeCarrotJuice), new PageCrafting(12, FoodCrafting.recipeSpaghetti), new PageCrafting(13, FoodCrafting.recipeNoodle), new PageCrafting(14, FoodCrafting.recipeChocolate), new PageCrafting(15, FoodCrafting.recipeChocolateCake), new PageCrafting(16, FoodCrafting.recipeToast), new PageFurnace(17, new ItemStack(InitItems.itemFoods, 1, TheFoods.BAGUETTE.ordinal()))); diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index eedc693b5..e590ad0a5 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -364,7 +364,7 @@ achievement.actuallyadditions.openTreasureChest.desc=Open a Treasure Chest under booklet.actuallyadditions.indexEntry.misc.name=Miscellaneous booklet.actuallyadditions.indexEntry.functionalNoRF.name=Functional Blocks (No RF use) -booklet.actuallyadditions.indexEntry.allAndSearch.name=All Items (Search not implemented) +booklet.actuallyadditions.indexEntry.allAndSearch.name=All Items and Search booklet.actuallyadditions.recipeDisabled=The crafting recipe for this item is disabled in the Config File! If you're on a server, ask the server author to enable it in the config. If you're on a client, press the 'Open Config'-Button on the top right and enable the recipe! @@ -396,11 +396,13 @@ booklet.actuallyadditions.chapter.phantomfaces.text.1=A Phantomface is a block t booklet.actuallyadditions.chapter.phantomfaces.text.2=The normal Phantomface can connect to inventories like chests and furnaces, transfering Items into and out of them. booklet.actuallyadditions.chapter.phantomfaces.text.3=The Phantom Liquiface can connect to tanks and such, allowing all types of liquids to be pumped through. Giving it a Redstone Signal will cause it to auto-output. booklet.actuallyadditions.chapter.phantomfaces.text.4=The Phantom Energyface can connect to things like generators and crushers, allowing for RF to flow through them into and out of machines. +booklet.actuallyadditions.chapter.phantomfaces.text.5=Shift-Right-Click this onto any inventory and then on the Phantom Device to connect the two. booklet.actuallyadditions.chapter.phantomBreaker.name=Phantom Breakers & Placers booklet.actuallyadditions.chapter.phantomBreaker.text.1=Phantom Breakers and Placers have very similar mechanics to Phantomfaces: They can be connected to Blocks via Phantom Connectors and interact with the environment. Phantom Breakers and Placers only have a range of 3 blocks, however, in which they can destroy and place blocks in connected places. Shift-right-clicking will supply you with information about the connection, right-clicking normally will open its interface. booklet.actuallyadditions.chapter.phantomBreaker.text.2=The Phantom Placer places Blocks that you supply it with. booklet.actuallyadditions.chapter.phantomBreaker.text.3=The Phantom Placer breaks blocks and stores them in its internal inventory. +booklet.actuallyadditions.chapter.phantomBreaker.text.4=Shift-Right-Click this onto any inventory and then on the Phantom Device to connect the two. booklet.actuallyadditions.chapter.breaker.name=(Fluid) Placers & Breakers booklet.actuallyadditions.chapter.breaker.text.1=The Breaker breaks Blocks in front of it and stores them in its internal inventory. That's it. diff --git a/src/main/resources/assets/actuallyadditions/textures/gui/guiBooklet.png b/src/main/resources/assets/actuallyadditions/textures/gui/guiBooklet.png index 6a20f70d199de37f8acb02649b1de24caccc6a64..9f238aef91848ff0387d3b3c9aafcd5db0ce2486 100644 GIT binary patch literal 18204 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