diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index d4d7bcc72..095b4dbb7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -70,6 +70,7 @@ public final class ActuallyAdditionsAPI{ //DO NOT CHANGE/OVERRIDE THESE!! public static IBookletEntry entryGettingStarted; public static IBookletEntry entryReconstruction; + public static IBookletEntry entryLaserRelays; public static IBookletEntry entryFunctionalNonRF; public static IBookletEntry entryFunctionalRF; public static IBookletEntry entryGeneratingRF; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java index 2353b5725..849cc8ad3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java @@ -219,11 +219,8 @@ public final class BookletUtils{ } //Renders the amount of words and chars the book has else{ - String wordCountString = StringUtil.localizeFormatted("booklet."+ModUtil.MOD_ID+".amountOfWords", ClientProxy.bookletWordCount); - booklet.getFontRenderer().drawString(TextFormatting.ITALIC+wordCountString, booklet.guiLeft+booklet.xSize-booklet.getFontRenderer().getStringWidth(wordCountString)-15, booklet.guiTop+booklet.ySize-18-booklet.getFontRenderer().FONT_HEIGHT, 0); - - String charCountString = StringUtil.localizeFormatted("booklet."+ModUtil.MOD_ID+".amountOfChars", ClientProxy.bookletCharCount); - booklet.getFontRenderer().drawString(TextFormatting.ITALIC+charCountString, booklet.guiLeft+booklet.xSize-booklet.getFontRenderer().getStringWidth(charCountString)-15, booklet.guiTop+booklet.ySize-18, 0); + String countStrg = StringUtil.localizeFormatted("booklet."+ModUtil.MOD_ID+".amountOfWordsAndChars", ClientProxy.bookletWordCount, ClientProxy.bookletCharCount); + booklet.getFontRenderer().drawString(TextFormatting.ITALIC+countStrg, booklet.guiLeft+5, booklet.guiTop+booklet.ySize+1, 0); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 9b6704640..064225d50 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -48,17 +48,18 @@ import java.util.Arrays; public final class InitBooklet{ public static BookletChapter chapterIntro; - public static BookletChapter[] chaptersIntroduction = new BookletChapter[6]; + public static BookletChapter[] chaptersIntroduction = new BookletChapter[8]; public static void preInit(){ ActuallyAdditionsAPI.entryGettingStarted = new BookletEntry("gettingStarted").setImportant(); ActuallyAdditionsAPI.entryReconstruction = new BookletEntry("reconstruction"); + ActuallyAdditionsAPI.entryLaserRelays = new BookletEntry("laserRelays").setSpecial(); ActuallyAdditionsAPI.entryFunctionalNonRF = new BookletEntry("functionalNoRF"); - ActuallyAdditionsAPI.entryFunctionalRF = new BookletEntry("functionalRF").setSpecial(); - ActuallyAdditionsAPI.entryGeneratingRF = new BookletEntry("generatingRF").setSpecial(); + ActuallyAdditionsAPI.entryFunctionalRF = new BookletEntry("functionalRF"); + ActuallyAdditionsAPI.entryGeneratingRF = new BookletEntry("generatingRF"); ActuallyAdditionsAPI.entryItemsNonRF = new BookletEntry("itemsNoRF"); - ActuallyAdditionsAPI.entryItemsRF = new BookletEntry("itemsRF").setSpecial(); - ActuallyAdditionsAPI.entryMisc = new BookletEntry("misc"); + ActuallyAdditionsAPI.entryItemsRF = new BookletEntry("itemsRF"); + ActuallyAdditionsAPI.entryMisc = new BookletEntry("misc").setSpecial(); ActuallyAdditionsAPI.allAndSearch = new BookletEntryAllSearch("allAndSearch").setImportant(); } @@ -144,7 +145,7 @@ public final class InitBooklet{ new BookletChapter("tinyTorch", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockTinyTorch), new PageCrafting(1, BlockCrafting.recipesTinyTorch).setPageStacksWildcard()).setSpecial(); //Reconstruction - new BookletChapter("reconstructorLenses", ActuallyAdditionsAPI.entryReconstruction, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.LENS.ordinal()), new PageTextOnly(1)).setImportant(); + chaptersIntroduction[6] = new BookletChapter("reconstructorLenses", ActuallyAdditionsAPI.entryReconstruction, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.LENS.ordinal()), new PageTextOnly(1)).setImportant(); new BookletChapter("additionalRecipes", ActuallyAdditionsAPI.entryReconstruction, new ItemStack(Items.LEATHER), new PageReconstructor(1, LensRecipeHandler.recipeSoulSand).setNoText(), new PageReconstructor(2, LensRecipeHandler.recipeLeather).setNoText(), new PageReconstructor(3, LensRecipeHandler.recipeNetherWart).setNoText(), new PageReconstructor(4, LensRecipeHandler.recipePrismarine).setNoText()).setSpecial(); new BookletChapter("lensColor", ActuallyAdditionsAPI.entryReconstruction, new ItemStack(InitItems.itemColorLens), new PageTextOnly(1), new PageReconstructor(2, LensRecipeHandler.recipeColorLens).setNoText()); new BookletChapter("lensDeath", ActuallyAdditionsAPI.entryReconstruction, new ItemStack(InitItems.itemDamageLens), new PageTextOnly(1), new PageReconstructor(2, LensRecipeHandler.recipeDamageLens).setNoText()); @@ -153,9 +154,13 @@ public final class InitBooklet{ new BookletChapter("lensDisenchanting", ActuallyAdditionsAPI.entryReconstruction, new ItemStack(InitItems.itemDisenchantingLens), new PageTextOnly(1).addTextReplacement("", LensDisenchanting.ENERGY_USE), new PageCrafting(2, ItemCrafting.recipeDisenchantingLens).setNoText()).setSpecial(); new BookletChapter("lensMining", ActuallyAdditionsAPI.entryReconstruction, new ItemStack(InitItems.itemMiningLens), new PageTextOnly(1).addTextReplacement("", LensMining.ENERGY_USE), new PageCrafting(2, ItemCrafting.recipeMiningLens).setNoText()).setImportant(); + //Laser Relays + chaptersIntroduction[7] = new BookletChapter("laserIntro", ActuallyAdditionsAPI.entryLaserRelays, new ItemStack(InitItems.itemLaserWrench), new PageTextOnly(1), new PageTextOnly(2).addTextReplacement("", TileEntityLaserRelay.MAX_DISTANCE), new PageCrafting(3, ItemCrafting.recipeLaserWrench).setNoText()).setImportant(); + new BookletChapter("laserRelays", ActuallyAdditionsAPI.entryLaserRelays, new ItemStack(InitBlocks.blockLaserRelay), new PageTextOnly(1), new PageTextOnly(2).addTextReplacement("", TileEntityLaserRelayEnergy.CAP).addTextReplacement("", TileEntityLaserRelayEnergyAdvanced.CAP).addTextReplacement("", TileEntityLaserRelayEnergyExtreme.CAP), new PagePicture(3, "pageLaserRelay", 0).setNoText(), new PageCrafting(4, BlockCrafting.recipeLaserRelay).setNoText().setPageStacksWildcard(), new PageCrafting(5, BlockCrafting.recipeLaserRelayAdvanced).setNoText().setPageStacksWildcard(), new PageCrafting(6, BlockCrafting.recipeLaserRelayExtreme).setNoText().setPageStacksWildcard()); + new BookletChapter("itemStorage", ActuallyAdditionsAPI.entryLaserRelays, new ItemStack(InitBlocks.blockLaserRelayItemWhitelist), new PageTextOnly(1), new PageTextOnly(2), new PagePicture(3, "pageItemLaserRelayBasic", 78), new PagePicture(4, "pageItemLaserRelayFail", 84), new PagePicture(5, "pageItemLaserRelayTransfer", 78), new PagePicture(6, "pageItemLaserRelayWhitelistChest", 76), new PagePicture(7, "pageItemLaserRelayWhitelistInterface", 75), new PagePicture(8, "pageItemLaserRelaySystem", 75), new PageTextOnly(9), new PageCrafting(10, BlockCrafting.recipeLaserRelayItem).setNoText().setPageStacksWildcard(), new PageCrafting(11, BlockCrafting.recipeLaserRelayItemWhitelist).setNoText().setPageStacksWildcard(), new PageCrafting(12, BlockCrafting.recipeItemInterface).setNoText()); + new BookletChapter("fluidLaser", ActuallyAdditionsAPI.entryLaserRelays, new ItemStack(InitBlocks.blockLaserRelayFluids), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeFluidLaser).setNoText()); + //No RF Using Blocks - new BookletChapter("itemStorage", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockLaserRelayItemWhitelist), new PageTextOnly(1), new PageTextOnly(2), new PagePicture(3, "pageItemLaserRelayBasic", 78), new PagePicture(4, "pageItemLaserRelayFail", 84), new PagePicture(5, "pageItemLaserRelayTransfer", 78), new PagePicture(6, "pageItemLaserRelayWhitelistChest", 76), new PagePicture(7, "pageItemLaserRelayWhitelistInterface", 75), new PagePicture(8, "pageItemLaserRelaySystem", 75), new PageTextOnly(9), new PageCrafting(10, BlockCrafting.recipeLaserRelayItem).setNoText().setPageStacksWildcard(), new PageCrafting(11, BlockCrafting.recipeLaserRelayItemWhitelist).setNoText().setPageStacksWildcard(), new PageCrafting(12, BlockCrafting.recipeItemInterface).setNoText()).setImportant(); - new BookletChapter("fluidLaser", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockLaserRelayFluids), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeFluidLaser).setNoText()).setSpecial(); new BookletChapter("breaker", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockBreaker), new PageCrafting(1, BlockCrafting.recipeBreaker).setPageStacksWildcard(), new PageCrafting(2, BlockCrafting.recipePlacer).setPageStacksWildcard(), new PageCrafting(3, BlockCrafting.recipeLiquidPlacer).setPageStacksWildcard(), new PageCrafting(4, BlockCrafting.recipeLiquidCollector).setPageStacksWildcard()); new BookletChapter("dropper", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockDropper), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeDropper).setNoText()); new BookletChapter("phantomfaces", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockPhantomLiquiface), new PageTextOnly(1).addTextReplacement("", TileEntityPhantomface.RANGE), new PageTextOnly(2), new PageCrafting(3, BlockCrafting.recipePhantomface), new PageCrafting(4, BlockCrafting.recipeLiquiface), new PageCrafting(5, BlockCrafting.recipeEnergyface), new PageCrafting(6, ItemCrafting.recipePhantomConnector).setNoText(), new PageCrafting(7, BlockCrafting.recipePhantomBooster)).setImportant(); @@ -174,7 +179,6 @@ public final class InitBooklet{ //RF Using Blocks new BookletChapter("farmer", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockFarmer), new PageTextOnly(1).addTextReplacement("", TileEntityFarmer.USE_PER_OPERATION), new PageCrafting(2, BlockCrafting.recipeFarmer).setNoText().setPageStacksWildcard()).setImportant(); new BookletChapter("fireworkBox", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockFireworkBox), new PageTextOnly(1).addTextReplacement("", TileEntityFireworkBox.USE_PER_SHOT), new PageCrafting(2, BlockCrafting.recipeFireworkBox)).setSpecial(); - new BookletChapter("laserRelays", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockLaserRelay), new PageTextOnly(1).addTextReplacement("", TileEntityLaserRelay.MAX_DISTANCE), new PageTextOnly(2).addTextReplacement("", TileEntityLaserRelayEnergy.CAP).addTextReplacement("", TileEntityLaserRelayEnergyAdvanced.CAP).addTextReplacement("", TileEntityLaserRelayEnergyExtreme.CAP), new PagePicture(3, "pageLaserRelay", 0).setNoText(), new PageCrafting(4, BlockCrafting.recipeLaserRelay).setNoText().setPageStacksWildcard(), new PageCrafting(5, BlockCrafting.recipeLaserRelayAdvanced).setNoText().setPageStacksWildcard(), new PageCrafting(6, BlockCrafting.recipeLaserRelayExtreme).setNoText().setPageStacksWildcard(), new PageCrafting(7, ItemCrafting.recipeLaserWrench).setNoText()).setImportant(); new BookletChapter("miner", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockMiner), new PageTextOnly(1).addTextReplacement("", TileEntityMiner.ENERGY_USE_PER_BLOCK).addTextReplacement("", TileEntityMiner.DEFAULT_RANGE), new PageCrafting(2, BlockCrafting.recipeMiner)).setSpecial(); new BookletChapterCoffee("coffeeMachine", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockCoffeeMachine), new PageTextOnly(1).setStacks(new ItemStack(InitItems.itemCoffeeBean)).addTextReplacement("", TileEntityCoffeeMachine.ENERGY_USED).addTextReplacement("", TileEntityCoffeeMachine.CACHE_USE).addTextReplacement("", TileEntityCoffeeMachine.WATER_USE), new PageTextOnly(2).setStacks(new ItemStack(InitItems.itemCoffee)), new PagePicture(3, "pageCoffeeMachine", 115), new PageCrafting(4, BlockCrafting.recipeCoffeeMachine).setNoText().setPageStacksWildcard(), new PageCrafting(5, ItemCrafting.recipeCup).setNoText()).setImportant(); new BookletChapterCrusher("crusher", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockGrinderDouble), new PageTextOnly(1).addTextReplacement("", TileEntityGrinder.ENERGY_USE), new PageCrafting(2, BlockCrafting.recipeCrusher).setNoText().setPageStacksWildcard(), new PageCrafting(3, BlockCrafting.recipeDoubleCrusher).setNoText().setPageStacksWildcard(), new PageCrusherRecipe(4, CrusherCrafting.recipeIronHorseArmor).setNoText(), new PageCrusherRecipe(5, CrusherCrafting.recipeGoldHorseArmor).setNoText(), new PageCrusherRecipe(6, CrusherCrafting.recipeDiamondHorseArmor).setNoText()); diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 37119bccd..566047a2e 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -741,13 +741,13 @@ booklet.actuallyadditions.indexEntry.generatingRF.name=Blocks that generate RF booklet.actuallyadditions.indexEntry.itemsNoRF.name=Items that don't use RF booklet.actuallyadditions.indexEntry.itemsRF.name=Items that use RF booklet.actuallyadditions.indexEntry.reconstruction.name=Reconstruction +booklet.actuallyadditions.indexEntry.laserRelays.name=Laser Transport #Booklet Info 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! booklet.actuallyadditions.unavailable=Parts of this feature are currently disabled or incomplete due to the not fully complete 1.8.9 and 1.9 Port. You may experience something that's missing or doesn't fully work. Please use this item with caution! booklet.actuallyadditions.clickToSeeRecipe=Click to see more Information -booklet.actuallyadditions.amountOfWords=%s words in total -booklet.actuallyadditions.amountOfChars=%s characters in total +booklet.actuallyadditions.amountOfWordsAndChars=Total: %s words, %s characters #Booklet Chapters booklet.actuallyadditions.chapter.intro.name=An Introduction to ActAdd @@ -915,8 +915,12 @@ booklet.actuallyadditions.chapter.hairBalls.name=Ball of Fur-s booklet.actuallyadditions.chapter.hairBalls.text.1=Balls of Fur dropped by live cats. More information on the next page. booklet.actuallyadditions.chapter.hairBalls.text.2=Balls of Fur are an item rarely dropped by cats which have been tamed by the player. Cats are very mysterious creatures as they appear to get everything stuck in their fur. Balls of Fur may seem disgusting at first, but when removing all of the hair by right-clicking, they will reveal some valuable items. Or just some String. FUURRRRRR!! +booklet.actuallyadditions.chapter.laserIntro.name=Intro to Laser Relays +booklet.actuallyadditions.chapter.laserIntro.text.1=Laser Relays exist in different variants, however, they all have the same basic functionality. A Laser Relay can be connected to one ore more other laser relays using a Laser Wrench. This can be achieved by right-clicking the first relay and then right-clicking the second one. There can be an infinite number of interconnected Laser Relays, making what is called a Network or System. Such a network will have no predefined starting or end point, but instead, +booklet.actuallyadditions.chapter.laserIntro.text.2=every Laser Relay has access to interact with all of the other ones in different ways. Connecting two Laser Relays has some restrictions, however. First of all, two connected Laser Relays must be at most blocks apart from each other. Additionally, two Laser Relays of a different type cannot be connected to one another. View the other items in this chapter to find out more about different types of Laser Relays! + booklet.actuallyadditions.chapter.laserRelays.name=Energy Laser Relays -booklet.actuallyadditions.chapter.laserRelays.text.1=The Energy Laser Relay is a block that can wirelessly transfer RF (or Tesla) just by being connected with a Laser Wrench, generating a network. When placing a Power Generator or Receiver next to the relay, it can receive Power from any other relay in the network. This system always works in both directions simultaneously. Two relays can be at most blocks apart. During an energy transfer, they have a light Energy Loss, but nothing to worry about. +booklet.actuallyadditions.chapter.laserRelays.text.1=The Energy Laser Relay is a block that can wirelessly transfer RF (or Tesla). When placing a Power Generator or Receiver next to the relay, it can receive Power from any other relay in the network and send power to any other relay as well. During an energy transfer, they have a light Energy Loss, but nothing to worry about. booklet.actuallyadditions.chapter.laserRelays.text.2=There are three tiers of Energy Laser Relay. They have different maximum amounts of energy to be transferred through them in one tick. The energy caps are, in order, , , and . Additionally, the energy loss is a bit higher every tier. Interconnecting different tiers is possible, however the lowest cap and highest loss of the two relays connected to the blocks involved in the transfer is considered. booklet.actuallyadditions.chapter.blackLotus.name=Black Lotus @@ -982,7 +986,7 @@ booklet.actuallyadditions.chapter.spawnerChanger.name=Spawner Changer booklet.actuallyadditions.chapter.spawnerChanger.text.1=The Spawner Changer is an item that can be used to manipulate the mobs that spawners spawn. This can be accomplished by first of all picking up the desired mob to spawn with the Changer, killing it in the process. Next, the Changer can be right-clicked on the spawner, causing the spawner to be changed and the changer itself to be destroyed. This process probably won't work with every type of mob though. booklet.actuallyadditions.chapter.itemStorage.name=Laser Relay Item Storage -booklet.actuallyadditions.chapter.itemStorage.text.1=Item Laser Relays work much like their energy version, but instead of transferring energy, they transport items around! The basic mechanics of the Item Laser Relay are much the same as the Energy Laser Relay (read about those in the Blocks that use RF section!). Once connected up into a network (or system), said network will know about all of the inventories adjacent to all of the relays and will be able to interact with them. +booklet.actuallyadditions.chapter.itemStorage.text.1=The basic mechanics of the Item Laser Relay are much the same as any other Laser Relay. Once connected up into a network (or system), said network will know about all of the inventories adjacent to all of the relays and will be able to interact with them. booklet.actuallyadditions.chapter.itemStorage.text.2=However, Item Interfaces are the way to actually communicate and interact with the entire system at once, meaning you can pull items out of or put into an Item Interface via automation, be it Hoppers or ESDs or pipes, and they will transfer the items into or out of ALL OF the inventories mentioned previously. This isn't really useful for a single inventory, but very useful if you are planning to build an automated storage. booklet.actuallyadditions.chapter.itemStorage.text.3=Above, you can see such a system. Putting items into the left chest will cause them to be stored in the one in the middle, and the hopper on the right pulls them out of the chest in the middle. This is more useful with multiple chests. booklet.actuallyadditions.chapter.itemStorage.text.4=The whole chest part of this is very important, as such a setup as the one seen above will not work. This is because every system needs a storage space, and an Item Interface does not count as that. @@ -1040,7 +1044,7 @@ booklet.actuallyadditions.chapter.empowerer.text.3=Because every mod booklet.actuallyadditions.chapter.empowerer.text.4=The Display Stand can also be used for other things! See the Blocks that use RF section for more info about it! booklet.actuallyadditions.chapter.fluidLaser.name=Fluid Laser Relays -booklet.actuallyadditions.chapter.fluidLaser.text.1=The Fluid Laser Relays work much in the same way that normal Laser Relays do, so if you want to know anything about them, visit the Blocks that use RF section of the manual. The thing that makes the Fluid Laser Relay different from the Energy Laser Relay, however, is that it transfers fluids from internal tanks of blocks into other blocks. +booklet.actuallyadditions.chapter.fluidLaser.text.1=The Fluid Laser Relays work much in the same way that normal Laser Relays do, however the thing that makes the Fluid Laser Relay different from the Energy Laser Relay, however, is that it transfers fluids from internal tanks of blocks into other blocks. booklet.actuallyadditions.chapter.distributorItem.name=Item Distributor booklet.actuallyadditions.chapter.distributorItem.text.1=The Item Distributor is a simple way to split up items and make them go in different directions. The distributor will pull items into it from the top by itself, and then split them up and put them out into inventories connected to all of the other sides of it. It tries to do split the items equally, however this works best when inputting one item at a time, which its pulling feature does automatically.