From cc5f73bd12b1bc4647d0640d0f461c12f3efdb5b Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 1 Jul 2024 21:29:15 +0200 Subject: [PATCH] begin docs --- build.gradle.kts | 31 +++++ gradle.properties | 4 +- .../85406c9c2e0ffd148c489e1eb4b66d94e3f9748f | 5 + .../c622617f6fabf890a00b9275cd5f643584a8a2c8 | 2 + .../assets/modonomicon/lang/en_us.json | 84 +++++++++++++ .../modonomicon/books/introduction/book.json | 64 ++++++++++ .../categories/the_beginning.json | 16 +++ .../entries/the_beginning/essence.json | 36 ++++++ .../entries/the_beginning/test_entry.json | 39 ++++++ .../environmenttech/datagen/ETDatagen.java | 11 ++ .../datagen/book/DocsBook.java | 53 ++++++++ .../book/categories/FirstCategory.java | 70 +++++++++++ .../categories/entries/EnvCollectorEntry.java | 72 +++++++++++ .../book/categories/entries/MDEntry.java | 116 ++++++++++++++++++ .../book/categories/test/TestEntry.java | 69 +++++++++++ .../entries/essence/essence.md | 4 + 16 files changed, 675 insertions(+), 1 deletion(-) create mode 100644 src/generated/resources/.cache/85406c9c2e0ffd148c489e1eb4b66d94e3f9748f create mode 100644 src/generated/resources/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 create mode 100644 src/generated/resources/assets/modonomicon/lang/en_us.json create mode 100644 src/generated/resources/data/environmenttech/modonomicon/books/introduction/book.json create mode 100644 src/generated/resources/data/environmenttech/modonomicon/books/introduction/categories/the_beginning.json create mode 100644 src/generated/resources/data/environmenttech/modonomicon/books/introduction/entries/the_beginning/essence.json create mode 100644 src/generated/resources/data/environmenttech/modonomicon/books/introduction/entries/the_beginning/test_entry.json create mode 100644 src/main/java/robaertschi/environmenttech/datagen/book/DocsBook.java create mode 100644 src/main/java/robaertschi/environmenttech/datagen/book/categories/FirstCategory.java create mode 100644 src/main/java/robaertschi/environmenttech/datagen/book/categories/entries/EnvCollectorEntry.java create mode 100644 src/main/java/robaertschi/environmenttech/datagen/book/categories/entries/MDEntry.java create mode 100644 src/main/java/robaertschi/environmenttech/datagen/book/categories/test/TestEntry.java create mode 100644 src/main/resources/assets/environmenttech/entries/essence/essence.md diff --git a/build.gradle.kts b/build.gradle.kts index 8314ff5..9515a76 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -31,6 +31,8 @@ val reiVersion: String by project val jeiVersion: String by project val jeiMcVersion: String by project val emiVersion: String by project +val modonomiconVersion: String by project +val commonmarkVersion: String by project enum class RecipeViewer { None, @@ -67,6 +69,13 @@ repositories { url = URI.create("https://maven.terraformersmc.com/") name = "TerraformersMC" } + maven { + url = URI.create("https://dl.cloudsmith.io/public/klikli-dev/mods/maven/") + name = "Klikli's Maven" + content { + includeGroup("com.klikli_dev") + } + } } base { @@ -185,6 +194,18 @@ runs { } +val libraries: Configuration = configurations.create("libraries") + + +configurations { + implementation { + extendsFrom(libraries) + } + runtimeClasspath { + extendsFrom(localRuntime.get()) + } +} + dependencies { implementation ("net.neoforged:neoforge:${neoVersion}") @@ -213,6 +234,16 @@ dependencies { compileOnly("mezz.jei:jei-${jeiMcVersion}-neoforge-api:${jeiVersion}") compileOnly("dev.emi:emi-neoforge:${emiVersion}:api") + implementation("com.klikli_dev:modonomicon-$jeiMcVersion-neoforge:${modonomiconVersion}") + + libraries ("org.commonmark:commonmark:${commonmarkVersion}") + libraries ("org.commonmark:commonmark-ext-gfm-strikethrough:${commonmarkVersion}") + libraries ("org.commonmark:commonmark-ext-ins:${commonmarkVersion}") + //and include it in the jar + jarJar(group= "org.commonmark", name= "commonmark", version = "[${commonmarkVersion},)") + jarJar(group= "org.commonmark", name= "commonmark-ext-gfm-strikethrough", version= "[${commonmarkVersion},)") + jarJar(group= "org.commonmark", name= "commonmark-ext-ins", version= "[${commonmarkVersion},)") + // Testing junitImplementation(platform("org.junit:junit-bom:${junitVersion}")) junitImplementation("org.junit.jupiter:junit-jupiter-params") diff --git a/gradle.properties b/gradle.properties index b247b2e..a67d853 100644 --- a/gradle.properties +++ b/gradle.properties @@ -48,4 +48,6 @@ topVersion=1.21_neo-12.0.0-1 reiVersion=16.0.729 jeiVersion=19.0.0.11 jeiMcVersion=1.21 -emiVersion=1.1.8+1.21 \ No newline at end of file +emiVersion=1.1.8+1.21 +modonomiconVersion=1.92.2 +commonmarkVersion=0.22.0 \ No newline at end of file diff --git a/src/generated/resources/.cache/85406c9c2e0ffd148c489e1eb4b66d94e3f9748f b/src/generated/resources/.cache/85406c9c2e0ffd148c489e1eb4b66d94e3f9748f new file mode 100644 index 0000000..137239d --- /dev/null +++ b/src/generated/resources/.cache/85406c9c2e0ffd148c489e1eb4b66d94e3f9748f @@ -0,0 +1,5 @@ +// 1.21 2024-07-01T21:21:09.215502272 Books: environmenttech +955540622993b181de272a1d153e78d1c1670e0c data/environmenttech/modonomicon/books/introduction/book.json +6bd79338e0bff5cc553bf70174717d651f85b566 data/environmenttech/modonomicon/books/introduction/categories/the_beginning.json +882e14875c35e677d815c2d632eebcc830d2c6dd data/environmenttech/modonomicon/books/introduction/entries/the_beginning/essence.json +1714f7af5aed12ab7a97ac71b9574d2212b19adb data/environmenttech/modonomicon/books/introduction/entries/the_beginning/test_entry.json diff --git a/src/generated/resources/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 b/src/generated/resources/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 new file mode 100644 index 0000000..19f0b1d --- /dev/null +++ b/src/generated/resources/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 @@ -0,0 +1,2 @@ +// 1.21 2024-07-01T21:23:23.331603552 Languages: en_us +f52d126842ae1f5211f8c1b350fbca4b6121f7f1 assets/modonomicon/lang/en_us.json diff --git a/src/generated/resources/assets/modonomicon/lang/en_us.json b/src/generated/resources/assets/modonomicon/lang/en_us.json new file mode 100644 index 0000000..0a6c9c6 --- /dev/null +++ b/src/generated/resources/assets/modonomicon/lang/en_us.json @@ -0,0 +1,84 @@ +{ + "book.environmenttech.introduction.name": "An introduction to EnvironmentTech", + "book.environmenttech.introduction.the_beginning.essence.description": "The most important resource in the mod", + "book.environmenttech.introduction.the_beginning.essence.essence.md.text": "\n__hi__\n ~~hi~~\n*hi*", + "book.environmenttech.introduction.the_beginning.essence.essence.md.title": "Environmental Essence", + "book.environmenttech.introduction.the_beginning.essence.name": "Environmental Essence", + "book.environmenttech.introduction.the_beginning.name": "The Beginning", + "book.environmenttech.introduction.the_beginning.test_entry.description": "Test Description", + "book.environmenttech.introduction.the_beginning.test_entry.name": "Test Entry", + "book.environmenttech.introduction.the_beginning.test_entry.page1.text": "Hello and welcome to EnvironmentTech! \nThis is a Tech Mod all about your Environment. \n\nThis is a small Guide on how get started with the mod. \nBut before you begin with anything, you should try to get some basic materials like Wood, Iron, Coal and a Furnace. \nThen you can continue with the next Page. \n", + "book.environmenttech.introduction.the_beginning.test_entry.page1.title": "Your first steps!", + "book.environmenttech.introduction.the_beginning.test_entry.page2.text": "This is the ENV Collector, he is required to get started with the mod.\n", + "book.environmenttech.introduction.tooltip": "A book for beginners to get started with EnvironmentTech.", + "item.modonomicon.modonomicon": "Modonomicon", + "itemGroup.modonomicon": "Modonomicon", + "modonomicon.command.error.load_progress": "Invalid unlock code!", + "modonomicon.command.error.load_progress_client": "Failed to decode unlock code. Make sure to have a valid unlock code in your clipboard! Current Clipboard content: \"%s\"", + "modonomicon.command.error.unknown_book": "Unknown book: %s", + "modonomicon.command.failure": "Modonomicon tried to run a command for you (e.g. because you read an entry for the first time, or clicked a command button or command link). However, it seems you already reached the maximum use limit for this command.", + "modonomicon.command.reload_requested": "Requested reload of resource- and datapacks.", + "modonomicon.command.success.load_progress": "Successfully loaded progress for book: %s.", + "modonomicon.command.success.reload_requested": "Successfully reloaded resource- and datapacks.", + "modonomicon.command.success.reset_book": "Successfully reset book: %s", + "modonomicon.command.success.save_progress": "Saved progress for book: %s. The unlock code has been copied to your clipboard.", + "modonomicon.gui.add_bookmark": "Add Bookmark", + "modonomicon.gui.book.index_list_title": "Categories", + "modonomicon.gui.bookmarks.entry_list_title": "Bookmark Entries", + "modonomicon.gui.bookmarks.info": "To navigate to a bookmark, click on it in this list.\n\\\n\\\nTo add a bookmark, open an entry and click the \"Add Bookmark\" button on the bottom right.\n\\\n\\\nTo remove a bookmark, navigate to it and click the \"Remove Bookmark\" button on the bottom right.\n", + "modonomicon.gui.bookmarks.no_results": "No entries yet.", + "modonomicon.gui.bookmarks.screen.title": "Bookmarks", + "modonomicon.gui.button.back": "Back", + "modonomicon.gui.button.back.tooltip": "Go back to the last page you visited", + "modonomicon.gui.button.exit": "Exit", + "modonomicon.gui.button.next_page": "Next Page", + "modonomicon.gui.button.previous_page": "Previous Page", + "modonomicon.gui.button.read_all": "Mark all entries as read", + "modonomicon.gui.button.read_all.tooltip.none": "There are currently §lno unread§r unlocked entries.", + "modonomicon.gui.button.read_all.tooltip.read_all": "Mark §call§r (even locked) entries as read.", + "modonomicon.gui.button.read_all.tooltip.read_unlocked": "Mark all §aunlocked§r entries as read.", + "modonomicon.gui.button.read_all.tooltip.shift": "Shift-Click to mark §call§r (even locked) entries as read.", + "modonomicon.gui.button.read_all.tooltip.shift_warning": "§l§cWarning:§r This may make it harder to read progress-oriented books.", + "modonomicon.gui.button.visualize": "Show Multiblock Preview", + "modonomicon.gui.button.visualize.tooltip": "Show Multiblock Preview", + "modonomicon.gui.category.index_list_title": "Entries", + "modonomicon.gui.hover.book_entry_link_locked_info": "You need to unlock this entry before you can open the link!", + "modonomicon.gui.hover.book_entry_link_locked_info.hint": "Hint: The entry is in the Category: %s", + "modonomicon.gui.hover.book_link": "Go to: %s", + "modonomicon.gui.hover.book_link_locked": "%s.\n%s", + "modonomicon.gui.hover.book_page_link_locked_info": "You need to unlock this page before you can open the link!", + "modonomicon.gui.hover.book_page_link_locked_info.hint": "Hint: The page is in the Entry %s, under the Category %s", + "modonomicon.gui.hover.command_link": "Click to run linked command. Hold down shift to show command.", + "modonomicon.gui.hover.command_link.unavailable": "You already used this command too many times, you cannot use it again.", + "modonomicon.gui.hover.http_link": "Visit: %s", + "modonomicon.gui.hover.item_link_info": "Click to show recipe in JEI, Shift-Click to show usage.", + "modonomicon.gui.hover.item_link_info.no_jei": "Install JEI to show recipe/usage on click.", + "modonomicon.gui.hover.item_link_info_line2": "Will not do anything, if no recipe/usage is found.", + "modonomicon.gui.no_errors_found": "No errors found. You should not see this page!", + "modonomicon.gui.open_bookmarks": "Open Bookmarks", + "modonomicon.gui.open_search": "Open Search", + "modonomicon.gui.page.entity.loading_error": "Failed to load entity", + "modonomicon.gui.recipe_page.recipe_missing": "Recipe %s was not found! This may be an issue with the mod, or the modpack may have disabled it.", + "modonomicon.gui.remove_bookmark": "Remove Bookmark", + "modonomicon.gui.search.entry.locked": "(Locked)", + "modonomicon.gui.search.entry_list_title": "Entries", + "modonomicon.gui.search.info": "To search for entries, simply start typing what you are looking for.\n", + "modonomicon.gui.search.no_results": "No Results", + "modonomicon.gui.search.sad": ":(", + "modonomicon.gui.search.screen.title": "Search in Book", + "modonomicon.multiblock.complete": "Complete!", + "modonomicon.multiblock.not_anchored": "Right-Click a Block to anchor the Structure.", + "modonomicon.multiblock.remove_blocks": " (Clear blocks marked in red)", + "modonomicon.subtitle.turn_page": "Turn Page", + "tooltip.modonomicon.condition.advancement": "Requires Advancement: %s", + "tooltip.modonomicon.condition.advancement.hidden": "Hidden Advancement", + "tooltip.modonomicon.condition.advancement.loading": "Loading ...", + "tooltip.modonomicon.condition.entry_read": "Requires read Entry: %s\nHint: Mark all entries as read with the \"eye\" button at the top right.", + "tooltip.modonomicon.condition.entry_unlocked": "Requires unlocked Entry: %s", + "tooltip.modonomicon.condition.has_entries": "Requires that category %s has loaded entries", + "tooltip.modonomicon.condition.mod_loaded": "Requires loaded mod: %s", + "tooltip.modonomicon.fluid.amount": "%s mb", + "tooltip.modonomicon.fluid.amount_and_capacity": "%s / %s mb", + "tooltip.modonomicon.no_book_found_for_stack": "No book found for this item in the modonomicon book database! Nbt: %s", + "tooltip.modonomicon.recipe.crafting_shapeless": "Shapeless" +} \ No newline at end of file diff --git a/src/generated/resources/data/environmenttech/modonomicon/books/introduction/book.json b/src/generated/resources/data/environmenttech/modonomicon/books/introduction/book.json new file mode 100644 index 0000000..0e41fa3 --- /dev/null +++ b/src/generated/resources/data/environmenttech/modonomicon/books/introduction/book.json @@ -0,0 +1,64 @@ +{ + "auto_add_read_conditions": false, + "book_content_texture": "modonomicon:textures/gui/book_content.png", + "book_overview_texture": "modonomicon:textures/gui/book_overview.png", + "book_text_offset_height": 0, + "book_text_offset_width": -5, + "book_text_offset_x": 5, + "book_text_offset_y": 0, + "bottom_frame_overlay": { + "frame_height": 8, + "frame_width": 72, + "frame_x_offset": 0, + "frame_y_offset": -4, + "texture": "modonomicon:textures/gui/book_frame_bottom_overlay.png", + "texture_height": 256, + "texture_width": 256 + }, + "category_button_icon_scale": 1.0, + "category_button_x_offset": 0, + "category_button_y_offset": 0, + "crafting_texture": "modonomicon:textures/gui/crafting_textures.png", + "creative_tab": "modonomicon:modonomicon", + "default_title_color": 0, + "description": "", + "display_mode": "node", + "font": "modonomicon:default", + "frame_texture": "modonomicon:textures/gui/book_frame.png", + "generate_book_item": true, + "left_frame_overlay": { + "frame_height": 70, + "frame_width": 7, + "frame_x_offset": 3, + "frame_y_offset": 0, + "texture": "modonomicon:textures/gui/book_frame_left_overlay.png", + "texture_height": 256, + "texture_width": 256 + }, + "model": "modonomicon:modonomicon_green", + "name": "book.environmenttech.introduction.name", + "page_display_mode": "double_page", + "read_all_button_y_offset": 0, + "right_frame_overlay": { + "frame_height": 70, + "frame_width": 8, + "frame_x_offset": -4, + "frame_y_offset": 0, + "texture": "modonomicon:textures/gui/book_frame_right_overlay.png", + "texture_height": 256, + "texture_width": 256 + }, + "search_button_x_offset": 0, + "search_button_y_offset": 0, + "single_page_texture": "modonomicon:textures/gui/single_page_entry.png", + "tooltip": "book.environmenttech.introduction.tooltip", + "top_frame_overlay": { + "frame_height": 7, + "frame_width": 72, + "frame_x_offset": 0, + "frame_y_offset": 4, + "texture": "modonomicon:textures/gui/book_frame_top_overlay.png", + "texture_height": 256, + "texture_width": 256 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/environmenttech/modonomicon/books/introduction/categories/the_beginning.json b/src/generated/resources/data/environmenttech/modonomicon/books/introduction/categories/the_beginning.json new file mode 100644 index 0000000..369d582 --- /dev/null +++ b/src/generated/resources/data/environmenttech/modonomicon/books/introduction/categories/the_beginning.json @@ -0,0 +1,16 @@ +{ + "background": "modonomicon:textures/gui/dark_slate_seamless.png", + "background_height": 512, + "background_parallax_layers": [], + "background_texture_zoom_multiplier": 1.0, + "background_width": 512, + "description": "", + "display_mode": "node", + "entry_textures": "modonomicon:textures/gui/entry_textures.png", + "icon": { + "item": "environmenttech:env_collector" + }, + "name": "book.environmenttech.introduction.the_beginning.name", + "show_category_button": true, + "sort_number": 0 +} \ No newline at end of file diff --git a/src/generated/resources/data/environmenttech/modonomicon/books/introduction/entries/the_beginning/essence.json b/src/generated/resources/data/environmenttech/modonomicon/books/introduction/entries/the_beginning/essence.json new file mode 100644 index 0000000..94f8afb --- /dev/null +++ b/src/generated/resources/data/environmenttech/modonomicon/books/introduction/entries/the_beginning/essence.json @@ -0,0 +1,36 @@ +{ + "background_u_index": 0, + "background_v_index": 0, + "category": "environmenttech:the_beginning", + "description": "book.environmenttech.introduction.the_beginning.essence.description", + "hide_while_locked": false, + "icon": { + "item": "environmenttech:environmental_essence" + }, + "name": "book.environmenttech.introduction.the_beginning.essence.name", + "pages": [ + { + "type": "modonomicon:text", + "anchor": "", + "condition": { + "type": "modonomicon:none" + }, + "show_title_separator": true, + "text": "book.environmenttech.introduction.the_beginning.essence.essence.md.text", + "title": "book.environmenttech.introduction.the_beginning.essence.essence.md.title", + "use_markdown_in_title": false + } + ], + "parents": [ + { + "draw_arrow": true, + "entry": "environmenttech:the_beginning/test_entry", + "line_enabled": true, + "line_reversed": false + } + ], + "show_when_any_parent_unlocked": false, + "sort_number": 1, + "x": 2, + "y": 0 +} \ No newline at end of file diff --git a/src/generated/resources/data/environmenttech/modonomicon/books/introduction/entries/the_beginning/test_entry.json b/src/generated/resources/data/environmenttech/modonomicon/books/introduction/entries/the_beginning/test_entry.json new file mode 100644 index 0000000..1117682 --- /dev/null +++ b/src/generated/resources/data/environmenttech/modonomicon/books/introduction/entries/the_beginning/test_entry.json @@ -0,0 +1,39 @@ +{ + "background_u_index": 0, + "background_v_index": 0, + "category": "environmenttech:the_beginning", + "description": "book.environmenttech.introduction.the_beginning.test_entry.description", + "hide_while_locked": false, + "icon": { + "item": "environmenttech:env_collector" + }, + "name": "book.environmenttech.introduction.the_beginning.test_entry.name", + "pages": [ + { + "type": "modonomicon:text", + "anchor": "", + "condition": { + "type": "modonomicon:none" + }, + "show_title_separator": true, + "text": "book.environmenttech.introduction.the_beginning.test_entry.page1.text", + "title": "book.environmenttech.introduction.the_beginning.test_entry.page1.title", + "use_markdown_in_title": false + }, + { + "type": "modonomicon:crafting_recipe", + "anchor": "", + "condition": { + "type": "modonomicon:none" + }, + "recipe_id_1": "environmenttech:env_collector_block_item", + "text": "book.environmenttech.introduction.the_beginning.test_entry.page2.text", + "title1": "", + "title2": "" + } + ], + "show_when_any_parent_unlocked": false, + "sort_number": 0, + "x": 0, + "y": 0 +} \ No newline at end of file diff --git a/src/main/java/robaertschi/environmenttech/datagen/ETDatagen.java b/src/main/java/robaertschi/environmenttech/datagen/ETDatagen.java index fad721a..254d6f6 100644 --- a/src/main/java/robaertschi/environmenttech/datagen/ETDatagen.java +++ b/src/main/java/robaertschi/environmenttech/datagen/ETDatagen.java @@ -8,6 +8,9 @@ package robaertschi.environmenttech.datagen; import java.util.concurrent.CompletableFuture; +import com.klikli_dev.modonomicon.api.datagen.LanguageProviderCache; +import com.klikli_dev.modonomicon.api.datagen.NeoBookProvider; +import com.klikli_dev.modonomicon.datagen.EnUsProvider; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.neoforge.common.data.ExistingFileHelper; @@ -17,6 +20,8 @@ import net.minecraft.core.HolderLookup; import net.minecraft.data.DataGenerator; import net.minecraft.data.PackOutput; +import robaertschi.environmenttech.datagen.book.DocsBook; + import static robaertschi.environmenttech.ET.MODID; @EventBusSubscriber(bus = EventBusSubscriber.Bus.MOD, modid = MODID) @@ -42,5 +47,11 @@ public class ETDatagen { event.includeClient(), new ETItemModelProvider(output, existingFileHelper) ); + + var enUsCache = new LanguageProviderCache("en_us"); + generator.addProvider(event.includeServer(), NeoBookProvider.of(event, + new DocsBook(MODID, enUsCache))); + + generator.addProvider(event.includeClient(), new EnUsProvider(generator.getPackOutput(), enUsCache)); } } diff --git a/src/main/java/robaertschi/environmenttech/datagen/book/DocsBook.java b/src/main/java/robaertschi/environmenttech/datagen/book/DocsBook.java new file mode 100644 index 0000000..a670afe --- /dev/null +++ b/src/main/java/robaertschi/environmenttech/datagen/book/DocsBook.java @@ -0,0 +1,53 @@ +/* + * EnvironmentTech Copyright (C) 2024 Robin Bärtschi + * This program comes with ABSOLUTELY NO WARRANTY; for details open the file LICENSE at the root of the source code. + * This is free software, and you are welcome to redistribute it + * under certain conditions; read the LICENSE file at the root of the source code for details. + */ +package robaertschi.environmenttech.datagen.book; + +import java.util.function.BiConsumer; + +import com.klikli_dev.modonomicon.api.datagen.SingleBookSubProvider; +import com.klikli_dev.modonomicon.api.datagen.book.BookModel; + +import net.minecraft.resources.ResourceLocation; + +import robaertschi.environmenttech.datagen.book.categories.FirstCategory; + +public class DocsBook extends SingleBookSubProvider { + public static final String ID = "introduction"; + + public DocsBook(String modId, BiConsumer defaultLang) { + super(ID, modId, defaultLang); + } + + @Override + protected BookModel additionalSetup(BookModel book) { + + return book.withModel(ResourceLocation.parse("modonomicon:modonomicon_green")) + .withBookTextOffsetX(5) + .withBookTextOffsetY(0) + .withBookTextOffsetWidth(-5); + } + + @Override + protected void registerDefaultMacros() { + + } + + @Override + protected void generateCategories() { + var testCategory = this.add(new FirstCategory(this).generate()); + } + + @Override + protected String bookName() { + return "An introduction to EnvironmentTech"; + } + + @Override + protected String bookTooltip() { + return "A book for beginners to get started with EnvironmentTech."; + } +} diff --git a/src/main/java/robaertschi/environmenttech/datagen/book/categories/FirstCategory.java b/src/main/java/robaertschi/environmenttech/datagen/book/categories/FirstCategory.java new file mode 100644 index 0000000..af7815e --- /dev/null +++ b/src/main/java/robaertschi/environmenttech/datagen/book/categories/FirstCategory.java @@ -0,0 +1,70 @@ +/* + * EnvironmentTech Copyright (C) 2024 Robin Bärtschi + * This program comes with ABSOLUTELY NO WARRANTY; for details open the file LICENSE at the root of the source code. + * This is free software, and you are welcome to redistribute it + * under certain conditions; read the LICENSE file at the root of the source code for details. + */ +package robaertschi.environmenttech.datagen.book.categories; + +import com.klikli_dev.modonomicon.api.datagen.book.page.BookRecipePageModel; +import lombok.SneakyThrows; + +import java.util.List; + +import com.klikli_dev.modonomicon.api.datagen.CategoryProvider; +import com.klikli_dev.modonomicon.api.datagen.ModonomiconProviderBase; +import com.klikli_dev.modonomicon.api.datagen.book.BookIconModel; +import org.apache.commons.lang3.tuple.Pair; + +import robaertschi.environmenttech.datagen.book.categories.entries.EnvCollectorEntry; +import robaertschi.environmenttech.datagen.book.categories.entries.MDEntry; +import robaertschi.environmenttech.datagen.book.categories.test.TestEntry; +import robaertschi.environmenttech.level.item.ETItems; + +public class FirstCategory extends CategoryProvider { + public static final String ID = "the_beginning"; + + public FirstCategory(ModonomiconProviderBase parent) { + super(parent); + } + + @Override + protected String[] generateEntryMap() { + return new String[]{ + "_____________________", + "_____________________", + "__________x_y________", + "_____________________", + "_____________________" + }; + } + + @SneakyThrows + @Override + protected void generateEntries() { +// var test = this.add(); + var collector = this.add(new EnvCollectorEntry(this).generate('x')); + var mdEntry = this.add(new MDEntry(this, + BookIconModel.create(ETItems.ENVIRONMENTAL_ESSENCE_ITEM), + "essence", + "Environmental Essence", + "The most important resource in the mod", + List.of(Pair.of("essence.md", "Environmental Essence"))).generate('y')).withParent(collector); + } + + + @Override + protected String categoryName() { + return "The Beginning"; + } + + @Override + protected BookIconModel categoryIcon() { + return BookIconModel.create(ETItems.ENV_COLLECTOR_BLOCK_ITEM.get()); + } + + @Override + public String categoryId() { + return ID; + } +} diff --git a/src/main/java/robaertschi/environmenttech/datagen/book/categories/entries/EnvCollectorEntry.java b/src/main/java/robaertschi/environmenttech/datagen/book/categories/entries/EnvCollectorEntry.java new file mode 100644 index 0000000..7c3409b --- /dev/null +++ b/src/main/java/robaertschi/environmenttech/datagen/book/categories/entries/EnvCollectorEntry.java @@ -0,0 +1,72 @@ +/* + * EnvironmentTech Copyright (C) 2024 Robin Bärtschi + * This program comes with ABSOLUTELY NO WARRANTY; for details open the file LICENSE at the root of the source code. + * This is free software, and you are welcome to redistribute it + * under certain conditions; read the LICENSE file at the root of the source code for details. + */ +package robaertschi.environmenttech.datagen.book.categories.entries; + +import com.klikli_dev.modonomicon.api.datagen.CategoryProviderBase; +import com.klikli_dev.modonomicon.api.datagen.EntryBackground; +import com.klikli_dev.modonomicon.api.datagen.EntryProvider; +import com.klikli_dev.modonomicon.api.datagen.book.BookIconModel; +import com.klikli_dev.modonomicon.api.datagen.book.page.BookCraftingRecipePageModel; +import com.klikli_dev.modonomicon.api.datagen.book.page.BookTextPageModel; +import com.mojang.datafixers.util.Pair; +import robaertschi.environmenttech.ET; +import robaertschi.environmenttech.level.item.ETItems; + +public class EnvCollectorEntry extends EntryProvider { + public static final String ID = "test_entry"; + + public EnvCollectorEntry(CategoryProviderBase parent) { + super(parent); + } + + @Override + protected void generatePages() { + this.page("page1", () -> BookTextPageModel.create() + .withTitle(this.context().pageTitle()) + .withText(this.context().pageText())); + this.pageTitle("Your first steps!"); + this.pageText(""" + Hello and welcome to EnvironmentTech! \s + This is a Tech Mod all about your Environment. \s + + This is a small Guide on how get started with the mod. \s + But before you begin with anything, you should try to get some basic materials like Wood, Iron, Coal and a Furnace. \s + Then you can continue with the next Page. \s + """); + + + this.page("page2", () -> BookCraftingRecipePageModel.create().withRecipeId1(ET.id("env_collector_block_item")).withText(this.context().pageText())); + this.pageText(""" + This is the ENV Collector, he is required to get started with the mod. + """); + } + + @Override + protected String entryName() { + return "Test Entry"; + } + + @Override + protected String entryDescription() { + return "Test Description"; + } + + @Override + protected Pair entryBackground() { + return EntryBackground.DEFAULT; + } + + @Override + protected BookIconModel entryIcon() { + return BookIconModel.create(ETItems.ENV_COLLECTOR_BLOCK_ITEM); + } + + @Override + protected String entryId() { + return ID; + } +} diff --git a/src/main/java/robaertschi/environmenttech/datagen/book/categories/entries/MDEntry.java b/src/main/java/robaertschi/environmenttech/datagen/book/categories/entries/MDEntry.java new file mode 100644 index 0000000..617a231 --- /dev/null +++ b/src/main/java/robaertschi/environmenttech/datagen/book/categories/entries/MDEntry.java @@ -0,0 +1,116 @@ +/* + * EnvironmentTech Copyright (C) 2024 Robin Bärtschi + * This program comes with ABSOLUTELY NO WARRANTY; for details open the file LICENSE at the root of the source code. + * This is free software, and you are welcome to redistribute it + * under certain conditions; read the LICENSE file at the root of the source code for details. + */ +package robaertschi.environmenttech.datagen.book.categories.entries; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import com.klikli_dev.modonomicon.api.datagen.CategoryProviderBase; +import com.klikli_dev.modonomicon.api.datagen.EntryBackground; +import com.klikli_dev.modonomicon.api.datagen.EntryProvider; +import com.klikli_dev.modonomicon.api.datagen.book.BookIconModel; +import com.klikli_dev.modonomicon.api.datagen.book.page.BookPageModel; +import com.klikli_dev.modonomicon.api.datagen.book.page.BookTextPageModel; +import org.apache.commons.lang3.tuple.Pair; + +import static robaertschi.environmenttech.ET.MODID; + +public class MDEntry extends EntryProvider { + public final String id; + public final BookIconModel iconModel; + public final String name; + public final String description; + public final List pages; + public final List> otherPages; + + + public MDEntry(CategoryProviderBase parent, + BookIconModel iconModel, + String id, + String name, + String description, + List> pages + ) throws IOException { + this(parent, iconModel, id, name, description, pages, List.of()); + } + + /** + * The markdown files should be in assets/environmenttech/entries/$id/[name] + * @param parent Parent + * @param id ID for the entry + * @param pages A Pair, first is the markdown file name, second is the page title. + * @throws IOException When transferring from the file to a String fails. + */ + public MDEntry(CategoryProviderBase parent, + BookIconModel iconModel, + String id, + String name, + String description, + List> pages, + List> otherPages + ) throws IOException { + super(parent); + this.id = id; + this.iconModel = iconModel; + this.name = name; + this.description = description; + this.pages = new ArrayList<>(); + this.otherPages = otherPages; + + for (var page : pages) { +// ResourceLocation.fromNamespaceAndPath(MODID, page.getLeft()).withPrefix("entries/"+id+"/") + try(var stream = getClass().getProtectionDomain().getClassLoader().getResourceAsStream("assets/"+MODID+"/entries/" + id + "/" + page.getLeft())) { + assert stream != null; + var outputStream = new ByteArrayOutputStream(); + stream.transferTo(outputStream); + this.pages.add(new Page(page.getLeft(), page.getRight(), outputStream.toString())); + } + } + + } + + @Override + protected void generatePages() { + for (var page : pages) { + this.page(page.filename(), () -> BookTextPageModel.create() + .withText(this.context.pageText()) + .withTitle(this.context.pageTitle())); + + this.pageText(page.md()); + this.pageTitle(page.title()); + } + } + + @Override + protected String entryName() { + return name; + } + + @Override + protected String entryDescription() { + return description; + } + + @Override + protected com.mojang.datafixers.util.Pair entryBackground() { + return EntryBackground.DEFAULT; + } + + @Override + protected BookIconModel entryIcon() { + return iconModel; + } + + @Override + protected String entryId() { + return id; + } + + public record Page(String filename, String title, String md) {} +} diff --git a/src/main/java/robaertschi/environmenttech/datagen/book/categories/test/TestEntry.java b/src/main/java/robaertschi/environmenttech/datagen/book/categories/test/TestEntry.java new file mode 100644 index 0000000..22847d9 --- /dev/null +++ b/src/main/java/robaertschi/environmenttech/datagen/book/categories/test/TestEntry.java @@ -0,0 +1,69 @@ +/* + * EnvironmentTech Copyright (C) 2024 Robin Bärtschi + * This program comes with ABSOLUTELY NO WARRANTY; for details open the file LICENSE at the root of the source code. + * This is free software, and you are welcome to redistribute it + * under certain conditions; read the LICENSE file at the root of the source code for details. + */ +package robaertschi.environmenttech.datagen.book.categories.test; + +import com.klikli_dev.modonomicon.api.datagen.CategoryProviderBase; +import com.klikli_dev.modonomicon.api.datagen.EntryBackground; +import com.klikli_dev.modonomicon.api.datagen.EntryProvider; +import com.klikli_dev.modonomicon.api.datagen.book.BookIconModel; +import com.klikli_dev.modonomicon.api.datagen.book.page.BookTextPageModel; + +import com.mojang.datafixers.util.Pair; + +import robaertschi.environmenttech.level.item.ETItems; + +public class TestEntry extends EntryProvider { + public static final String ID = "test_entry"; + + public TestEntry(CategoryProviderBase parent) { + super(parent); + } + + @Override + protected void generatePages() { + this.page("page1", () -> BookTextPageModel.create() + .withTitle(this.context().pageTitle()) + .withText(this.context().pageText())); + this.pageTitle("Test Entry"); + this.pageText(""" + **Bold** \s + *Italics* \s + ++Underlined++ + """); + + + this.page("page2", () -> BookTextPageModel.create().withText(this.context().pageText())); + this.pageText(""" + ~~Stricken~~\s + """); + } + + @Override + protected String entryName() { + return "Test Entry"; + } + + @Override + protected String entryDescription() { + return "Test Description"; + } + + @Override + protected Pair entryBackground() { + return EntryBackground.DEFAULT; + } + + @Override + protected BookIconModel entryIcon() { + return BookIconModel.create(ETItems.ENV_COLLECTOR_BLOCK_ITEM); + } + + @Override + protected String entryId() { + return ID; + } +} diff --git a/src/main/resources/assets/environmenttech/entries/essence/essence.md b/src/main/resources/assets/environmenttech/entries/essence/essence.md new file mode 100644 index 0000000..3f891c9 --- /dev/null +++ b/src/main/resources/assets/environmenttech/entries/essence/essence.md @@ -0,0 +1,4 @@ + +__hi__ + ~~hi~~ +*hi* \ No newline at end of file