diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 152c3d51..cb7e5806 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 -fb7a615c3c1cf62b3a9c4a3ef701d22e7b45108c assets/bloodmagic/lang/en_us.json +d3520bf2873b775b43323d9c68e4a305a6d92c3a 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 @@ -71,6 +71,7 @@ f4531e22aa1db1cff324db5ccb344d3b9fa85c8d assets/bloodmagic/models/item/divinatio 4c39378f6c14dc243a7d52564e5a21df94683415 assets/bloodmagic/models/item/etherealslate.json c36bde4f98c0aeb3bf0f369ad3bc067e5f0dc916 assets/bloodmagic/models/item/fireritualstone.json b5708a8cc7259fd36ffeabd155ea085b9fdef0fd assets/bloodmagic/models/item/firescribetool.json +537a52d7b59dc996ea23f24d86a4add87c61c6a0 assets/bloodmagic/models/item/furnacecell_primitive.json 44663089f348642bcca1c5020b5081c3ab172f92 assets/bloodmagic/models/item/growthsigil.json f68825f667ca73b4373fd5068a47f0d1ca9b2aad assets/bloodmagic/models/item/icesigil.json 109b5485c25d978af55b46682d5bfa7008909458 assets/bloodmagic/models/item/infusedslate.json @@ -96,6 +97,7 @@ fd1447d943ddc4540a51a72dcbb245d77d45da71 assets/bloodmagic/models/item/reagentwa 2722891c9c40b124d85bf9ff8eb885e175f5e6ff assets/bloodmagic/models/item/ritualstone.json db73abb3bcb1731b6fc389e3577910b6aab87b10 assets/bloodmagic/models/item/sacrificerune.json 9403d6195d4d38d5876c2a42f4edfb9bdcd05210 assets/bloodmagic/models/item/sacrificialdagger.json +b8582a5cd6ca35279e9b35931f1c5ca089b094b8 assets/bloodmagic/models/item/sanguinereverter.json cc71421e98ee7ee047a4cfbb6cb69529c2b02d4e assets/bloodmagic/models/item/selfsacrificerune.json ea5747638d0b5dcc03f008b202cc60a11e0827bb assets/bloodmagic/models/item/sigilofmagnetism.json 9ec68a2dcf04b987c3c5d5c6c52195e3deccacbb assets/bloodmagic/models/item/soulgemcommon.json @@ -142,6 +144,7 @@ a31019db55828cb937a071ac2f74b125a2d0c955 assets/bloodmagic/models/item/waterritu 4130e8907fe8fcf0a5de805f9c2b7ba9166323e9 assets/bloodmagic/models/item/waterscribetool.json 7426fed5f833ce3d08602f727f1467dd3e107991 assets/bloodmagic/models/item/watersigil.json f72efc172699d43405019add97f455bd6b7f452b assets/bloodmagic/models/item/weakbloodorb.json +1efacee8dc0c3114567509ad247800cff59cb455 assets/bloodmagic/models/item/weakbloodshard.json 828c0f89e747d48d37c6a86030a8ec59ca5c29cb data/bloodmagic/advancements/recipes/bloodmagictab/blood_altar.json f8b66411c96c6a7a409fb10f6888d078f1f8fa14 data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_blank.json ab5612f33028487c08e51de4b91bb786df1b1b95 data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_capacity.json @@ -151,6 +154,7 @@ e897d6f91e2a0bd12b0da0a50e5c897294989e7c data/bloodmagic/advancements/recipes/bl 263f7c251d2f163db5bd229f2ab8a222f23ae03a data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_self_sacrifice.json 7ca400d1141ff4be1b529cd060950b42cf3b9bfb data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_speed.json 344567e6f5671131addcfebbd92d18e5cbd66ef5 data/bloodmagic/advancements/recipes/bloodmagictab/lava_crystal.json +091fbd276c5ad173716e9e7474fa278e742a662f data/bloodmagic/advancements/recipes/bloodmagictab/primitive_furnace_cell.json 01e90bb9c59d44a52777ecc0cf28754295fda675 data/bloodmagic/advancements/recipes/bloodmagictab/ritual_diviner_0.json 836e1fc171dba197e02d6a9e3e61a3718cb5a482 data/bloodmagic/advancements/recipes/bloodmagictab/ritual_diviner_1.json c8e5cdac0e7328640ab1cb0eab0a46f0733b59b3 data/bloodmagic/advancements/recipes/bloodmagictab/ritual_stone_blank.json @@ -194,8 +198,7 @@ d79a96eb3eed597f1c18a8983764a6362a24748c data/bloodmagic/recipes/altar/dusk_tool 584d01dff4d64bb88bd3783751a29723700f1728 data/bloodmagic/recipes/altar/slate.json 926d4a0e165c87a15a609744d832d2f5f04a40d0 data/bloodmagic/recipes/altar/water_tool.json 7551501cf361667ec7454c307b9d2368536fbed6 data/bloodmagic/recipes/altar/weakbloodorb.json -4f511cfb93faf65aa50fabd7e753e0759ed95a1c data/bloodmagic/recipes/arc/test1.json -5e735ea45bb2a49b43803c53a586ecbd5f3cbfe1 data/bloodmagic/recipes/arc/test2.json +352ba51f1c988029059e5b53a3a11432d0591b58 data/bloodmagic/recipes/arc/weakbloodshard.json e1285ec51100f2336c1ea1a1a3057e74a0dd84d1 data/bloodmagic/recipes/array/airsigil.json d1ac23080f72f21adb5908befefe965ffb4efd4f data/bloodmagic/recipes/array/bloodlightsigil.json 1890706e5b93cd6df764b0419483c348e0d7f277 data/bloodmagic/recipes/array/divinationsigil.json @@ -214,6 +217,7 @@ b63d77c3762f86d4a91f62e192c3e9b26e3b52ca data/bloodmagic/recipes/blood_rune_sacr 7c4e247c1df6ef594bbb2fc2196afb102f45982b data/bloodmagic/recipes/blood_rune_self_sacrifice.json e2bcf2a6f951fbcef45554ec90ba28d14e261d18 data/bloodmagic/recipes/blood_rune_speed.json 9dedad36e9d2ab6688e069c2e6df3851c395b583 data/bloodmagic/recipes/lava_crystal.json +0b1a11f0e1b6bc317e2dbf04560a81581623f41e data/bloodmagic/recipes/primitive_furnace_cell.json bfd7925ad30534463d7daf0f7dce03cf1502cbcf data/bloodmagic/recipes/ritual_diviner_0.json 2ec436681cdd169bae99d090bb889c2a45420b6c data/bloodmagic/recipes/ritual_diviner_1.json 7757e5fd52f71b0d21595e072593fc592210dd64 data/bloodmagic/recipes/ritual_stone_blank.json @@ -232,6 +236,10 @@ ae3a6a760e9f793d5a62e2f0f6c45219b0017816 data/bloodmagic/recipes/soulforge/reage e517023dc3e32929344ff5415397fc833bfbc29a data/bloodmagic/recipes/soulforge/reagent_magnetism.json c0e75e0e12290d191245c5b0b5b13bc739d2ff44 data/bloodmagic/recipes/soulforge/reagent_void.json a222d09abf1ea61feb684f2ac23d011c2034f526 data/bloodmagic/recipes/soulforge/reagent_water.json +4a4340f334c51beaacb77fd201298ad94b71e79c data/bloodmagic/recipes/soulforge/sanguine_reverter.json 7e281841a2953c1284d332c2bbf75097f8128241 data/bloodmagic/recipes/soulforge/sentientsword.json d7d993bb729284a5201c164ea81fbe1d8e4e4750 data/bloodmagic/recipes/weak_activation_crystal.json -94ff722e094a3479433cad0e4a1386f68f170e7b data/bloodmagic/tags/items/arc_tool.json +fdead91c0aa241e991f797de38f0b56d6ef3916a data/bloodmagic/tags/items/arc_tool.json +80636d8b3770da483ba6cd41870ecb0ad042f2f0 data/bloodmagic/tags/items/arc_tool_furnace.json +65326040c8974fcfcc8711d29040b4297ff55ec1 data/bloodmagic/tags/items/arc_tool_reverter.json +14fb88c612622be110e273818eee9512cd285d56 data/bloodmagic/tags/items/arc_tool_sieve.json diff --git a/src/generated/resources/assets/bloodmagic/lang/en_us.json b/src/generated/resources/assets/bloodmagic/lang/en_us.json index 3a855484..90bc129c 100644 --- a/src/generated/resources/assets/bloodmagic/lang/en_us.json +++ b/src/generated/resources/assets/bloodmagic/lang/en_us.json @@ -48,6 +48,7 @@ "item.bloodmagic.earthscribetool": "Inscription Tool: Earth", "item.bloodmagic.etherealslate": "Ethereal Slate", "item.bloodmagic.firescribetool": "Inscription Tool: Fire", + "item.bloodmagic.furnacecell_primitive": "Primitive Fuel Cell", "item.bloodmagic.growthsigil": "Sigil of the Green Grove", "item.bloodmagic.icesigil": "Sigil of the Frozen Lake", "item.bloodmagic.infusedslate": "Imbued Slate", @@ -69,6 +70,7 @@ "item.bloodmagic.ritualdiviner": "Ritual Diviner", "item.bloodmagic.ritualdivinerdusk": "Ritual Diviner [Dusk]", "item.bloodmagic.sacrificialdagger": "Sacrificial Knife", + "item.bloodmagic.sanguinereverter": "Sanguine Reverter", "item.bloodmagic.sigilofmagnetism": "Sigil of Magnetism", "item.bloodmagic.soulgemcommon": "Common Tartaric Gem", "item.bloodmagic.soulgemlesser": "Lesser Tartaric Gem", @@ -79,6 +81,7 @@ "item.bloodmagic.waterscribetool": "Inscription Tool: Water", "item.bloodmagic.watersigil": "Water Sigil", "item.bloodmagic.weakbloodorb": "Weak Blood Orb", + "item.bloodmagic.weakbloodshard": "Weak Blood Shard", "itemGroup.bloodmagic.creativeTab": "Blood Magic", "itemGroup.bloodmagictab": "Blood Magic", "jei.bloodmagic.recipe.alchemyarraycrafting": "Alchemy Array", diff --git a/src/generated/resources/assets/bloodmagic/models/item/furnacecell_primitive.json b/src/generated/resources/assets/bloodmagic/models/item/furnacecell_primitive.json new file mode 100644 index 00000000..7f4652dc --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/furnacecell_primitive.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/furnacecell_primitive" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/sanguinereverter.json b/src/generated/resources/assets/bloodmagic/models/item/sanguinereverter.json new file mode 100644 index 00000000..91b0f240 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/sanguinereverter.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/sanguinereverter" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/weakbloodshard.json b/src/generated/resources/assets/bloodmagic/models/item/weakbloodshard.json new file mode 100644 index 00000000..72bd51b5 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/weakbloodshard.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/weakbloodshard" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/primitive_furnace_cell.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/primitive_furnace_cell.json new file mode 100644 index 00000000..801f59f1 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/primitive_furnace_cell.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:primitive_furnace_cell" + ] + }, + "criteria": { + "has_magician_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:magicianbloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:primitive_furnace_cell" + } + } + }, + "requirements": [ + [ + "has_magician_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/test1.json b/src/generated/resources/data/bloodmagic/recipes/arc/test1.json deleted file mode 100644 index 8e9d5d69..00000000 --- a/src/generated/resources/data/bloodmagic/recipes/arc/test1.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "bloodmagic:arc", - "input": { - "tag": "forge:gems/diamond" - }, - "tool": { - "tag": "forge:bones" - }, - "addedoutput": [ - { - "chance": 0.5, - "type": { - "item": "minecraft:diamond" - } - } - ], - "output": { - "item": "bloodmagic:altar" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/test2.json b/src/generated/resources/data/bloodmagic/recipes/arc/test2.json deleted file mode 100644 index ebb8cc3d..00000000 --- a/src/generated/resources/data/bloodmagic/recipes/arc/test2.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "bloodmagic:arc", - "input": { - "tag": "forge:gems/diamond" - }, - "tool": { - "item": "minecraft:acacia_boat" - }, - "inputfluid": { - "amount": 1000, - "fluid": "minecraft:lava" - }, - "outputfluid": { - "fluid": "minecraft:water", - "amount": 100 - }, - "output": { - "item": "bloodmagic:altar" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/arc/weakbloodshard.json b/src/generated/resources/data/bloodmagic/recipes/arc/weakbloodshard.json new file mode 100644 index 00000000..f20e8ec8 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/arc/weakbloodshard.json @@ -0,0 +1,20 @@ +{ + "type": "bloodmagic:arc", + "input": { + "item": "bloodmagic:infusedslate" + }, + "tool": { + "tag": "bloodmagic:arc_tool_reverter" + }, + "addedoutput": [ + { + "chance": 0.2, + "type": { + "item": "bloodmagic:weakbloodshard" + } + } + ], + "output": { + "item": "bloodmagic:weakbloodshard" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/primitive_furnace_cell.json b/src/generated/resources/data/bloodmagic/recipes/primitive_furnace_cell.json new file mode 100644 index 00000000..501b146b --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/primitive_furnace_cell.json @@ -0,0 +1,26 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "csc", + "cfc", + "coc" + ], + "key": { + "c": { + "tag": "forge:cobblestone" + }, + "f": { + "tag": "forge:storage_blocks/coal" + }, + "s": { + "item": "bloodmagic:blankslate" + }, + "o": { + "type": "bloodmagic:bloodorb", + "orb_tier": 3 + } + }, + "result": { + "item": "bloodmagic:furnacecell_primitive" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/sanguine_reverter.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/sanguine_reverter.json new file mode 100644 index 00000000..ee37a2fb --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/sanguine_reverter.json @@ -0,0 +1,21 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "item": "minecraft:shears" + }, + "input1": { + "tag": "forge:stone" + }, + "input2": { + "item": "bloodmagic:infusedslate" + }, + "input3": { + "tag": "forge:ingots/iron" + }, + "output": { + "item": "bloodmagic:sanguinereverter", + "nbt": "{Damage:0}" + }, + "minimumDrain": 350.0, + "drain": 30.0 +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/tags/items/arc_tool.json b/src/generated/resources/data/bloodmagic/tags/items/arc_tool.json index a0b7317d..eae0213d 100644 --- a/src/generated/resources/data/bloodmagic/tags/items/arc_tool.json +++ b/src/generated/resources/data/bloodmagic/tags/items/arc_tool.json @@ -1,6 +1,10 @@ { "replace": false, "values": [ - "minecraft:diamond" + "minecraft:diamond", + "bloodmagic:airscribetool", + "bloodmagic:sanguinereverter", + "bloodmagic:lavacrystal", + "bloodmagic:furnacecell_primitive" ] } \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/tags/items/arc_tool_furnace.json b/src/generated/resources/data/bloodmagic/tags/items/arc_tool_furnace.json new file mode 100644 index 00000000..c83e4a15 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/tags/items/arc_tool_furnace.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "bloodmagic:lavacrystal", + "bloodmagic:furnacecell_primitive" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/tags/items/arc_tool_reverter.json b/src/generated/resources/data/bloodmagic/tags/items/arc_tool_reverter.json new file mode 100644 index 00000000..ab081891 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/tags/items/arc_tool_reverter.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "bloodmagic:sanguinereverter" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/tags/items/arc_tool_sieve.json b/src/generated/resources/data/bloodmagic/tags/items/arc_tool_sieve.json new file mode 100644 index 00000000..7d46ac2c --- /dev/null +++ b/src/generated/resources/data/bloodmagic/tags/items/arc_tool_sieve.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "bloodmagic:airscribetool" + ] +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/api/impl/BloodMagicRecipeRegistrar.java b/src/main/java/wayoftime/bloodmagic/api/impl/BloodMagicRecipeRegistrar.java index aedd730b..432b73eb 100644 --- a/src/main/java/wayoftime/bloodmagic/api/impl/BloodMagicRecipeRegistrar.java +++ b/src/main/java/wayoftime/bloodmagic/api/impl/BloodMagicRecipeRegistrar.java @@ -452,6 +452,11 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar return ImmutableSet.copyOf(world.getRecipeManager().getRecipesForType(BloodMagicRecipeType.ARRAY)); } + public Set getARCRecipes(World world) + { + return ImmutableSet.copyOf(world.getRecipeManager().getRecipesForType(BloodMagicRecipeType.ARC)); + } + public Set getCraftingAlchemyArrayRecipes(World world) { Set recipes = Set.copyOf(world.getRecipeManager().getRecipesForType(BloodMagicRecipeType.ARRAY)); 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 73c04fb9..981764e8 100644 --- a/src/main/java/wayoftime/bloodmagic/api/impl/recipe/RecipeARC.java +++ b/src/main/java/wayoftime/bloodmagic/api/impl/recipe/RecipeARC.java @@ -117,6 +117,19 @@ public abstract class RecipeARC extends BloodMagicRecipe return list; } + public double[] getAllOutputChances() + { + int size = addedItems.size(); + + double[] chanceArray = new double[size]; + for (int i = 0; i < size; i++) + { + chanceArray[i] = addedItems.get(i).getRight(); + } + + return chanceArray; + } + @Override public void write(PacketBuffer buffer) { diff --git a/src/main/java/wayoftime/bloodmagic/client/screens/ScreenAlchemicalReactionChamber.java b/src/main/java/wayoftime/bloodmagic/client/screens/ScreenAlchemicalReactionChamber.java index 4fe9ccfb..ebc91f32 100644 --- a/src/main/java/wayoftime/bloodmagic/client/screens/ScreenAlchemicalReactionChamber.java +++ b/src/main/java/wayoftime/bloodmagic/client/screens/ScreenAlchemicalReactionChamber.java @@ -88,20 +88,22 @@ public class ScreenAlchemicalReactionChamber extends ScreenBase tag) + { + this.getOrCreateBuilder(tag).add(item); + this.getOrCreateBuilder(BloodMagicTags.ARC_TOOL).add(item); + } + /** * Resolves a Path for the location to save the given tag. */ diff --git a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLanguage.java b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLanguage.java index 84159772..a6dab663 100644 --- a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLanguage.java +++ b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLanguage.java @@ -222,6 +222,11 @@ public class GeneratorLanguage extends LanguageProvider addItem(BloodMagicItems.BASE_RITUAL_DIVINER, "Ritual Diviner"); addItem(BloodMagicItems.DUSK_RITUAL_DIVINER, "Ritual Diviner [Dusk]"); + addItem(BloodMagicItems.WEAK_BLOOD_SHARD, "Weak Blood Shard"); + + addItem(BloodMagicItems.SANGUINE_REVERTER, "Sanguine Reverter"); + addItem(BloodMagicItems.PRIMITIVE_FURNACE_CELL, "Primitive Fuel Cell"); + // addItem(BloodMagicItems , ""); // JEI diff --git a/src/main/java/wayoftime/bloodmagic/common/data/recipe/builder/ARCRecipeBuilder.java b/src/main/java/wayoftime/bloodmagic/common/data/recipe/builder/ARCRecipeBuilder.java index 01f7d53a..9ef52482 100644 --- a/src/main/java/wayoftime/bloodmagic/common/data/recipe/builder/ARCRecipeBuilder.java +++ b/src/main/java/wayoftime/bloodmagic/common/data/recipe/builder/ARCRecipeBuilder.java @@ -36,7 +36,7 @@ public class ARCRecipeBuilder extends BloodMagicRecipeBuilder this.arcTool = arcTool; this.inputFluid = inputFluid; this.output = output; - this.outputFluid = outputFluid; + this.outputFluid = outputFluid == null ? FluidStack.EMPTY : outputFluid; } public static ARCRecipeBuilder arc(Ingredient input, Ingredient arcTool, FluidStackIngredient inputFluid, ItemStack output, FluidStack outputFluid) @@ -92,7 +92,7 @@ public class ARCRecipeBuilder extends BloodMagicRecipeBuilder json.add(Constants.JSON.ADDEDOUTPUT, mainArray); } - if (outputFluid != null) + if (outputFluid != null && !outputFluid.isEmpty()) json.add(Constants.JSON.OUTPUT_FLUID, SerializerHelper.serializeFluidStack(outputFluid)); json.add(Constants.JSON.OUTPUT, SerializerHelper.serializeItemStack(output)); diff --git a/src/main/java/wayoftime/bloodmagic/common/item/BloodMagicItems.java b/src/main/java/wayoftime/bloodmagic/common/item/BloodMagicItems.java index cd5a0ad0..dc002c51 100644 --- a/src/main/java/wayoftime/bloodmagic/common/item/BloodMagicItems.java +++ b/src/main/java/wayoftime/bloodmagic/common/item/BloodMagicItems.java @@ -8,6 +8,7 @@ import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import wayoftime.bloodmagic.BloodMagic; import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.common.item.arc.ItemARCToolBase; import wayoftime.bloodmagic.common.item.sigil.ItemSigilAir; import wayoftime.bloodmagic.common.item.sigil.ItemSigilBloodLight; import wayoftime.bloodmagic.common.item.sigil.ItemSigilDivination; @@ -98,6 +99,7 @@ public class BloodMagicItems public static final RegistryObject ARCANE_ASHES = BASICITEMS.register("arcaneashes", () -> new ItemArcaneAshes()); public static final RegistryObject DAGGER_OF_SACRIFICE = BASICITEMS.register("daggerofsacrifice", () -> new ItemDaggerOfSacrifice()); public static final RegistryObject LAVA_CRYSTAL = BASICITEMS.register("lavacrystal", () -> new ItemLavaCrystal()); + public static final RegistryObject WEAK_BLOOD_SHARD = BASICITEMS.register("weakbloodshard", () -> new ItemBase()); // Ritual stuffs public static final RegistryObject WEAK_ACTIVATION_CRYSTAL = BASICITEMS.register("activationcrystalweak", () -> new ItemActivationCrystal(ItemActivationCrystal.CrystalType.WEAK)); @@ -136,4 +138,8 @@ public class BloodMagicItems public static final RegistryObject SOUL_SNARE = BASICITEMS.register("soulsnare", ItemSoulSnare::new); public static final RegistryObject SENTIENT_SWORD = ITEMS.register("soulsword", () -> new ItemSentientSword()); + + // ARC Tools + public static final RegistryObject SANGUINE_REVERTER = BASICITEMS.register("sanguinereverter", () -> new ItemARCToolBase(32, 2)); + public static final RegistryObject PRIMITIVE_FURNACE_CELL = BASICITEMS.register("furnacecell_primitive", () -> new ItemARCToolBase(128, 1.25)); } diff --git a/src/main/java/wayoftime/bloodmagic/common/item/IARCTool.java b/src/main/java/wayoftime/bloodmagic/common/item/IARCTool.java index 11112588..333d0cc8 100644 --- a/src/main/java/wayoftime/bloodmagic/common/item/IARCTool.java +++ b/src/main/java/wayoftime/bloodmagic/common/item/IARCTool.java @@ -1,6 +1,11 @@ package wayoftime.bloodmagic.common.item; +import net.minecraft.item.ItemStack; + public interface IARCTool { - + default double getCraftingSpeedMultiplier(ItemStack stack) + { + return 1; + } } diff --git a/src/main/java/wayoftime/bloodmagic/common/item/arc/ItemARCToolBase.java b/src/main/java/wayoftime/bloodmagic/common/item/arc/ItemARCToolBase.java new file mode 100644 index 00000000..d50262dc --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/arc/ItemARCToolBase.java @@ -0,0 +1,23 @@ +package wayoftime.bloodmagic.common.item.arc; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.item.IARCTool; + +public class ItemARCToolBase extends Item implements IARCTool +{ + private final double craftingMultiplier; + + public ItemARCToolBase(int maxDamage, double craftingMultiplier) + { + super(new Item.Properties().maxStackSize(1).group(BloodMagic.TAB).maxDamage(maxDamage)); + this.craftingMultiplier = craftingMultiplier; + } + + @Override + public double getCraftingSpeedMultiplier(ItemStack stack) + { + return craftingMultiplier; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/inventory/InventoryWrapper.java b/src/main/java/wayoftime/bloodmagic/common/item/inventory/InventoryWrapper.java new file mode 100644 index 00000000..26adf391 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/item/inventory/InventoryWrapper.java @@ -0,0 +1,101 @@ +package wayoftime.bloodmagic.common.item.inventory; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +public class InventoryWrapper implements IInventory +{ + protected int[] syncedSlots = new int[0]; + protected NonNullList inventory; + private int size; + + public InventoryWrapper(int size) + { + this.inventory = NonNullList.withSize(size, ItemStack.EMPTY); + this.size = size; + } + + @Override + public void clear() + { + this.inventory = NonNullList.withSize(size, ItemStack.EMPTY); + } + + @Override + public int getSizeInventory() + { + return size; + } + + @Override + public boolean isEmpty() + { + for (ItemStack stack : inventory) if (!stack.isEmpty()) + return false; + + return true; + } + + @Override + public ItemStack getStackInSlot(int index) + { + return inventory.get(index); + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + if (!getStackInSlot(index).isEmpty()) + { + if (getStackInSlot(index).getCount() <= count) + { + ItemStack itemStack = inventory.get(index); + inventory.set(index, ItemStack.EMPTY); + markDirty(); + return itemStack; + } + + ItemStack itemStack = inventory.get(index).split(count); + markDirty(); + return itemStack; + } + + return ItemStack.EMPTY; + } + + @Override + public ItemStack removeStackFromSlot(int slot) + { + if (!inventory.get(slot).isEmpty()) + { + ItemStack itemStack = inventory.get(slot); + setInventorySlotContents(slot, ItemStack.EMPTY); + return itemStack; + } + return ItemStack.EMPTY; + } + + @Override + public void setInventorySlotContents(int slot, ItemStack stack) + { + inventory.set(slot, stack); + if (!stack.isEmpty() && stack.getCount() > getInventoryStackLimit()) + stack.setCount(getInventoryStackLimit()); + markDirty(); + } + + @Override + public void markDirty() + { + + } + + @Override + public boolean isUsableByPlayer(PlayerEntity player) + { + return false; + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilGreenGrove.java b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilGreenGrove.java index 820e0063..67ce33e5 100644 --- a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilGreenGrove.java +++ b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilGreenGrove.java @@ -1,6 +1,7 @@ package wayoftime.bloodmagic.common.item.sigil; import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; import net.minecraft.block.IGrowable; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; @@ -64,7 +65,7 @@ public class ItemSigilGreenGrove extends ItemSigilToggleableBase // if (!BloodMagicAPI.INSTANCE.getBlacklist().getGreenGrove().contains(state)) { - if (state.getBlock() instanceof IGrowable) + if (state.getBlock() instanceof IGrowable && state.getBlock() != Blocks.GRASS_BLOCK) { if (worldIn.rand.nextInt(50) == 0) { diff --git a/src/main/java/wayoftime/bloodmagic/common/recipe/ARCRecipeProvider.java b/src/main/java/wayoftime/bloodmagic/common/recipe/ARCRecipeProvider.java index a06d5cf0..e4c2a632 100644 --- a/src/main/java/wayoftime/bloodmagic/common/recipe/ARCRecipeProvider.java +++ b/src/main/java/wayoftime/bloodmagic/common/recipe/ARCRecipeProvider.java @@ -3,16 +3,12 @@ package wayoftime.bloodmagic.common.recipe; import java.util.function.Consumer; import net.minecraft.data.IFinishedRecipe; -import net.minecraft.fluid.Fluids; import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; import net.minecraft.item.crafting.Ingredient; -import net.minecraftforge.common.Tags; -import net.minecraftforge.fluids.FluidStack; import wayoftime.bloodmagic.BloodMagic; -import wayoftime.bloodmagic.api.event.recipes.FluidStackIngredient; -import wayoftime.bloodmagic.common.block.BloodMagicBlocks; import wayoftime.bloodmagic.common.data.recipe.builder.ARCRecipeBuilder; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.common.tags.BloodMagicTags; public class ARCRecipeProvider implements ISubRecipeProvider { @@ -20,7 +16,12 @@ public class ARCRecipeProvider implements ISubRecipeProvider public void addRecipes(Consumer consumer) { String basePath = "arc/"; - ARCRecipeBuilder.arc(Ingredient.fromTag(Tags.Items.GEMS_DIAMOND), Ingredient.fromTag(Tags.Items.BONES), null, new ItemStack(BloodMagicBlocks.BLOOD_ALTAR.get()), null).addRandomOutput(new ItemStack(Items.DIAMOND), 0.5).build(consumer, BloodMagic.rl(basePath + "test1")); - ARCRecipeBuilder.arc(Ingredient.fromTag(Tags.Items.GEMS_DIAMOND), Ingredient.fromItems(Items.ACACIA_BOAT), FluidStackIngredient.from(Fluids.LAVA, 1000), new ItemStack(BloodMagicBlocks.BLOOD_ALTAR.get()), new FluidStack(Fluids.WATER, 100)).build(consumer, BloodMagic.rl(basePath + "test2")); +// ARCRecipeBuilder.arc(Ingredient.fromTag(Tags.Items.GEMS_DIAMOND), Ingredient.fromTag(Tags.Items.BONES), null, new ItemStack(BloodMagicBlocks.BLOOD_ALTAR.get()), null).addRandomOutput(new ItemStack(Items.DIAMOND, 2), 0.5).build(consumer, BloodMagic.rl(basePath + "test1")); +// ARCRecipeBuilder.arc(Ingredient.fromTag(Tags.Items.GEMS_DIAMOND), Ingredient.fromTag(Tags.Items.BONES), null, new ItemStack(BloodMagicBlocks.BLOOD_ALTAR.get()), null).addRandomOutput(new ItemStack(Items.DIAMOND, 5), 0.5).build(consumer, BloodMagic.rl(basePath + "test3")); +// ARCRecipeBuilder.arc(Ingredient.fromTag(Tags.Items.GEMS_DIAMOND), Ingredient.fromItems(Items.ACACIA_BOAT), FluidStackIngredient.from(Fluids.LAVA, 1000), new ItemStack(BloodMagicBlocks.BLOOD_ALTAR.get()), new FluidStack(Fluids.WATER, 100)).build(consumer, BloodMagic.rl(basePath + "test2")); +// ARCRecipeBuilder.arc(Ingredient.fromTag(Tags.Items.NETHERRACK), Ingredient.fromTag(BloodMagicTags.ARC_TOOL_REVERTER), FluidStackIngredient.from(Fluids.LAVA, 1000), new ItemStack(BloodMagicBlocks.BLOOD_ALTAR.get()), new FluidStack(Fluids.WATER, 100)).addRandomOutput(new ItemStack(BloodMagicItems.SLATE.get()), 0.2).addRandomOutput(new ItemStack(BloodMagicItems.REINFORCED_SLATE.get()), 0.1).addRandomOutput(new ItemStack(BloodMagicItems.IMBUED_SLATE.get()), 0.001).build(consumer, BloodMagic.rl(basePath + "test4")); + + ARCRecipeBuilder.arc(Ingredient.fromItems(BloodMagicItems.IMBUED_SLATE.get()), Ingredient.fromTag(BloodMagicTags.ARC_TOOL_REVERTER), null, new ItemStack(BloodMagicItems.WEAK_BLOOD_SHARD.get()), null).addRandomOutput(new ItemStack(BloodMagicItems.WEAK_BLOOD_SHARD.get()), 0.2).build(consumer, BloodMagic.rl(basePath + "weakbloodshard")); + } } diff --git a/src/main/java/wayoftime/bloodmagic/common/recipe/TartaricForgeRecipeProvider.java b/src/main/java/wayoftime/bloodmagic/common/recipe/TartaricForgeRecipeProvider.java index 57241d8e..e14f9bfb 100644 --- a/src/main/java/wayoftime/bloodmagic/common/recipe/TartaricForgeRecipeProvider.java +++ b/src/main/java/wayoftime/bloodmagic/common/recipe/TartaricForgeRecipeProvider.java @@ -32,6 +32,8 @@ public class TartaricForgeRecipeProvider implements ISubRecipeProvider TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.REAGENT_GROWTH.get()), 128, 20, Ingredient.fromTag(ItemTags.SAPLINGS), Ingredient.fromTag(ItemTags.SAPLINGS), Ingredient.fromItems(Items.SUGAR_CANE), Ingredient.fromItems(Items.SUGAR)).build(consumer, BloodMagic.rl(basePath + "reagent_growth")); TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.REAGENT_MAGNETISM.get()), 600, 10, Ingredient.fromTag(Tags.Items.STRING), Ingredient.fromTag(Tags.Items.INGOTS_GOLD), Ingredient.fromTag(Tags.Items.INGOTS_GOLD), Ingredient.fromTag(Tags.Items.STORAGE_BLOCKS_IRON)).build(consumer, BloodMagic.rl(basePath + "reagent_magnetism")); TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.REAGENT_FAST_MINER.get()), 128, 20, Ingredient.fromItems(Items.IRON_PICKAXE), Ingredient.fromItems(Items.IRON_AXE), Ingredient.fromItems(Items.IRON_SHOVEL), Ingredient.fromTag(Tags.Items.GUNPOWDER)).build(consumer, BloodMagic.rl(basePath + "reagent_fastminer")); + + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.SANGUINE_REVERTER.get()), 350, 30, Ingredient.fromItems(Items.SHEARS), Ingredient.fromTag(Tags.Items.STONE), Ingredient.fromItems(BloodMagicItems.IMBUED_SLATE.get()), Ingredient.fromTag(Tags.Items.INGOTS_IRON)).build(consumer, BloodMagic.rl(basePath + "sanguine_reverter")); } } diff --git a/src/main/java/wayoftime/bloodmagic/common/recipe/serializer/ARCRecipeSerializer.java b/src/main/java/wayoftime/bloodmagic/common/recipe/serializer/ARCRecipeSerializer.java index 9ec58585..7b88c170 100644 --- a/src/main/java/wayoftime/bloodmagic/common/recipe/serializer/ARCRecipeSerializer.java +++ b/src/main/java/wayoftime/bloodmagic/common/recipe/serializer/ARCRecipeSerializer.java @@ -84,14 +84,15 @@ public class ARCRecipeSerializer extends ForgeRegistry inputFluidIng = FluidStackIngredient.deserialize(inputFluid); } - FluidStack outputFluid = null; + FluidStack outputFluidStack = FluidStack.EMPTY; if (json.has(Constants.JSON.OUTPUT_FLUID)) { - outputFluid = SerializerHelper.deserializeFluid(json); + JsonObject outputFluid = JSONUtils.getJsonObject(json, Constants.JSON.OUTPUT_FLUID).getAsJsonObject(); + outputFluidStack = SerializerHelper.deserializeFluid(outputFluid); } - return this.factory.create(recipeId, inputIng, toolIng, inputFluidIng, output, addedItems, outputFluid); + return this.factory.create(recipeId, inputIng, toolIng, inputFluidIng, output, addedItems, outputFluidStack); } @Override diff --git a/src/main/java/wayoftime/bloodmagic/common/tags/BloodMagicTags.java b/src/main/java/wayoftime/bloodmagic/common/tags/BloodMagicTags.java index 9953561f..bdf5e3aa 100644 --- a/src/main/java/wayoftime/bloodmagic/common/tags/BloodMagicTags.java +++ b/src/main/java/wayoftime/bloodmagic/common/tags/BloodMagicTags.java @@ -9,4 +9,5 @@ public class BloodMagicTags public static final ITag.INamedTag ARC_TOOL = ItemTags.makeWrapperTag("bloodmagic:arc_tool"); public static final ITag.INamedTag ARC_TOOL_FURNACE = ItemTags.makeWrapperTag("bloodmagic:arc_tool_furnace"); public static final ITag.INamedTag ARC_TOOL_SIEVE = ItemTags.makeWrapperTag("bloodmagic:arc_tool_sieve"); + public static final ITag.INamedTag ARC_TOOL_REVERTER = ItemTags.makeWrapperTag("bloodmagic:arc_tool_reverter"); } diff --git a/src/main/java/wayoftime/bloodmagic/compat/jei/BloodMagicJEIPlugin.java b/src/main/java/wayoftime/bloodmagic/compat/jei/BloodMagicJEIPlugin.java index 4ddce32c..fe1d3f3a 100644 --- a/src/main/java/wayoftime/bloodmagic/compat/jei/BloodMagicJEIPlugin.java +++ b/src/main/java/wayoftime/bloodmagic/compat/jei/BloodMagicJEIPlugin.java @@ -2,6 +2,8 @@ package wayoftime.bloodmagic.compat.jei; import java.util.Objects; +import com.google.common.collect.ImmutableSet; + import mezz.jei.api.IModPlugin; import mezz.jei.api.JeiPlugin; import mezz.jei.api.helpers.IJeiHelpers; @@ -11,12 +13,15 @@ import mezz.jei.api.registration.IRecipeRegistration; import net.minecraft.client.Minecraft; import net.minecraft.client.world.ClientWorld; import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeType; import net.minecraft.util.ResourceLocation; import wayoftime.bloodmagic.BloodMagic; import wayoftime.bloodmagic.api.impl.BloodMagicAPI; import wayoftime.bloodmagic.common.block.BloodMagicBlocks; import wayoftime.bloodmagic.common.item.BloodMagicItems; import wayoftime.bloodmagic.compat.jei.altar.BloodAltarRecipeCategory; +import wayoftime.bloodmagic.compat.jei.arc.ARCFurnaceRecipeCategory; +import wayoftime.bloodmagic.compat.jei.arc.ARCRecipeCategory; import wayoftime.bloodmagic.compat.jei.array.AlchemyArrayCraftingCategory; import wayoftime.bloodmagic.compat.jei.forge.TartaricForgeRecipeCategory; @@ -33,6 +38,8 @@ public class BloodMagicJEIPlugin implements IModPlugin registration.addRecipeCatalyst(new ItemStack(BloodMagicBlocks.SOUL_FORGE.get()), TartaricForgeRecipeCategory.UID); registration.addRecipeCatalyst(new ItemStack(BloodMagicBlocks.BLOOD_ALTAR.get()), BloodAltarRecipeCategory.UID); registration.addRecipeCatalyst(new ItemStack(BloodMagicItems.ARCANE_ASHES.get()), AlchemyArrayCraftingCategory.UID); + registration.addRecipeCatalyst(new ItemStack(BloodMagicBlocks.ALCHEMICAL_REACTION_CHAMBER.get()), ARCRecipeCategory.UID); + registration.addRecipeCatalyst(new ItemStack(BloodMagicBlocks.ALCHEMICAL_REACTION_CHAMBER.get()), ARCFurnaceRecipeCategory.UID); } @Override @@ -42,6 +49,8 @@ public class BloodMagicJEIPlugin implements IModPlugin registration.addRecipeCategories(new TartaricForgeRecipeCategory(registration.getJeiHelpers().getGuiHelper())); registration.addRecipeCategories(new BloodAltarRecipeCategory(registration.getJeiHelpers().getGuiHelper())); registration.addRecipeCategories(new AlchemyArrayCraftingCategory(registration.getJeiHelpers().getGuiHelper())); + registration.addRecipeCategories(new ARCRecipeCategory(registration.getJeiHelpers().getGuiHelper())); + registration.addRecipeCategories(new ARCFurnaceRecipeCategory(registration.getJeiHelpers().getGuiHelper())); } @Override @@ -51,6 +60,8 @@ public class BloodMagicJEIPlugin implements IModPlugin registration.addRecipes(BloodMagicAPI.INSTANCE.getRecipeRegistrar().getTartaricForgeRecipes(world), TartaricForgeRecipeCategory.UID); registration.addRecipes(BloodMagicAPI.INSTANCE.getRecipeRegistrar().getAltarRecipes(world), BloodAltarRecipeCategory.UID); registration.addRecipes(BloodMagicAPI.INSTANCE.getRecipeRegistrar().getAlchemyArrayRecipes(world), AlchemyArrayCraftingCategory.UID); + registration.addRecipes(BloodMagicAPI.INSTANCE.getRecipeRegistrar().getARCRecipes(world), ARCRecipeCategory.UID); + registration.addRecipes(ImmutableSet.copyOf(world.getRecipeManager().getRecipesForType(IRecipeType.SMELTING)), ARCFurnaceRecipeCategory.UID); } @Override diff --git a/src/main/java/wayoftime/bloodmagic/compat/jei/arc/ARCFurnaceRecipeCategory.java b/src/main/java/wayoftime/bloodmagic/compat/jei/arc/ARCFurnaceRecipeCategory.java new file mode 100644 index 00000000..d8d5ca72 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/compat/jei/arc/ARCFurnaceRecipeCategory.java @@ -0,0 +1,114 @@ +package wayoftime.bloodmagic.compat.jei.arc; + +import java.util.List; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import com.mojang.blaze3d.matrix.MatrixStack; + +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.gui.drawable.IDrawable; +import mezz.jei.api.gui.ingredient.IGuiItemStackGroup; +import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipe; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.FluidStack; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.common.tags.BloodMagicTags; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.handler.event.ClientHandler; +import wayoftime.bloodmagic.util.helper.TextHelper; + +public class ARCFurnaceRecipeCategory implements IRecipeCategory +{ + private static final int OUTPUT_SLOT = 0; + private static final int INPUT_SLOT = 1; + private static final int CATALYST_SLOT = 2; + public static final ResourceLocation UID = BloodMagic.rl(Constants.Compat.JEI_CATEGORY_ARC + "furnace"); + public static final ResourceLocation BACKGROUNDRL = BloodMagic.rl("gui/jei/arc.png"); + + @Nonnull + private final IDrawable background; + private final IDrawable icon; +// @Nonnull +// private final ICraftingGridHelper craftingGridHelper; + + public ARCFurnaceRecipeCategory(IGuiHelper guiHelper) + { + icon = guiHelper.createDrawableIngredient(new ItemStack(BloodMagicBlocks.ALCHEMICAL_REACTION_CHAMBER.get())); + background = guiHelper.createDrawable(BACKGROUNDRL, 0, 0, 157, 43); +// craftingGridHelper = guiHelper.createCraftingGridHelper(INPUT_SLOT); + } + + @Nonnull + @Override + public ResourceLocation getUid() + { + return UID; + } + + @Nonnull + @Override + public String getTitle() + { + return TextHelper.localize("jei.bloodmagic.recipe.arcfurnace"); + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return background; + } + + @Nullable + @Override + public IDrawable getIcon() + { + return icon; + } + + @Override + public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull FurnaceRecipe recipe, @Nonnull IIngredients ingredients) + { + IGuiItemStackGroup guiItemStacks = recipeLayout.getItemStacks(); + + recipeLayout.getItemStacks().init(OUTPUT_SLOT, false, 53, 16); + recipeLayout.getItemStacks().init(INPUT_SLOT, true, 0, 5); + recipeLayout.getItemStacks().init(CATALYST_SLOT, true, 21, 16); + + guiItemStacks.set(ingredients); + } + + @Override + public Class getRecipeClass() + { + return FurnaceRecipe.class; + } + + @Override + public void setIngredients(FurnaceRecipe recipe, IIngredients ingredients) + { + List inputIngList = recipe.getIngredients(); + inputIngList.add(Ingredient.fromTag(BloodMagicTags.ARC_TOOL_FURNACE)); + ingredients.setInputIngredients(inputIngList); + ingredients.setOutput(VanillaTypes.ITEM, recipe.getRecipeOutput()); + } + + @Override + public void draw(FurnaceRecipe recipe, MatrixStack matrixStack, double mouseX, double mouseY) + { + FluidStack outputStack = FluidStack.EMPTY; + ClientHandler.handleGuiTank(matrixStack, outputStack, outputStack.getAmount(), 140, 7, 16, 36, 157, 6, 18, 38, (int) mouseX, (int) mouseY, BACKGROUNDRL.toString(), null); + + FluidStack inputStack = FluidStack.EMPTY; + ClientHandler.handleGuiTank(matrixStack, inputStack, inputStack.getAmount(), 1, 26, 16, 16, 175, 26, 18, 18, (int) mouseX, (int) mouseY, BACKGROUNDRL.toString(), null); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/compat/jei/arc/ARCRecipeCategory.java b/src/main/java/wayoftime/bloodmagic/compat/jei/arc/ARCRecipeCategory.java new file mode 100644 index 00000000..95751839 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/compat/jei/arc/ARCRecipeCategory.java @@ -0,0 +1,172 @@ +package wayoftime.bloodmagic.compat.jei.arc; + +import java.awt.Color; +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import com.mojang.blaze3d.matrix.MatrixStack; + +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.gui.drawable.IDrawable; +import mezz.jei.api.gui.ingredient.IGuiItemStackGroup; +import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fluids.FluidStack; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.api.impl.recipe.RecipeARC; +import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.util.Constants; +import wayoftime.bloodmagic.util.handler.event.ClientHandler; +import wayoftime.bloodmagic.util.helper.TextHelper; + +public class ARCRecipeCategory implements IRecipeCategory +{ + private static final int OUTPUT_SLOT = 0; + private static final int INPUT_SLOT = 4; + private static final int CATALYST_SLOT = 5; + public static final ResourceLocation UID = BloodMagic.rl(Constants.Compat.JEI_CATEGORY_ARC); + public static final ResourceLocation BACKGROUNDRL = BloodMagic.rl("gui/jei/arc.png"); + + @Nonnull + private final IDrawable background; + private final IDrawable icon; +// @Nonnull +// private final ICraftingGridHelper craftingGridHelper; + + public ARCRecipeCategory(IGuiHelper guiHelper) + { + icon = guiHelper.createDrawableIngredient(new ItemStack(BloodMagicBlocks.ALCHEMICAL_REACTION_CHAMBER.get())); + background = guiHelper.createDrawable(BACKGROUNDRL, 0, 0, 157, 43); +// craftingGridHelper = guiHelper.createCraftingGridHelper(INPUT_SLOT); + } + + @Nonnull + @Override + public ResourceLocation getUid() + { + return UID; + } + + @Nonnull + @Override + public String getTitle() + { + return TextHelper.localize("jei.bloodmagic.recipe.arc"); + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return background; + } + + @Nullable + @Override + public IDrawable getIcon() + { + return icon; + } + + @Override + public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull RecipeARC recipe, @Nonnull IIngredients ingredients) + { + IGuiItemStackGroup guiItemStacks = recipeLayout.getItemStacks(); + + recipeLayout.getItemStacks().init(OUTPUT_SLOT, false, 53, 16); + recipeLayout.getItemStacks().init(OUTPUT_SLOT + 1, false, 53 + 22 * 1, 16); + recipeLayout.getItemStacks().init(OUTPUT_SLOT + 2, false, 53 + 22 * 2, 16); + recipeLayout.getItemStacks().init(OUTPUT_SLOT + 3, false, 53 + 22 * 3, 16); + recipeLayout.getItemStacks().init(INPUT_SLOT, true, 0, 5); + recipeLayout.getItemStacks().init(CATALYST_SLOT, true, 21, 16); + + guiItemStacks.set(ingredients); + } + + @Override + public Class getRecipeClass() + { + return RecipeARC.class; + } + + @Override + public void setIngredients(RecipeARC recipe, IIngredients ingredients) + { + ingredients.setInputIngredients(recipe.getIngredients()); + ingredients.setOutputs(VanillaTypes.ITEM, recipe.getAllListedOutputs()); + } + + @Override + public void draw(RecipeARC recipe, MatrixStack matrixStack, double mouseX, double mouseY) + { + Minecraft mc = Minecraft.getInstance(); + double[] chanceArray = recipe.getAllOutputChances(); + + String[] infoString = new String[chanceArray.length]; + for (int i = 0; i < infoString.length; i++) + { + if (chanceArray[i] >= 1) + { + infoString[i] = ""; + } else if (chanceArray[i] < 0.01) + { + infoString[i] = "<1%"; + } else + { + infoString[i] = "" + (int) (chanceArray[i] * 100) + "%"; + } + + mc.fontRenderer.drawStringWithShadow(matrixStack, infoString[i], 86 + 22 * i + - mc.fontRenderer.getStringWidth(infoString[i]) / 2, 5, Color.white.getRGB()); + } + +// if (recipe.getFluidOutput() != null && !recipe.getFluidOutput().isEmpty()) + { + FluidStack outputStack = recipe.getFluidOutput(); + ClientHandler.handleGuiTank(matrixStack, outputStack, outputStack.getAmount(), 140, 7, 16, 36, 157, 6, 18, 38, (int) mouseX, (int) mouseY, BACKGROUNDRL.toString(), null); + } + + if (recipe.getFluidIngredient() != null) + { + List inputFluids = recipe.getFluidIngredient().getRepresentations(); + FluidStack inputStack = inputFluids.get(0); + ClientHandler.handleGuiTank(matrixStack, inputStack, inputStack.getAmount(), 1, 26, 16, 16, 175, 26, 18, 18, (int) mouseX, (int) mouseY, BACKGROUNDRL.toString(), null); + } + +// { TextHelper.localize("jei.bloodmagic.recipe.requiredtier", NumeralHelper.toRoman(recipe.getMinimumTier().toInt())), +// TextHelper.localize("jei.bloodmagic.recipe.requiredlp", recipe.getSyphon()) }; +// mc.fontRenderer.drawString(matrixStack, infoString[0], 90 +// - mc.fontRenderer.getStringWidth(infoString[0]) / 2, 0, Color.gray.getRGB()); +// mc.fontRenderer.drawString(matrixStack, infoString[1], 90 +// - mc.fontRenderer.getStringWidth(infoString[1]) / 2, 10, Color.gray.getRGB()); + } + + @Override + public List getTooltipStrings(RecipeARC recipe, double mouseX, double mouseY) + { + List tooltip = new ArrayList<>(); + FluidStack outputStack = recipe.getFluidOutput(); + if (!outputStack.isEmpty()) + { + ClientHandler.handleGuiTank(null, outputStack, -1, 140, 8, 16, 34, 157, 7, 18, 36, (int) mouseX, (int) mouseY, BACKGROUNDRL.toString(), tooltip); + } + + if (recipe.getFluidIngredient() != null) + { + List inputFluids = recipe.getFluidIngredient().getRepresentations(); + FluidStack inputStack = inputFluids.get(0); + ClientHandler.handleGuiTank(null, inputStack, -1, 1, 26, 16, 16, 175, 26, 18, 18, (int) mouseX, (int) mouseY, BACKGROUNDRL.toString(), tooltip); + } + + return tooltip; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/tile/TileAlchemicalReactionChamber.java b/src/main/java/wayoftime/bloodmagic/tile/TileAlchemicalReactionChamber.java index 0f6f57b1..5d661086 100644 --- a/src/main/java/wayoftime/bloodmagic/tile/TileAlchemicalReactionChamber.java +++ b/src/main/java/wayoftime/bloodmagic/tile/TileAlchemicalReactionChamber.java @@ -2,13 +2,15 @@ package wayoftime.bloodmagic.tile; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.fluid.Fluids; import net.minecraft.inventory.container.Container; import net.minecraft.inventory.container.INamedContainerProvider; import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipe; +import net.minecraft.item.crafting.IRecipeType; import net.minecraft.nbt.CompoundNBT; import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.TileEntityType; @@ -23,8 +25,12 @@ 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.event.recipes.FluidStackIngredient; import wayoftime.bloodmagic.api.impl.BloodMagicAPI; import wayoftime.bloodmagic.api.impl.recipe.RecipeARC; +import wayoftime.bloodmagic.common.item.IARCTool; +import wayoftime.bloodmagic.common.item.inventory.InventoryWrapper; +import wayoftime.bloodmagic.common.tags.BloodMagicTags; import wayoftime.bloodmagic.tile.contailer.ContainerAlchemicalReactionChamber; import wayoftime.bloodmagic.util.Constants; import wayoftime.bloodmagic.util.MultiSlotItemHandler; @@ -45,6 +51,7 @@ public class TileAlchemicalReactionChamber extends TileInventory implements ITic public FluidTank outputTank = new FluidTank(FluidAttributes.BUCKET_VOLUME * 20); public double currentProgress = 0; + public static final double DEFAULT_SPEED = 0.005; public TileAlchemicalReactionChamber(TileEntityType type) { @@ -91,15 +98,17 @@ public class TileAlchemicalReactionChamber extends TileInventory implements ITic @Override public void tick() { - if (world.isRemote) - { - return; - } +// if (world.isRemote) +// { +// return; +// } - if (world.getGameTime() % 20 == 0) - { - outputTank.fill(new FluidStack(Fluids.WATER, 100), FluidAction.EXECUTE); - } +// if (world.getGameTime() % 20 == 0) +// { +// outputTank.fill(new FluidStack(Fluids.WATER, 100), FluidAction.EXECUTE); +// } + + boolean outputChanged = false; ItemStack fullBucketStack = this.getStackInSlot(INPUT_BUCKET_SLOT); ItemStack emptyBucketStack = this.getStackInSlot(OUTPUT_BUCKET_SLOT); @@ -109,58 +118,63 @@ public class TileAlchemicalReactionChamber extends TileInventory implements ITic MultiSlotItemHandler outputSlotHandler = new MultiSlotItemHandler(outputInventory, 64); - if (!fullBucketStack.isEmpty() && inputTank.getSpace() >= 1000) + if (!world.isRemote) { - ItemStack testFullBucketStack = ItemHandlerHelper.copyStackWithSize(fullBucketStack, 1); - LazyOptional fluidHandlerWrapper = FluidUtil.getFluidHandler(testFullBucketStack); - if (fluidHandlerWrapper.isPresent()) + if (!fullBucketStack.isEmpty() && inputTank.getSpace() >= 1000) { - IFluidHandlerItem fluidHandler = fluidHandlerWrapper.resolve().get(); - FluidStack transferedStack = FluidUtil.tryFluidTransfer(inputTank, fluidHandler, 1000, false); - if (!transferedStack.isEmpty()) + ItemStack testFullBucketStack = ItemHandlerHelper.copyStackWithSize(fullBucketStack, 1); + LazyOptional fluidHandlerWrapper = FluidUtil.getFluidHandler(testFullBucketStack); + if (fluidHandlerWrapper.isPresent()) { - fluidHandler.drain(transferedStack, FluidAction.EXECUTE); - List arrayList = new ArrayList<>(); - arrayList.add(fluidHandler.getContainer()); - if (outputSlotHandler.canTransferAllItemsToSlots(arrayList, true)) + IFluidHandlerItem fluidHandler = fluidHandlerWrapper.resolve().get(); + FluidStack transferedStack = FluidUtil.tryFluidTransfer(inputTank, fluidHandler, 1000, false); + if (!transferedStack.isEmpty()) { - inputTank.fill(transferedStack, FluidAction.EXECUTE); - outputSlotHandler.canTransferAllItemsToSlots(arrayList, false); - if (fullBucketStack.getCount() > 1) + fluidHandler.drain(transferedStack, FluidAction.EXECUTE); + List arrayList = new ArrayList<>(); + arrayList.add(fluidHandler.getContainer()); + if (outputSlotHandler.canTransferAllItemsToSlots(arrayList, true)) { - fullBucketStack.setCount(fullBucketStack.getCount() - 1); - } else - { - setInventorySlotContents(INPUT_BUCKET_SLOT, ItemStack.EMPTY); + outputChanged = true; + inputTank.fill(transferedStack, FluidAction.EXECUTE); + outputSlotHandler.canTransferAllItemsToSlots(arrayList, false); + if (fullBucketStack.getCount() > 1) + { + fullBucketStack.setCount(fullBucketStack.getCount() - 1); + } else + { + setInventorySlotContents(INPUT_BUCKET_SLOT, ItemStack.EMPTY); + } } } } } - } - if (!emptyBucketStack.isEmpty() && outputTank.getFluidAmount() >= 1000) - { - ItemStack testEmptyBucketStack = ItemHandlerHelper.copyStackWithSize(emptyBucketStack, 1); - LazyOptional fluidHandlerWrapper = FluidUtil.getFluidHandler(testEmptyBucketStack); - if (fluidHandlerWrapper.isPresent()) + if (!emptyBucketStack.isEmpty() && outputTank.getFluidAmount() >= 1000) { - IFluidHandlerItem fluidHandler = fluidHandlerWrapper.resolve().get(); - FluidStack transferedStack = FluidUtil.tryFluidTransfer(fluidHandler, outputTank, 1000, false); - if (!transferedStack.isEmpty()) + ItemStack testEmptyBucketStack = ItemHandlerHelper.copyStackWithSize(emptyBucketStack, 1); + LazyOptional fluidHandlerWrapper = FluidUtil.getFluidHandler(testEmptyBucketStack); + if (fluidHandlerWrapper.isPresent()) { - fluidHandler.fill(transferedStack, FluidAction.EXECUTE); - List arrayList = new ArrayList<>(); - arrayList.add(fluidHandler.getContainer()); - if (outputSlotHandler.canTransferAllItemsToSlots(arrayList, true)) + IFluidHandlerItem fluidHandler = fluidHandlerWrapper.resolve().get(); + FluidStack transferedStack = FluidUtil.tryFluidTransfer(fluidHandler, outputTank, 1000, false); + if (!transferedStack.isEmpty()) { - outputTank.drain(transferedStack, FluidAction.EXECUTE); - outputSlotHandler.canTransferAllItemsToSlots(arrayList, false); - if (emptyBucketStack.getCount() > 1) + fluidHandler.fill(transferedStack, FluidAction.EXECUTE); + List arrayList = new ArrayList<>(); + arrayList.add(fluidHandler.getContainer()); + if (outputSlotHandler.canTransferAllItemsToSlots(arrayList, true)) { - emptyBucketStack.setCount(emptyBucketStack.getCount() - 1); - } else - { - setInventorySlotContents(OUTPUT_BUCKET_SLOT, ItemStack.EMPTY); + outputChanged = true; + outputTank.drain(transferedStack, FluidAction.EXECUTE); + outputSlotHandler.canTransferAllItemsToSlots(arrayList, false); + if (emptyBucketStack.getCount() > 1) + { + emptyBucketStack.setCount(emptyBucketStack.getCount() - 1); + } else + { + setInventorySlotContents(OUTPUT_BUCKET_SLOT, ItemStack.EMPTY); + } } } } @@ -169,16 +183,72 @@ 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. + double craftingMultiplier = 1; + if (toolStack.getItem() instanceof IARCTool) + { + craftingMultiplier = ((IARCTool) toolStack.getItem()).getCraftingSpeedMultiplier(toolStack); } - for (int i = 0; i < NUM_OUTPUTS; i++) + RecipeARC recipe = BloodMagicAPI.INSTANCE.getRecipeRegistrar().getARC(world, inputStack, toolStack, inputTank.getFluid()); + if (canCraft(recipe, outputSlotHandler)) { - this.setInventorySlotContents(OUTPUT_SLOT + i, outputSlotHandler.getStackInSlot(i)); + // We have enough fluid (if applicable) and the theoretical outputs can fit. + currentProgress += craftingMultiplier * DEFAULT_SPEED; + if (currentProgress >= 1) + { + if (!world.isRemote) + { + outputChanged = true; + craftItem(recipe, outputSlotHandler); + } + + currentProgress = 0; + } + } else + { + if (toolStack.getItem().isIn(BloodMagicTags.ARC_TOOL_FURNACE)) + { + InventoryWrapper invWrapper = new InventoryWrapper(1); + invWrapper.setInventorySlotContents(0, inputStack.copy()); +// ItemStack[] outputInventory = new ItemStack[] +// { input }; + +// MultiSlotItemHandler outputSlotHandler = new MultiSlotItemHandler(outputInventory, 64); + Optional furnaceRecipe = world.getRecipeManager().getRecipe(IRecipeType.SMELTING, invWrapper, world); + if (furnaceRecipe.isPresent()) + { + ItemStack outputStack = furnaceRecipe.get().getCraftingResult(invWrapper); + if (canCraftFurnace(outputStack, outputSlotHandler)) + { + currentProgress += craftingMultiplier * DEFAULT_SPEED; + if (currentProgress >= 1) + { + if (!world.isRemote) + { + craftFurnace(outputStack, outputSlotHandler); + outputChanged = true; + } + + currentProgress = 0; + } + } + } else + { + currentProgress = 0; + } + } else + { + currentProgress = 0; + } + } + + if (outputChanged && !world.isRemote) + { + for (int i = 0; i < NUM_OUTPUTS; i++) + { + this.setInventorySlotContents(OUTPUT_SLOT + i, outputSlotHandler.getStackInSlot(i)); + } } // FluidUtil.tryEmptyContainer(container, fluidDestination, maxAmount, player, doDrain) @@ -189,6 +259,12 @@ public class TileAlchemicalReactionChamber extends TileInventory implements ITic if (recipe == null) return false; + FluidStackIngredient inputFluidIngredient = recipe.getFluidIngredient(); + if (inputFluidIngredient != null && !inputFluidIngredient.test(inputTank.getFluid())) + { + return false; + } + if (outputSlotHandler.canTransferAllItemsToSlots(recipe.getAllListedOutputs(), true)) { FluidStack outputStack = recipe.getFluidOutput(); @@ -199,16 +275,37 @@ public class TileAlchemicalReactionChamber extends TileInventory implements ITic return false; } - public void craftItem(RecipeARC recipe, MultiSlotItemHandler outputSlotHandler) + private void craftItem(RecipeARC recipe, MultiSlotItemHandler outputSlotHandler) { if (this.canCraft(recipe, outputSlotHandler)) { + if (recipe.getFluidIngredient() != null) + { + FluidStack inputStack = recipe.getFluidIngredient().getMatchingInstance(inputTank.getFluid()); + inputTank.drain(inputStack, FluidAction.EXECUTE); + } + outputSlotHandler.canTransferAllItemsToSlots(recipe.getAllOutputs(world.rand), false); outputTank.fill(recipe.getFluidOutput().copy(), FluidAction.EXECUTE); consumeInventory(); } } + private boolean canCraftFurnace(ItemStack outputStack, MultiSlotItemHandler outputSlotHandler) + { + List outputList = new ArrayList<>(); + outputList.add(outputStack); + return outputSlotHandler.canTransferAllItemsToSlots(outputList, true); + } + + private void craftFurnace(ItemStack outputStack, MultiSlotItemHandler outputSlotHandler) + { + List outputList = new ArrayList<>(); + outputList.add(outputStack); + outputSlotHandler.canTransferAllItemsToSlots(outputList, false); + consumeInventory(); + } + public void consumeInventory() { ItemStack inputStack = getStackInSlot(INPUT_SLOT); @@ -266,6 +363,6 @@ public class TileAlchemicalReactionChamber extends TileInventory implements ITic public double getProgressForGui() { - return 0; + return currentProgress; } } \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/util/Constants.java b/src/main/java/wayoftime/bloodmagic/util/Constants.java index d60f0b13..3208fafa 100644 --- a/src/main/java/wayoftime/bloodmagic/util/Constants.java +++ b/src/main/java/wayoftime/bloodmagic/util/Constants.java @@ -170,6 +170,7 @@ public class Constants public static final String JEI_CATEGORY_SOULFORGE = "soulforge"; public static final String JEI_CATEGORY_ALCHEMYTABLE = "alchemytable"; public static final String JEI_CATEGORY_ARMOURDOWNGRADE = "armourdowngrade"; + public static final String JEI_CATEGORY_ARC = "arc"; public static final String WAILA_CONFIG_ALTAR = BloodMagic.MODID + ".bloodaltar"; public static final String WAILA_CONFIG_TELEPOSER = BloodMagic.MODID + ".teleposer"; diff --git a/src/main/resources/assets/bloodmagic/gui/jei/arc.png b/src/main/resources/assets/bloodmagic/gui/jei/arc.png new file mode 100644 index 00000000..3c507024 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/gui/jei/arc.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/sigil/divination_sigil.png b/src/main/resources/assets/bloodmagic/images/entries/sigil/divination_sigil.png new file mode 100644 index 00000000..e50354ec Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/sigil/divination_sigil.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/sigil/grove_sigil1.png b/src/main/resources/assets/bloodmagic/images/entries/sigil/grove_sigil1.png new file mode 100644 index 00000000..b9855936 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/sigil/grove_sigil1.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/sigil/grove_sigil2.png b/src/main/resources/assets/bloodmagic/images/entries/sigil/grove_sigil2.png new file mode 100644 index 00000000..dc31e01c Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/sigil/grove_sigil2.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/sigil/grove_sigil3.png b/src/main/resources/assets/bloodmagic/images/entries/sigil/grove_sigil3.png new file mode 100644 index 00000000..5dc6f01f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/sigil/grove_sigil3.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/sigil/lava_sigil1.png b/src/main/resources/assets/bloodmagic/images/entries/sigil/lava_sigil1.png new file mode 100644 index 00000000..8eee1885 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/sigil/lava_sigil1.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/sigil/lava_sigil2.png b/src/main/resources/assets/bloodmagic/images/entries/sigil/lava_sigil2.png new file mode 100644 index 00000000..083b1862 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/sigil/lava_sigil2.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/sigil/mining_sigil1.png b/src/main/resources/assets/bloodmagic/images/entries/sigil/mining_sigil1.png new file mode 100644 index 00000000..7b8ed509 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/sigil/mining_sigil1.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/sigil/mining_sigil2.png b/src/main/resources/assets/bloodmagic/images/entries/sigil/mining_sigil2.png new file mode 100644 index 00000000..223eb030 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/sigil/mining_sigil2.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/sigil/water_sigil1.png b/src/main/resources/assets/bloodmagic/images/entries/sigil/water_sigil1.png new file mode 100644 index 00000000..cf6e7ee9 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/sigil/water_sigil1.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/sigil/water_sigil2.png b/src/main/resources/assets/bloodmagic/images/entries/sigil/water_sigil2.png new file mode 100644 index 00000000..e94e2021 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/sigil/water_sigil2.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/furnacecell_primitive.png b/src/main/resources/assets/bloodmagic/textures/item/furnacecell_primitive.png new file mode 100644 index 00000000..8df342d5 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/furnacecell_primitive.png differ diff --git a/src/main/resources/assets/bloodmagic/textures/item/sanguinereverter.png b/src/main/resources/assets/bloodmagic/textures/item/sanguinereverter.png new file mode 100644 index 00000000..729c693f Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/item/sanguinereverter.png differ diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/soulnetwork.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/soulnetwork.json new file mode 100644 index 00000000..5e3b27fe --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/soulnetwork.json @@ -0,0 +1,11 @@ +{ + "name": "Soul Network", + "icon": "bloodmagic:weakbloodorb", + "category": "altar", + "pages": [ + { + "type": "text", + "text": "" + } + ] +} \ 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 index cbd6c69f..b64e1c6d 100644 --- 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 @@ -5,7 +5,20 @@ "pages": [ { "type": "text", - "text": "$(item)Divination Sigil$()." + "text": "The $(item)Divination Sigil$() is probably the first of many sigils that you would like to craft in Blood Magic. In order to craft the sigil, you need to create an $(l:alchemyarray/arcaneash)Alchemy Array$(/l) and use $(item)Redstone Dust$() and a $(item)Blank Slate$() as the base and catalyst items, respectively." + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/sigil/divination_sigil.png" + ], + "title": "Divination Sigil Array", + "border": true, + "text": "The Divination Sigil, next to its crafting array." + }, + { + "type": "text", + "text": "The Divination Sigil has two primary uses: $(br)$(li)When the player right-clicks in the air with the sigil, it will display the amount of LP that is in the owner's $(l:altar/soulnetwork)Soul Network.$(/l)$(li)When clicking on a $(l:altar/bloodaltar)Blood Altar$(/l), it will tell the player the altar's current Tier, the amount of LP stored in the altar, as well as its current max capacity. Having a $(item)Divination Sigil$() on hand can also be helpful for other block applications, but that will be covered later." } ] } \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/sigil/grove.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/sigil/grove.json new file mode 100644 index 00000000..9ee2cd16 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/sigil/grove.json @@ -0,0 +1,26 @@ +{ + "name": "Sigil of the Green Grove", + "icon": "bloodmagic:growthsigil", + "category": "sigil", + "pages": [ + { + "type": "text", + "text": "The $(item)Sigil of the Green Grove$() is an item that has multiple uses. Crafted in an array with a $(item)Growth Reagent$(item) and a $(item)Reinforced Slate$(), the sigil can use the power of your stored life force to nourish and grow nearby plants." + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/sigil/grove_sigil1.png", + "bloodmagic:images/entries/sigil/grove_sigil2.png", + "bloodmagic:images/entries/sigil/grove_sigil3.png" + ], + "title": "Green Grove Sigil Array", + "border": true, + "text": "The Sigil of the Green Grove's array, plus its primary uses." + }, + { + "type": "text", + "text": "If you right click on a block that is $(2)IGrowable$(), it will apply the bonemeal effect while consuming 150LP.$(br2)However, if you shift-right-click the sigil in the air, the sigil will light up to indicate that it is activated and will consume 150LP every 10 seconds. Every block in a 7x7x5 high volume centered on the player will have a growth tick applied to it, growing nearby crops. Good for farming those taters!" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/sigil/lava.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/sigil/lava.json new file mode 100644 index 00000000..7bf76b9b --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/sigil/lava.json @@ -0,0 +1,21 @@ +{ + "name": "Lava Sigil", + "icon": "bloodmagic:lavasigil", + "category": "sigil", + "pages": [ + { + "type": "text", + "text": "The sister sigil to the $(l:sigil/water)Water Sigil,$(/l) the $(item)Lava Sigil$() creates a source block of lava where you click on the ground for the cost of 1000LP. Crafted in an $(l:alchemyarray/arcaneash)Alchemy Array$(/l) using a $(item)Lava Reagent$() and a $(item)Blank Slate,$() it'll drain 5 hearts from you if you don't have enough LP in your $(l:altar/soulnetwork)Soul Network.$(/l)" + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/sigil/lava_sigil1.png", + "bloodmagic:images/entries/sigil/lava_sigil2.png" + ], + "title": "Lava Sigil Array", + "border": true, + "text": "The Lava Sigil, next to its crafting array, plus its primary use." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/sigil/mining.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/sigil/mining.json new file mode 100644 index 00000000..6f6cd4fb --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/sigil/mining.json @@ -0,0 +1,21 @@ +{ + "name": "Sigil of the Fast Miner", + "icon": "bloodmagic:miningsigil", + "category": "sigil", + "pages": [ + { + "type": "text", + "text": "The $(item)Sigil of the Fast Miner$() is a sigil that, when activated using shift-right-click, will consume 100LP every 10 seconds and apply the Haste potion effect. Thus, it increases your mining, digging, and cutting speeds. Crafted using the $(item)Mining Reagent$() and $(item)Reinforced Slate$() in an alchemy array." + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/sigil/mining_sigil1.png", + "bloodmagic:images/entries/sigil/mining_sigil2.png" + ], + "title": "Fast Miner Sigil Array", + "border": true, + "text": "The Sigil of the Fast Miner's array, plus its primary uses." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/sigil/water.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/sigil/water.json new file mode 100644 index 00000000..48c4e72e --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/sigil/water.json @@ -0,0 +1,21 @@ +{ + "name": "Water Sigil", + "icon": "bloodmagic:watersigil", + "category": "sigil", + "pages": [ + { + "type": "text", + "text": "The $(item)Water Sigil$() is a rather simple sigil. By right clicking on a block, you can drain 100LP from your $(l:altar/soulnetwork)Soul Network$(/l) to place a source block of water in the world. If there's not enough LP, it will instead drain the toll from your health. Crafted using a $(item)Water Reagent$() and a $(item)Blank Slate.$()" + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/sigil/water_sigil1.png", + "bloodmagic:images/entries/sigil/water_sigil2.png" + ], + "title": "Water Sigil Array", + "border": true, + "text": "The Water Sigil, next to its crafting array, plus its primary use." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/recipes/guide.json b/src/main/resources/data/bloodmagic/recipes/guide.json new file mode 100644 index 00000000..97922e75 --- /dev/null +++ b/src/main/resources/data/bloodmagic/recipes/guide.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:book" + }, + { + "item": "minecraft:glass" + } + ], + "result": { + "item": "patchouli:guide_book", + "nbt": { + "patchouli:book": "bloodmagic:guide" + } + } +} \ No newline at end of file