Author SHA1 Message Date
onebeastchris 8fdb311b68 update mod/proxy pages 2025-01-12 18:38:04 +01:00
onebeastchris 967c2580f7 adjust not listed message 2025-01-10 21:23:46 +01:00
rtm516 3e0863aaa8 Remove front matter 2025-01-10 19:33:15 +00:00
rtm516 83b80c1413 Don't try and build paper setup as a full page 2025-01-10 19:20:34 +00:00
rtm516 382070b4e9 Rework paper page for setup 2025-01-10 19:11:37 +00:00
onebeastchris 8db8d9a01c finalize host instructions 2025-01-10 20:05:22 +01:00
onebeastchris 41fcf9758d even more changes 2025-01-10 18:25:58 +01:00
onebeastchris 874a52df6a more work on this 2025-01-04 00:44:07 +01:00
onebeastchris 38ec4c30c2 Start on re-writing the providers page to provide more useful details to improve the setup guide 2024-12-24 02:23:13 +08:00
Olivia f767377854 chore: translate remaining provider descriptions (#44) 2024-12-15 20:41:02 -06:00
rtm516 ac80a7b7a4 Add docs for extension update folder (#43) 2024-12-16 06:37:16 +08:00
Kas-tle 902e9f3da7 Update to latest version of Docusaurus and Yarn v4 (#42)
* - Switch to modern yarn (v4)
- Update packages
- Pin postman-code-generators version due to https://github.com/postmanlabs/postman-code-generators/issues/760
- Upgrade to latest nodejs LTS (v22)
- Update create-providers-json.ts to not cause type errors

Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com>

* Must setup node twice to enable corepack

Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com>

* Get everything building again

Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com>

---------

Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com>
2024-12-12 23:09:26 -08:00
onebeastchris 17e3b06b3d Update supported versions 2024-12-12 10:17:58 +08:00
Olivia 8c979ebcf8 Remove MCProHosting from providers list (#41)
Evidently, the panel has officially migrated to the Apex panel, meaning these instructions are no longer relevant and impossible to perform. Users can view the Apex Hosting guide instead.
2024-12-04 10:17:58 +08:00
chris 3ca38489b2 Update supported Bedrock versions (#40) 2024-12-04 00:32:48 +08:00
BrokenGearsTVandKas-tle 70e1717064 Add Wasabi Hosting to providers list (#39)
* Update providers.ts

* Fix minor grammar errors

---------

Co-authored-by: Kas-tle <26531652+Kas-tle@users.noreply.github.com>
2024-12-02 19:11:27 -08:00
qscbm187531andKas-tle 97dd0dab0a Update config editor (#37)
* Update config-editor.tsx

* Fix minor grammar error

* Fix minor grammar error

---------

Co-authored-by: Kas-tle <26531652+Kas-tle@users.noreply.github.com>
2024-11-17 20:32:15 -08:00
rtm516 6926df9337 Hide Hydraulic from downloads 2024-11-12 19:17:45 +00:00
benshan36andchris be93c3b2bd Update versions.json (#36)
* Update versions.json

Update versions.json to reflect changes on Wiki

* 1.20.80 is still supported

---------

Co-authored-by: chris <github@onechris.mozmail.com>
2024-11-11 06:46:56 +08:00
qscbm187531 468aa18542 Update links and misc info (#34)
* Update links

* Update thirdpartycosmetics.md
2024-11-08 08:33:32 -08:00
Camotoy 35d7fb58be Indicate Bedrock 1.21.40 support 2024-10-22 12:25:24 -04:00
47 changed files with 19312 additions and 11348 deletions

No files matched your search

+12 -5
View File
@@ -30,22 +30,29 @@ jobs:
name: Deploy to GitHub Pages
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
- uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af
with:
node-version: 22
- name: Enable Corepack
run: corepack enable
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
with:
fetch-depth: 0
- name: Setup Pages
uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b
- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b
- uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af
with:
node-version: 18
node-version: 22
cache: yarn
- name: Install dependencies
run: yarn install --frozen-lockfile
- uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9
- uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57
with:
path: |
${{ github.workspace }}/.docusaurus
@@ -71,4 +78,4 @@ jobs:
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@decdde0ac072f6dcbe43649d82d9c635fff5b4e4
uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e
+11 -4
View File
@@ -8,19 +8,26 @@ jobs:
name: Build PR
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
- uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af
with:
node-version: 22
- name: Enable Corepack
run: corepack enable
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
with:
fetch-depth: 0
- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b
- uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af
with:
node-version: 18
node-version: 22
cache: yarn
- name: Install dependencies
run: yarn install --frozen-lockfile
- uses: actions/cache/restore@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9
- uses: actions/cache/restore@1bd1e32a3bdc45362d1e726936510720a7c30a57
with:
path: |
${{ github.workspace }}/.docusaurus
+6 -1
View File
@@ -26,4 +26,9 @@ vendor
npm-debug.log*
yarn-debug.log*
yarn-error.log*
package-lock.json
package-lock.json
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/versions
+1
View File
@@ -0,0 +1 @@
nodeLinker: node-modules
+41
View File
@@ -770,5 +770,46 @@
"theme.unlistedContent.message": {
"message": "This page is unlisted. Search engines will not index it, and only users having a direct link can access it.",
"description": "The unlisted content banner message"
},
"providers.provider.not_listed.description": {
"message": "If your hosting provider is not listed, try enabling the `clone-remote-port` option in the config. Then, restart the server, and try connecting with the same IP and port as on Java Edition. <br> If this does not work, ask your server hosting provider for a UDP port, and use that. For VPS/KVM servers please follow the self-hosting steps."
},
"providers.provider.wasabihosting.description": {
"message": "Install Geyser with the plugin installer. Use the same port as your Java server in the Geyser config. Connect with the same address and port as your Java server."
},
"pages.download.description.hurricane": {
"message": "A plugin with various workarounds for Geyser players that modify the server in order to achieve their goal."
},
"theme.blog.author.pageTitle": {
"message": "{authorName} - {nPosts}",
"description": "The title of the page for a blog author"
},
"theme.blog.authorsList.pageTitle": {
"message": "Authors",
"description": "The title of the authors page"
},
"theme.blog.authorsList.viewAll": {
"message": "View all authors",
"description": "The label of the link targeting the blog authors page"
},
"theme.blog.author.noPosts": {
"message": "This author has not written any posts yet.",
"description": "The text for authors with 0 blog post"
},
"theme.contentVisibility.unlistedBanner.title": {
"message": "Unlisted page",
"description": "The unlisted content banner title"
},
"theme.contentVisibility.unlistedBanner.message": {
"message": "This page is unlisted. Search engines will not index it, and only users having a direct link can access it.",
"description": "The unlisted content banner message"
},
"theme.contentVisibility.draftBanner.title": {
"message": "Draft page",
"description": "The draft content banner title"
},
"theme.contentVisibility.draftBanner.message": {
"message": "This page is a draft. It will only be visible in dev and be excluded from the production build.",
"description": "The draft content banner message"
}
}
@@ -182,5 +182,9 @@
"sidebar.geyserSidebar.category.Geyser API": {
"message": "Geyser API",
"description": "The label for category Geyser API in sidebar geyserSidebar"
},
"sidebar.geyserSidebar.category.Custom Resource Packs": {
"message": "Custom Resource Packs",
"description": "The label for category Custom Resource Packs in sidebar geyserSidebar"
}
}
@@ -2,5 +2,73 @@
"copyright": {
"message": "Copyright © 2024 GeyserMC. Built with Docusaurus.",
"description": "The footer copyright"
},
"link.title.Wiki": {
"message": "Wiki",
"description": "The title of the footer links column with title=Wiki in the footer"
},
"link.title.Downloads": {
"message": "Downloads",
"description": "The title of the footer links column with title=Downloads in the footer"
},
"link.title.Community": {
"message": "Community",
"description": "The title of the footer links column with title=Community in the footer"
},
"link.title.More": {
"message": "More",
"description": "The title of the footer links column with title=More in the footer"
},
"link.item.label.Geyser": {
"message": "Geyser",
"description": "The label of footer link with label=Geyser linking to download?project=geyser"
},
"link.item.label.Floodgate": {
"message": "Floodgate",
"description": "The label of footer link with label=Floodgate linking to download?project=floodgate"
},
"link.item.label.REST APIs": {
"message": "REST APIs",
"description": "The label of footer link with label=REST APIs linking to wiki/api/api.geysermc.org/global-api"
},
"link.item.label.Other": {
"message": "Other",
"description": "The label of footer link with label=Other linking to download?project=other-projects"
},
"link.item.label.Crowdin": {
"message": "Crowdin",
"description": "The label of footer link with label=Crowdin linking to https://translate.geysermc.org/"
},
"link.item.label.Discord": {
"message": "Discord",
"description": "The label of footer link with label=Discord linking to https://discord.gg/geysermc"
},
"link.item.label.GitHub": {
"message": "GitHub",
"description": "The label of footer link with label=GitHub linking to https://github.com/GeyserMC/Geyser"
},
"link.item.label.Reddit": {
"message": "Reddit",
"description": "The label of footer link with label=Reddit linking to https://www.reddit.com/r/GeyserMC/"
},
"link.item.label.Twitter": {
"message": "Twitter",
"description": "The label of footer link with label=Twitter linking to https://twitter.com/Geyser_MC"
},
"link.item.label.Blog": {
"message": "Blog",
"description": "The label of footer link with label=Blog linking to blog"
},
"link.item.label.Donate": {
"message": "Donate",
"description": "The label of footer link with label=Donate linking to https://opencollective.com/geysermc"
},
"link.item.label.Global Linking": {
"message": "Global Linking",
"description": "The label of footer link with label=Global Linking linking to https://link.geysermc.org/"
},
"logo.alt": {
"message": "GeyserMC logo",
"description": "The alt text of footer logo"
}
}
+26 -22
View File
@@ -23,30 +23,33 @@
"typecheck": "tsc"
},
"dependencies": {
"@docusaurus/core": "^3.4.0",
"@docusaurus/preset-classic": "^3.4.0",
"@fortawesome/fontawesome-svg-core": "^6.5.1",
"@fortawesome/free-brands-svg-icons": "^6.5.1",
"@fortawesome/free-regular-svg-icons": "^6.5.1",
"@fortawesome/free-solid-svg-icons": "^6.5.1",
"@fortawesome/react-fontawesome": "^0.2.0",
"@docusaurus/core": "3.6.3",
"@docusaurus/preset-classic": "3.6.3",
"@fortawesome/fontawesome-svg-core": "6.5.1",
"@fortawesome/free-brands-svg-icons": "6.5.1",
"@fortawesome/free-regular-svg-icons": "6.5.1",
"@fortawesome/free-solid-svg-icons": "6.5.1",
"@fortawesome/react-fontawesome": "0.2.0",
"@kas-tle/docusaurus-og": "https://github.com/Kas-tle/docusaurus-og",
"@mdx-js/react": "^3.0.0",
"clsx": "^1.2.1",
"docusaurus-plugin-openapi-docs": "^3.0.1",
"docusaurus-theme-openapi-docs": "^3.0.1",
"prism-react-renderer": "^2.1.0",
"react": "^18.0.0",
"react-dom": "^18.0.0",
"@mdx-js/react": "3.0.0",
"clsx": "1.2.1",
"docusaurus-plugin-openapi-docs": "4.3.0",
"docusaurus-theme-openapi-docs": "4.3.0",
"prism-react-renderer": "2.1.0",
"react": "18.3.1",
"react-dom": "18.3.1",
"react-markdown": "^9.0.0"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "^3.4.0",
"@docusaurus/tsconfig": "^3.4.0",
"@docusaurus/types": "^3.4.0",
"docusaurus-plugin-sass": "^0.2.5",
"sass": "^1.77.8",
"typescript": "~5.2.2"
"@docusaurus/module-type-aliases": "^3.6.3",
"@docusaurus/tsconfig": "^3.6.3",
"@docusaurus/types": "^3.6.3",
"docusaurus-plugin-sass": "0.2.5",
"sass": "1.77.8",
"typescript": "5.7.2"
},
"resolutions": {
"postman-code-generators": "1.14.0"
},
"browserslist": {
"production": [
@@ -61,6 +64,7 @@
]
},
"engines": {
"node": ">=18.0"
}
"node": ">=22.0"
},
"packageManager": "yarn@4.5.3"
}
+14 -15
View File
@@ -1,8 +1,7 @@
import type { HostingProvider, ProviderType } from "@site/src/types/providers";
import ReactMarkdown from "react-markdown";
import Admonition from '@theme/Admonition';
import React, { useState } from 'react';
import Translate, { translate } from "@docusaurus/Translate";
import { translate } from "@docusaurus/Translate";
import { providersData } from "../data/providers";
export const noP = (props: { children: any; }) => {
@@ -29,7 +28,7 @@ export const Provider = ({ type }) => {
)
}
export const ProviderSelector = () => {
export const ProviderSelector = ({setProvider}) => {
const providers: HostingProvider[] = [
...Object.values(providersData.built_in),
...Object.values(providersData.support),
@@ -38,9 +37,17 @@ export const ProviderSelector = () => {
providers.unshift({
name: 'Not listed',
description: translate({
id: 'providers.provider.not_listed.description',
message: "If your hosting provider is not listed, try enabling the `clone-remote-port` option in the config. Then, restart the server, and try connecting with the same IP and port as on Java Edition. <br> If this does not work, ask your server hosting provider for a UDP port, and use that. For VPS/KVM servers please follow the self-hosting steps."
url: null,
config: {
clone_remote_port: true
},
connect_instructions: translate({
id: 'providers.connect.templates.java_ip_port',
message: 'Connect with the Java server IP and Java server port.'
}),
info: translate({
id: 'providers.provider.not_listed.info',
message: "If these instructions do not work, contact your server hosting provider and ask for a UDP port. Then, set clone-remote-port to false, and set 'bedrock port' to the port you got. For VPS/KVM servers, please follow the self-hosting steps."
})
} as HostingProvider);
@@ -51,6 +58,7 @@ export const ProviderSelector = () => {
const selectedName = event.target.value;
const provider = providers.find(p => p.name === selectedName);
setSelectedProvider(provider);
setProvider(provider);
}
return (
@@ -63,15 +71,6 @@ export const ProviderSelector = () => {
</option>
))}
</select>
<Admonition type="tip" title={<Translate id='components.provider.instructions'>Provider Instructions</Translate>}>
{selectedProvider ? (
<ReactMarkdown>{selectedProvider.description}</ReactMarkdown>
) : (
<p>
<Translate id='components.provider.select'>Select a provider to see specific installation instructions</Translate>
</p>
)}
</Admonition>
</div>
);
}
+504 -279
View File
File diff suppressed because it is too large. Load diff
+4 -4
View File
@@ -1,12 +1,12 @@
{
"bedrock": {
"supported": "1.20.80-1.21.30",
"supported": "1.21.40-1.21.51",
"latest": {
"id": 729,
"name": "1.21.30"
"id": 766,
"name": "1.21.51"
}
},
"java": {
"supported": "1.21/1.21.1"
"supported": "1.21.4"
}
}
@@ -129,7 +129,7 @@ const DownloadPage: React.FC = () => (
/>
}
/>
<Collapsible
{/* <Collapsible
title='Hydraulic'
subtitle={<Translate id='pages.download.description.hydraulic'>A companion mod to Geyser which allows for Bedrock players to join modded Minecraft: Java Edition servers.</Translate>}
id='hydraulic'
@@ -145,7 +145,7 @@ const DownloadPage: React.FC = () => (
gridColumns={1}
/>
}
/>
/> */}
</Collapsibles>
</TabItem>
</Tabs>
+64 -25
View File
@@ -3,7 +3,7 @@ import HeroBanner from '@site/src/components/HeroBanner';
import HeroBackground from '@site/static/img/site/split-background.webp';
import Layout from '@theme/Layout';
import styles from './utilities.module.scss';
import { useRef, useState } from 'react';
import {useRef, useState} from 'react';
const ConfigEditorPage: React.FC = () => {
const [config, setConfig] = useState('');
@@ -53,7 +53,9 @@ const ConfigEditorPage: React.FC = () => {
let currentSection = '';
let currentComment = '';
const newConfig = {};
const newConfig = {"": {}};
let ignore = false;
// Parse each line of the config
for (let i = 0; i < lines.length; i++) {
@@ -72,7 +74,7 @@ const ConfigEditorPage: React.FC = () => {
const commented = line.startsWith('#');
const match = line.match(keyReg)
const match = line.match(keyReg);
if (match === null) {
// Check if we are in a comment
if (commented) {
@@ -84,12 +86,26 @@ const ConfigEditorPage: React.FC = () => {
// Check if we are in a new section
if (line.endsWith(':')) {
currentSection = line.replace(':', '');
// Ignore user auths section
if (currentSection === 'saved-user-logins') {
ignore = true;
continue;
}
ignore = false;
if (commented) {
currentComment += '<strong>Note: This option is commented out by default. It will be automatically uncommented if modified.</strong>' + '<br>';
}
currentComment = currentComment.replace(URL_REGEX, function ($0) {
return '<a href="' + $0 + '">' + $0 + '</a>';
})
newConfig[currentSection] = {sectionDesc0: currentComment};
currentComment = '';
continue;
}
// Ignore user auths section
if (currentSection === 'saved-user-logins') {
if (ignore) {
continue;
}
@@ -97,7 +113,7 @@ const ConfigEditorPage: React.FC = () => {
const splitLine = line.split(':');
splitLine[0] = splitLine[0].trim();
let val = '';
for (let j = 1;j<splitLine.length;j++) {
for (let j = 1; j < splitLine.length; j++) {
val += splitLine[j];
}
val = val.trim();
@@ -108,11 +124,14 @@ const ConfigEditorPage: React.FC = () => {
}
if (commented) {
currentComment += '<strong>Note: This option is commented on, and if you change it, it will be automatically uncommented.</strong>' + '<br>';
currentComment += '<strong>Note: This option is commented out by default. It will be automatically uncommented if modified.</strong>' + '<br>';
}
currentComment = currentComment.replace(URL_REGEX, function ($0) {
return '<a href="' + $0 + '">' + $0 + '</a>';
})
// Add the config option to the config object
newConfig[currentSection] = newConfig[currentSection] || {};
newConfig[currentSection][splitLine[0]] = {
desc: currentComment,
value: val,
@@ -132,12 +151,22 @@ const ConfigEditorPage: React.FC = () => {
<div className={styles.cardBody}>
{Object.keys(config[configKey]).map(configOption => {
const configOptionInfo = config[configKey][configOption];
if (configOption == "sectionDesc0") {
if (configOptionInfo === "") {
return;
}
return (
<div className={styles.configOption}>
<p dangerouslySetInnerHTML={{__html: configOptionInfo}}/>
</div>
)
}
const configOptionKey = configKey === '' ? configOption : `${configKey}.${configOption}`;
const showOptionName = configOption.replace('#','').trim()
const showOptionName = configOption.replace('#', '').trim()
return (
<div key={configOptionKey} className={styles.configOption}>
<h3>{showOptionName}</h3>
<p dangerouslySetInnerHTML={{ __html: configOptionInfo.desc }} />
<p dangerouslySetInnerHTML={{__html: configOptionInfo.desc}}/>
{getInput(configOptionKey, configOptionInfo.value)}
</div>
)
@@ -147,6 +176,8 @@ const ConfigEditorPage: React.FC = () => {
))
}
const URL_REGEX = /https?:\/\/(([0-9a-z.]+\.[a-z]+)|(([0-9]{1,3}\.){3}[0-9]{1,3}))(:[0-9]+)?(\/[0-9a-z%\/.\-_]*)?(\?[0-9a-z=&%_\-]*)?(#[0-9a-z=&%_\-]*)?/ig;
const handleExport = () => {
let newConfig = config;
const lines = newConfig.split('\n');
@@ -160,8 +191,8 @@ const ConfigEditorPage: React.FC = () => {
const option = currentObj[nestedKey];
const oldValue = option.value;
const index = option.line;
const newKey = nestedKey.replace('#','').trim();
lines[index] = lines[index].replace(` ${nestedKey}: ${oldValue}`,` ${newKey}: ${value}`);
const newKey = nestedKey.replace('#', '').trim();
lines[index] = lines[index].replace(` ${nestedKey}: ${oldValue}`, ` ${newKey}: ${value}`);
} else {
currentObj = currentObj[nestedKey];
}
@@ -176,7 +207,7 @@ const ConfigEditorPage: React.FC = () => {
function getInput(name, value) {
const handleChange = (event) => {
const { id, value, type, checked } = event.target;
const {id, value, type, checked} = event.target;
editedConfig.current = {
...editedConfig.current,
@@ -188,7 +219,8 @@ const ConfigEditorPage: React.FC = () => {
// Handle all the dropdowns
case 'remote.auth-type':
return (
<select key={name} className={styles.formInput} id={name} defaultValue={value} onChange={handleChange}>
<select key={name} className={styles.formInput} id={name} defaultValue={value}
onChange={handleChange}>
<option value='offline'>offline</option>
<option value='online'>online</option>
<option value='floodgate'>floodgate</option>
@@ -196,7 +228,8 @@ const ConfigEditorPage: React.FC = () => {
);
case 'show-cooldown':
return (
<select key={name} className={styles.formInput} id={name} defaultValue={value} onChange={handleChange}>
<select key={name} className={styles.formInput} id={name} defaultValue={value}
onChange={handleChange}>
<option value='title'>title</option>
<option value='actionbar'>actionbar</option>
<option value='false'>false</option>
@@ -204,16 +237,19 @@ const ConfigEditorPage: React.FC = () => {
);
case 'emote-offhand-workaround':
return (
<select key={name} className={styles.formInput} id={name} defaultValue={value} onChange={handleChange}>
<select key={name} className={styles.formInput} id={name} defaultValue={value}
onChange={handleChange}>
<option value='disabled'>disabled</option>
<option value='no-emotes'>no-emotes</option>
<option value='emotes-and-offhand'>emotes-and-offhand</option>
</select>
);
case 'config-version':
return <input key={name} className={styles.formInput} type='text' disabled defaultValue={value.replace(/"/g, '')} />;
return <input key={name} className={styles.formInput} type='text' disabled
defaultValue={value.replace(/"/g, '')}/>;
case 'metrics.uuid':
return <input key={name} className={styles.formInput} id={name} type='text' disabled defaultValue={value === 'generateduuid' ? crypto.randomUUID() : value} />;
return <input key={name} className={styles.formInput} id={name} type='text' disabled
defaultValue={value === 'generateduuid' ? crypto.randomUUID() : value}/>;
default:
// Handle all the other inputs
@@ -240,7 +276,7 @@ const ConfigEditorPage: React.FC = () => {
// From https://gist.github.com/danallison/3ec9d5314788b337b682
function downloadString(text, fileType, fileName) {
const blob = new Blob([text], { type: fileType })
const blob = new Blob([text], {type: fileType})
const a = document.createElement('a')
a.download = fileName
@@ -251,13 +287,16 @@ const ConfigEditorPage: React.FC = () => {
a.click()
document.body.removeChild(a)
setTimeout(() => { URL.revokeObjectURL(a.href) }, 1500)
setTimeout(() => {
URL.revokeObjectURL(a.href)
}, 1500)
}
const NoConfigSection = () => (
<>
<h1><Translate id='pages.configeditor.noconfigselected.heading'>No config selected.</Translate></h1>
<h3 className={styles.fontNormal}><Translate id='pages.configeditor.noconfigselected.subheading'>Upload a file or get started with the default config!</Translate></h3>
<h3 className={styles.fontNormal}><Translate id='pages.configeditor.noconfigselected.subheading'>Upload a
file or get started with the default config!</Translate></h3>
<div className={styles.buttonsContainer}>
<button className={styles.button} onClick={loadDefault}>
@@ -280,7 +319,7 @@ const ConfigEditorPage: React.FC = () => {
const EditorView = () => (
<>
<div className={styles.buttonsContainer} style={{ marginBottom: '30px' }}>
<div className={styles.buttonsContainer} style={{marginBottom: '30px'}}>
<button className={styles.button} onClick={handleExport}>
<Translate id='pages.configeditor.button.export'>Export</Translate>
</button>
@@ -297,8 +336,8 @@ const ConfigEditorPage: React.FC = () => {
backgroundImage={HeroBackground}
/>
<div className='container' style={{ marginTop: '30px' }}>
{Object.keys(parsedConfig).length === 0 ? <NoConfigSection /> : <EditorView />}
<div className='container' style={{marginTop: '30px'}}>
{Object.keys(parsedConfig).length === 0 ? <NoConfigSection/> : <EditorView/>}
</div>
@@ -315,7 +354,7 @@ export default function ConfigEditor(): JSX.Element {
>
<main>
<div className='container container--fluid margin-vert--lg'>
<ConfigEditorPage />
<ConfigEditorPage/>
</div>
</main>
</Layout>
+123 -28
View File
@@ -2,38 +2,133 @@ import fs from 'fs';
import path from 'path';
import { LoadContext, Plugin, PluginOptions } from '@docusaurus/types';
import logger from '@docusaurus/logger';
import Module from 'module';
import ts from "typescript";
const createProvidersJsonPlugin = (context: LoadContext, options: PluginOptions): Plugin => {
return {
name: 'docusaurus-plugin-create-providers-json',
// Welcome to hell
const createProvidersJsonPlugin = (_context: LoadContext, _options: PluginOptions): Plugin => {
return {
name: 'docusaurus-plugin-create-providers-json',
async postBuild({ outDir, routes, plugins }) {
const originalResolveFilename = Module._resolveFilename
async postBuild({ outDir }) {
const providersFilePath = path.join(__dirname, '../data/providers.ts');
const providersFileContent = fs.readFileSync(providersFilePath, 'utf-8');
const providersAst = ts.createSourceFile('providers.ts', providersFileContent, ts.ScriptTarget.Latest, true);
// This is a hack to allow us to import a custom module instead of the normal translation module
Module._resolveFilename = function (request, parent, isMain, options) {
if (request == '@docusaurus/Translate') {
request = path.resolve(__dirname, 'custom_modules', 'translate.ts');
let providersDataNode: ts.ObjectLiteralExpression | null = null;
let descriptionTemplatesNode: ts.ObjectLiteralExpression | null = null;
for (const statement of providersAst.statements) {
if (ts.isVariableStatement(statement)) {
for (const decl of statement.declarationList.declarations) {
if (
ts.isIdentifier(decl.name) &&
decl.initializer
) {
if (decl.name.text === 'providersData' && ts.isObjectLiteralExpression(decl.initializer)) {
providersDataNode = decl.initializer;
} else if (decl.name.text === 'descriptionTemplates' && ts.isObjectLiteralExpression(decl.initializer)) {
descriptionTemplatesNode = decl.initializer;
}
}
}
}
}
if (!providersDataNode) {
logger.error('Could not find providersData in providers.ts');
return;
}
if (!descriptionTemplatesNode) {
logger.error('Could not find defaultDescriptions in providers.ts');
return;
}
function parseDescriptionTemplates(node: ts.ObjectLiteralExpression): Record<string, string> {
const map: Record<string, string> = {};
for (const prop of node.properties) {
if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name)) {
const key = prop.name.text;
const val = extractDescription(prop.initializer);
map[key] = val || '';
}
}
return map;
}
let defaultDescriptionsMap = parseDescriptionTemplates(descriptionTemplatesNode);
function extractDescription(node: ts.Expression): string {
if (ts.isCallExpression(node)) {
const expr = node.expression;
if (ts.isIdentifier(expr) && expr.text === 'translate') {
const arg = node.arguments[0];
if (arg && ts.isObjectLiteralExpression(arg)) {
for (const prop of arg.properties) {
if (
ts.isPropertyAssignment(prop) &&
ts.isIdentifier(prop.name) &&
prop.name.text === 'message' &&
ts.isStringLiteral(prop.initializer)
) {
return prop.initializer.text;
}
}
}
}
} else if (ts.isPropertyAccessExpression(node)) {
if (ts.isIdentifier(node.expression) && node.expression.text === 'descriptionTemplates') {
const key = node.name.text;
return defaultDescriptionsMap[key] || '';
}
}
}
function parseProvidersArray(prop: ts.PropertyAssignment): {name: string; url: string; description: string;}[] {
if (ts.isArrayLiteralExpression(prop.initializer)) {
return prop.initializer.elements
.filter(ts.isObjectLiteralExpression)
.map(element => {
let nameVal = '';
let urlVal = '';
let descVal = '';
for (const property of element.properties) {
if (ts.isPropertyAssignment(property) && ts.isIdentifier(property.name)) {
const key = property.name.text;
const val = property.initializer;
if (key === 'name' && ts.isStringLiteral(val)) {
nameVal = val.text;
} else if (key === 'url' && ts.isStringLiteral(val)) {
urlVal = val.text;
} else if (key === 'description') {
descVal = extractDescription(val);
}
}
}
return { name: nameVal, url: urlVal, description: descVal };
});
}
return [];
}
let providersJson = {};
for (const prop of providersDataNode.properties) {
if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name)) {
providersJson[prop.name.text] = parseProvidersArray(prop);
}
}
const dataDir = path.join(outDir, 'data');
if (!fs.existsSync(dataDir)) {
fs.mkdirSync(dataDir, { recursive: true });
}
const outputFilePath = path.join(dataDir, 'providers.json');
fs.writeFileSync(outputFilePath, JSON.stringify(providersJson, null, 4), 'utf-8');
}
return originalResolveFilename.call(this, request, parent, isMain, options);
};
// Import the providers data
const { providersData } = await import('../data/providers');
// Restore the original resolve function
Module._resolveFilename = originalResolveFilename
const providersFilePath = path.join(outDir, 'data/providers.json');
fs.mkdirSync(path.dirname(providersFilePath), { recursive: true });
fs.writeFileSync(providersFilePath, JSON.stringify(providersData, null, 2), 'utf-8');
logger.success(`Created providers.json file at ${providersFilePath}`);
}
};
};
};
export default createProvidersJsonPlugin;
+18 -1
View File
@@ -3,7 +3,24 @@ import React from "react";
export type HostingProvider = {
name: string;
url: string;
description: React.ReactNode;
hosting_article?: String; // Many hosts have their own articles for Geyser
hosting_support?: String; // A link to the host support, can show when setup help fails
custom_install_location?: React.ReactNode; // e.g. aternos, can skip the entire download/config process on setup guide
config?: ConfigDetails; // If present, geyser config must be modified to function
connect_instructions: React.ReactNode; // what players must input to connect
additional_step?: React.ReactNode; // e.g.: must enable udp in settings/enable geyser mode
info?: React.ReactNode; // Additional information. Displayed in info bubble.
warn?: React.ReactNode; // shaming server hosting providers with issues.
}
// Either: clone-remote-port, or
export type ConfigDetails = {
port?: number;
address?: string;
clone_remote_port?: boolean;
port_instruction?: React.ReactNode; // Instructions on where to get a port
address_instruction?: React.ReactNode; // Instructions on where to get the bedrock address
other_instructions?: React.ReactNode; // Other message on which config settings can be changed
}
export type ProviderType = "built_in" | "support" | "no_support";
+3 -2
View File
@@ -1,12 +1,13 @@
{
// This file is not used in compilation. It is here just for a nice editor experience.
"extends": "@docusaurus/tsconfig",
"esModuleInterop": true,
"compilerOptions": {
"lib": ["DOM", "DOM.Iterable", "ESNext"],
"target": "ESNext",
"baseUrl": "."
},
"exclude": [
"**/node_modules"
"**/node_modules",
"build",
]
}
+1 -1
View File
@@ -45,7 +45,7 @@ Set `allow-invalid-usernames` to `true` in LuckPerms' config.
## Failed to verify username! (with Paper) {#failed-to-verify-username-with-paper}
To completely mitigate this issue, disable `perform-username-validation` in the [unsupported settings of the `config/paper-global.yml` file](https://paper.readthedocs.io/en/latest/server/configuration.html#unsupported_settings) (`paper.yml` in the root server folder on servers below 1.19). Using Floodgate on the backend servers will also mitigate this issue.
To completely mitigate this issue, disable `perform-username-validation` in the [unsupported settings of the `config/paper-global.yml` file](https://docs.papermc.io/paper/reference/global-configuration#unsupported_settings) (`paper.yml` in the root server folder on servers below 1.19). Using Floodgate on the backend servers will also mitigate this issue.
## Error with Forge or Fabric Bukkit Hybrid {#error-with-forge-or-fabric-bukkit-hybrid}
+1 -1
View File
@@ -4,7 +4,7 @@ description: Learn how to set up Floodgate on your Paper or Spigot server.
hide_title: true
---
1. Download Floodgate-Spigot from the [download page](https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/spigot).
1. Download Floodgate-Spigot from the [download page](/download/?project=floodgate).
2. Place the Floodgate-Spigot.jar in the `plugins` folder, and restart the server.
3. Change `auth-type` in Geyser's config to `floodgate`.
4. Restart the server.
+1 -1
View File
@@ -9,7 +9,7 @@ You only need to install Floodgate on the BungeeCord or Velocity proxy server, u
Additionally, it will display Bedrock edition skins properly.
:::
1. Download Floodgate for your proxy software from the [download page](https://geysermc.org/download#floodgate).
1. Download Floodgate for your proxy software from the [download page](/download/?project=floodgate).
2. Place the Floodgate jar in the `plugins` folder, and restart the proxy server.
3. Change `auth-type` in Geyser's config to `floodgate`.
4. Restart the server.
+1 -1
View File
@@ -8,7 +8,7 @@ hide_title: true
To be able to use Floodgate authentication, you need to be able to install Floodgate on the Java server you are connecting to.
:::
1. Download and install the platform-specific Floodgate jar (e.g. floodgate-spigot, or floodgate-fabric) [here](https://geysermc.org/download#floodgate).
1. Download and install the platform-specific Floodgate jar (e.g. floodgate-spigot, or floodgate-fabric) [here](/download/?project=floodgate).
See the platform setup instructions for a detailed, platform specific setup guide. Then, continue with the instructions below.
2. Change `auth-type` in Geyser Standalone's config to `floodgate`.
3. Copy the `key.pem` file in the Floodgate config folder to the same directory as Geyser Standalone.
+1 -1
View File
@@ -8,7 +8,7 @@ hide_title: true
To be able to use Floodgate authentication, you need to be able to install Floodgate on the Java server you are connecting to.
:::
1. Download and install the platform-specific Floodgate jar (e.g. floodgate-spigot, or floodgate-fabric) [here](https://geysermc.org/download#floodgate).
1. Download and install the platform-specific Floodgate jar (e.g. floodgate-spigot, or floodgate-fabric) [here](/download/?project=floodgate).
See the platform setup instructions for a detailed, platform specific setup guide. Then, continue with the instructions below.
2. Copy the `key.pem` file in the Floodgate config folder to the `/plugins/Geyser/´ directory.
3. Restart ViaProxy.
+1 -1
View File
@@ -21,7 +21,7 @@ Full Compatibility (Checks Bedrock Players Accurately)
Partially Compatible (Does not Check/Ignores Bedrock Players)
- [GrimAC](https://github.com/MWHunter/Grim) - Last checked on 30th June 2024
- [GrimAC](https://github.com/GrimAnticheat/Grim) - Last checked on 8th November 2024
- [Intave](https://intave.ac) (Paid) Requires [GeyserMC addon](https://github.com/intave/bedrock) - Last checked on 2nd July 2024
- [Matrix](https://matrix.rip/) (Paid) - Last checked on 23rd July 2024
- [Spartan: Java Edition](https://www.spigotmc.org/resources/25638/) (Paid) - Last checked on 18th July 2024
+1 -1
View File
@@ -37,7 +37,7 @@ This means something (likely another instance of Geyser) is running on the port
### [...]` has been compiled by a more recent version of the Java Runtime (class file version 60.0)` {#-has-been-compiled-by-a-more-recent-version-of-the-java-runtime-class-file-version-600}
See this link for updating to Java 17: https://paper.readthedocs.io/en/latest/java-update/index.html.
See this link for updating to Java 17: https://docs.papermc.io/misc/java-install.
### Hosting provider will not immediately open up UDP. {#hosting-provider-will-not-immediately-open-up-udp}
+3 -3
View File
@@ -292,12 +292,12 @@ The following details the schema for the mappings file. Only the `name` field is
- Type: `string`
- Default: `building_blocks`
- Description: The creative category to place the block in.
- Range: See [Creative Categories](https://wiki.bedrock.dev/documentation/creative-categories.html#list-of-creative-categories) on the Bedrock Wiki.
- Range: See [Menu Categories](https://wiki.bedrock.dev/documentation/menu-categories.html#list-of-categories) on the Bedrock Wiki.
- `creative_group`:
- Type: `string`
- Default: none
- Description: The creative group to place the block in.
- Range: See [Creative Tabs](https://wiki.bedrock.dev/documentation/creative-categories.html#list-of-creative-tabs) on the Bedrock Wiki.
- Range: See [Menu Groups](https://wiki.bedrock.dev/documentation/menu-categories.html#list-of-groups) on the Bedrock Wiki.
- `included_in_creative_inventory`:
- Type: `boolean`
- Default: `true`
@@ -311,7 +311,7 @@ The following details the schema for the mappings file. Only the `name` field is
- Description: An object containing state overrides for the block.
- `property1=value1,property2=value2,...`:
- Type: `object`
- Description: An override for a specific block state. Possible states are listed in Geyser's [Block Mappings](https://raw.githubusercontent.com/GeyserMC/mappings/master/blocks.json)
- Description: An override for a specific block state. Possible states are listed in Geyser's [Block Mappings](https://raw.githubusercontent.com/GeyserMC/mappings/6b661f0d517d895aebc1f55a25d2c86f033beb1d/blocks.json)
- Accepts all of the same properties as a block definition except `creative_category`, `creative_group`, `included_in_creative_inventory`, `only_override_states`, and `state_overrides`.
</div>
+1 -1
View File
@@ -41,7 +41,7 @@ To setup custom items in geyser, you have to choose how you are going to registe
* `allow_offhand` (boolean) default: false
* `texture_size` (int) default: 16
* `creative_category` (int) default: not set. This can take values between 1-5, and defines the creative category the item appears in. Note: Adding your item to a creative category is needed if you want recipes that output this custom item to show up in the recipe book! However, including it does NOT mean you can get the custom item from the creative inventory.
* `creative_group` (string) default: not set. Requires a creative category to also be set - allows you to group the custom item in a sub-group. See [here](https://wiki.bedrock.dev/documentation/creative-categories.html#list-of-categories) for all categories.
* `creative_group` (string) default: not set. Requires a creative category to also be set - allows you to group the custom item in a sub-group. See [here](https://wiki.bedrock.dev/documentation/menu-categories.html#list-of-categories) for all categories.
* `render_offsets` (object) It works as follows. Note that all the sub-objects are optional, except x, y and z. You can have for example only a main hand with a position, and noting else. default: no render offset
* `tags` (array) default: no tags. Allows defining tags that can be used in Molang queries. Example value: ["test:tag_one", "test:tag_two"].
```json
+7
View File
@@ -36,6 +36,13 @@ If you have an extension you'd like to see on this list, feel free to open a PR!
To install an extension, simply put the extension .jar file into Geyser's `extensions` folder.
Then, restart Geyser (or the server Geyser runs on).
## Updating Extensions {#updating-extensions}
To update extensions, use the `update` folder within the extensions directory as follows:
1. Copy the updated versions of your extension jars into the `update` folder inside the extensions directory.
2. On the next server or application restart, any extensions in the `update` folder will automatically replace the corresponding extensions in the main extensions directory. If an extension is new, it will be added.
3. If an update fails, it will be logged, and the server/application will proceed with loading extensions as usual. You can review the logs to address any issues.
## Creating Geyser Extensions {#creating-geyser-extensions}
The easiest way to create an extension would be utilizing [this official template](https://github.com/GeyserMC/GeyserExampleExtension/).
+1 -1
View File
@@ -5,7 +5,7 @@ description: 'Geyser is a bridge between Minecraft: Bedrock Edition and Minecraf
---
import { Versions } from '@site/src/components/Versions'
import { useDocById } from '@docusaurus/theme-common/internal'
import { useDocById } from '@docusaurus/plugin-content-docs/client'
import DocCardList from '@theme/DocCardList'
# Overview
+64 -48
View File
@@ -4,60 +4,76 @@ page_sidebar: false
description: Guides to setup Geyser on all supported platforms
---
import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";
import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'
import Admonition from '@theme/Admonition';
import Translate from "@docusaurus/Translate";
import ModdedServers from './setup/provider/modded-servers.mdx';
import ProxyServers from './setup/provider/proxy-servers.mdx';
import PaperSpigot from './setup/provider/paper-spigot.mdx';
import ModdedServers from '@site/wiki/geyser/setup/provider/_modded-servers.mdx'
import ProxyServers from '@site/wiki/geyser/setup/provider/_proxy-servers.mdx'
import PaperSpigot from '@site/wiki/geyser/setup/provider/_paper-spigot.mdx'
import ModdedServersSelf from './setup/self/modded-servers.mdx';
import ProxyServersSelf from './setup/self/proxy-servers.mdx';
import PaperSpigotSelf from './setup/self/paper-spigot.mdx';
import ViaProxy from './setup/self/viaproxy.mdx';
import Standalone from './setup/self/standalone.mdx';
import ModdedServersSelf from '@site/wiki/geyser/setup/self/modded-servers.mdx'
import ProxyServersSelf from '@site/wiki/geyser/setup/self/proxy-servers.mdx'
import PaperSpigotSelf from '@site/wiki/geyser/setup/self/paper-spigot.mdx'
import ViaProxy from '@site/wiki/geyser/setup/self/viaproxy.mdx'
import Standalone from '@site/wiki/geyser/setup/self/standalone.mdx'
import PlatformIcon from '@site/src/components/PlatformIcon'
import ModIcon from '@site/static/img/icons/fabric.png';
import ProxyServersIcon from '@site/static/img/icons/velocity.png';
import PaperSpigotIcon from '@site/static/img/icons/paper.png';
import ViaProxyIcon from '@site/static/img/icons/viaproxy.png';
import StandaloneIcon from '@site/static/img/icons/geyser.png';
import ModIcon from '@site/static/img/icons/fabric.png'
import ProxyServersIcon from '@site/static/img/icons/velocity.png'
import PaperSpigotIcon from '@site/static/img/icons/paper.png'
import ViaProxyIcon from '@site/static/img/icons/viaproxy.png'
import StandaloneIcon from '@site/static/img/icons/geyser.png'
import { ProviderSelector } from "@site/src/components/Provider";
import { ProviderSelector } from '@site/src/components/Provider'
import { useState } from 'react'
<Tabs queryString="host" className="tabs-host-type">
<TabItem value="provider" label="Host Provider" default>
<ProviderSelector/>
<Tabs queryString="platform">
<TabItem value="paper-spigot" label={<PlatformIcon img={PaperSpigotIcon} text="Paper / Spigot"/>} default>
<PaperSpigot/>
export const SetupGuide = () => {
const [provider, setProvider] = useState(null)
return (
<Tabs queryString='host' className='tabs-host-type'>
<TabItem value='provider' label='Host Provider' default>
<ProviderSelector setProvider={setProvider} />
{provider ? (
<>
{provider.connect_instructions ? (
<Tabs queryString='platform'>
<TabItem value='paper-spigot' label={<PlatformIcon img={PaperSpigotIcon} text='Paper / Spigot' />} default>
<PaperSpigot provider={provider} />
</TabItem>
<TabItem value='modded-servers' label={<PlatformIcon img={ModIcon} text='Modded Servers' />}>
<ModdedServers provider={provider}/>
</TabItem>
<TabItem value='proxy-servers' label={<PlatformIcon img={ProxyServersIcon} text='Proxy Servers' />}>
<ProxyServers provider={provider}/>
</TabItem>
</Tabs>
) : (<Admonition type="warning" title={<Translate id='components.provider.no_support'>Not supported</Translate>}>{provider.warn}</Admonition>)}
</>
) : null}
</TabItem>
<TabItem value="modded-servers" label={<PlatformIcon img={ModIcon} text="Modded Servers"/>}>
<ModdedServers/>
</TabItem>
<TabItem value="proxy-servers" label={<PlatformIcon img={ProxyServersIcon} text="Proxy Servers"/>}>
<ProxyServers/>
<TabItem value='self' label='Self Host'>
<Tabs queryString='platform'>
<TabItem value='paper-spigot' label={<PlatformIcon img={PaperSpigotIcon} text='Paper / Spigot' />} default>
<PaperSpigotSelf />
</TabItem>
<TabItem value='modded-servers' label={<PlatformIcon img={ModIcon} text='Modded Servers' />}>
<ModdedServersSelf />
</TabItem>
<TabItem value='proxy-servers' label={<PlatformIcon img={ProxyServersIcon} text='Proxy Servers' />}>
<ProxyServersSelf />
</TabItem>
<TabItem value='viaproxy' label={<PlatformIcon img={ViaProxyIcon} text='ViaProxy' />}>
<ViaProxy />
</TabItem>
<TabItem value='standalone' label={<PlatformIcon img={StandaloneIcon} text='Standalone' />}>
<Standalone />
</TabItem>
</Tabs>
</TabItem>
</Tabs>
</TabItem>
<TabItem value="self" label="Self Host">
<Tabs queryString="platform">
<TabItem value="paper-spigot" label={<PlatformIcon img={PaperSpigotIcon} text="Paper / Spigot"/>} default>
<PaperSpigotSelf/>
</TabItem>
<TabItem value="modded-servers" label={<PlatformIcon img={ModIcon} text="Modded Servers"/>}>
<ModdedServersSelf/>
</TabItem>
<TabItem value="proxy-servers" label={<PlatformIcon img={ProxyServersIcon} text="Proxy Servers"/>}>
<ProxyServersSelf/>
</TabItem>
<TabItem value="viaproxy" label={<PlatformIcon img={ViaProxyIcon} text="ViaProxy"/>}>
<ViaProxy/>
</TabItem>
<TabItem value="standalone" label={<PlatformIcon img={StandaloneIcon} text="Standalone"/>}>
<Standalone/>
</TabItem>
</Tabs>
</TabItem>
</Tabs>
)
}
<SetupGuide />
@@ -0,0 +1,70 @@
import Admonition from '@theme/Admonition';
import { Versions } from '@site/src/components/Versions'
:::caution
Geyser-Fabric and Geyser-NeoForge run **only** on a <Versions platform="java"/> server.
See [this page](/wiki/geyser/supported-versions#fabric-neoforge-servers) for more details.
:::
:::info
Geyser only works with **server-side** mods. Mods that require a client-side install will not work!
:::
{props.provider.warn ? <Admonition type="warning" title='Warn'>{props.provider.warn}</Admonition> : null}
<h3>Installing Geyser:</h3>
{props.provider.custom_install_location ? props.provider.custom_install_location : (
<ol>
<li>Download the mod from [the download page](/download).</li>
<li>Place the Geyser mod jar in the `mods` folder. **For Fabric, you will also need the [FabricAPI](https://modrinth.com/mod/fabric-api) mod.**</li>
<li>Restart the server.</li>
</ol>
)}
<br />
{props.provider.config ? (
<>
<h3>Geyser config changes:</h3>
Open your Geyser config. It is located in `/config/Geyser-Fabric/config.yml` (or
`/config/Geyser-NeoForge/config.yml`), and change the following:
<ul>
{props.provider.config.address ? <li>Change the `address` to `{props.provider.config.address}`</li> : null}
{props.provider.config.port ? <li>Change the `port` to `{props.provider.config.port}`</li> : null}
{props.provider.config.clone_remote_port ? <li>Change `clone-remote-port` to `true`</li> : null}
{props.provider.config.port_instruction ? <li>{props.provider.config.port_instruction}</li> : null}
{props.provider.config.address_instruction ? <li>{props.provider.config.address_instruction}</li> : null}
{props.provider.config.other_instructions ? <li>{props.provider.config.other_instructions}</li> : null}
</ul>
</>
) : null}
{props.provider.additional_step ? (
<>
<h3>Additional Steps:</h3>
{props.provider.additional_step}
<br />
</>
) : null}
{props.provider.connect_instructions ? (
<>
<h3>Connecting on Bedrock:</h3>
{props.provider.connect_instructions}
</>
) : null}
{props.provider.info ? <Admonition type="info" title='Info'>{props.provider.info}</Admonition> : null}
{props.provider.hosting_article || props.provider.hosting_support ? (
<>
<h4>More Information:</h4>
<ul>
{props.provider.hosting_article ? (<li><a href={props.provider.hosting_article} target='_blank'>Hosting provider article</a></li>) : null}
{props.provider.hosting_support ? (<li><a href={props.provider.hosting_support} target='_blank'>Hosting provider support</a></li>) : null}
</ul>
</>
) : null}
@@ -0,0 +1,65 @@
import Admonition from '@theme/Admonition';
import { Versions } from '@site/src/components/Versions'
:::info
If your server is not running <Versions platform="java"/>, you will need to install <a href="https://viaversion.com/">ViaVersion</a>.
See also [this page](/wiki/geyser/supported-versions/) on supported versions.
:::
{props.provider.warn ? <Admonition type="warning" title='Warn'>{props.provider.warn}</Admonition> : null}
<h3>Installing Geyser:</h3>
{props.provider.custom_install_location ? props.provider.custom_install_location : (
<ol>
<li>Download the plugin from [the download page](/download).</li>
<li>Place the Geyser-Spigot.jar in the `plugins` folder.</li>
<li>Restart the server.</li>
</ol>
)}
<br />
{props.provider.config ? (
<>
<h3>Geyser config changes:</h3>
Open your Geyser config. It is located in `/plugins/Geyser-Spigot/config.yml`.
<ul>
{props.provider.config.address ? <li>Change the `address` to `{props.provider.config.address}`</li> : null}
{props.provider.config.port ? <li>Change the `port` to `{props.provider.config.port}`</li> : null}
{props.provider.config.clone_remote_port ? <li>Change `clone-remote-port` to `true`</li> : null}
{props.provider.config.port_instruction ? <li>{props.provider.config.port_instruction}</li> : null}
{props.provider.config.address_instruction ? <li>{props.provider.config.address_instruction}</li> : null}
{props.provider.config.other_instructions ? <li>{props.provider.config.other_instructions}</li> : null}
</ul>
</>
) : null}
{props.provider.additional_step ? (
<>
<h3>Additional Steps:</h3>
{props.provider.additional_step}
<br />
</>
) : null}
{props.provider.connect_instructions ? (
<>
<h3>Connecting on Bedrock:</h3>
{props.provider.connect_instructions}
</>
) : null}
<br />
{props.provider.info ? <Admonition type="info" title='Info'>{props.provider.info}</Admonition> : null}
{props.provider.hosting_article || props.provider.hosting_support ? (
<>
<h4>More Information:</h4>
<ul>
{props.provider.hosting_article ? (<li><a href={props.provider.hosting_article} target='_blank'>Hosting provider article</a></li>) : null}
{props.provider.hosting_support ? (<li><a href={props.provider.hosting_support} target='_blank'>Hosting provider support</a></li>) : null}
</ul>
</>
) : null}
@@ -0,0 +1,68 @@
import Admonition from '@theme/Admonition';
import { Versions } from '@site/src/components/Versions'
:::info
- Install Geyser **only** on the proxy server! You can install Floodgate on all servers for better skin support &
network-wide Floodgate API availability for other plugins.
- All servers on the network must accept <Versions platform="java"/> Java clients, as Geyser imitates one.
:::
{props.provider.warn ? <Admonition type="warning" title='Warn'>{props.provider.warn}</Admonition> : null}
<h3>Installing Geyser:</h3>
{props.provider.custom_install_location ? props.provider.custom_install_location : (
<ol>
<li>Download the plugin for your proxy software from [the download page](/download).</li>
<li>Place the Geyser plugin jar in the `plugins` folder.</li>
<li>Restart the proxy.</li>
</ol>
)}
<br />
{props.provider.config ? (
<>
<h3>Geyser config changes:</h3>
Open your Geyser config. It is located in `/config/Geyser-Velocity/config.yml` (or
`/config/Geyser-BungeeCord/config.yml`), and change the following:
<ol>
{props.provider.config.address ? <li>Change the `address` to `{props.provider.config.address}`</li> : null}
{props.provider.config.port ? <li>Change the `port` to `{props.provider.config.port}`</li> : null}
{props.provider.config.clone_remote_port ? <li>Change `clone-remote-port` to `true`</li> : null}
{props.provider.config.port_instruction ? <li>{props.provider.config.port_instruction}</li> : null}
{props.provider.config.address_instruction ? <li>{props.provider.config.address_instruction}</li> : null}
{props.provider.config.other_instructions ? <li>{props.provider.config.other_instructions}</li> : null}
</ol>
</>
) : null}
{props.provider.additional_step ? (
<>
<h3>Additional Steps:</h3>
{props.provider.additional_step}
<br />
</>
) : null}
{props.provider.connect_instructions ? (
<>
<h3>Connecting on Bedrock:</h3>
{props.provider.connect_instructions}
</>
) : null}
{props.provider.info ? <Admonition type="info" title='Info'>{props.provider.info}</Admonition> : null}
{props.provider.hosting_article || props.provider.hosting_support ? (
<>
<h4>More Information:</h4>
<ul>
{props.provider.hosting_article ? (<li><a href={props.provider.hosting_article} target='_blank'>Hosting provider article</a></li>) : null}
{props.provider.hosting_support ? (<li><a href={props.provider.hosting_support} target='_blank'>Hosting provider support</a></li>) : null}
</ul>
</>
) : null}
@@ -1,45 +0,0 @@
---
title: Geyser Hosting Provider Modded Setup
description: Learn how to set up Geyser on your Fabric or NeoForge server from a hosting provider.
---
import { Versions } from '@site/src/components/Versions'
:::caution
Geyser-Fabric and Geyser-NeoForge run **only** on a <Versions platform="java"/> server.
See [this page](/wiki/geyser/supported-versions#using-geyser-fabric-or-geyser-neoforge-on-servers-that-do-not-run-) for more details.
:::
:::info
Geyser only works with **server-side** mods. Mods that require a client-side install will not work!
:::
1. Select your server hosting provider in the dropdown above.
2. Download the mod from [the download page](https://geysermc.org/download#geyser).
3. Place the Geyser mod jar in the `mods` folder, and restart the server. **For Fabric, you will also need [FabricAPI](https://modrinth.com/mod/fabric-api).**
4. Open your Geyser config, located in `/config/Geyser-Fabric/config.yml` (or `/config/Geyser-NeoForge/config.yml`), and find the following:
```yaml
bedrock:
# The IP address that will listen for connections.
# Generally, you should only uncomment and change this if you want to limit what IPs can connect to your server.
#address: 0.0.0.0
# The port that will listen for connections. This is the port that Bedrock players will use to connect to your server.
port: 19132
# Some hosting services change your Java port everytime you start the server and require the same port to be used for Bedrock.
# This option makes the Bedrock port the same as the Java port every time you start the server.
# This option is for the plugin version only.
clone-remote-port: false
```
The vital part is the port. This is the port that Bedrock players will use to connect to your server.
Follow the instructions in the provider selector - change the port, and if necessary, `clone-remote-port` & `address`.
If `clone-remote-port` is enabled, the bedrock port will be overwritten with the Java port!
**Important**: Other services/mods that rely on ports with UDP, such as Voice Chats or Query, cannot share the port with Geyser.
5. Verify whether connections are possible by running `geyser connectiontest <ip> <port>` in the console.
:::info
To allow Bedrock Edition players to join your server without needing to log in to a paid Java Edition account, you can use <a href="/wiki/floodgate/setup/">Floodgate</a>.
:::
@@ -1,42 +0,0 @@
---
title: Geyser Hosting Provider Paper / Spigot Setup
description: Learn how to set up Geyser on a Paper or Spigot server from a hosting provider.
hide_title: true
---
import { Versions } from '@site/src/components/Versions'
:::info
If your server is not running <Versions platform="java"/>, you will need to install <a href="https://viaversion.com/">ViaVersion</a>.
See also [this page](/wiki/geyser/supported-versions/) on supported versions.
:::
1. Select your server hosting provider in the dropdown above.
2. Download the plugin from [the download page](https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/spigot).
3. Place the Geyser-Spigot.jar in the `plugins` folder, and restart the server.
4. Open your Geyser config, located in `/plugins/Geyser-Spigot/config.yml`, and find the following:
```yaml
bedrock:
# The IP address that will listen for connections.
# Generally, you should only uncomment and change this if you want to limit what IPs can connect to your server.
#address: 0.0.0.0
# The port that will listen for connections. This is the port that Bedrock players will use to connect to your server.
port: 19132
# Some hosting services change your Java port everytime you start the server and require the same port to be used for Bedrock.
# This option makes the Bedrock port the same as the Java port every time you start the server.
# This option is for the plugin version only.
clone-remote-port: false
```
The vital part is the port. This is the port that Bedrock players will use to connect to your server.
Follow the instructions in the provider selector - change the port, and if necessary, `clone-remote-port` & `address`.
If `clone-remote-port` is enabled, the bedrock port will be overwritten with the Java port!
**Important**: Other services/plugins that rely on ports with UDP, such as Voice Chats or Query, cannot share the port with Geyser.
5. Verify whether connections are possible by running `geyser connectiontest <ip> <port>` in the console.
:::info
To allow Bedrock Edition players to join your server without needing to log in to a paid Java Edition account, you can use <a href="/wiki/floodgate/setup/">Floodgate</a>.
:::
@@ -1,43 +0,0 @@
---
title: Geyser Hosting Provider Proxy Servers Setup
description: Learn how to set up Geyser on your Bungee, Waterfall, or Velocity server from a hosting provider.
hide_title: true
---
import { Versions } from '@site/src/components/Versions'
:::info
- Install Geyser **only** on the proxy server! You can install Floodgate on all servers for better skin support &
network-wide Floodgate API availability for other plugins.
- All servers on the network must accept <Versions platform="java"/> Java clients, as Geyser imitates one.
:::
1. Select your server hosting provider in the dropdown above.
2. Download the plugin for your proxy software from [the download page](https://geysermc.org/download).
3. Place the Geyser jar in the `plugins` folder, and restart the server.
4. Open your Geyser config, located in `/plugins/Geyser-xyz/config.yml`, and find the following:
```yaml
bedrock:
# The IP address that will listen for connections.
# Generally, you should only uncomment and change this if you want to limit what IPs can connect to your server.
#address: 0.0.0.0
# The port that will listen for connections. This is the port that Bedrock players will use to connect to your server.
port: 19132
# Some hosting services change your Java port everytime you start the server and require the same port to be used for Bedrock.
# This option makes the Bedrock port the same as the Java port every time you start the server.
# This option is for the plugin version only.
clone-remote-port: false
```
The vital part is the port. This is the port that Bedrock players will use to connect to your server.
Follow the instructions in the provider selector - change the port, and if necessary, `clone-remote-port` & `address`.
If `clone-remote-port` is enabled, the bedrock port will be overwritten with the Java port!
**Important**: Other services/plugins that rely on ports with UDP, such as Voice Chats or Query, cannot share the port with Geyser.
5. Verify whether connections are possible by running `geyser connectiontest <ip> <port>` in the console.
:::info
To allow Bedrock Edition players to join your server without needing to log in to a paid Java Edition account, you can use <a href="/wiki/floodgate/setup/">Floodgate</a>.
:::
+2 -2
View File
@@ -8,14 +8,14 @@ import { Versions } from '@site/src/components/Versions'
:::caution
Geyser-Fabric and Geyser-NeoForge run **only** on a <Versions platform="java"/> server.
See [this page](/wiki/geyser/supported-versions#using-geyser-fabric-or-geyser-neoforge-on-servers-that-do-not-run-) for more details.
See [this page](/wiki/geyser/supported-versions#fabric-neoforge-servers) for more details.
:::
:::info
Geyser only works with **server-side** mods. Mods that require a client-side install will not work!
:::
1. Download the mod from [the download page](https://geysermc.org/download#geyser).
1. Download the mod from [the download page](/download).
2. Place the Geyser mod jar in the `mods` folder, and restart the server. **For Fabric, you will also need [FabricAPI](https://modrinth.com/mod/fabric-api).**
3. Open your Geyser config, located in `/config/Geyser-Fabric/config.yml` (or `/config/Geyser-NeoForge/config.yml`), and find the following:
+1 -1
View File
@@ -10,7 +10,7 @@ If your server is not running <Versions platform="java"/>, you will need to inst
See also [this page](/wiki/geyser/supported-versions/) on supported versions.
:::
1. Download the plugin from [the download page](https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/spigot).
1. Download the plugin from [the download page](/download).
2. Place the Geyser-Spigot.jar in the `plugins` folder, and restart the server.
3. Open your Geyser config, located in `/plugins/Geyser-Spigot/config.yml`, and find the following:
+1 -1
View File
@@ -12,7 +12,7 @@ import { Versions } from '@site/src/components/Versions'
- All servers on the network must accept <Versions platform="java"/> Java clients, as Geyser imitates one.
:::
1. Download the plugin for your proxy software from [the download page](https://geysermc.org/download).
1. Download the plugin for your proxy software from [the download page](/download).
2. Place the Geyser jar in the `plugins` folder, and restart the server.
3. Open your Geyser config, located in `/plugins/Geyser-xyz/config.yml`, and find the following:
+1 -1
View File
@@ -14,7 +14,7 @@ Geyser-Standalone is NOT a plugin or mod! It is a standalone Java program that y
### General Setup & Configuration {#general-setup--configuration}
1. Download Geyser Standalone from [here](https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/standalone).
1. Download Geyser Standalone from [here](/download).
2. Create a new folder for Geyser, and drop the jar in there.
3. Start Geyser Standalone:
- **GUI** (Recommended):
+1 -1
View File
@@ -4,7 +4,7 @@ description: Learn how to set up Geyser with ViaProxy.
---
1. [Setup ViaProxy](https://github.com/ViaVersion/ViaProxy?tab=readme-ov-file#usage-for-players-gui).
2. Download the plugin from [the download page](https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/viaproxy).
2. Download the plugin from [the download page](/download).
3. Place the Geyser-ViaProxy.jar in the `plugins` folder, and restart ViaProxy.
4. Open your Geyser config, located in `/plugins/Geyser/config.yml`, and find the following:
+1 -1
View File
@@ -30,7 +30,7 @@ In order for Bedrock players to chat (1.19.3+) or join (1.19.1/1.19.2), you need
This is unfortunately not possible. You'll need to use a proxy such as Velocity or BungeeCord, or set up Geyser-Standalone separately with the [ViaVersion](https://github.com/ViaVersion/ViaVersion) plugin. Another alternative would be to install [ViaProxy](https://github.com/ViaVersion/ViaProxy), which is a standalone ViaVersion proxy that
translates between different Minecraft: Java edition versions, and to install Geyser-ViaProxy on it.
### Using Geyser-Fabric or Geyser-NeoForge on servers that do not run <Versions platform="java"/>
### Using Geyser on Fabric/NeoForge servers not on the latest Minecraft version {#fabric-neoforge-servers}
Unfortunately, Geyser-Fabric and Geyser-NeoForge only support the latest version of Minecraft: Java edition. The recommended way to still use
Geyser with older versions would be to install [ViaProxy](https://github.com/ViaVersion/ViaProxy), which is a standalone ViaVersion proxy that
translates between different Minecraft: Java edition versions, and to install Geyser-ViaProxy on it. This will also work with Floodgate auth.
+1 -1
View File
@@ -7,7 +7,7 @@ description: Information on how to use Geyser with consoles, including how to jo
All consoles can join third-party servers - including Geyser servers - with workarounds. Xbox One, Nintendo Switch, and PS4 systems can join third-party servers using a third-party program called BedrockConnect. For technical information about the program, including how to run your own setup, see [their GitHub repository](https://github.com/Pugmatt/BedrockConnect) (*This program is not affiliated with GeyserMC*). Other methods are also available for use.
<!--There is also a tool anyone can set up that allows you to connect to the server via adding a user to your friends list - [FriendConnect](https://github.com/Androecia/FriendConnect), and [MCXboxBroadcast](https://github.com/rtm516/MCXboxBroadcast). The latter one can even be set up as a Geyser Extension.-->
<!--There is also a tool anyone can set up that allows you to connect to the server via adding a user to your friends list - [FriendConnect](https://github.com/jrcarl624/FriendConnect), and [MCXboxBroadcast](https://github.com/rtm516/MCXboxBroadcast). The latter one can even be set up as a Geyser Extension.-->
:::note
+1 -1
View File
@@ -7,7 +7,7 @@ GeyserConnect is a extension for Geyser that allows you to join multiple servers
## Setup {#setup}
(For GeyserConnect to work you need an open UDP port, by default it's `19132`).
1. Download the latest Geyser build from the [downloads page](https://geysermc.org/download#standalone)
1. Download the latest Geyser build from the [downloads page](/download)
2. Download the latest build from [here](https://geysermc.org/download/?project=other-projects&geyserconnect=expanded)
3. Extract the downloaded ZIP file, and put the extracted JAR file into the `extensions` folder in your GeyserMC standalone installation.
4. Start Geyser standalone as you do with a normal Geyser install. EG: `java -Xms1024M -jar Geyser.jar` (More info on [Creating a Startup Script](/wiki/geyser/creating-a-startup-script/))
+1 -1
View File
@@ -17,7 +17,7 @@ Supported Versions:
- Fabric: 1.21/1.21.1
## Download {#download}
- Spigot/Paper: [GeyserMC downloads page](/download?project=other-projects&hurricane=expanded)
- Spigot/Paper: [GeyserMC downloads page](/download/?project=other-projects&hurricane=expanded)
- Fabric/NeoForge: [Modrinth](https://modrinth.com/mod/hurricane/versions)
## Source {#source}
+1 -1
View File
@@ -17,7 +17,7 @@ This project is still in very early development and should not be used on produc
## Download {#download}
You can download Hydraulic [here](https://geysermc.org/download/?project=other-projects&hydraulic=expanded).
You can download Hydraulic [here](/download/?project=other-projects&hydraulic=expanded).
## Contributing {#contributing}
+1 -1
View File
@@ -5,7 +5,7 @@ description: 'Other projects or guides not directly referring to Geyser or Flood
---
import DocCardList from '@theme/DocCardList'
import { useDocById } from '@docusaurus/theme-common/internal'
import { useDocById } from '@docusaurus/plugin-content-docs/client'
# Overview of Other projects
+1 -1
View File
@@ -3,7 +3,7 @@ title: ThirdPartyCosmetics
description: An optional Bedrock resource pack to extend Geyser functionality.
---
## [Download here](https://download.geysermc.org/v2/projects/thirdpartycosmetics/versions/latest/builds/latest/downloads/thirdpartycosmetics) {#download-here}
## [Download here](/download/?project=other-projects&thirdpartycosmetics=expanded) {#download-here}
ThirdPartyCosmetics is an extension that adds support for loading ears and other third party cosmetics on java players.
+18112 -10757
View File
File diff suppressed because it is too large. Load diff