diff --git a/build.gradle b/build.gradle index 0efa9fd7..96ae1bf5 100644 --- a/build.gradle +++ b/build.gradle @@ -36,6 +36,8 @@ minecraft { runs { client { workingDirectory project.file('run') + + properties 'mixin.env.disableRefMap': 'true' // Recommended logging data for a userdev environment property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' @@ -52,6 +54,8 @@ minecraft { server { workingDirectory project.file('run') + + properties 'mixin.env.disableRefMap': 'true' // Recommended logging data for a userdev environment property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' @@ -68,6 +72,8 @@ minecraft { data { workingDirectory project.file('run') + + properties 'mixin.env.disableRefMap': 'true' // Recommended logging data for a userdev environment property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' @@ -90,6 +96,10 @@ repositories { maven { url "http://dvs1.progwml6.com/files/maven/" } + maven { + name = "The Loader" + url = "https://maven.blamejared.com" + } } dependencies { @@ -105,6 +115,9 @@ dependencies { compileOnly fg.deobf("mezz.jei:jei-1.16.2:7.1.3.19:api") runtimeOnly fg.deobf("mezz.jei:jei-1.16.2:7.1.3.19") + + compileOnly fg.deobf("vazkii.patchouli:Patchouli:${patchouli_version}:api") + runtimeOnly fg.deobf("vazkii.patchouli:Patchouli:${patchouli_version}") // You may put jars on which you depend on in ./libs or you may define them like so.. // compile "some.group:artifact:version:classifier" // compile "some.group:artifact:version" diff --git a/gradle.properties b/gradle.properties index 6d57271b..fba356f5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,4 +6,5 @@ org.gradle.daemon=false minecraft_version=1.16.3 #Mod dependencies -jei_version=7.6.0.49 \ No newline at end of file +jei_version=7.6.0.49 +patchouli_version=1.16.2-47-SNAPSHOT \ No newline at end of file diff --git a/runClient.launch b/runClient.launch index 664cf9fe..24823cb8 100644 --- a/runClient.launch +++ b/runClient.launch @@ -16,6 +16,6 @@ - + diff --git a/runData.launch b/runData.launch index 296ac5fd..c9e117f3 100644 --- a/runData.launch +++ b/runData.launch @@ -1,11 +1,5 @@ - - - - - - @@ -15,13 +9,10 @@ - - - - + diff --git a/runServer.launch b/runServer.launch index 581f8b9c..72cf747b 100644 --- a/runServer.launch +++ b/runServer.launch @@ -1,11 +1,5 @@ - - - - - - @@ -15,12 +9,10 @@ - - - + - + diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 5c45ea61..152c3d51 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -18,7 +18,7 @@ e1a98bd53fca155e4bbb03c1e548341af0f84bd7 assets/bloodmagic/blockstates/masterrit b03040d7a168653bf8df3600033b8fde2383db30 assets/bloodmagic/blockstates/selfsacrificerune.json 487ffdc02ab7b65aafcb932e3b5cf6ea0500b21d assets/bloodmagic/blockstates/speedrune.json e6d9cf699667aaa47efff37b2b033895dee29c15 assets/bloodmagic/blockstates/waterritualstone.json -2fd83f690f0a9af248196620b528a4f9717962a1 assets/bloodmagic/lang/en_us.json +fb7a615c3c1cf62b3a9c4a3ef701d22e7b45108c assets/bloodmagic/lang/en_us.json 34445195b9f2459475cde53454bc8e37d32865d7 assets/bloodmagic/models/block/accelerationrune.json bcdbccc49d4509571be6988762ab87126275a4c8 assets/bloodmagic/models/block/airritualstone.json adf6c0b1e25451609486dc8c8cfbd9cf0f8c67f4 assets/bloodmagic/models/block/alchemicalreactionchamber.json diff --git a/src/generated/resources/assets/bloodmagic/lang/en_us.json b/src/generated/resources/assets/bloodmagic/lang/en_us.json index 7647403e..3a855484 100644 --- a/src/generated/resources/assets/bloodmagic/lang/en_us.json +++ b/src/generated/resources/assets/bloodmagic/lang/en_us.json @@ -25,6 +25,8 @@ "chat.bloodmagic.ritual.prevent": "The ritual is actively resisting you!", "chat.bloodmagic.ritual.weak": "You feel a push, but are too weak to perform this ritual.", "gui.bloodmagic.empty": "Empty", + "guide.bloodmagic.landing_text": "\"It is my dear hope that by holding this tome in your hands, I may impart the knowledge of the lost art that is Blood Magic\"$(br)$(o)- Magus Arcana$()", + "guide.bloodmagic.name": "Sanguine Scientiem", "item.bloodmagic.activationcrystalawakened": "Awakened Activation Crystal", "item.bloodmagic.activationcrystalcreative": "Creative Activation Crystal", "item.bloodmagic.activationcrystalweak": "Weak Activation Crystal", diff --git a/src/main/java/WayofTime/bloodmagic/api/impl/BloodMagicRecipeRegistrar.java b/src/main/java/WayofTime/bloodmagic/api/impl/BloodMagicRecipeRegistrar.java index bb0652a8..aedd730b 100644 --- a/src/main/java/WayofTime/bloodmagic/api/impl/BloodMagicRecipeRegistrar.java +++ b/src/main/java/WayofTime/bloodmagic/api/impl/BloodMagicRecipeRegistrar.java @@ -15,7 +15,9 @@ import com.google.common.collect.ImmutableSet; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; import wayoftime.bloodmagic.api.IBloodMagicRecipeRegistrar; +import wayoftime.bloodmagic.api.impl.recipe.RecipeARC; import wayoftime.bloodmagic.api.impl.recipe.RecipeAlchemyArray; import wayoftime.bloodmagic.api.impl.recipe.RecipeBloodAltar; import wayoftime.bloodmagic.api.impl.recipe.RecipeTartaricForge; @@ -250,6 +252,40 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar return null; } + public RecipeARC getARC(World world, @Nonnull ItemStack input, @Nonnull ItemStack arcToolInput, @Nonnull FluidStack inputFluid) + { + Preconditions.checkNotNull(input, "input cannot be null."); + Preconditions.checkNotNull(arcToolInput, "tool cannot be null."); + if (input.isEmpty() || arcToolInput.isEmpty()) + return null; + + List arcRecipes = world.getRecipeManager().getRecipesForType(BloodMagicRecipeType.ARC); + + for (RecipeARC recipe : arcRecipes) + { + if (recipe.getInput().test(input) && recipe.getTool().test(arcToolInput)) + { + if (recipe.getFluidIngredient() == null) + { + return recipe; + } else if (recipe.getFluidIngredient().test(inputFluid)) + { + return recipe; + } + } + } + +// if (input.isEmpty()) +// return null; +// +// List altarRecipes = world.getRecipeManager().getRecipesForType(BloodMagicRecipeType.ALTAR); +// +// for (RecipeBloodAltar recipe : altarRecipes) if (recipe.getInput().test(input)) +// return recipe; + + return null; + } + // @Nullable // public RecipeAlchemyTable getAlchemyTable(@Nonnull List input) // { diff --git a/src/main/java/WayofTime/bloodmagic/util/Constants.java b/src/main/java/WayofTime/bloodmagic/util/Constants.java index 19a600b0..d60f0b13 100644 --- a/src/main/java/WayofTime/bloodmagic/util/Constants.java +++ b/src/main/java/WayofTime/bloodmagic/util/Constants.java @@ -103,6 +103,8 @@ public class Constants public static final String SOUL_FORGE_BURN = "burnTime"; public static final String SOUL_FORGE_CONSUMED = "consumedSouls"; + public static final String ARC_PROGRESS = "progress"; + public static final String ROUTING_MASTER = "master"; public static final String ROUTING_CONNECTION = "connections"; public static final String ROUTING_PRIORITY = "prioritiesPeople"; diff --git a/src/main/java/wayoftime/bloodmagic/api/impl/recipe/RecipeARC.java b/src/main/java/wayoftime/bloodmagic/api/impl/recipe/RecipeARC.java index 632d44ca..73c04fb9 100644 --- a/src/main/java/wayoftime/bloodmagic/api/impl/recipe/RecipeARC.java +++ b/src/main/java/wayoftime/bloodmagic/api/impl/recipe/RecipeARC.java @@ -65,11 +65,28 @@ public abstract class RecipeARC extends BloodMagicRecipe return input; } + @Nonnull + public final Ingredient getTool() + { + return arc_tool; + } + + public final FluidStackIngredient getFluidIngredient() + { + return inputFluid; + } + + public final FluidStack getFluidOutput() + { + return outputFluid; + } + @Override public final NonNullList getIngredients() { NonNullList list = NonNullList.create(); list.add(getInput()); + list.add(getTool()); return list; } diff --git a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLanguage.java b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLanguage.java index c08a3baf..84159772 100644 --- a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLanguage.java +++ b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLanguage.java @@ -136,6 +136,10 @@ public class GeneratorLanguage extends LanguageProvider add("ritual.bloodmagic.altarBuilderRitual", "The Assembly of the High Altar"); add("ritual.bloodmagic.portalRitual", "The Gate of the Fold"); + // Guide + add("guide.bloodmagic.name", "Sanguine Scientiem"); + add("guide.bloodmagic.landing_text", "\"It is my dear hope that by holding this tome in your hands, I may impart the knowledge of the lost art that is Blood Magic\"$(br)$(o)- Magus Arcana$()"); + // Block names addBlock(BloodMagicBlocks.BLANK_RUNE, "Blank Rune"); addBlock(BloodMagicBlocks.SPEED_RUNE, "Speed Rune"); diff --git a/src/main/java/wayoftime/bloodmagic/tile/TileAlchemicalReactionChamber.java b/src/main/java/wayoftime/bloodmagic/tile/TileAlchemicalReactionChamber.java index 13fe2f74..0f6f57b1 100644 --- a/src/main/java/wayoftime/bloodmagic/tile/TileAlchemicalReactionChamber.java +++ b/src/main/java/wayoftime/bloodmagic/tile/TileAlchemicalReactionChamber.java @@ -23,6 +23,8 @@ import net.minecraftforge.fluids.capability.IFluidHandlerItem; import net.minecraftforge.fluids.capability.templates.FluidTank; import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.registries.ObjectHolder; +import wayoftime.bloodmagic.api.impl.BloodMagicAPI; +import wayoftime.bloodmagic.api.impl.recipe.RecipeARC; import wayoftime.bloodmagic.tile.contailer.ContainerAlchemicalReactionChamber; import wayoftime.bloodmagic.util.Constants; import wayoftime.bloodmagic.util.MultiSlotItemHandler; @@ -42,7 +44,7 @@ public class TileAlchemicalReactionChamber extends TileInventory implements ITic public FluidTank inputTank = new FluidTank(FluidAttributes.BUCKET_VOLUME * 20); public FluidTank outputTank = new FluidTank(FluidAttributes.BUCKET_VOLUME * 20); - public int burnTime = 0; + public double currentProgress = 0; public TileAlchemicalReactionChamber(TileEntityType type) { @@ -59,7 +61,7 @@ public class TileAlchemicalReactionChamber extends TileInventory implements ITic { super.deserialize(tag); - burnTime = tag.getInt(Constants.NBT.SOUL_FORGE_BURN); + currentProgress = tag.getDouble(Constants.NBT.ARC_PROGRESS); CompoundNBT inputTankTag = tag.getCompound("inputtank"); inputTank.readFromNBT(inputTankTag); @@ -73,7 +75,7 @@ public class TileAlchemicalReactionChamber extends TileInventory implements ITic { super.serialize(tag); - tag.putInt(Constants.NBT.SOUL_FORGE_BURN, burnTime); + tag.putDouble(Constants.NBT.ARC_PROGRESS, currentProgress); CompoundNBT inputTankTag = new CompoundNBT(); inputTank.writeToNBT(inputTankTag); @@ -165,6 +167,15 @@ public class TileAlchemicalReactionChamber extends TileInventory implements ITic } } + ItemStack inputStack = this.getStackInSlot(INPUT_SLOT); + ItemStack toolStack = this.getStackInSlot(ARC_TOOL_SLOT); + RecipeARC recipe = BloodMagicAPI.INSTANCE.getRecipeRegistrar().getARC(world, inputStack, toolStack, inputTank.getFluid()); + if (recipe != null && outputSlotHandler.canTransferAllItemsToSlots(recipe.getAllListedOutputs(), true)) + { + // We have enough fluid (if applicable) and the theoretical outputs can fit. + + } + for (int i = 0; i < NUM_OUTPUTS; i++) { this.setInventorySlotContents(OUTPUT_SLOT + i, outputSlotHandler.getStackInSlot(i)); @@ -173,47 +184,72 @@ public class TileAlchemicalReactionChamber extends TileInventory implements ITic // FluidUtil.tryEmptyContainer(container, fluidDestination, maxAmount, player, doDrain) } -// private boolean canCraft(RecipeTartaricForge recipe) -// { -// if (recipe == null) -// return false; -// -// ItemStack currentOutputStack = getStackInSlot(outputSlot); -// if (recipe.getOutput().isEmpty()) -// return false; -// if (currentOutputStack.isEmpty()) -// return true; -// if (!currentOutputStack.isItemEqual(recipe.getOutput())) -// return false; -// int result = currentOutputStack.getCount() + recipe.getOutput().getCount(); -// return result <= getInventoryStackLimit() && result <= currentOutputStack.getMaxStackSize(); -// -// } -// -// public void craftItem(RecipeTartaricForge recipe) -// { -// if (this.canCraft(recipe)) -// { -// ItemStack currentOutputStack = getStackInSlot(outputSlot); -// -// List inputList = new ArrayList<>(); -// for (int i = 0; i < 4; i++) if (!getStackInSlot(i).isEmpty()) -// inputList.add(getStackInSlot(i).copy()); -// -// BloodMagicCraftedEvent.SoulForge event = new BloodMagicCraftedEvent.SoulForge(recipe.getOutput().copy(), inputList.toArray(new ItemStack[0])); -// MinecraftForge.EVENT_BUS.post(event); -// -// if (currentOutputStack.isEmpty()) -// { -// setInventorySlotContents(outputSlot, event.getOutput()); -// } else if (ItemHandlerHelper.canItemStacksStack(currentOutputStack, event.getOutput())) -// { -// currentOutputStack.grow(event.getOutput().getCount()); -// } -// -// consumeInventory(); -// } -// } + private boolean canCraft(RecipeARC recipe, MultiSlotItemHandler outputSlotHandler) + { + if (recipe == null) + return false; + + if (outputSlotHandler.canTransferAllItemsToSlots(recipe.getAllListedOutputs(), true)) + { + FluidStack outputStack = recipe.getFluidOutput(); + return outputStack.isEmpty() ? true + : outputTank.fill(outputStack, FluidAction.SIMULATE) >= outputStack.getAmount(); + } + + return false; + } + + public void craftItem(RecipeARC recipe, MultiSlotItemHandler outputSlotHandler) + { + if (this.canCraft(recipe, outputSlotHandler)) + { + outputSlotHandler.canTransferAllItemsToSlots(recipe.getAllOutputs(world.rand), false); + outputTank.fill(recipe.getFluidOutput().copy(), FluidAction.EXECUTE); + consumeInventory(); + } + } + + public void consumeInventory() + { + ItemStack inputStack = getStackInSlot(INPUT_SLOT); + if (!inputStack.isEmpty()) + { + if (inputStack.getItem().hasContainerItem(inputStack)) + { + setInventorySlotContents(INPUT_SLOT, inputStack.getItem().getContainerItem(inputStack)); + } else + { + inputStack.shrink(1); + if (inputStack.isEmpty()) + { + setInventorySlotContents(INPUT_SLOT, ItemStack.EMPTY); + } + } + } + + ItemStack toolStack = getStackInSlot(ARC_TOOL_SLOT); + if (!toolStack.isEmpty()) + { + if (toolStack.isDamageable()) + { + toolStack.setDamage(toolStack.getDamage() + 1); + if (toolStack.getDamage() >= toolStack.getMaxDamage()) + { + setInventorySlotContents(ARC_TOOL_SLOT, ItemStack.EMPTY); + } + } else if (toolStack.getItem().hasContainerItem(toolStack)) + { + setInventorySlotContents(ARC_TOOL_SLOT, toolStack.getItem().getContainerItem(inputStack)); + } else + { + toolStack.shrink(1); + if (toolStack.isEmpty()) + { + setInventorySlotContents(ARC_TOOL_SLOT, ItemStack.EMPTY); + } + } + } + } @Override public Container createMenu(int p_createMenu_1_, PlayerInventory p_createMenu_2_, PlayerEntity p_createMenu_3_) diff --git a/src/main/java/wayoftime/bloodmagic/util/MultiSlotItemHandler.java b/src/main/java/wayoftime/bloodmagic/util/MultiSlotItemHandler.java index b902207e..5125c26f 100644 --- a/src/main/java/wayoftime/bloodmagic/util/MultiSlotItemHandler.java +++ b/src/main/java/wayoftime/bloodmagic/util/MultiSlotItemHandler.java @@ -176,7 +176,6 @@ public class MultiSlotItemHandler implements IItemHandler copyList[slot] = copy; } stack = ItemStack.EMPTY; -// System.out.println("Count: " + stack.getCount() + ", m: " + m); break slots; } else diff --git a/src/main/resources/assets/bloodmagic/images/entries/alchemyarray/divination_array_1.png b/src/main/resources/assets/bloodmagic/images/entries/alchemyarray/divination_array_1.png new file mode 100644 index 00000000..d2e4c7c4 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/alchemyarray/divination_array_1.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/alchemyarray/divination_array_2.png b/src/main/resources/assets/bloodmagic/images/entries/alchemyarray/divination_array_2.png new file mode 100644 index 00000000..a6d20ae3 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/alchemyarray/divination_array_2.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/alchemyarray/simple_array.png b/src/main/resources/assets/bloodmagic/images/entries/alchemyarray/simple_array.png new file mode 100644 index 00000000..04771848 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/alchemyarray/simple_array.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/demonwill/demonwill.png b/src/main/resources/assets/bloodmagic/images/entries/demonwill/demonwill.png new file mode 100644 index 00000000..f75a0af8 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/demonwill/demonwill.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/demonwill/snare_particles.png b/src/main/resources/assets/bloodmagic/images/entries/demonwill/snare_particles.png new file mode 100644 index 00000000..b8723d3e Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/demonwill/snare_particles.png differ diff --git a/src/main/resources/assets/bloodmagic/models/item/book.json b/src/main/resources/assets/bloodmagic/models/item/book.json new file mode 100644 index 00000000..1c88b6c6 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/book.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/sanguinebook" + } +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/book.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/book.json new file mode 100644 index 00000000..fc13585f --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/book.json @@ -0,0 +1,9 @@ +{ + "name": "guide.bloodmagic.name", + "subtitle": "Alchemical Wizardry", + "landing_text": "guide.bloodmagic.landing_text", + "version": 1, + "creative_tab": "bloodmagictab", + "model": "bloodmagic:book", + "show_progress": true +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/alchemyarray.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/alchemyarray.json new file mode 100644 index 00000000..ad41780b --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/alchemyarray.json @@ -0,0 +1,6 @@ +{ + "name": "Alchemy Arrays", + "description": "Alchemy Arrays are simple effects that originate from circles that are drawn on the ground using $(l:alchemyarray/arcaneash)Arcane Ashes.$(/l) While they are simple to build, they can be really useful in both early game and late game applications.", + "icon": "bloodmagic:arcaneashes", + "sortnum": 3 +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/altar.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/altar.json new file mode 100644 index 00000000..d469d6f6 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/altar.json @@ -0,0 +1,6 @@ +{ + "name": "Blood Altars", + "description": "", + "icon": "bloodmagic:altar", + "sortnum": 2 +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/demonwill.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/demonwill.json new file mode 100644 index 00000000..18a97f9f --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/demonwill.json @@ -0,0 +1,6 @@ +{ + "name": "Demon Will", + "description": "", + "icon": "bloodmagic:basemonstersoul", + "sortnum": 1 +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/sigil.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/sigil.json new file mode 100644 index 00000000..8ed0f73c --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/sigil.json @@ -0,0 +1,6 @@ +{ + "name": "Sigils", + "description": "", + "icon": "bloodmagic:divinationsigil", + "sortnum": 4 +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemyarray/arcaneash.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemyarray/arcaneash.json new file mode 100644 index 00000000..5284189d --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemyarray/arcaneash.json @@ -0,0 +1,30 @@ +{ + "name": "Alchemy Array Basics", + "icon": "bloodmagic:arcaneashes", + "category": "alchemyarray", + "pages": [ + { + "type": "text", + "text": "$(item)Arcane Ashes$() is an item that is pivotal in the creation of Alchemy Arrays. $(item)Arcane Ashes$() can be crafted in the $(l:demonwill/soulforge)Hellfire Forge$(/l) using some early game items. The recipe can be found in JEI." + }, + { + "type": "text", + "text": "In order to create an Alchemy Array, right click the top of the ground with the $(item)Arcane Ashes$() (although any solid block face works) - this will consume 1 durability out of 20 from the $(item)Arcane Ashes$() and draw a simple Alchemy Array, that by itself has no effects.$(bl2)When you click on the Alchemy Array, it will consume a single item from the stack in your hand and hold it in the array. These items are then used to determine the Alchemy Array's effect." + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/alchemyarray/simple_array.png", + "bloodmagic:images/entries/alchemyarray/divination_array_1.png", + "bloodmagic:images/entries/alchemyarray/divination_array_2.png" + ], + "title": "Alchemy Array", + "border": true, + "text": "Alchemy Array showing array with: no inputs; only the base item; both base and catalyst." + }, + { + "type": "text", + "text": "Each effect requires two items: a base and a catalyst. The base is the first item that you click the array with after it is drawn, and the catalyst is the second item. When you apply the input, the design of the array will change if it is valid, and the array will start activating once you apply the catalyst.$(br2)You can have arrays that range from $(l:alchemyarray/craftingarray)crafting arrays$(/l) to even teleportation arrays." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemyarray/craftingarray.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemyarray/craftingarray.json new file mode 100644 index 00000000..ca408207 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/alchemyarray/craftingarray.json @@ -0,0 +1,15 @@ +{ + "name": "Crafting with Arrays", + "icon": "bloodmagic:divinationsigil", + "category": "alchemyarray", + "pages": [ + { + "type": "text", + "text": "$(1)Alchemy Arrays of Crafting$() are one of the simplest forms of array. These arrays inscribe the $(item)base item$() onto the $(item)catalyst$(), transforming them both into a useful item (after a small, pretty animation)." + }, + { + "type": "text", + "text": "While some of these resulting items can be crafted $(l:sigil/divination)using very simple ingredients$(/l), others require additional steps to create useful items." + } + ] +} diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/bloodaltar.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/bloodaltar.json new file mode 100644 index 00000000..a19b0370 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/bloodaltar.json @@ -0,0 +1,15 @@ +{ + "name": "The Blood Altar", + "icon": "bloodmagic:altar", + "category": "altar", + "pages": [ + { + "type": "text", + "text": "" + }, + { + "type": "text", + "text": "" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demonwill/demonwill.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demonwill/demonwill.json new file mode 100644 index 00000000..35b11cdd --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demonwill/demonwill.json @@ -0,0 +1,27 @@ +{ + "name": "Demon Will", + "icon": "bloodmagic:basemonstersoul", + "category": "demonwill", + "pages": [ + { + "type": "text", + "text": "To get started with $(6)Blood Magic$() you need to gather a few $(item)Demon Wills$(). There are two ways to get Demon Will:$(br)$(li)Killing a mob that has been snared and is killed when white particle effects appear.$(li)By killing a hostile mob with a $(l:demonwill/sentientsword)$(item)Sentient Sword$(/l)$().$(br)Since you are just beginning to use the mod, you will not yet have a $(l:demonwill/sentientsword)$(item)Sentient Sword$(/l), and thus will need to use" + }, + { + "type": "text", + "text": "a $(l:demonwill/soulsnare)$(item)Soul Snare$(/l).$(br2)Demon Will is a recurring resource in $(6)Blood Magic$() that is used in crafting for several advanced blocks, such as the $(l:demonwill/soulforge)$(item)Hellfire Forge,$(/l) as well as items like the $(l:demonwill/sentientsword)$(item)Sentient Sword.$(/l)$(br2)In the lore of $(6)Blood Magic$(), $(1)Demon Will$() is the residual effect of when a demon imbues its will into the bodies of the dead." + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/demonwill/demonwill.png" + ], + "title": "Demon Will", + "border": true + }, + { + "type": "text", + "text": "Once you have some Will, you can use it to craft useful tools in the $(item)Hellfire Forge$(). Also, it is suggested to gather two $(item)Demon Will$() items before coming back to base, since you need to have one in order to craft your first $(l:altar/bloodaltar)Blood Altar.$(/l)" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demonwill/sentientsword.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demonwill/sentientsword.json new file mode 100644 index 00000000..9a968b84 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demonwill/sentientsword.json @@ -0,0 +1,15 @@ +{ + "name": "Your First Will2", + "icon": "bloodmagic:soulsnare", + "category": "demonwill", + "pages": [ + { + "type": "text", + "text": "The $(item)Soul Snare$() is a fun thing with a fun name." + }, + { + "type": "crafting", + "recipe": "bloodmagic:soul_snare" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demonwill/soulforge.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demonwill/soulforge.json new file mode 100644 index 00000000..2b153d2b --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demonwill/soulforge.json @@ -0,0 +1,15 @@ +{ + "name": "Hellfire Forge", + "icon": "bloodmagic:soulforge", + "category": "demonwill", + "pages": [ + { + "type": "text", + "text": "The $(item)Soul Snare$() is a fun thing with a fun name." + }, + { + "type": "crafting", + "recipe": "bloodmagic:soul_forge" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demonwill/soulsnare.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demonwill/soulsnare.json new file mode 100644 index 00000000..73416c5d --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/demonwill/soulsnare.json @@ -0,0 +1,24 @@ +{ + "name": "Your First Will", + "icon": "bloodmagic:soulsnare", + "category": "demonwill", + "pages": [ + { + "type": "text", + "text": "The $(item)Soul Snare$() is a fun thing with a fun name." + }, + { + "type": "crafting", + "recipe": "bloodmagic:soul_snare" + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/demonwill/soul_snare.png" + ], + "title": "Snare on Skeleton", + "border": true, + "text": "A skeleton with white particles after hit by a snare." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/sigil/divination.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/sigil/divination.json new file mode 100644 index 00000000..cbd6c69f --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/sigil/divination.json @@ -0,0 +1,11 @@ +{ + "name": "Divination Sigil", + "icon": "bloodmagic:divinationsigil", + "category": "sigil", + "pages": [ + { + "type": "text", + "text": "$(item)Divination Sigil$()." + } + ] +} \ No newline at end of file