Compare commits
21
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8fdb311b68 | ||
|
|
967c2580f7 | ||
|
|
3e0863aaa8 | ||
|
|
83b80c1413 | ||
|
|
382070b4e9 | ||
|
|
8db8d9a01c | ||
|
|
41fcf9758d | ||
|
|
874a52df6a | ||
|
|
38ec4c30c2 | ||
|
|
f767377854 | ||
|
|
ac80a7b7a4 | ||
|
|
902e9f3da7 | ||
|
|
17e3b06b3d | ||
|
|
8c979ebcf8 | ||
|
|
3ca38489b2 | ||
|
|
70e1717064 | ||
|
|
97dd0dab0a | ||
|
|
6926df9337 | ||
|
|
be93c3b2bd | ||
|
|
468aa18542 | ||
|
|
35d7fb58be |
No files matched your search
@@ -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
|
||||
@@ -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
@@ -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
|
||||
@@ -0,0 +1 @@
|
||||
nodeLinker: node-modules
|
||||
@@ -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
@@ -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
@@ -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
File diff suppressed because it is too large.
Load diff
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
@@ -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
@@ -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
@@ -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",
|
||||
]
|
||||
}
|
||||
@@ -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}
|
||||
|
||||
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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}
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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/).
|
||||
|
||||
@@ -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
@@ -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>.
|
||||
:::
|
||||
@@ -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:
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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:
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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/))
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
Reference in new issue
Block a user