diff --git a/.gitignore b/.gitignore index 8912d0f0f..8adfdd765 100644 --- a/.gitignore +++ b/.gitignore @@ -93,3 +93,8 @@ features.toml .vscode/settings.json + +# Documentation +docs/.vitepress/dist +docs/.vitepress/cache +node_modules diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 000000000..8a6bf44a2 Binary files /dev/null and b/bun.lockb differ diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts new file mode 100644 index 000000000..dd33f8f05 --- /dev/null +++ b/docs/.vitepress/config.mts @@ -0,0 +1,36 @@ +import { defineConfig } from 'vitepress'; + +// https://vitepress.dev/reference/site-config +export default defineConfig({ + title: 'Pumpkin', + description: 'Empowering everyone to host fast and efficient Minecraft servers', + lang: 'en-US', + themeConfig: { + // https://vitepress.dev/reference/default-theme-config + sidebar: [ + { + text: 'About', + items: [ + { text: 'Introduction', link: '/about/introduction' }, + { text: 'Quick Start', link: '/about/quick-start' }, + { text: 'Contributing', link: 'https://github.com/Snowiiii/Pumpkin/blob/master/CONTRIBUTING.md' }, + ], + }, + { + text: 'Plugins', + items: [ + { text: 'About Plugins', link: '/plugins/about' }, + { text: 'Getting Started in Rust', link: '/plugins/getting-started-rs' }, + ], + }, + ], + + socialLinks: [ + { icon: 'github', link: 'https://github.com/Snowiiii/Pumpkin' }, + { icon: 'discord', link: 'https://discord.gg/RNm224ZsDq' }, + ], + + logo: '/assets/icon.png', + }, + head: [['link', { rel: 'icon', href: '/assets/favicon.ico' }]], +}); diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts new file mode 100644 index 000000000..def4cfc87 --- /dev/null +++ b/docs/.vitepress/theme/index.ts @@ -0,0 +1,17 @@ +// https://vitepress.dev/guide/custom-theme +import { h } from 'vue' +import type { Theme } from 'vitepress' +import DefaultTheme from 'vitepress/theme' +import './style.css' + +export default { + extends: DefaultTheme, + Layout: () => { + return h(DefaultTheme.Layout, null, { + // https://vitepress.dev/guide/extending-default-theme#layout-slots + }) + }, + enhanceApp({ app, router, siteData }) { + // ... + } +} satisfies Theme diff --git a/docs/.vitepress/theme/style.css b/docs/.vitepress/theme/style.css new file mode 100644 index 000000000..d63aee82d --- /dev/null +++ b/docs/.vitepress/theme/style.css @@ -0,0 +1,139 @@ +/** + * Customize default theme styling by overriding CSS variables: + * https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css + */ + +/** + * Colors + * + * Each colors have exact same color scale system with 3 levels of solid + * colors with different brightness, and 1 soft color. + * + * - `XXX-1`: The most solid color used mainly for colored text. It must + * satisfy the contrast ratio against when used on top of `XXX-soft`. + * + * - `XXX-2`: The color used mainly for hover state of the button. + * + * - `XXX-3`: The color for solid background, such as bg color of the button. + * It must satisfy the contrast ratio with pure white (#ffffff) text on + * top of it. + * + * - `XXX-soft`: The color used for subtle background such as custom container + * or badges. It must satisfy the contrast ratio when putting `XXX-1` colors + * on top of it. + * + * The soft color must be semi transparent alpha channel. This is crucial + * because it allows adding multiple "soft" colors on top of each other + * to create a accent, such as when having inline code block inside + * custom containers. + * + * - `default`: The color used purely for subtle indication without any + * special meanings attched to it such as bg color for menu hover state. + * + * - `brand`: Used for primary brand colors, such as link text, button with + * brand theme, etc. + * + * - `tip`: Used to indicate useful information. The default theme uses the + * brand color for this by default. + * + * - `warning`: Used to indicate warning to the users. Used in custom + * container, badges, etc. + * + * - `danger`: Used to show error, or dangerous message to the users. Used + * in custom container, badges, etc. + * -------------------------------------------------------------------------- */ + + :root { + --vp-c-default-1: var(--vp-c-gray-1); + --vp-c-default-2: var(--vp-c-gray-2); + --vp-c-default-3: var(--vp-c-gray-3); + --vp-c-default-soft: var(--vp-c-gray-soft); + + --vp-c-brand-1: var(--vp-c-indigo-1); + --vp-c-brand-2: var(--vp-c-indigo-2); + --vp-c-brand-3: var(--vp-c-indigo-3); + --vp-c-brand-soft: var(--vp-c-indigo-soft); + + --vp-c-tip-1: var(--vp-c-brand-1); + --vp-c-tip-2: var(--vp-c-brand-2); + --vp-c-tip-3: var(--vp-c-brand-3); + --vp-c-tip-soft: var(--vp-c-brand-soft); + + --vp-c-warning-1: var(--vp-c-yellow-1); + --vp-c-warning-2: var(--vp-c-yellow-2); + --vp-c-warning-3: var(--vp-c-yellow-3); + --vp-c-warning-soft: var(--vp-c-yellow-soft); + + --vp-c-danger-1: var(--vp-c-red-1); + --vp-c-danger-2: var(--vp-c-red-2); + --vp-c-danger-3: var(--vp-c-red-3); + --vp-c-danger-soft: var(--vp-c-red-soft); +} + +/** + * Component: Button + * -------------------------------------------------------------------------- */ + +:root { + --vp-button-brand-border: transparent; + --vp-button-brand-text: var(--vp-c-white); + --vp-button-brand-bg: var(--vp-c-brand-3); + --vp-button-brand-hover-border: transparent; + --vp-button-brand-hover-text: var(--vp-c-white); + --vp-button-brand-hover-bg: var(--vp-c-brand-2); + --vp-button-brand-active-border: transparent; + --vp-button-brand-active-text: var(--vp-c-white); + --vp-button-brand-active-bg: var(--vp-c-brand-1); +} + +/** + * Component: Home + * -------------------------------------------------------------------------- */ + +:root { + --vp-home-hero-name-color: transparent; + --vp-home-hero-name-background: -webkit-linear-gradient( + 120deg, + #bd34fe 30%, + #41d1ff + ); + + --vp-home-hero-image-background-image: linear-gradient( + -45deg, + #bd34fe 50%, + #47caff 50% + ); + --vp-home-hero-image-filter: blur(44px); +} + +@media (min-width: 640px) { + :root { + --vp-home-hero-image-filter: blur(56px); + } +} + +@media (min-width: 960px) { + :root { + --vp-home-hero-image-filter: blur(68px); + } +} + +/** + * Component: Custom Block + * -------------------------------------------------------------------------- */ + +:root { + --vp-custom-block-tip-border: transparent; + --vp-custom-block-tip-text: var(--vp-c-text-1); + --vp-custom-block-tip-bg: var(--vp-c-brand-soft); + --vp-custom-block-tip-code-bg: var(--vp-c-brand-soft); +} + +/** + * Component: Algolia + * -------------------------------------------------------------------------- */ + +.DocSearch { + --docsearch-primary-color: var(--vp-c-brand-1) !important; +} + diff --git a/docs/about/introduction.md b/docs/about/introduction.md new file mode 100644 index 000000000..ffb6f8b28 --- /dev/null +++ b/docs/about/introduction.md @@ -0,0 +1,22 @@ +# Pumpkin + +Pumpkin is a Minecraft server built entirely in **Rust**, offering a fast, efficient, +and customizable experience. It prioritizes performance and player enjoyment while adhering to the core mechanics of the game. + + + +## What Pumpkin wants to achieve + +- **Performance**: Leveraging multi-threading for maximum speed and efficiency. +- **Compatibility**: Supports the latest Minecraft server version and adheres to vanilla game mechanics. +- **Security**: Prioritizes security by preventing known exploits. +- **Flexibility**: Highly configurable with the ability to disable unnecessary features. +- **Extensibility**: Provides a foundation for plugin development. + +## What Pumpkin will not + +- Provide compatibility with Vanilla or Bukkit servers (including configs and plugins). +- Function as a framework for building a server from scratch. + +> [!IMPORTANT] +> Pumpkin is currently under heavy development. Check out our [Github Project](https://github.com/users/Snowiiii/projects/12/views/3) to see current progress diff --git a/docs/about/quick-start.md b/docs/about/quick-start.md new file mode 100644 index 000000000..851502b7b --- /dev/null +++ b/docs/about/quick-start.md @@ -0,0 +1,41 @@ +# Quick Start + +There are currently no release builds, because there was no release :D. + +To get Pumpkin running you first have to clone it: + +```shell +git clone https://github.com/Snowiiii/Pumpkin.git +cd Pumpkin +``` + +You also may have to [install rust](https://www.rust-lang.org/tools/install) when you don't already have. + +You can place a vanilla world into the Pumpkin/ directory when you want. Just name the World to `world` + +Then run: + +> [!NOTE] +> This can take a while. Because we enabled heavy optimizations for release builds +> +> To apply further optimizations specfic to your CPU and use your CPU features. You should set the target-cpu=native +> Rust flag. + +```shell +cargo run --release +``` + +## Docker + +Experimental Docker support is available. +The image is currently not published anywhere, but you can use the following command to build it: + +```shell +docker build . -t pumpkin +``` + +To run it use the following command: + +```shell +docker run --rm -v "./world:/pumpkin/world" pumpkin +``` diff --git a/docs/api-examples.md b/docs/api-examples.md new file mode 100644 index 000000000..6bd8bb5c1 --- /dev/null +++ b/docs/api-examples.md @@ -0,0 +1,49 @@ +--- +outline: deep +--- + +# Runtime API Examples + +This page demonstrates usage of some of the runtime APIs provided by VitePress. + +The main `useData()` API can be used to access site, theme, and page data for the current page. It works in both `.md` and `.vue` files: + +```md + + +## Results + +### Theme Data +
{{ theme }}
+
+### Page Data
+{{ page }}
+
+### Page Frontmatter
+{{ frontmatter }}
+```
+
+
+
+## Results
+
+### Theme Data
+{{ theme }}
+
+### Page Data
+{{ page }}
+
+### Page Frontmatter
+{{ frontmatter }}
+
+## More
+
+Check out the documentation for the [full list of runtime APIs](https://vitepress.dev/reference/runtime-api#usedata).
diff --git a/docs/assets/favicon.ico b/docs/assets/favicon.ico
new file mode 100644
index 000000000..a2f932b03
Binary files /dev/null and b/docs/assets/favicon.ico differ
diff --git a/docs/assets/icon.png b/docs/assets/icon.png
new file mode 100644
index 000000000..a09608130
Binary files /dev/null and b/docs/assets/icon.png differ
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 000000000..dc193d59d
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1,27 @@
+---
+# https://vitepress.dev/reference/default-theme-home-page
+layout: home
+
+hero:
+ name: 'Pumpkin'
+ text: 'Minecraft Server'
+ tagline: Empowering everyone to host fast and efficient Minecraft servers
+ actions:
+ - theme: brand
+ text: Quick Start
+ link: /about/quick-start
+ - theme: alt
+ text: Documentation
+ link: /about/introduction
+ - theme: alt
+ text: For developers
+ link: /plugins/about
+
+features:
+ - title: Written in Rust
+ details: Pumpkin is written 100% in Rust, ensuring memory safety and unmatched performance.
+ - title: Feature complete
+ details: With all vanilla features supported, you will have no issues.
+ - title: Extensible
+ details: Using Extism you can extend Pumpkin to your needs. Play your way!
+---
diff --git a/docs/markdown-examples.md b/docs/markdown-examples.md
new file mode 100644
index 000000000..f9258a550
--- /dev/null
+++ b/docs/markdown-examples.md
@@ -0,0 +1,85 @@
+# Markdown Extension Examples
+
+This page demonstrates some of the built-in markdown extensions provided by VitePress.
+
+## Syntax Highlighting
+
+VitePress provides Syntax Highlighting powered by [Shiki](https://github.com/shikijs/shiki), with additional features like line-highlighting:
+
+**Input**
+
+````md
+```js{4}
+export default {
+ data () {
+ return {
+ msg: 'Highlighted!'
+ }
+ }
+}
+```
+````
+
+**Output**
+
+```js{4}
+export default {
+ data () {
+ return {
+ msg: 'Highlighted!'
+ }
+ }
+}
+```
+
+## Custom Containers
+
+**Input**
+
+```md
+::: info
+This is an info box.
+:::
+
+::: tip
+This is a tip.
+:::
+
+::: warning
+This is a warning.
+:::
+
+::: danger
+This is a dangerous warning.
+:::
+
+::: details
+This is a details block.
+:::
+```
+
+**Output**
+
+::: info
+This is an info box.
+:::
+
+::: tip
+This is a tip.
+:::
+
+::: warning
+This is a warning.
+:::
+
+::: danger
+This is a dangerous warning.
+:::
+
+::: details
+This is a details block.
+:::
+
+## More
+
+Check out the documentation for the [full list of markdown extensions](https://vitepress.dev/guide/markdown).
diff --git a/docs/plugins/about.md b/docs/plugins/about.md
new file mode 100644
index 000000000..110fe955a
--- /dev/null
+++ b/docs/plugins/about.md
@@ -0,0 +1,15 @@
+# Plugins
+
+Pumpkin uses [Extism](https://extism.org/) for loading plugins.
+This means that you can write your plugins in any language that can compile to Extism WASM.
+These languages include:
+
+- Rust
+- JavaScript / TypeScript
+- Golang
+- C#
+- F#
+- C
+- Haskell
+- Zig
+- AssemblyScript
diff --git a/docs/plugins/getting-started-rs.md b/docs/plugins/getting-started-rs.md
new file mode 100644
index 000000000..5bed83b39
--- /dev/null
+++ b/docs/plugins/getting-started-rs.md
@@ -0,0 +1,4 @@
+# Getting Started in Rust
+
+Rust in one of the supported plugin languages.
+This page has not been written yet.
diff --git a/package.json b/package.json
new file mode 100644
index 000000000..29967d6b8
--- /dev/null
+++ b/package.json
@@ -0,0 +1,11 @@
+{
+ "scripts": {
+ "docs:dev": "vitepress dev docs",
+ "docs:build": "vitepress build docs",
+ "docs:preview": "vitepress preview docs"
+ },
+ "devDependencies": {
+ "vitepress": "^1.3.4",
+ "vue": "^3.4.38"
+ }
+}
\ No newline at end of file