From 1954da6edb610326765348e54028e58e9e1932f3 Mon Sep 17 00:00:00 2001 From: Shadows_of_Fire Date: Tue, 12 Dec 2017 01:54:12 -0500 Subject: [PATCH] Closes #985 Actually added a feature for once! (Enchanted book splitting) Added a transformHook in LensConversionRecipe Made the booklet have max stack size of 1 Moved the text over a bit on reconstructor recipe pages --- .../api/recipe/LensConversionRecipe.java | 5 +++ .../mod/booklet/InitBooklet.java | 2 ++ .../mod/booklet/page/PageReconstructor.java | 2 +- .../mod/items/ItemBooklet.java | 2 +- .../mod/items/lens/LensRecipeHandler.java | 8 +++-- .../mod/jei/JEIActuallyAdditionsPlugin.java | 23 +++--------- .../ReconstructorRecipeCategory.java | 5 ++- .../ReconstructorRecipeWrapper.java | 36 +++++++++++++++++++ .../mod/misc/apiimpl/MethodHandler.java | 7 ++-- .../mod/recipe/EnchBookConversion.java | 34 ++++++++++++++++++ .../assets/actuallyadditions/lang/en_US.lang | 3 ++ 11 files changed, 99 insertions(+), 28 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/recipe/EnchBookConversion.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensConversionRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensConversionRecipe.java index 56a031cee..22ce708dd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensConversionRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensConversionRecipe.java @@ -10,8 +10,11 @@ package de.ellpeck.actuallyadditions.api.recipe; +import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; import de.ellpeck.actuallyadditions.api.lens.LensConversion; +import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; public class LensConversionRecipe{ @@ -26,4 +29,6 @@ public class LensConversionRecipe{ this.energyUse = energyUse; this.type = type; } + + public void transformHook(ItemStack stack, IBlockState state, BlockPos pos, IAtomicReconstructor tile) {} } 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 05efbb78a..ce1b6b889 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -14,6 +14,7 @@ import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter; import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry; import de.ellpeck.actuallyadditions.api.booklet.IBookletPage; +import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheColoredLampColors; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks; @@ -184,6 +185,7 @@ public final class InitBooklet{ //Reconstruction chaptersIntroduction[7] = 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("bookSplitting", ActuallyAdditionsAPI.entryReconstruction, new ItemStack(Items.ENCHANTED_BOOK), new PageTextOnly(1), new PageReconstructor(2, new LensConversionRecipe(new ItemStack(Items.ENCHANTED_BOOK), new ItemStack(Items.ENCHANTED_BOOK), 0, ActuallyAdditionsAPI.lensDefaultConversion)).setNoText()); 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()); new BookletChapter("lensMoreDeath", ActuallyAdditionsAPI.entryReconstruction, new ItemStack(InitItems.itemMoreDamageLens), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeLensMoreDeath).setNoText()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java index cb5a87764..b9ba9ac4a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java @@ -41,7 +41,7 @@ public class PageReconstructor extends BookletPage{ gui.mc.getTextureManager().bindTexture(GuiBooklet.RES_LOC_GADGETS); GuiUtils.drawTexturedModalRect(startX+30, startY+10, 80, 146, 68, 48, 0); - gui.renderScaledAsciiString("("+StringUtil.localize("booklet."+ModUtil.MOD_ID+".reconstructorRecipe")+")", startX+12, startY+63, 0, false, gui.getMediumFontSize()); + gui.renderScaledAsciiString("("+StringUtil.localize("booklet."+ModUtil.MOD_ID+".reconstructorRecipe")+")", startX+6, startY+63, 0, false, gui.getMediumFontSize()); PageTextOnly.renderTextToPage(gui, this, startX+6, startY+88); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java index a55e981f4..a6709fb45 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java @@ -49,7 +49,7 @@ public class ItemBooklet extends ItemBase implements IHudDisplay{ public ItemBooklet(String name){ super(name); - this.setMaxStackSize(16); + this.setMaxStackSize(1); this.setMaxDamage(0); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java index 8c4b71eac..ba758f217 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java @@ -10,6 +10,8 @@ package de.ellpeck.actuallyadditions.mod.items.lens; +import java.util.ArrayList; + import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.recipe.ColorLensChangerByDyeMeta; import de.ellpeck.actuallyadditions.api.recipe.IColorLensChanger; @@ -18,6 +20,7 @@ import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.metalists.TheCrystals; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; +import de.ellpeck.actuallyadditions.mod.recipe.EnchBookConversion; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.RecipeUtil; import net.minecraft.init.Blocks; @@ -25,8 +28,6 @@ import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import java.util.ArrayList; - public final class LensRecipeHandler{ public static final ArrayList MAIN_PAGE_RECIPES = new ArrayList(); @@ -42,6 +43,7 @@ public final class LensRecipeHandler{ public static LensConversionRecipe recipeCrystallizedCanolaSeed; public static LensConversionRecipe recipeItemLaser; public static LensConversionRecipe recipeFluidLaser; + public static EnchBookConversion recipeEnchBook; public static void init(){ //Crystal Blocks @@ -105,6 +107,8 @@ public final class LensRecipeHandler{ recipeWhiteWall = RecipeUtil.lastReconstructorRecipe(); ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Blocks.QUARTZ_BLOCK, 1, 1), new ItemStack(InitBlocks.blockTestifiBucksGreenWall), 10); recipeGreenWall = RecipeUtil.lastReconstructorRecipe(); + + ActuallyAdditionsAPI.RECONSTRUCTOR_LENS_CONVERSION_RECIPES.add(recipeEnchBook = new EnchBookConversion()); IColorLensChanger changer = new ColorLensChangerByDyeMeta(); ActuallyAdditionsAPI.addReconstructorLensColorChangeItem(Items.DYE, changer); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java index dfd6ff547..ecd393100 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java @@ -37,9 +37,11 @@ import de.ellpeck.actuallyadditions.mod.jei.empowerer.EmpowererRecipeWrapper; import de.ellpeck.actuallyadditions.mod.jei.reconstructor.ReconstructorRecipeCategory; import de.ellpeck.actuallyadditions.mod.jei.reconstructor.ReconstructorRecipeWrapper; import de.ellpeck.actuallyadditions.mod.util.Util; -import mezz.jei.api.*; +import mezz.jei.api.IJeiHelpers; +import mezz.jei.api.IModPlugin; +import mezz.jei.api.IModRegistry; +import mezz.jei.api.JEIPlugin; import mezz.jei.api.ingredients.IIngredientBlacklist; -import mezz.jei.api.ingredients.IModIngredientRegistration; import mezz.jei.api.recipe.IRecipeCategoryRegistration; import mezz.jei.api.recipe.VanillaRecipeCategoryUid; import mezz.jei.api.recipe.transfer.IRecipeTransferRegistry; @@ -47,16 +49,6 @@ import net.minecraft.item.ItemStack; @JEIPlugin public class JEIActuallyAdditionsPlugin implements IModPlugin{ - - @Override - public void registerItemSubtypes(ISubtypeRegistry subtypeRegistry){ - - } - - @Override - public void registerIngredients(IModIngredientRegistration registry){ - - } @Override public void registerCategories(IRecipeCategoryRegistration registry) { @@ -77,7 +69,7 @@ public class JEIActuallyAdditionsPlugin implements IModPlugin{ registry.handleRecipes(IBookletPage.class, BookletRecipeWrapper::new, BookletRecipeCategory.NAME); registry.handleRecipes(CoffeeIngredient.class, CoffeeMachineRecipeWrapper::new, CoffeeMachineRecipeCategory.NAME); registry.handleRecipes(CrusherRecipe.class, CrusherRecipeWrapper::new, CrusherRecipeCategory.NAME); - registry.handleRecipes(LensConversionRecipe.class, ReconstructorRecipeWrapper::new, ReconstructorRecipeCategory.NAME); + registry.handleRecipes(LensConversionRecipe.class, ReconstructorRecipeWrapper.FACTORY, ReconstructorRecipeCategory.NAME); registry.handleRecipes(EmpowererRecipe.class, EmpowererRecipeWrapper::new, EmpowererRecipeCategory.NAME); registry.handleRecipes(CompostRecipe.class, CompostRecipeWrapper::new, CompostRecipeCategory.NAME); @@ -115,9 +107,4 @@ public class JEIActuallyAdditionsPlugin implements IModPlugin{ registry.addRecipeCatalyst(new ItemStack(InitItems.itemBooklet), BookletRecipeCategory.NAME); registry.addRecipeCatalyst(new ItemStack(InitBlocks.blockCompost), CompostRecipeCategory.NAME); } - - @Override - public void onRuntimeAvailable(IJeiRuntime jeiRuntime){ - - } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java index 84112c020..b03974d61 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java @@ -61,9 +61,8 @@ public class ReconstructorRecipeCategory implements IRecipeCategory FACTORY = (recipe) -> { + if(recipe instanceof EnchBookConversion) return new EnchBookWrapper((EnchBookConversion) recipe); + return new ReconstructorRecipeWrapper(recipe); + }; public final LensConversionRecipe theRecipe; @@ -53,4 +64,29 @@ public class ReconstructorRecipeWrapper extends RecipeWrapperWithButton{ public IBookletPage getPage(){ return BookletUtils.findFirstPageForStack(new ItemStack(InitBlocks.blockAtomicReconstructor)); } + + public static class EnchBookWrapper extends ReconstructorRecipeWrapper { + + private static final ItemStack BOOK = new ItemStack(Items.ENCHANTED_BOOK); + private static final ItemStack OUT = new ItemStack(Items.ENCHANTED_BOOK); + + static { + OUT.setStackDisplayName("Split Book"); + NBTTagCompound t = OUT.getTagCompound().getCompoundTag("display"); + NBTTagList l = new NBTTagList(); + l.appendTag(new NBTTagString("Book will be split based on enchantments!")); + t.setTag("Lore", l); + } + + public EnchBookWrapper(EnchBookConversion recipe) { + super(recipe); + } + + @Override + public void getIngredients(IIngredients ingredients){ + ingredients.setInput(ItemStack.class, BOOK); + ingredients.setOutput(ItemStack.class, OUT); + } + + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/MethodHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/MethodHandler.java index 7ceed8682..e2449dff8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/MethodHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/MethodHandler.java @@ -173,8 +173,8 @@ public class MethodHandler implements IMethodHandler{ if(recipe != null && recipe.type == tile.getLens() && tile.getEnergy() >= recipe.energyUse){ ItemStack output = recipe.outputStack; if(StackUtil.isValid(output)){ - tile.getWorldObject().playEvent(2001, pos, Block.getStateId(tile.getWorldObject().getBlockState(pos))); - //This change might break something? Not sure. It could. + tile.getWorldObject().playEvent(2001, pos, Block.getStateId(state)); + recipe.transformHook(ItemStack.EMPTY, state, pos, tile); if(output.getItem() instanceof ItemBlock){ Block toPlace = Block.getBlockFromItem(output.getItem()); IBlockState state2Place = toPlace.getStateForPlacement(tile.getWorldObject(), pos, facing, 0, 0, 0, output.getMetadata(), FakePlayerFactory.getMinecraft((WorldServer) tile.getWorldObject()), EnumHand.MAIN_HAND); @@ -197,7 +197,7 @@ public class MethodHandler implements IMethodHandler{ } //Converting the Items - ArrayList items = (ArrayList)tile.getWorldObject().getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(hitBlock.getX()-rangeX, hitBlock.getY()-rangeY, hitBlock.getZ()-rangeZ, hitBlock.getX()+1+rangeX, hitBlock.getY()+1+rangeY, hitBlock.getZ()+1+rangeZ)); + List items = tile.getWorldObject().getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(hitBlock.getX()-rangeX, hitBlock.getY()-rangeY, hitBlock.getZ()-rangeZ, hitBlock.getX()+1+rangeX, hitBlock.getY()+1+rangeY, hitBlock.getZ()+1+rangeZ)); for(EntityItem item : items){ ItemStack stack = item.getItem(); if(!item.isDead && StackUtil.isValid(stack)){ @@ -207,6 +207,7 @@ public class MethodHandler implements IMethodHandler{ int itemsPossible = Math.min(tile.getEnergy()/recipe.energyUse, StackUtil.getStackSize(stack)); if(itemsPossible > 0){ + recipe.transformHook(item.getItem(), null, item.getPosition(), tile); item.setDead(); if(StackUtil.getStackSize(stack)-itemsPossible > 0){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/EnchBookConversion.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/EnchBookConversion.java new file mode 100644 index 000000000..8f0d97895 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/EnchBookConversion.java @@ -0,0 +1,34 @@ +package de.ellpeck.actuallyadditions.mod.recipe; + +import java.util.Map; + +import com.google.common.collect.ImmutableMap; + +import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; +import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; +import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; + +public class EnchBookConversion extends LensConversionRecipe { + + public EnchBookConversion() { + super(new ItemStack(Items.ENCHANTED_BOOK), ItemStack.EMPTY, 155000, ActuallyAdditionsAPI.lensDefaultConversion); + } + + @Override + public void transformHook(ItemStack stack, IBlockState state, BlockPos pos, IAtomicReconstructor tile) { + for(Map.Entry e : EnchantmentHelper.getEnchantments(stack).entrySet()) { + ItemStack book = new ItemStack(Items.ENCHANTED_BOOK); + Map ench = ImmutableMap.of(e.getKey(), e.getValue()); + EnchantmentHelper.setEnchantments(ench, book); + Block.spawnAsEntity(tile.getWorldObject(), pos, book); + } + } + +} diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 2fe433a26..40b1d9698 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -1085,6 +1085,9 @@ booklet.actuallyadditions.chapter.reconstructorLenses.text.1=The Atomic Re booklet.actuallyadditions.chapter.additionalRecipes.name=Additional Recipes +booklet.actuallyadditions.chapter.bookSplitting.name=Splitting Enchanted Books +booklet.actuallyadditions.chapter.bookSplitting.text.1=The Atomic Reconstructor has the ability to split books with multiple enchantments into more books, with only a single enchantment each. This costs 155000 CF, so you will only ever be able to split a single book at a time. Be careful to not leave multiple books in the path of the reconstructor, or it might hit one with only a single enchantment, voiding 155000 CF! As a side effect, this process generates enchanted books out of thin air to fulfill it's purpose. Magic, right? + booklet.actuallyadditions.chapter.lensColor.name=Lens of Color booklet.actuallyadditions.chapter.lensColor.text.1=The Lens of Color changes the color of Stained Glass and Panes, Stained Clay, Carpet, Dye, Lamps, Wool in its sight. Contrary to using no lens, it goes through blocks and only converts blocks it touches.