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
66 changed files with 19314 additions and 11887 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 -23
View File
@@ -23,31 +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-decision-tree-flow": "^2.1.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": [
@@ -62,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>
);
}
@@ -1,7 +0,0 @@
export interface StepData {
path: string[];
}
export default interface StepProps {
data: StepData;
}
@@ -1,64 +0,0 @@
import { Controls, Step, useControls, Wizard } from 'react-decision-tree-flow'
import Step1 from './steps/Step1'
import Step2 from './steps/Step2'
import Step3 from './steps/Step3'
import Error from './steps/Error'
import { useEffect, useState } from 'react'
import { StepData } from './StepProps'
import MarkDownStep from './steps/MarkDownStep'
// React components for each step
const stepComponents = [
Step1,
Step2,
Step3,
Error
]
// Build the steps object from the stepComponents array
function formatStepName(name: string): string {
return name.charAt(0).toLowerCase() + name.slice(1)
}
let steps = Object.fromEntries(stepComponents.map((Component) => [formatStepName(Component.name), Component]))
// Add the markdown steps
steps = {
//test: MarkDownStep(Test),
...steps
}
// Make a tree so all steps can go to all others
const tree = Object.fromEntries(Object.keys(steps).map((key, i, arr) => {
return [key, arr]
}))
function TreeInternals(): JSX.Element {
const [data, setData] = useState<StepData>({
path: []
})
const { step } = useControls();
useEffect(() => {
if (step == 'internalStep') {
console.log()
}
setData(data => ({...data, path: [...data.path, step as string]}))
}, [step])
return (
<>
{Object.entries(steps).map(([name, Component]) => <Step key={name} name={name}><Component data={data}/></Step>)}
</>
)
}
export default function TroubleshootingTree(): JSX.Element {
return (
<Wizard tree={tree} first={Object.keys(steps)[0]}>
<TreeInternals />
</Wizard>
)
}
@@ -1,16 +0,0 @@
import { useControls } from "react-decision-tree-flow";
import StepProps from "../StepProps";
export default function Error({ data }: StepProps): JSX.Element {
const { step, tree, destinations, back } = useControls();
return (
<>
I am error
<br />
Path: {data.path.join(' -> ')}
<br />
<button onClick={() => destinations.step1({...data, path: [...data.path, step]})}>Go back to start</button>
</>
)
}
@@ -1,10 +0,0 @@
import { useControls } from "react-decision-tree-flow";
import StepProps from "../StepProps";
export default function MarkDownStep(Component: any): Function {
return function InternalStep({ data }: StepProps): JSX.Element {
const { step, tree, destinations, back } = useControls();
return (<Component step={step} tree={tree} destinations={destinations} back={back} data={data}/>)
}
}
@@ -1,27 +0,0 @@
import { useControls } from "react-decision-tree-flow";
import StepProps from "../StepProps";
export default function OwnerPrerequesites({ data }: StepProps): JSX.Element {
const { step, tree, destinations, back } = useControls();
return (
<>
# Before we start...
Are you hosting a Geyser instance yourself?
You should click "Yes" if you...:
- ...own and operate a Minecraft: Java edition server with the Geyser plugin/mod installed.
- ...have a Geyser-Standalone / Geyser-ViaProxy instance set up to connect to other servers.
- ...use any variant of Geyser on any supported platform.
If you are NOT hosting your own Geyser instance or server - and are intead connecting to someone's server -
then please contact the server administrator for help.
<br />
// TODO add "return" button
<button onClick={() => destinations.step2({...data, path: [...data.path, step]})}>Go to Step 2</button>
</>
)
}
@@ -1,14 +0,0 @@
import { useControls } from "react-decision-tree-flow";
import StepProps from "../StepProps";
export default function Step1({ data }: StepProps): JSX.Element {
const { step, tree, destinations, back } = useControls();
return (
<>
I am step 1
<br />
<button onClick={() => destinations.step2({...data, path: [...data.path, step]})}>Go to Step 2</button>
</>
)
}
@@ -1,17 +0,0 @@
import { useControls } from "react-decision-tree-flow";
import StepProps from "../StepProps";
export default function Step2({ data }: StepProps): JSX.Element {
const { step, tree, destinations, back } = useControls();
return (
<>
I am step 2
<br />
<div>
<button onClick={() => destinations.error({...data, path: [...data.path, step]})}>Go to error</button>
<button onClick={() => destinations.step3({...data, path: [...data.path, step]})}>Go to Step 3</button>
</div>
</>
)
}
@@ -1,12 +0,0 @@
import { useControls } from "react-decision-tree-flow";
import StepProps from "../StepProps";
export default function Step3({ data }: StepProps): JSX.Element {
const { step, tree, destinations, back } = useControls();
return (
<>
I am step 3. No steps after me!
</>
)
}
@@ -1,116 +0,0 @@
steps:
init: u owner?
"""
// TODO figure out steps; simplify language
# Before we start...
Are you hosting a Geyser instance yourself?
You should click "Yes" if you...:
- ...own and operate a Minecraft: Java edition server with the Geyser plugin/mod installed.
- ...have a Geyser-Standalone / Geyser-ViaProxy instance set up to connect to other servers.
- ...use any variant of Geyser on any supported platform.
If you are NOT hosting your own Geyser instance or server - and are intead connecting to someone's server -
then please contact the server administrator for help.
options: y/n -> y: start troubleshooting; n -> show a link to send to administrator
"""
then: u using right guide?
"""
any errors in your log? do you see a connection attempt? conntest command?
"""
1. Toubleshooting start
Self hosting vs minecraft server hosting provider
"""
Hosting provider:
Select this option if you are using a Minecraft server hosting provider that
provides you with a Minecraft server.
Self-Hosted @ home:
Select this option if you are hosting on your own Windows/Linux/MacOS computer,
server located at your location.
Self-Hosted @ nothome:
Applies for KVM/VPS/Bare-Metal servers (and similar) that are not located at your location.
"""
-------------------------------------------------------------------------------
Hosting provider:
1. Select provider (dropdown w. search / not listed)
Non-Listed:
- recommend clone-remote-port, do basic dump checks for bad options/system properties
- pls contact host!
"""
We unfortunately do not have instructions available for the server hosting provider you're using.
However, we recommend trying these configurations:
1. Runnning Geyser on the Java server port
- Open the Geyser configuration, and set `clone-remote-port` to `true`. Then, save the changes, and restart the server.
- Verify connecting works:
-> directly connect with the java server ip and port
or
-> connectiontest command
If none of these options work, please contact your server hosting provider for help on how to set up Geyser.
"""
Listed:
- geyser dump
-> configuration check (match with instructions???)
-> bad options: proxy protocol; remote address
-> check for system properties
- options:
-> re-ask for a geyser dump (verify correct changes)
-> still not working; continue troubleshooting
-> errors in log?
-> else: contact host pls
-> works now -> send to feedback page?
OR: unable to get dump
-> is server running? log???
Options:
-> addr. in use -> show setup steps
-> port in use (-> check for voice plugins/query???)
-> startup errors -> join discord/open github issue
-> ...
IF server running/config correct:
-> ensure connection to proper ip/port
-> contact server hosting provider for help
-> join discord if unclear
-------------------------------------------------------------------------------
Self-Hosted @ home:
First stage: Gather information!
Which OS are you hosting on? Linux/Win/MacOS
-> Windows
-> MacOS
-> Linux
-------------------------------------------------------------------------------
+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
+3 -3
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}
@@ -99,9 +99,9 @@ It has other benefits too. Here's a plugin that can just do that:
[CommandWhitelist](https://www.spigotmc.org/resources/81326/). Alternatively, use the [HideCommands](https://github.com/Redned235/HideCommands) Geyser extension to hide commands just for Bedrock players.
# Failed to load locale asset cache: Unrecognized token 'Cannot'
This or anything else related to failing to download a locale file on startup is usually caused by java trying to connect using IPv6 and Mojadng only use IPv4, so start Geyser or the server up with this flag `-Djava.net.preferIPv4Stack=true`, EG: `java -Xms1024M -Djava.net.preferIPv4Stack=true -jar Geyser.jar`
This or anything else related to failing to download a locale file on startup is usually caused by java trying to connect using IPv6 and Mojang only use IPv4, so start Geyser or the server up with this flag `-Djava.net.preferIPv4Stack=true`, EG: `java -Xms1024M -Djava.net.preferIPv4Stack=true -jar Geyser.jar`
# Outdated client! Please use 1.x.x
# Outdated client! Please use 1.x.x
The server is too new or Geyser is outdated. Make sure you're on the latest Geyser.
+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/).
@@ -3,10 +3,6 @@ title: Fixing 'Unable to Connect to World'
description: Common issues and solutions for the 'Unable to Connect to World' error.
---
import TroubleshootingTree from '@site/src/components/TroubleshootingTree';
<TroubleshootingTree />
## Fixing 'Unable to Connect to World' errors {#fixing-unable-to-connect-to-world-errors}
This is by far the most common error people get when attempting to set up Geyser. Here's some steps on how to solve it.
Usually, this error is caused by improper configuration of Geyser, or issues with your network.
+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
File renamed without changes.
-36
View File
@@ -1,36 +0,0 @@
---
title: Information for server hosting providers
description: Useful information specifically aimed at server hosting providers.
---
# Information for server hosting providers
Hello! If you see this page, it's likely one of your users sent it to you as they wish to use the Geyser plugin/mod. This page aims to explain the configuration needed for Geyser, your options to automatically configure it to make it easier for users, and other noteworthy details.
# What is Geyser/Floodgate?
Geyser is a proxy allowing Minecraft: Bedrock edition users to play on Minecraft: Java edition servers. It can be used as a plugin, a mod, or as a standalone program.
# Requirements
Since Bedrock edition uses UDP (instead of TCP, as Java edition does), Geyser requires a port with UDP traffic allowed on it to properly function. Some setups, such as running Geyser in docker/pterodactyl or some providers such as OVH have specific configuration requirements. See our [portforwarding guide](/wiki/geyser/port-forwarding.md) for further information.
It can be the same port as the Java server, but it cannot be shared with other plugins using UDP traffic, such as voice chat plugins/mods, or Minecraft's query.
Further, see [here](/wiki/geyser/supported-versions/) for which Minecraft versions are currently supported.
# Geyser Download API
Geyser can be automatically downloaded from Geyser's download api. See [our api docs](/wiki/api/downloads.geysermc.org/) for usage instructions. Our current download api is based on Paper's downloads api, so you might be able to re-use existing scripts.
# Auto-Configuring Geyser
For maximum convenience for users, Geyser supports automatic configuration via system properties. See [here](/wiki/geyser/geyser-command-line-arguments-and-system-properties.md) for more information.
# Adding your host to our wiki
You can add usage instructions for your host [here](/src/data/providers.ts). Doing so allows us to direct users to proper instructions.
# Contacting us
Join our discord!
+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,48 +0,0 @@
---
title: Resolving Address already in use
description: A small guide on resolving the "Address already in use" error.
---
# Resolving "Address already in use"
This error means that something else using UDP is already running on the address/port that Geyser
is trying to bind to.
## Potential causes
The following section lists potential causes for this issue.
### Incorrect configuration
If you are using a Minecraft server hosting provider, this can also be caused by your Geyser configuration not using
the port assigned to your server. Please make sure you configured Geyser properly by checking our [setup guide](/wiki/geyser/setup).
:::info
If you are using a Minecraft server hosting provider, you may only have one UDP port assigned to you.
In that case, you **cannot** use multiple of the features listed here, and may need to choose one over another.
:::
### Minecraft's Query system
It also utilizes UDP, and some server hosting providers automatically enable it or change the port it is running on.
If you suspect it is conflicting with Geyser, you can disable query entirely, or change the query port.
To *disable* it:
| Platform | Spigot/Paper/Fabric/NeoForge | BungeeCord | Velocity |
|:---------|:-----------------------------|:--------------------------|:-------------------------------------|
| Filename | `server.properties` | BungeeCord's `config.yml` | `velocity.toml` |
| Options | `enable-query=false` | `query_enabled:false` | `[query]` section: `enabled = false` |
To *change the port* it is running on:
| Platform | Spigot/Paper/Fabric/NeoForge | BungeeCord | Velocity |
|:---------|:-----------------------------|:--------------------------|:---------------------------------|
| Filename | `server.properties` | BungeeCord's `config.yml` | `velocity.toml` |
| Options | change `query.port` | change `query_port` | `[query]` section: change `port` |
### Voice Chat plugins/mods
You can remove them, or change the port in their respective configuration. Please consult their documentation to find out how!
### Another application using UDP
If you are self-hosting, it can also mean that something (likely another instance of Geyser) is running on the port you have specified in the config.
Please make sure you close all applications running on this port. If you don't recall opening anything, usually restarting your computer fixes this.
@@ -1,32 +0,0 @@
---
title: Command/Permission issues
description: This page aims to resolve issues about being unable to run or use Geyser commands.
---
# Resolving issues related to commands and command permissions
---------
# Geyser commands not available to players
See [our page on commands](/wiki/geyser/commands/) for information on how to grant permissions to players.
For Floodgate commands, see [here](/wiki/floodgate/commands).
---------
# Bedrock clients freeze when opening up commands for the first time
Disable `command-suggestions` in your Geyser config. This will stop the freezing at the expense of removing command suggestions from Bedrock clients.
If you're a dedicated server admin, you can have a list of commands players should be using. This will remove any unnecessary commands from tab completion as well for Java players.
It has other benefits too. Here's a plugin that can just do that:
[CommandWhitelist](https://www.spigotmc.org/resources/81326/). Alternatively, use the [HideCommands](https://github.com/Redned235/HideCommands) Geyser extension to hide commands just for Bedrock players.
---------
# Unable to whitelist / op Bedrock players
## Whitelist command
To whitelist Bedrock players when using Floodgate, use the [`/fwhitelist` command](/wiki/floodgate/features#whitelist-command) provided by Floodgate.
## For other commands:
In some instances, like if you have the `username-prefix` set to `*`, you may need to wrap the Bedrock player's username in quotes; for example: `/tp "*BedrockPlayer"`. Setting the prefix to `.` should also fix this.
@@ -1,16 +0,0 @@
---
title: Connecting to your Geyser instance
description: This page aims to show how to connect to your server.
---
# TODO
TODO! GeyserConnect (what is ip???)
# Connecting to your Geyser instance
## Finding your IP / port
## Connecting
## Connecting on consoles
@@ -1,58 +0,0 @@
---
title: Resolving Connection closed or End of Stream
description: This page aims to resolve various issues that can result in that error.
---
# Resolving `Connection closed` or `End of Stream`
This error indicated that the Java server closed or ended the connection between Geyser and the Java server.
There are a lot of potential reasons for this, so this guide will show only general troubleshooting steps.
# 1. Check your server log / console
First, check your server console and/or server logs.
There, look for the connection attempt you made
// TODO image of a connection attempt
If you do not see a connection attempt nor anything else in your console when you try to connect,
make sure that you connect to the correct IP / port of your server!
If you found the connection attempt, read further until you see Geyser's or the server's disconnection
message.
// TODO image stacktrace
Now, look for other errors, warnings, or stacktraces that occur when joining (or even when starting the server!).
Those should give you a hint of what is not working.
Example:
// TODO add some screenshot
Here, the plugin `aewce` is malfunctioning as it is not updated to the correct server version.
To resolve the case here, update or remove it.
# 2. Check for incompatible plugins
Sometimes there are no obvious errors or warnings. In this case, you should check for conflicts with other plugins,
specifically those that purposefully prevent players from joining (such as anti-ddos or block plugins).
Known to cause this:
- The Cosmicguard plugin blocks all Geyser conenctions. It is not compatible and should be removed to use Geyser.
- The TCPshield plugin
If you are not running any of these, try a binary search to find the troublemaker.
::: Binary search
// TODO
:::
-> TCPshield, Cosmicguard plugins
-> ??? (plugin debugging)
# 3. Still not working?
Sometimes, it might be tricky to spot the issue. In this case, please join the Geyser discord server and ask for help there!
Make sure to send a full log showing the error, alonside a link to this page to show which steps you've tried.
-10
View File
@@ -1,10 +0,0 @@
---
title: Other issues
description: This page lists quick fixes for various other issues.
---
# illegal nickname
# luckperms invalid usernames
# proxy setups invalid usernames
@@ -1,39 +0,0 @@
---
title: Troubleshooting
description: This page aims to resolve various issues related to using Geyser or Floodgate.
---
# Troubleshooting
:::info
These guides are for **server admins**.
**If you are *not* hosting a Geyser/Floodgate instance yourself, ask your server admin for help.
If you are seeing errors on a Java client, you should look at other troubleshooting info.**
:::
## Connection issues
---------------------------------------
- [How to connect to your server](/wiki/geyser/troubleshooting/connecting-to-the-server.mdx)
- Unable to connect
- [`Address in use`](/wiki/geyser/troubleshooting/address-already-in-use)
- [secure profiles](/wiki/geyser/troubleshooting/secure-chat)
- [`Connection Closed` or `End of Stream`](/wiki/geyser/troubleshooting/connection-closed.md)
- outdated server/client
- connect through the official geyser
- log in xbox
## Gameplay related
-------
- skins not loading
- [Unable to chat](/wiki/geyser/troubleshooting/secure-chat/)
- [Command issues](/wiki/geyser/troubleshooting/command-issues/)
## Warnings in the server log/console
-------
- scoreboard related
- custom item/blocks
- ???
-------
@@ -1,5 +0,0 @@
---
title: Resolving Unable to connect to world
description: This page aims to resolve various issues that can result in that error.
---
+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 -10762
View File
File diff suppressed because it is too large. Load diff