diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 8e411b620..448badd6d 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -95,7 +95,7 @@ e6d9cf699667aaa47efff37b2b033895dee29c15 assets/bloodmagic/blockstates/waterritu 42f26f715bddd16c069f9b51e3767b36477c8908 assets/bloodmagic/blockstates/woodtilepath.json 3c6ce233dae6c1307d9016406c324bbe844b4e1e assets/bloodmagic/blockstates/wornstonebrickpath.json d59655f12d1724b73b77c373fb6864fcff69db12 assets/bloodmagic/blockstates/wornstonetilepath.json -739d3af2c9fba76f1465d032b80fc205c3b19df9 assets/bloodmagic/lang/en_us.json +347bb4182165f1a5b19f5fdb2f208b9da73e02c1 assets/bloodmagic/lang/en_us.json 34445195b9f2459475cde53454bc8e37d32865d7 assets/bloodmagic/models/block/accelerationrune.json c7554e6d0084dee801862519afd0ea519e14b092 assets/bloodmagic/models/block/accelerationrune2.json bcdbccc49d4509571be6988762ab87126275a4c8 assets/bloodmagic/models/block/airritualstone.json diff --git a/src/generated/resources/assets/bloodmagic/lang/en_us.json b/src/generated/resources/assets/bloodmagic/lang/en_us.json index 54d867c29..cba64d15d 100644 --- a/src/generated/resources/assets/bloodmagic/lang/en_us.json +++ b/src/generated/resources/assets/bloodmagic/lang/en_us.json @@ -159,6 +159,7 @@ "guide.patchouli.bloodmagic.arc_processor.fluid": "%dmb of %s", "guide.patchouli.bloodmagic.arc_processor.no_fluid": "None", "guide.patchouli.bloodmagic.common.double_new_line": "$(br2)%s", + "guide.patchouli.bloodmagic.common.header": "$(bold)%s$()$(br)", "guide.patchouli.bloodmagic.living_armour_upgrade_table.level": "Level", "guide.patchouli.bloodmagic.living_armour_upgrade_table.upgrade_points": "Upgrade Points", "guide.patchouli.bloodmagic.ritual_info.activation_cost": "$(br)Activation Cost: $(blood)%d LP$()", @@ -166,10 +167,14 @@ "guide.patchouli.bloodmagic.ritual_info.counter_formatter": "$(br)%s%s$()", "guide.patchouli.bloodmagic.ritual_info.full_range": "Full Range", "guide.patchouli.bloodmagic.ritual_info.info_formatter": "%s$(br)%s$(br2)%s$(br)%s%s%s", - "guide.patchouli.bloodmagic.ritual_info.range_formatter": "$(br) $(li)Max Volume: %s$(li)Horizontal Radius: %s$(li)Vertical Radius: %s", + "guide.patchouli.bloodmagic.ritual_info.range_formatter": "$(br) $(li)Max Volume: %s$(li)Max Horizontal Radius: %s$(li)Max Vertical Radius: %s", "guide.patchouli.bloodmagic.ritual_info.text_override_formatter": "\\$(%s)%s\\$()", "guide.patchouli.bloodmagic.ritual_info.upkeep_cost": "$(br)Base Usage Cost: $(blood)%d LP$()$(br)Base Interval: %d Ticks", "guide.patchouli.bloodmagic.ritual_info.weak_activation_crystal_link": "$(l:bloodmagic:rituals/activation_crystals#weak)%s$(/l)", + "guide.patchouli.bloodmagic.ritual_ranges.above_mrs": "Size: %d x %d x %d$(br)Center: %d above the $(l:bloodmagic:rituals/ritual_stones)Master Ritual Stone$()$(br2)", + "guide.patchouli.bloodmagic.ritual_ranges.at_mrs": "Size: %d x %d x %d$(br)Center: at the $(l:bloodmagic:rituals/ritual_stones)Master Ritual Stone$()$(br2)", + "guide.patchouli.bloodmagic.ritual_ranges.away_from_mrs": "Size: %d x %d x %d$(br)Center: (%d, %d, %d)$(br2)", + "guide.patchouli.bloodmagic.ritual_ranges.below_mrs": "Size: %d x %d x %d$(br)Center: %d below the $(l:bloodmagic:rituals/ritual_stones)Master Ritual Stone$()$(br2)", "hud.bloodmagic.inactive": "Inactive", "item.bloodmagic.activationcrystalawakened": "Awakened Activation Crystal", "item.bloodmagic.activationcrystalcreative": "Creative Activation Crystal", @@ -465,7 +470,7 @@ "ritual.bloodmagic.blockRange.tooFar": "The block range given is too far! Needs to be within a vertical range of %s blocks and a horizontal range of %s blocks.", "ritual.bloodmagic.cobblestoneRitual": "Le Vulcanos Frigius", "ritual.bloodmagic.condorRitual": "Reverence of the Condor", - "ritual.bloodmagic.condorRitual.flightRange.info": "Players within this range will receive a Flight buff.", + "ritual.bloodmagic.condorRitual.flightRange.info": "(Flight Range) Players within this range will receive a Flight buff.", "ritual.bloodmagic.condorRitual.info": "Provides flight in an area around the ritual.", "ritual.bloodmagic.containmentRitual": "Ritual of Containment", "ritual.bloodmagic.containmentRitual.containmentRange.info": "(Containment) The area of the ritual where mobs will be pulled. All mobs are pulled towards the master ritual stone, regardless of where this area is.", diff --git a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLanguage.java b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLanguage.java index 5d6778e0d..bbb77b914 100644 --- a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLanguage.java +++ b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLanguage.java @@ -388,7 +388,7 @@ protected void addTranslations() add("ritual.bloodmagic.fellingRitual.fellingRange.info", "(Cutting) The range that the ritual will search out logs and leaves in order to cut down."); add("ritual.bloodmagic.fellingRitual.chest.info", "(Chest) The location of the inventory that the ritual will place the results into."); add("ritual.bloodmagic.pumpRitual.pumpRange.info", "(Pump) The region that the ritual will look for fluids to grab from the world."); - add("ritual.bloodmagic.condorRitual.flightRange.info", "Players within this range will receive a Flight buff."); + add("ritual.bloodmagic.condorRitual.flightRange.info", "(Flight Range) Players within this range will receive a Flight buff."); add("ritual.bloodmagic.downgradeRitual.info", "Consumes items from a linked chest to forcefully downgrade worn Living Armour."); add("ritual.bloodmagic.groundingRitual.groundingRange.info", "(Range) Affects entities within range."); @@ -503,6 +503,7 @@ protected void addTranslations() add("guide.bloodmagic.name", "Sanguine Scientiem"); add("guide.bloodmagic.landing_text", "Welcome to $(6)Blood Magic$()! $(br2)$(l:bloodmagic:utility/nyi)A lot of stuff$() isn't yet implemented, so please excuse our dust. $(br2)Click $(l:bloodmagic:utility/getting_started)HERE$() to get started. If you find any bugs, please report them on our $(l:https://github.com/WayofTime/BloodMagic/issues)Github$()."); add("guide.bloodmagic.subtitle", "Alchemical Wizardry"); + add("guide.patchouli.bloodmagic.common.header", "$(bold)%s$()$(br)"); // Bold + new line add("guide.patchouli.bloodmagic.common.double_new_line", "$(br2)%s"); add("guide.patchouli.bloodmagic.arc_processor.fluid", "%dmb of %s"); add("guide.patchouli.bloodmagic.arc_processor.no_fluid", "None"); @@ -515,8 +516,12 @@ protected void addTranslations() add("guide.patchouli.bloodmagic.ritual_info.counter_formatter", "$(br)%s%s$()"); add("guide.patchouli.bloodmagic.ritual_info.text_override_formatter", "\\$(%s)%s\\$()"); add("guide.patchouli.bloodmagic.ritual_info.info_formatter", "%s$(br)%s$(br2)%s$(br)%s%s%s"); - add("guide.patchouli.bloodmagic.ritual_info.range_formatter", "$(br) $(li)Max Volume: %s$(li)Horizontal Radius: %s$(li)Vertical Radius: %s"); + add("guide.patchouli.bloodmagic.ritual_info.range_formatter", "$(br) $(li)Max Volume: %s$(li)Max Horizontal Radius: %s$(li)Max Vertical Radius: %s"); add("guide.patchouli.bloodmagic.ritual_info.full_range", "Full Range"); + add("guide.patchouli.bloodmagic.ritual_ranges.at_mrs", "Size: %d x %d x %d$(br)Center: at the $(l:bloodmagic:rituals/ritual_stones)Master Ritual Stone$()$(br2)"); + add("guide.patchouli.bloodmagic.ritual_ranges.above_mrs", "Size: %d x %d x %d$(br)Center: %d above the $(l:bloodmagic:rituals/ritual_stones)Master Ritual Stone$()$(br2)"); + add("guide.patchouli.bloodmagic.ritual_ranges.below_mrs", "Size: %d x %d x %d$(br)Center: %d below the $(l:bloodmagic:rituals/ritual_stones)Master Ritual Stone$()$(br2)"); + add("guide.patchouli.bloodmagic.ritual_ranges.away_from_mrs", "Size: %d x %d x %d$(br)Center: (%d, %d, %d)$(br2)"); // Keybinds add("bloodmagic.keybind.open_holding", "Open Sigil of Holding"); diff --git a/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/RitualInfoProcessor.java b/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/RitualInfoProcessor.java deleted file mode 100644 index f245f85d3..000000000 --- a/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/RitualInfoProcessor.java +++ /dev/null @@ -1,264 +0,0 @@ -package wayoftime.bloodmagic.compat.patchouli.processors; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import org.apache.logging.log4j.LogManager; - -import net.minecraft.world.item.ItemStack; -import net.minecraft.util.Tuple; -import vazkii.patchouli.api.IComponentProcessor; -import vazkii.patchouli.api.IVariable; -import vazkii.patchouli.api.IVariableProvider; -import wayoftime.bloodmagic.BloodMagic; -import wayoftime.bloodmagic.common.item.BloodMagicItems; -import wayoftime.bloodmagic.common.item.ItemRitualDiviner; -import wayoftime.bloodmagic.ritual.EnumRuneType; -import wayoftime.bloodmagic.ritual.Ritual; -import wayoftime.bloodmagic.util.helper.RitualHelper; -import wayoftime.bloodmagic.util.helper.TextHelper; -import wayoftime.bloodmagic.will.DemonWillHolder; - -/* - * Example Page: Info Page - * - * { - * "type": "bloodmagic:ritual_info", // Corresponding Template. - * "ritual": "ritual_id", // Ritual ID set in-code by: @RitualRegister("ritual_id") - * "text_overrides": [ // - * ["text 1" , "formatting_code_1"], - * ["text 2" , "formatting_code_2"] - * ], - * "text": "Extra text." // (Optional) Adds extra text below rest of entry. - * }, - * - * The ritual_info template is a blank text page. The page_type is "info" and filled in automatically. - * - * Text Overrides: used to add Patchouli formatting codes to the auto-filled text. - * Enter the Text to be formatted in the first entry. The entire entry must be full word or words. - * The formatting codes will have the Patchouli formatting code symbols, $(code), added automatically. - * - * **** - * - * Example Page: Data Page - * - * { - * "type": "bloodmagic:ritual_data", // Corresponding Template. - * "ritual": "ritual_id", // Ritual ID set in-code by: @RitualRegister("ritual_id"), - * "page_type": "page_type_key" // See note below - * "text_overrides": [ // Same as above - * ["text 1" , "formatting_code_1"], - * ["text 2" , "formatting_code_2"] - * ], - * "heading_override": "heading" // (Optional) Overwrites page heading. - * "item_override": "item_id" // (Optional) Overwrites the item selected for the Spotlight page. - * "text": "Extra text." // (Optional) Adds extra text below rest of entry. - * }, - * - * The ritual_data template recreates the Spotlight page layout. page_type must be supplied, otherwise it will start filling in info page stuff. - * - * Page Type: This determines what kind of information the page looks for to auto-fill. - * * "info" - This is the previous example's page type. Formatting will not work correctly. Do not use here! - * * "raw" - Raw Will augment. Addresses the "default" name in language files, and gets the Raw Will Crystal item. - * * "corrosive", "destructive", "steadfast", "vengeful" - Will Augments. Shows the relevant Will Crystal item. - * Any other input will attempt to pull description and range info using the input provided, and use the Ritual Tinkerer as the item. - * For example, using "heal" will find the "ritual.bloodmagic.regenerationRitual.heal.info" entry, which starts - * with "(Healing)" so this will strip that out of the text and set "Healing" as the heading. - */ - -public class RitualInfoProcessor implements IComponentProcessor -{ - private Ritual ritual; // Ritual ID. - private String pageType; // page type selector key. - private String extraText = ""; // (Optional) Text to insert at the end of the entry. - private String heading; // heading (Spotlight Page). - private ItemStack item = new ItemStack(BloodMagicItems.RITUAL_READER.get()); // Item (Spotlight page). - private String infoBlurb = ""; // Information text from the language files. - private final String LANGUAGE_BASE = "guide.patchouli.bloodmagic.ritual_info."; // This Processor's language base. - private final String DIVINER_BASE = ItemRitualDiviner.tooltipBase; // Ritual Diviner language base. - - @Override - public void setup(IVariableProvider variables) - { - String id = variables.get("ritual").asString(); - ritual = BloodMagic.RITUAL_MANAGER.getRitual(id); - if (ritual == null) - { - LogManager.getLogger().warn("Guidebook given invalid Ritual ID {}", id); - return; - } - - if (variables.has("page_type")) - { - pageType = variables.get("page_type").asString(); - } else - { - pageType = "info"; // if page_type is missing, assume it's an info page. - } - - // Get, Format, and Set Info Blurb. - // Also sets default heading and Item. - Boolean infoAlreadySet = false; - String rangeInfo = ""; - switch (pageType) - { - case "info": - infoBlurb = TextHelper.localize(ritual.getTranslationKey() + ".info"); - infoAlreadySet = true; - break; - case "raw": - infoBlurb = TextHelper.localize(ritual.getTranslationKey() + ".default.info"); - heading = GetAndRemoveLeadTitle(); - item = new ItemStack(BloodMagicItems.RAW_CRYSTAL.get()); - infoAlreadySet = true; - break; - case "corrosive": - item = new ItemStack(BloodMagicItems.CORROSIVE_CRYSTAL.get()); - break; - case "destructive": - item = new ItemStack(BloodMagicItems.DESTRUCTIVE_CRYSTAL.get()); - break; - case "steadfast": - item = new ItemStack(BloodMagicItems.STEADFAST_CRYSTAL.get()); - break; - case "vengeful": - item = new ItemStack(BloodMagicItems.VENGEFUL_CRYSTAL.get()); - break; - default: - final DemonWillHolder emptyHolder = new DemonWillHolder(); - int volume = ritual.getMaxVolumeForRange(pageType, Collections.emptyList(), emptyHolder); - int horizontal = ritual.getMaxHorizontalRadiusForRange(pageType, Collections.emptyList(), emptyHolder); - int vertical = ritual.getMaxVerticalRadiusForRange(pageType, Collections.emptyList(), emptyHolder); - rangeInfo = TextHelper.localize("guide.patchouli.bloodmagic.ritual_info.range_formatter", volume == 0 - ? TextHelper.localize("guide.patchouli.bloodmagic.ritual_info.full_range") - : volume, horizontal, vertical); - } - if (!infoAlreadySet) - { - infoBlurb = TextHelper.localize(ritual.getTranslationKey() + "." + pageType + ".info"); - heading = GetAndRemoveLeadTitle(); - } - infoBlurb += rangeInfo; - if (variables.has("text_overrides")) - { - List varOverridePairs = variables.get("text_overrides").asList(); - List> overrideTable = new ArrayList>(); - for (IVariable varPair : varOverridePairs) - { - List pair = new ArrayList(); - varPair.asStream().forEach(p -> pair.add(p.asString())); - overrideTable.add(pair); - } - for (List pair : overrideTable) - { - String text = pair.get(0); - String code = pair.get(1); - infoBlurb = infoBlurb.replaceAll(String.format("\\b%s\\b", text), TextHelper.localize("guide.patchouli.bloodmagic.ritual_info.text_override_formatter", code, text)); - } - } - - if (variables.has("heading_override")) // Apply heading Override if applicable. - { - heading = variables.get("heading_override").asString(); - } - - if (variables.has("item_override"))// Apply Item Override if applicable. - { - item = variables.get("item_override").as(ItemStack.class); - } - - if (variables.has("text")) - { - extraText = variables.get("text").asString(); - } - } - - @Override - public IVariable process(String key) - { - if (ritual == null) - { - return null; - } - - switch (key) - { - case "auto_text": - StringBuilder outputText = new StringBuilder(); - if (pageType.equals("info")) - { - outputText.append(infoPageSetup()); - } else - { - outputText.append(infoBlurb); - } - outputText.append(TextHelper.localize("guide.patchouli.bloodmagic.common.double_new_line", extraText)); - return IVariable.wrap(outputText.toString()); - - case "heading": - return IVariable.wrap(heading); - - case "item": - return IVariable.from(item); - } - return null; - } - - // For entries that start with "(title) ...", extract the title to use as the - // default heading, and remove it from the body text. - private String GetAndRemoveLeadTitle() - { - if (infoBlurb.charAt(0) == '(') - { - String leadTitle = infoBlurb.substring(1, infoBlurb.indexOf(")")); - infoBlurb = infoBlurb.replaceFirst("^\\(" + leadTitle + "\\) ", ""); - return leadTitle; - } - return ""; - } - - // Sets up the info page information (description, rune counts, crystal, - // activation cost, and upkeep cost). - private String infoPageSetup() - { - StringBuilder runeCounts = new StringBuilder(); - Tuple> runeCounter = RitualHelper.countRunes(ritual); - Map runeMap = runeCounter.getB(); - for (EnumRuneType type : EnumRuneType.values()) - { - int count = runeMap.getOrDefault(type, 0); - if (count > 0) - { - runeCounts.append(TextHelper.localize(LANGUAGE_BASE + "counter_formatter", type.patchouliColor, TextHelper.localize(DIVINER_BASE + type.translationKey, count))); - } - } - - int totalRunes = runeCounter.getA(); - String totalRuneCount = TextHelper.localize(DIVINER_BASE + "totalRune", totalRunes); - - String crystalLevel; - switch (ritual.getCrystalLevel()) - { - case 0: - crystalLevel = TextHelper.localize(LANGUAGE_BASE + "weak_activation_crystal_link", TextHelper.localize("item.bloodmagic.activationcrystalweak")); - break; - case 1: - crystalLevel = TextHelper.localize(LANGUAGE_BASE + "awakened_activation_crystal_link", TextHelper.localize("item.bloodmagic.activationcrystalawakened")); - break; - default: - crystalLevel = TextHelper.localize("item.bloodmagic.activationcrystalcreative"); - } - - String activationCost = TextHelper.localize(LANGUAGE_BASE + "activation_cost", ritual.getActivationCost()); - - String upkeepCost = ""; - if (ritual.getRefreshCost() != 0) - { - upkeepCost = TextHelper.localize(LANGUAGE_BASE + "upkeep_cost", ritual.getRefreshCost(), ritual.getRefreshTime()); - } - - return TextHelper.localize(LANGUAGE_BASE + "info_formatter", infoBlurb, runeCounts.toString(), totalRuneCount, crystalLevel, activationCost, upkeepCost); - } -} diff --git a/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/ritual/RitualDataProcessor.java b/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/ritual/RitualDataProcessor.java new file mode 100644 index 000000000..965c2f2a7 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/ritual/RitualDataProcessor.java @@ -0,0 +1,165 @@ +package wayoftime.bloodmagic.compat.patchouli.processors.ritual; + +import java.util.Collections; + +import org.apache.logging.log4j.LogManager; + +import net.minecraft.world.item.ItemStack; +import vazkii.patchouli.api.IVariable; +import vazkii.patchouli.api.IVariableProvider; +import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.util.helper.TextHelper; +import wayoftime.bloodmagic.will.DemonWillHolder; + +/* + * Example Page + * + * { + * "type": "bloodmagic:ritual_data", // Corresponding Template. + * "ritual": "ritual_id", // Ritual ID set in-code by: @RitualRegister("ritual_id"), + * "page_type": "page_type_key" // See note below + * "text_overrides": [ // See note below + * ["text 1" , "formatting_code_1"], + * ["text 2" , "formatting_code_2"] + * ], + * "heading_override": "heading" // (Optional) Overwrites page heading. + * "item_override": "item_id" // (Optional) Overwrites the item selected for the Spotlight page. + * "text": "Extra text." // (Optional) Adds extra text below rest of entry. + * }, + * + * + * Page Type: This determines what kind of information the page looks for to auto-fill. + * * "raw" - Raw Will augment. Addresses the "default" name in language files, and gets the Raw Will Crystal item. + * * "corrosive", "destructive", "steadfast", "vengeful" - Will Augments. Shows the relevant Will Crystal item. + * Any other input will attempt to pull description and range info using the input provided, and use the Ritual Tinkerer as the item. + * For example, using "heal" will find the "ritual.bloodmagic.regenerationRitual.heal.info" entry, which starts + * with "(Healing)" so this will strip that out of the text and set "Healing" as the heading. + * + * Text Overrides: used to add Patchouli formatting codes to the auto-filled text. + * Enter the Text to be formatted in the first entry. The entire entry must be full word or words. + * The formatting codes will have the Patchouli formatting code symbols, $(code), added automatically. + */ + +public class RitualDataProcessor extends RitualProcessorCore +{ + // protected Recipe recipe // set by RitualProcessorCore + private String pageType; + private String heading = ""; + private ItemStack item = new ItemStack(BloodMagicItems.RITUAL_READER.get());; + private String text; + private String extraText = ""; + + public void localSetup(IVariableProvider variables) + { + // Set Page Type. + if (variables.has("page_type")) + { + this.pageType = variables.get("page_type").asString(); + } else + { + LogManager.getLogger().warn("Guidebook missing \"page_type\" for one of {}'s Data Pages", ritual.getName()); + this.ritual = null; // blank out the page. + return; + } + + // Set Text Overrides Map. + if (variables.has("text_overrides")) + { + setTextOverridesMap(variables.get("text_overrides")); // In RitualProcessorCore + } + + // Set Heading Override. + if (variables.has("heading_override")) + { + heading = variables.get("heading_override").asString(); + } + + if (variables.has("item_override"))// Apply Item Override if applicable. + { + item = variables.get("item_override").as(ItemStack.class); + } + + if (variables.has("text")) + { + extraText = variables.get("text").asString(); + } + + // use pageType to set Item, Text, Heading, and Range. + Boolean infoAlreadySet = false; + String rangeInfo = ""; + switch (pageType) + { + case "raw": + text = TextHelper.localize(ritual.getTranslationKey() + ".default.info"); + text = RemoveLeadTitle(text); + item = new ItemStack(BloodMagicItems.RAW_CRYSTAL.get()); + infoAlreadySet = true; + break; + case "corrosive": + item = new ItemStack(BloodMagicItems.CORROSIVE_CRYSTAL.get()); + break; + case "destructive": + item = new ItemStack(BloodMagicItems.DESTRUCTIVE_CRYSTAL.get()); + break; + case "steadfast": + item = new ItemStack(BloodMagicItems.STEADFAST_CRYSTAL.get()); + break; + case "vengeful": + item = new ItemStack(BloodMagicItems.VENGEFUL_CRYSTAL.get()); + break; + default: + final DemonWillHolder emptyHolder = new DemonWillHolder(); + int volume = ritual.getMaxVolumeForRange(pageType, Collections.emptyList(), emptyHolder); + int horizontal = ritual.getMaxHorizontalRadiusForRange(pageType, Collections.emptyList(), emptyHolder); + int vertical = ritual.getMaxVerticalRadiusForRange(pageType, Collections.emptyList(), emptyHolder); + rangeInfo = TextHelper.localize("guide.patchouli.bloodmagic.ritual_info.range_formatter", volume == 0 + ? TextHelper.localize("guide.patchouli.bloodmagic.ritual_info.full_range") + : volume, horizontal, vertical); + } + if (!infoAlreadySet) + { + text = TextHelper.localize(ritual.getTranslationKey() + "." + pageType + ".info"); + text = RemoveLeadTitle(text); + + } + text += rangeInfo; + text = applyTextOverridesTo(text); + text += TextHelper.localize("guide.patchouli.bloodmagic.common.double_new_line", extraText); + } + + @Override + public IVariable process(String key) + { + if (ritual == null) + { + return null; + } + switch (key) + { + case "heading": + return IVariable.wrap(this.heading); + case "item": + return IVariable.from(this.item); + case "auto_text": + return IVariable.wrap(this.text); + } + return null; + } + + // For entries that start with "(title) ...", extract the title to use as the + // default heading, and remove it from the body text. + private String RemoveLeadTitle(String text) + { + if (text.charAt(0) == '(') + { + String leadTitle = text.substring(1, text.indexOf(")")); + text = text.replaceFirst("^\\(" + leadTitle + "\\) ", ""); + if (this.heading.equals("")) + { + this.heading = leadTitle; + } + } + return text; + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/ritual/RitualInfoProcessor.java b/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/ritual/RitualInfoProcessor.java new file mode 100644 index 000000000..96598c642 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/ritual/RitualInfoProcessor.java @@ -0,0 +1,110 @@ +package wayoftime.bloodmagic.compat.patchouli.processors.ritual; + +import java.util.Map; + +import net.minecraft.util.Tuple; +import vazkii.patchouli.api.IVariable; +import vazkii.patchouli.api.IVariableProvider; +import wayoftime.bloodmagic.ritual.EnumRuneType; +import wayoftime.bloodmagic.util.helper.RitualHelper; +import wayoftime.bloodmagic.util.helper.TextHelper; + +/* + * Example Page + * + * { + * "type": "bloodmagic:ritual_info", // Corresponding Template. + * "ritual": "ritual_id", // Ritual ID set in-code by: @RitualRegister("ritual_id") + * "text_overrides": [ // See note below. + * ["text 1" , "formatting_code_1"], + * ["text 2" , "formatting_code_2"] + * ], + * "text": "Extra text." // (Optional) Adds extra text below rest of entry. + * }, + * + * Text Overrides: used to add Patchouli formatting codes to the auto-filled text. + * Enter the Text to be formatted in the first entry. The entire entry must be full word or words. + * The formatting codes will have the Patchouli formatting code symbols, $(code), added automatically. + */ + +public class RitualInfoProcessor extends RitualProcessorCore +{ + // protected Ritual ritual; - is set in RitualProcessorCore.setup() + + public void localSetup(IVariableProvider variables) + { + // Set Text Overrides Map. + if (variables.has("text_overrides")) + { + setTextOverridesMap(variables.get("text_overrides")); // in RitualProcessorCore + } + } + + @Override + public IVariable process(String key) + { + if (ritual == null) + { + return null; + } else if (key.equals("auto_text")) + { + return IVariable.wrap(generateAutoText()); + } else + return null; + } + + private String generateAutoText() + { + // Constants to save some repetitive typing. + final String LANG_DIVINER = "tooltip.bloodmagic.diviner."; + final String LANG_GUIDE = "guide.patchouli.bloodmagic.ritual_info."; + + // info. + String info = TextHelper.localize(String.format("%s%s", this.ritual.getTranslationKey(), ".info")); + info = applyTextOverridesTo(info); // in RitualProcessorCore + + // Rune counts. + StringBuilder runeCounts = new StringBuilder(); + Tuple> runeCounter = RitualHelper.countRunes(ritual); + Map runeMap = runeCounter.getB(); + for (EnumRuneType type : EnumRuneType.values()) + { + int count = runeMap.getOrDefault(type, 0); + if (count > 0) + { + runeCounts.append(TextHelper.localize(LANG_GUIDE + "counter_formatter", type.patchouliColor, TextHelper.localize(LANG_DIVINER + type.translationKey, count))); + } + } + + // Total Rune count. + int totalRunes = runeCounter.getA(); + String totalRuneCount = TextHelper.localize(LANG_DIVINER + "totalRune", totalRunes); + + // Activation Crystal level. + String crystalLevel; + switch (ritual.getCrystalLevel()) + { + case 0: + crystalLevel = TextHelper.localize(LANG_GUIDE + "weak_activation_crystal_link", TextHelper.localize("item.bloodmagic.activationcrystalweak")); + break; + case 1: + crystalLevel = TextHelper.localize(LANG_GUIDE + "awakened_activation_crystal_link", TextHelper.localize("item.bloodmagic.activationcrystalawakened")); + break; + default: + crystalLevel = TextHelper.localize("item.bloodmagic.activationcrystalcreative"); + } + + // Activation Cost + String activationCost = TextHelper.localize(LANG_GUIDE + "activation_cost", ritual.getActivationCost()); + + // Upkeep Cost and Interval. + String upkeepCost = ""; + if (ritual.getRefreshCost() != 0) + { + upkeepCost = TextHelper.localize(LANG_GUIDE + "upkeep_cost", ritual.getRefreshCost(), ritual.getRefreshTime()); + } + + return TextHelper.localize(LANG_GUIDE + "info_formatter", info, runeCounts.toString(), totalRuneCount, crystalLevel, activationCost, upkeepCost); + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/ritual/RitualProcessorCore.java b/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/ritual/RitualProcessorCore.java new file mode 100644 index 000000000..3a41c0f10 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/ritual/RitualProcessorCore.java @@ -0,0 +1,58 @@ +package wayoftime.bloodmagic.compat.patchouli.processors.ritual; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.logging.log4j.LogManager; + +import vazkii.patchouli.api.IComponentProcessor; +import vazkii.patchouli.api.IVariable; +import vazkii.patchouli.api.IVariableProvider; +import wayoftime.bloodmagic.BloodMagic; +import wayoftime.bloodmagic.ritual.Ritual; +import wayoftime.bloodmagic.util.helper.TextHelper; + +public abstract class RitualProcessorCore implements IComponentProcessor +{ + protected Ritual ritual; // Ritual ID. + private Map textOverrides = new HashMap(); + + @Override + public void setup(IVariableProvider variables) + { + String id = variables.get("ritual").asString(); + ritual = BloodMagic.RITUAL_MANAGER.getRitual(id); + if (ritual == null) + { + LogManager.getLogger().warn("Guidebook given invalid Ritual ID {}", id); + return; + } + localSetup(variables); + } + + public abstract void localSetup(IVariableProvider variables); + + protected String applyTextOverridesTo(String string) + { + for (String text : this.textOverrides.keySet()) + { + String formatCode = this.textOverrides.get(text); + string = string.replaceAll(String.format("\\b%s\\b", text), TextHelper.localize("guide.patchouli.bloodmagic.ritual_info.text_override_formatter", formatCode, text)); + } + return string; + } + + protected void setTextOverridesMap(IVariable variable) + { + List overridesList = variable.asList(); + for (IVariable override : overridesList) + { + List string = new ArrayList(); + override.asStream().forEach((a) -> string.add(a.asString())); + this.textOverrides.put(string.get(0), string.get(1)); + } + } + +} diff --git a/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/ritual/RitualRangesProcessor.java b/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/ritual/RitualRangesProcessor.java new file mode 100644 index 000000000..22e745782 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/compat/patchouli/processors/ritual/RitualRangesProcessor.java @@ -0,0 +1,127 @@ +package wayoftime.bloodmagic.compat.patchouli.processors.ritual; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.logging.log4j.LogManager; + +import net.minecraft.core.BlockPos; +import vazkii.patchouli.api.IVariable; +import vazkii.patchouli.api.IVariableProvider; +import wayoftime.bloodmagic.ritual.AreaDescriptor; +import wayoftime.bloodmagic.util.helper.TextHelper; + +/* + * Example Page + * + * { + * "type": "bloodmagic:ritual_ranges", // Corresponding Template. + * "ritual": "ritual_id", // Ritual ID set in-code by: @RitualRegister("ritual_id") + * "ranges": ["area_1", "area_2", "area_3"], // Page Type keys for the ranges you want. + * "text": "Extra text.", // (Optional) Adds extra text below rest of entry. + * }, + * + * specify the single range "*" to list all of the ranges automatically. + */ + +public class RitualRangesProcessor extends RitualProcessorCore +{ + // protected Recipe recipe // set by RitualProcessorCore + String output = ""; + List typeKeys = new ArrayList(); + + public void localSetup(IVariableProvider variables) + { + // Get the range key names. + if (variables.has("ranges")) + { + variables.get("ranges").asStream().forEach(e -> typeKeys.add(e.asString())); + } else + { + LogManager.getLogger().warn("Guidebook missing \"ranges\" for {}'s Ranges Page", ritual.getName()); + this.ritual = null; // blank out the page. + return; + } + if (typeKeys.contains("*")) // our "get all ranges" flag. + { + typeKeys = ritual.getListOfRanges(); // replace typeKeys with a list of all ranges. + } + + // gather each one's data and add it to the output. + for (String key : typeKeys) + { + // Get Title + String title; + String text = TextHelper.localize(ritual.getTranslationKey() + "." + key + ".info"); + if (text.charAt(0) == '(') + { + title = TextHelper.localize("guide.patchouli.bloodmagic.common.header", text.substring(1, text.indexOf(")"))); + } else + { + title = String.format("$(bold)%s$()$(br)", key); + LogManager.getLogger().warn("Guidebook missing localization for {}'s \"{}\" area title", ritual.getName(), key); + } + + // Get Ranges and Center + AreaDescriptor areaDescriptor = ritual.getBlockRange(key); + if (areaDescriptor instanceof AreaDescriptor.Rectangle) + { + AreaDescriptor.Rectangle rectangle = (AreaDescriptor.Rectangle) areaDescriptor; + output += title; + + BlockPos minOffset = rectangle.getMinimumOffset(); + BlockPos maxOffset = rectangle.getMaximumOffset(); + + int deltaX = maxOffset.getX() - minOffset.getX(); // Horizontal + int deltaY = maxOffset.getY() - minOffset.getY(); // Height + int deltaZ = maxOffset.getZ() - minOffset.getZ(); // Horizontal + + // Block (0, 0, 0)'s center is actually at (0.5, 0.5, 0.5) + int centerX = Math.round(((float) (maxOffset.getX() + minOffset.getX()) / 2) - (float) 0.5); + int centerY = Math.round(((float) (maxOffset.getY() + minOffset.getY()) / 2) - (float) 0.5); + int centerZ = Math.round(((float) (maxOffset.getZ() + minOffset.getZ()) / 2) - (float) 0.5); + + if (centerX == 0 && centerZ == 0) + { + if (centerY == 0) // at MRS + { + output += TextHelper.localize("guide.patchouli.bloodmagic.ritual_ranges.at_mrs", deltaX, deltaY, deltaZ); + } else if (centerY > 0) // Above MRS + { + output += TextHelper.localize("guide.patchouli.bloodmagic.ritual_ranges.above_mrs", deltaX, deltaY, deltaZ, centerY); + } else // Below MRS + { + output += TextHelper.localize("guide.patchouli.bloodmagic.ritual_ranges.below_mrs", deltaX, deltaY, deltaZ, -centerY); + } + + } else // X or Z offset not 0 + { + output += TextHelper.localize("guide.patchouli.bloodmagic.ritual_ranges.away_from_mrs", deltaX, deltaY, deltaZ, centerX, centerY, centerZ); + } + + } + // Skip any ritual area using a non-Rectangular shape. + // can be added later if any are ever made. + } + + if (variables.has("text")) + { + output += variables.get("text").asString(); + } + } + + @Override + public IVariable process(String key) + { + if (this.ritual == null) + { + return null; + } + if (key.equals("auto_text")) + { + return IVariable.wrap(this.output); + } + return null; + } + +} diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/categories/rituals/ritual_list.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/categories/rituals/ritual_list.json index 786b276d2..443fce369 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/categories/rituals/ritual_list.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/categories/rituals/ritual_list.json @@ -1,6 +1,6 @@ { "name": "List of Rituals", - "description": "Some simpler $(thing)Rituals$() will be available to you when you have a Tier III $(l:bloodmagic:altar/blood_altar)Blood Altar$(), but the more advanced ones will require $(dusk)Dusk Runes$(), and thus a Tier IV Altar. $(br2)Use a $(item)Ritual Diviner$() to assemble the rituals, an $(item)Activation Crystal$() to activate them, and a $(item)Ritual Tinkerer$() to fine-tune them. Don't forget to keep your $(thing)Soul Network$() topped off!", + "description": "Some simpler $(thing)Rituals$() will be available to you when you have a Tier III $(thing)Blood Altar$(), but the more advanced ones will require $(dusk)Dusk Runes$(), and thus a Tier IV Altar. $(br2)Use a $(item)Ritual Diviner$() to assemble the rituals, an $(item)Activation Crystal$() to activate them, and a $(item)Ritual Tinkerer$() to fine-tune them. Don't forget to keep your $(thing)Soul Network$() topped off!", "icon": "bloodmagic:masterritualstone", "parent": "bloodmagic:rituals" } diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_animal_growth.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_animal_growth.json index e83845e9d..4e9132e2e 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_animal_growth.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_animal_growth.json @@ -39,6 +39,11 @@ ["chest", "item"] ] }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "animal_growth", + "ranges": ["*"] + }, { "type": "bloodmagic:ritual_data", "ritual": "animal_growth", diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_condor.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_condor.json index 59d950f17..a3fab92c5 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_condor.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_condor.json @@ -13,6 +13,11 @@ "type": "bloodmagic:ritual_info", "ritual": "condor" }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "condor", + "ranges": ["*"] + }, { "type": "bloodmagic:ritual_data", "ritual": "condor", diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_crafting.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_crafting.json index dd8b8646f..8a78f86c5 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_crafting.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_crafting.json @@ -64,6 +64,16 @@ "border": true, "text": "A filter configured for the crafting of $(l:bloodmagic:alchemy_table/potions)Simple Catalysts$()." }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "crafting", + "ranges": ["recipeRange", "inputRange", "outputRange"] + }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "crafting", + "ranges": ["outputFilterRange", "hellforgedRange"] + }, { "type": "bloodmagic:ritual_data", "ritual": "crafting", diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_crushing.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_crushing.json index 86c59009c..8fa260aa2 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_crushing.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_crushing.json @@ -53,6 +53,11 @@ ["Fortune", "item"] ] }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "crushing", + "ranges": ["*"] + }, { "type": "bloodmagic:ritual_data", "ritual": "crushing", diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_crystal_catalyst.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_crystal_catalyst.json index 46046ce55..7e35d3d38 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_crystal_catalyst.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_crystal_catalyst.json @@ -13,6 +13,11 @@ "type": "bloodmagic:ritual_info", "ritual": "forsaken_soul" }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "forsaken_soul", + "ranges": ["*"] + }, { "type": "bloodmagic:ritual_data", "ritual": "forsaken_soul", diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_crystal_harvest.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_crystal_harvest.json index bccea9289..1dc4e5e50 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_crystal_harvest.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_crystal_harvest.json @@ -17,6 +17,11 @@ ["aspects", "l:bloodmagic:demon_will/will_manipulation/aspected_will"] ] }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "crystal_harvest", + "ranges": ["*"] + }, { "type": "bloodmagic:ritual_data", "ritual": "crystal_harvest", diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_ellipse.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_ellipse.json index c1fde53e4..642a1699b 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_ellipse.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_ellipse.json @@ -16,6 +16,11 @@ { "type": "patchouli:text", "text": "This ritual is purely aesthetic in nature, designed for the budding, yet lazy, builder that resides in all of us. It's particularly good for building complicated shapes, such as the mighty gold dome above your Evil Lair. ...You do have one of those, right?" + }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "ellipsoid", + "ranges": ["*"] }, { "type": "bloodmagic:ritual_data", diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_feathered_knife.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_feathered_knife.json index 9596aec1f..c54906dc2 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_feathered_knife.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_feathered_knife.json @@ -57,6 +57,11 @@ "ritual": "feathered_knife", "page_type": "steadfast" }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "feathered_knife", + "ranges": ["*"] + }, { "type": "bloodmagic:ritual_data", "ritual": "feathered_knife", diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_felling.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_felling.json index 808f72a5e..6c3834d50 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_felling.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_felling.json @@ -13,6 +13,11 @@ "type": "bloodmagic:ritual_info", "ritual": "felling" }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "felling", + "ranges": ["*"] + }, { "type": "bloodmagic:ritual_data", "ritual": "felling", diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_full_stomach.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_full_stomach.json index 0c6753394..6fcf2d475 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_full_stomach.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_full_stomach.json @@ -13,6 +13,11 @@ "type": "bloodmagic:ritual_info", "ritual": "full_stomach" }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "full_stomach", + "ranges": ["*"] + }, { "type": "bloodmagic:ritual_data", "ritual": "full_stomach", diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_green_grove.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_green_grove.json index 2d4ec64a5..f9b6b9269 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_green_grove.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_green_grove.json @@ -44,6 +44,11 @@ "ritual": "green_grove", "page_type": "steadfast" }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "green_grove", + "ranges": ["*"] + }, { "type": "bloodmagic:ritual_data", "ritual": "green_grove", diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_grounding.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_grounding.json index 408e1d6cb..683c5cf86 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_grounding.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_grounding.json @@ -45,6 +45,11 @@ "ritual": "grounding", "page_type": "steadfast" }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "grounding", + "ranges": ["*"] + }, { "type": "bloodmagic:ritual_data", "ritual": "grounding", diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_harvest.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_harvest.json index 75cac550d..d52ee8d77 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_harvest.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_harvest.json @@ -13,6 +13,11 @@ "type": "bloodmagic:ritual_info", "ritual": "harvest" }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "harvest", + "ranges": ["*"] + }, { "type": "bloodmagic:ritual_data", "ritual": "harvest", diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_jump.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_jump.json index 797a2396f..90de1f720 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_jump.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_jump.json @@ -13,6 +13,11 @@ "type": "bloodmagic:ritual_info", "ritual": "jumping" }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "jumping", + "ranges": ["*"] + }, { "type": "bloodmagic:ritual_data", "ritual": "jumping", diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_lava.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_lava.json index 00dcf788e..8bec78164 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_lava.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_lava.json @@ -56,6 +56,16 @@ ["Fire Resistance", "thing"] ] }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "lava", + "ranges": ["lavaRange", "fireDamage", "fireFuse"] + }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "lava", + "ranges": ["fireResist", "lavaTank"] + }, { "type": "bloodmagic:ritual_data", "ritual": "lava", diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_magnetic.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_magnetic.json index 5d5ef255a..08e27b1cf 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_magnetic.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_magnetic.json @@ -17,6 +17,11 @@ "type": "patchouli:text", "text": "By default, the $()Ritual of Magnetism$() searches down to bedrock in a radius of 3 blocks out from the $(item)Master Ritual Stone$() for ores to collect. This can be augmented by placing an expensive block directly underneath the MRS, as follows: $(br)$(li)$(item)Block of Iron$() - 7 blocks. $(li)$(item)Block of Gold$() - 15 blocks. $(li)$(item)Block of Diamond$() - 31 blocks." }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "magnetism", + "ranges": ["*"] + }, { "type": "bloodmagic:ritual_data", "ritual": "magnetism", diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_placer.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_placer.json index 231f66389..7c0eb6c68 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_placer.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_placer.json @@ -13,6 +13,11 @@ "type": "bloodmagic:ritual_info", "ritual": "placer" }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "placer", + "ranges": ["*"] + }, { "type": "bloodmagic:ritual_data", "ritual": "placer", diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_regeneration.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_regeneration.json index 5f23c14dd..7e5c11586 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_regeneration.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_regeneration.json @@ -18,6 +18,11 @@ "ritual": "regeneration", "page_type": "corrosive" }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "regeneration", + "ranges": ["*"] + }, { "type": "bloodmagic:ritual_data", "ritual": "regeneration", diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_speed.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_speed.json index 2722896c7..44016d1a5 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_speed.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_speed.json @@ -44,6 +44,11 @@ "ritual": "speed", "page_type": "steadfast" }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "speed", + "ranges": ["*"] + }, { "type": "bloodmagic:ritual_data", "ritual": "speed", diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_sphere_create.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_sphere_create.json index 353d86db0..95866dbfa 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_sphere_create.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_sphere_create.json @@ -16,6 +16,11 @@ ["LP", "blood"] ] }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "sphere", + "ranges": ["*"] + }, { "type": "bloodmagic:ritual_data", "ritual": "sphere", diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_water.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_water.json index 0d4655f82..1647364df 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_water.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_water.json @@ -16,10 +16,20 @@ ["Master Ritual Stone", "l:bloodmagic:rituals/ritual_stones"] ] }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "water", + "ranges": ["*"] + }, { "type": "bloodmagic:ritual_data", "ritual": "water", "page_type": "waterRange" + }, + { + "type": "bloodmagic:ritual_data", + "ritual": "water", + "page_type": "waterTank" } ] } diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_well_of_suffering.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_well_of_suffering.json index 6bef60e3a..c4dd1bac6 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_well_of_suffering.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_well_of_suffering.json @@ -21,6 +21,11 @@ "type": "patchouli:text", "text": "This ritual attacks mobs within its damage zone and puts the harvested $(blood)Blood$() into a nearby $(l:bloodmagic:altar/blood_altar)Blood Altar$(). Put a $(l:bloodmagic:altar/soul_network)Blood Orb$() in the Altar, maybe add a few $(l:bloodmagic:altar/blood_rune/sacrifice_rune)Runes of Sacrifice$() for good measure and you'll never have to worry about your LP supplies again... As long as you can supply enough mobs." }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "well_of_suffering", + "ranges": ["*"] + }, { "type": "bloodmagic:ritual_data", "ritual": "well_of_suffering", diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_yawning_void.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_yawning_void.json index e8cbbb69f..727315a0c 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_yawning_void.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_yawning_void.json @@ -35,6 +35,11 @@ "ritual": "yawning_void", "page_type": "steadfast" }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "yawning_void", + "ranges": ["*"] + }, { "type": "bloodmagic:ritual_data", "ritual": "yawning_void", diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_zephyr.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_zephyr.json index 02732c553..69b299562 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_zephyr.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/entries/rituals/ritual_list/ritual_zephyr.json @@ -13,6 +13,11 @@ "type": "bloodmagic:ritual_info", "ritual": "zephyr" }, + { + "type": "bloodmagic:ritual_ranges", + "ritual": "zephyr", + "ranges": ["*"] + }, { "type": "bloodmagic:ritual_data", "ritual": "zephyr", diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/templates/ritual_data.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/templates/ritual_data.json index 06e1d230b..82f49439f 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/templates/ritual_data.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/templates/ritual_data.json @@ -1,5 +1,5 @@ { - "processor": "wayoftime.bloodmagic.compat.patchouli.processors.RitualInfoProcessor", + "processor": "wayoftime.bloodmagic.compat.patchouli.processors.ritual.RitualDataProcessor", "components": [ { "type": "patchouli:header", diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/templates/ritual_info.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/templates/ritual_info.json index 04526f0f9..12b8fb117 100644 --- a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/templates/ritual_info.json +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/templates/ritual_info.json @@ -1,5 +1,5 @@ { - "processor": "wayoftime.bloodmagic.compat.patchouli.processors.RitualInfoProcessor", + "processor": "wayoftime.bloodmagic.compat.patchouli.processors.ritual.RitualInfoProcessor", "components": [ { "type": "patchouli:text", diff --git a/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/templates/ritual_ranges.json b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/templates/ritual_ranges.json new file mode 100644 index 000000000..f5b144c50 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/patchouli_books/guide/en_us/templates/ritual_ranges.json @@ -0,0 +1,16 @@ +{ + "processor": "wayoftime.bloodmagic.compat.patchouli.processors.ritual.RitualRangesProcessor", + "components": [ + { + "type": "patchouli:header", + "text": "Default Ranges", + "x": -1, + "y": 0 + }, + { + "type": "patchouli:text", + "text": "#auto_text", + "y": 10 + } + ] +} \ No newline at end of file