From fefba8e470dd96a07babe27eb793d7a50127ea6b Mon Sep 17 00:00:00 2001 From: shartte Date: Fri, 8 Mar 2024 13:09:28 +0100 Subject: [PATCH] Add docs for Crystal Resonance Generator (#7723) ![image](https://github.com/AppliedEnergistics/Applied-Energistics-2/assets/1261399/1083bb80-a333-444a-a58b-920fceb7b2ef) --- guidebook/ae2-mechanics/energy.md | 4 +- .../crystal_resonance_generator.md | 23 ++++++++++ .../extensions/ConfigValueTagExtension.java | 42 +++++++++++++++++++ src/main/java/appeng/core/AppEngClient.java | 3 ++ 4 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 guidebook/items-blocks-machines/crystal_resonance_generator.md create mode 100644 src/main/java/appeng/client/guidebook/extensions/ConfigValueTagExtension.java diff --git a/guidebook/ae2-mechanics/energy.md b/guidebook/ae2-mechanics/energy.md index fa90930eb84..4c78daaca5f 100644 --- a/guidebook/ae2-mechanics/energy.md +++ b/guidebook/ae2-mechanics/energy.md @@ -26,12 +26,14 @@ energy acceptors can intake at functionally unlimited speed, only limited by you + + AE2 does not use Forge Energy (on Forge) or TechReborn Energy (on Fabric) internally. Instead it converts them to its own unit, AE. This conversion is one-way. Energy can be converted by s and s, though controller faces are better used for more [channels](../ae2-mechanics/channels.md). -It can also be generated by s, but AE2 is designed +It can also be generated by s or passively using a , but AE2 is designed to be used with other tech mods that have better energy generation. All this means that it's best to consider an AE2 network as a single large multiblock machine when laying out your base's diff --git a/guidebook/items-blocks-machines/crystal_resonance_generator.md b/guidebook/items-blocks-machines/crystal_resonance_generator.md new file mode 100644 index 00000000000..98579ad77dc --- /dev/null +++ b/guidebook/items-blocks-machines/crystal_resonance_generator.md @@ -0,0 +1,23 @@ +--- +navigation: + parent: items-blocks-machines/items-blocks-machines-index.md + title: Crystal Resonance Generator + icon: crystal_resonance_generator + position: 110 +categories: +- devices +item_ids: +- ae2:crystal_resonance_generator +--- + +# The Crystal Resonance Generator + + + +This device generates energy for your ME network without the need for fuel. Because of the crystal vibrations this device generates, only one can be used in each network. These vibrations even pass through . + +**Generation Rate:** AE/t + +## Recipes + + diff --git a/src/main/java/appeng/client/guidebook/extensions/ConfigValueTagExtension.java b/src/main/java/appeng/client/guidebook/extensions/ConfigValueTagExtension.java new file mode 100644 index 00000000000..a116ab44532 --- /dev/null +++ b/src/main/java/appeng/client/guidebook/extensions/ConfigValueTagExtension.java @@ -0,0 +1,42 @@ +package appeng.client.guidebook.extensions; + +import java.util.Map; +import java.util.Set; +import java.util.function.Supplier; + +import appeng.client.guidebook.compiler.PageCompiler; +import appeng.client.guidebook.compiler.tags.FlowTagCompiler; +import appeng.client.guidebook.document.flow.LytFlowParent; +import appeng.core.AEConfig; +import appeng.libs.mdast.mdx.model.MdxJsxElementFields; + +/** + * Provides access to AE2 config values in guide content. + */ +public class ConfigValueTagExtension extends FlowTagCompiler { + private static final Map> CONFIG_VALUES = Map.of( + "crystalResonanceGeneratorRate", + () -> String.valueOf(AEConfig.instance().getCrystalResonanceGeneratorRate())); + + @Override + public Set getTagNames() { + return Set.of("ae2:ConfigValue"); + } + + @Override + protected void compile(PageCompiler compiler, LytFlowParent parent, MdxJsxElementFields el) { + var configValueName = el.getAttributeString("name", ""); + if (configValueName.isEmpty()) { + parent.appendError(compiler, "name is required", el); + return; + } + + var configValueSupplier = CONFIG_VALUES.get(configValueName); + if (configValueSupplier == null) { + parent.appendError(compiler, "unknown configuration value", el); + return; + } + + parent.appendText(configValueSupplier.get()); + } +} diff --git a/src/main/java/appeng/core/AppEngClient.java b/src/main/java/appeng/core/AppEngClient.java index 01ef34f9dea..5f208d8d555 100644 --- a/src/main/java/appeng/core/AppEngClient.java +++ b/src/main/java/appeng/core/AppEngClient.java @@ -66,6 +66,8 @@ import appeng.client.guidebook.Guide; import appeng.client.guidebook.PageAnchor; import appeng.client.guidebook.command.GuidebookStructureCommands; +import appeng.client.guidebook.compiler.TagCompiler; +import appeng.client.guidebook.extensions.ConfigValueTagExtension; import appeng.client.guidebook.hotkey.OpenGuideHotkey; import appeng.client.guidebook.scene.ImplicitAnnotationStrategy; import appeng.client.guidebook.scene.PartAnnotationStrategy; @@ -190,6 +192,7 @@ private Guide createGuide(IEventBus modEventBus) { return Guide.builder(modEventBus, MOD_ID, "ae2guide") .extension(ImplicitAnnotationStrategy.EXTENSION_POINT, new PartAnnotationStrategy()) + .extension(TagCompiler.EXTENSION_POINT, new ConfigValueTagExtension()) .build(); }