Introduction of extended_description (#12)

Co-authored-by: /home/neo <158327205+neoapps-dev@users.noreply.github.com>
This commit is contained in:
Criador_Mods 2026-04-17 14:24:29 +01:00 committed by GitHub
parent 9830774368
commit bf1cc774d3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
18 changed files with 143 additions and 3 deletions

121
MarkdownGuide.md Normal file
View file

@ -0,0 +1,121 @@
# React Markdown — Features Reference
This document describes what markdown syntax is supported when writing the `extended_description` field. The field is rendered using [`react-markdown`](https://remarkjs.github.io/react-markdown/), which follows the [CommonMark](https://commonmark.org/) spec by default.
---
## Available Features
| Feature | Syntax | Example |
|---|---|---|
| **Headings** | `# H1` through `###### H6` | `## Section Title` |
| **Bold** | `**text**` or `__text__` | `**important**` |
| **Italic** | `*text*` or `_text_` | `*emphasis*` |
| **Bold + Italic** | `***text***` | `***critical***` |
| **Inline code** | `` `code` `` | `` `null` `` |
| **Code blocks** | ` ```lang ``` ` | ` ```json ``` ` |
| **Blockquotes** | `> text` | `> Note: ...` |
| **Unordered lists** | `- item` or `* item` | `- Feature one` |
| **Ordered lists** | `1. item` | `1. Step one` |
| **Nested lists** | Indent with 24 spaces | ` - sub-item` |
| **Horizontal rule** | `---` or `***` | `---` |
| **Links** | `[label](url)` | `[docs](https://example.com)` |
| **Paragraphs** | Blank line between text | — |
| **Line breaks** | Two trailing spaces or `\n` | — |
| **Escaped characters** | `\*`, `\_`, `\`` etc. | `\*not bold\*` |
| **Strikethrough** | `~~text~~` *(via remark-gfm)* | `~~deprecated~~` |
| **Tables** | GFM pipe syntax *(via remark-gfm)* | see below |
| **Task lists** | `- [x] done` *(via remark-gfm)* | `- [ ] pending` |
### Table syntax example
```markdown
| Column A | Column B |
|----------|----------|
| value | value |
```
---
## Not Available (unsupported or unsafe)
| Feature | Reason |
|---|---|
| Raw `<html>` tags | Disabled by default — `react-markdown` strips HTML for security |
| `<script>` / `<style>` tags | Stripped entirely, never rendered |
| `javascript:` links | Sanitized — only `http`, `https`, `mailto` are allowed |
| Footnotes | Not part of CommonMark; requires `remark-footnotes` plugin (not enabled) |
| Definition lists | Not supported without additional plugins |
| Math / LaTeX (`$...$`) | Requires `remark-math` plugin (not enabled) |
| Custom directives (`::: note`) | Requires `remark-directive` plugin (not enabled) |
| Front matter (`---` YAML header) | Not parsed — treated as a horizontal rule followed by text |
> **Note:** HTML is intentionally disabled. Even valid HTML like `<br>`, `<u>`, or `<span>` will not render — use markdown equivalents instead.
---
## Tips for Writing `extended_description`
- Use `##` and `###` for section headings — avoid `#` (H1) as the field is already within a larger page context.
- Use fenced code blocks with a language hint for readable snippets: ` ```json `, ` ```bash `, etc.
- Prefer `**bold**` for field names and `` `inline code` `` for values, types, or identifiers.
- Keep tables simple — GFM tables don't support merged cells or complex formatting inside cells.
- Leaving `extended_description` as `""` is allowed but not recommended; even a short paragraph and a img improves discoverability.
---
## Advertisements & Custom Media Types
The markdown image title attribute (the quoted string after the URL) is normally ignored visually, but `react-markdown` exposes it through its custom renderer API. This makes it a clean, unobtrusive way to tag media with a type — no plugins needed.
### How it works
A standard image looks like this:
```markdown
![alt text](https://example.com/image.png)
```
By adding a title, you signal intent:
```markdown
![My Cool Mod](https://example.com/banner.png "advertisement")
```
On the renderer side, a custom `img` component checks the `title` prop and switches UI accordingly.
### Supported media type tags
| Title value | Renders as |
|---|---|
| *(none)* | Standard image |
| `"advertisement"` | Advertisement banner UI |
| `"video"` | Video embed (using `src` as the video URL) |
> **Note for writers:** The title value is case-sensitive and must match exactly. `"Advertisement"` or `"ad"` will not be recognized — use `"advertisement"` as written.
---
## Final Step
Once your markdown is ready, convert it to a valid JSON string using [JSON Stringify](https://onlinetexttools.com/json-stringify-text), then paste the result as the value of your `extended_description` field.
---
## Quick Example
```markdown
## Chest Sorter 3000
A **lightweight utility mod** that automatically sorts and organizes your chests by item type. No more digging through mountains of cobblestone to find your diamonds.
### What it does
- Automatically groups items by category — blocks, tools, food, materials
- Sneak + right-click any chest for an **instant sort**
- Works with *double chests*, barrels, and shulker boxes
- Fully compatible with other storage mods
```
> See the [full documentation](https://commonmark.org/) for advanced options.
```

View file

@ -34,6 +34,7 @@ Your `meta.json` must follow this structure:
| `name` | String | Display name of the item. |
| `author` | String | Your Github username. |
| `description`| String | A short summary of what the item does. |
| `extended_description`| String | A complete description in **`markdown`** of your project, it can include all available markdown features. This field is required but may be left as `""` (empty), although its *not* recommended, for more information on how to structure your markdown look into [this](https://remarkjs.github.io/react-markdown/), for complete documentation look at this [MarkdownGuide](./MarkdownGuide.md) |
| `category` | String or String[] | Must be `Skin`, `Texture`, `World`, `Mod`, `DLC`, or multiple ones in a list. |
| `thumbnail` | String | File name for your 1:1 image (PNG/JPG/SVG/GIF) for the preview. |
| `zips`| Object | Names of your `.zip` files to extract. |
@ -45,7 +46,8 @@ Your `meta.json` must follow this structure:
"id": "my-amazing-mod", // ID
"name": "My Awesome Mod", // Name
"author": "neoapps-dev", // Github username
"description": "Adds back Ruby items", // Description
"description": "Adds back Ruby items", // Short Description
"extended_description": "# Markdown", // Detailed Description
"category": ["Mod", "DLC"], // Category
"thumbnail": "thumbnail.png", // Thumbnail filename
"zips": { // Object ("file-name.zip": "path/in/the/game/directory/to/extract/it/in)

View file

@ -3,6 +3,7 @@
"name": "Barebones", // Name
"author": "mrduck",
"description": "Bare Bones is a texture pack with the purpose of bringing your world and the default Minecraft textures to it's 'bare bones'. It is a simplistic and vibrant pack that is fun to use and makes your own Minecraft worlds look colourful!", // Description
"extended_description": "",
"category": ["Skin", "Texture", "DLC"], // Category
"thumbnail": "thumbnail.png", // Thumbnail filename
"zips": {

View file

@ -3,6 +3,7 @@
"name": "Blocks Skin Pack", // Name
"author": "silvas",
"description": "A bunch of blocks turned into skins lol", // Description
"extended_description": "",
"category": ["Skin", "DLC"], // Category
"thumbnail": "thumbnail.png", // Thumbnail filename
"zips": {

View file

@ -3,6 +3,7 @@
"name": "Shipment (COD4)",
"author": "funnyfella42",
"description": "Shipment from COD4",
"extended_description": "",
"category": [
"World"
],

View file

@ -3,6 +3,7 @@
"name": "Dust2",
"author": "funnyfella42",
"description": "Imagine you wanna play cs but your pc can only run LCE, well heres the hit cs map dust2, however it is missing the 71/71 russian servers you would find on cs source\n\nuh theres also chests for pvp ",
"extended_description": "",
"category": [
"World"
],

View file

@ -3,6 +3,7 @@
"name": "Faithful 64x", // Name
"author": "jakobisnow", // Author
"description": "Faithful recreates Minecraft's original textures in higher resolutions while staying true to their original look and feel. Ported to LCE.", // Description
"extended_description": "",
"category": ["Texture", "DLC"], // Category
"thumbnail": "thumbnail.jpg", // Thumbnail filename
"zips": {

View file

@ -3,6 +3,7 @@
"name": "Five Night's at Freddy's Skin Pack",
"author": "irv77",
"description": "Nobledez original skin pack of Five Nights at Freddy's skins (fnaf 1- fnaf ucn)",
"extended_description": "",
"category": [
"Skin",
"DLC"

View file

@ -3,6 +3,7 @@
"name": "New HEDGECRAFT [Krabozaki]",
"author": "LilasSonicBoi",
"description": "you know, there's Hedge(city) here and they're pretending themselves in Minecraft. they're complete cubes, no doubt. you saw nothing, Lilac. oh, you're already online.",
"extended_description": "",
"category": [
"Skin",
"DLC"

View file

@ -3,6 +3,7 @@
"name": "Miku's Modules", // Name
"author": "dydymiku_", // Author
"description": "A 3D Hatsune Miku Skin Pack that's taking all the modules from the Project Diva/Project Sekai games, as well as the fan made Mikus!", // Description
"extended_description": "",
"category": ["Skin", "DLC"], // Category
"thumbnail": "thumbnail.jpg", // Thumbnail filename
"zips": {

View file

@ -3,6 +3,7 @@
"name": "New-Legacy",
"author": "cheapmanga",
"description": "Minecraft LCE texturepack that brings the new textures of Minecraft java 1.21.11 to LCE",
"extended_description": "",
"category": [
"DLC",
"Texture"

View file

@ -1,9 +1,11 @@
import { readdirSync, readFileSync, writeFileSync, statSync } from "fs";
import { join } from "path";
const OUTPUT_FILE = "./registry.json";
const VALID_CATEGORIES = ["Skin", "Texture", "World", "Mod", "DLC"];
const REQUIRED_FIELDS = ["id", "name", "author", "description", "category", "thumbnail", "zips", "version"];
const REQUIRED_FIELDS = ["id", "name", "author", "description", "extended_description", "category", "thumbnail", "zips", "version"];
const IGNORED_DIRS = [".git", ".github", "scripts"];
function validateMeta(meta, pkgDir) {
const errors = [];
for (const field of REQUIRED_FIELDS) {
@ -94,4 +96,4 @@ const registry = {
};
writeFileSync(OUTPUT_FILE, JSON.stringify(registry, null, 2));
console.log(`registry.json generated with ${packages.length} package(s)`);
console.log(`registry.json generated with ${packages.length} package(s)`);

View file

@ -3,6 +3,7 @@
"name": "SkyPack!",
"author": "SKYHIVIN",
"description": "An skinpack made by me!\nby SkyHeaven!\nan unemployed person. whom spent hours on this\nalso im SkyHeaven on the LCE discord too, if you have a skin or cape suggestoins, say it to me! i could add an custom skin and cape too!",
"extended_description": "",
"category": [
"Skin",
"DLC"

View file

@ -3,6 +3,7 @@
"name": "Sphax Purebdcraft NeoLegacy",
"author": "ThePurpleDude",
"description": "This is a version of Sphax Purebdcraft for the NeoLegacy version of the game I'll be updating this texture pack as the TU versions get updated",
"extended_description": "",
"category": [
"Texture",
"DLC"

View file

@ -3,6 +3,7 @@
"name": "Sphax Purebdcraft",
"author": "ThePurpleDude",
"description": "This is Sphax Purebdcraft for LCE TU 19 I have most of the the animated textures done working on the ui when I can and adding stuff that I find that it doesn't have yet.",
"extended_description": "",
"category": [
"Texture",
"DLC"

View file

@ -3,6 +3,7 @@
"name": "The Amazing Digital Circus", // Name
"author": "silvaz",
"description": "A bunch of TADC skins taken from online ported to LCE. Credits shown in game.", // Description
"extended_description": "",
"category": ["Skin", "DLC"], // Category
"thumbnail": "thumbnail.png", // Thumbnail filename
"zips": {

View file

@ -3,6 +3,7 @@
"name": "Touhou SkinPack", // Name
"author": "spellboundstargazer",
"description": "A collection of Touhou skins based on characters that I like.", // Description
"extended_description": "",
"category": ["Skin", "DLC"], // Category
"thumbnail": "thumbnail.png", // Thumbnail filename
"zips": {

View file

@ -3,6 +3,7 @@
"name": "Vintage LCE",
"author": "ThePurpleDude",
"description": "I helped port this for someone this is vintage texture pack I did as much as I could its only for TU 19 I'll probably make a newer version for neo legacy when I can",
"extended_description": "",
"category": [
"Texture",
"DLC"