Author SHA1 Message Date
Novampr 040b5d77f5 Fix TODOs in setup.md 2026-09-24 11:51:34 +01:00
AuriandOlivia 49f08ce13b Update wiki/geyser/nethernet/setup.md
Co-authored-by: Olivia <chew@chew.pw>
2026-09-24 11:47:13 +01:00
AuriandOlivia c5bf54fca9 Update wiki/geyser/nethernet/setup.md
Co-authored-by: Olivia <chew@chew.pw>
2026-09-24 11:47:03 +01:00
Novampr af24b7eba2 Add Nethernet upgrade guide 2026-09-15 15:36:15 +01:00
SleepyPop 622a065aa2 Update Geyser API version (#177)
* Update Geyser API version

* Update Geyser API version to 2.11.2-SNAPSHOT
2026-09-13 12:50:00 +02:00
SleepyPopandAuri 926425bc8b Indicate Minecraft: Bedrock Edition 26.45 support (#184)
* Update versions.json

* Update src/data/versions.json

Co-authored-by: Auri <auroranova8756@gmail.com>

---------

Co-authored-by: Auri <auroranova8756@gmail.com>
2026-09-03 14:00:19 +01:00
Muhammad Fardeen dc4d8287fc Add Junction to community projects (#156)
* Replace BedrockPlayerManager with Junction

* update doc url

* keep bpm
2026-08-19 14:14:11 +01:00
SleepyPop 951364e274 Rename Feather Client to Dawn (#165)
* Update providers.ts

* Update code.json
2026-08-15 14:15:49 +01:00
rtm516 83c170d32e Add privacy policy link to footer 2026-08-11 22:48:30 +01:00
Joël de Jager a93b076803 Update hosting provider listings (#157)
* Updating listing of ConsulHosting

* Remove listings of certain providers

* Update listing of Snakecraft Hosting/RackGenius
2026-08-08 15:33:10 +01:00
Eclipse a0b731f3c7 Update wiki for custom skull JSON mappings (#175)
* Update custom-skulls page for JSON mappings

* Some more updates

* Address reviews
2026-08-04 16:13:12 +00:00
SleepyPop a5d2cd52ee Add Floodgate Databases to the Other Projects section (#163)
* Update download.tsx

* Update download.tsx to match recent changes

* Update linking.md

* Add MongoDB, MySQL, and SQLite Icon

* Update download.tsx

* Update download.tsx

* Remove MongoDB, MySQL, and SQLite icons
2026-08-04 01:07:01 +02:00
SleepyPop ffb913426e Update latest bedrock version to v26.33 (#170) 2026-07-10 13:17:19 +01:00
287abfb9b6 26.2: Documentation for Custom Waypoints style API and Custom Entities (#161)
* Write documentation for the new custom waypoints style API

* Update Rainbow's wiki page and add it to the index

* Add item display disclaimer to Rainbow wiki, reference to Rainbow in custom blocks and custom resource pack articles

* Some more waypoint style wiki and other small things

* Update wiki/geyser/custom-waypoints.mdx

Co-authored-by: Auri <auroranova8756@gmail.com>

* Document (custom) entity API (#164)

* Document (custom) entity API

* btw you would also probably want to have a resource pack, eh?

* Java 26.2 (#167)

* Netherlink? No, MCCompanion. (#160)

You haven't heard? We are rebranding.

* Update versions.json (#162)

* Java 26.2 👀

---------

Co-authored-by: Hasan <52300558+hasankayra04@users.noreply.github.com>
Co-authored-by: SleepyPop <81194303+SleepyPopp@users.noreply.github.com>

* Rename "custom resource pack" section to "custom content", update docs to reflect custom entity API changes

* Apply suggestions from code review

Co-authored-by: chris <github@onechris.mozmail.com>

---------

Co-authored-by: chris <github@onechris.mozmail.com>
Co-authored-by: Auri <auroranova8756@gmail.com>
Co-authored-by: Hasan <52300558+hasankayra04@users.noreply.github.com>
Co-authored-by: SleepyPop <81194303+SleepyPopp@users.noreply.github.com>
2026-07-10 13:16:49 +01:00
Hasan f14b71c171 Fix Geyser references in playit-gg documentation (#168)
Clear some confusion.
2026-07-09 19:52:28 +02:00
SleepyPop ca17509448 Update versions.json (#162) 2026-07-01 12:41:07 +02:00
Hasan dcae7b5688 Netherlink? No, MCCompanion. (#160)
You haven't heard? We are rebranding.
2026-06-26 18:31:38 +02:00
Callum b4d89ef147 Update Supporting Versions (#159)
* Update versions.json

* Update versions.json again

* remove spaces in java version
2026-06-16 22:45:05 +02:00
Callum 419ae34d04 remove HamsterAPI from plugins that can cause issues (#158) 2026-06-14 17:43:37 +02:00
SleepyPopandchris 0b62a113bb Update Hydraulic and Thunder setup guides and versions.json (#154)
* Update project setup for Hydraulic

* Update usage for Thunder

* Add minor adjustment to project setup for Hydraulic

* Update versions.json

* Update wiki/other/hydraulic.md

Co-authored-by: chris <github@onechris.mozmail.com>

---------

Co-authored-by: chris <github@onechris.mozmail.com>
2026-05-31 14:24:11 +01:00
Bobcat00 3957cab101 Update link to Bloom Host's documentation 2026-05-25 21:26:42 +01:00
SleepyPop 72ed5d1e68 Update Geyser API version to 2.10.0-SNAPSHOT (#152) 2026-05-21 16:57:44 +02:00
Mr.N0BODYandMr NOBODY e89a5eff14 add NolimitHost to provider list (#150)
Co-authored-by: Mr NOBODY <nobody@nlmt.cc>
2026-05-20 11:24:18 +01:00
Alisa Vulpes 1ea6457072 Add a better version of crossplatform_2.png (#151)
* Delete static/img/site/crossplatform_2.png

* Add a better version of crossplatform_2.png
2026-05-20 02:24:42 +02:00
SleepyPop 14b1d29106 Remove high resolution items link (#149) 2026-05-14 14:56:35 +01:00
Eclipse 57cf58d420 Add extensions to dump viewer (#146) 2026-05-13 20:06:37 +01:00
AuriandLuke 17f5a5b927 Require java 21, minimum version is 1.20.5 now (#145)
* Require java 21, minimum version is 1.20.5 now

* Fix permlink

* Remove repition

* 650 to 600 for the anchor

* Update common-issues.md

---------

Co-authored-by: Luke <32024335+lukeeey@users.noreply.github.com>
2026-05-13 20:03:52 +01:00
Olivia aee18cdddd migrate imgur images on culumus page to repo (#148) 2026-05-13 19:59:12 +01:00
Hasan 9660fa5949 Update FalixNode instructions (#147)
* Update FalixNode instructions

* Update FalixNode instructions
2026-05-12 21:58:08 +01:00
chris fc8ff7de91 Also indicate Java 26.1 support 2026-05-05 19:14:49 +02:00
chris dbde2759c3 Indicate 26.20 Support 2026-05-05 19:06:19 +02:00
Hasan 316ba24b79 Add image for Free Network selection in playit-gg.md (#144)
* Add image for Free Network selection in playit-gg.md

Added an image for selecting the Free Network step.

* Enhance troubleshooting section for server connection

Added troubleshooting tips for connection issues.
2026-05-05 01:19:35 +02:00
Hasan 155caeaaa1 Remove redundant instructions for playit.gg (#143)
Removed redundant instructions for users already set up with playit.gg.
2026-05-04 00:50:36 +02:00
Hasan bdd025d1bb Rework the playit.gg guide for the new site (#131)
* Add new screenshots

* Delete static/img/wiki/playit-gg/add_tunnel.png

* Delete static/img/wiki/playit-gg/added_tunnel.png

* Delete static/img/wiki/playit-gg/running.png

* Update playit.gg guide for the new playit.gg site

* Fix formatting

* Apply grammer fixes

* More fixes

* Re-write step 11

* Advanced? Yup!
2026-05-04 00:39:41 +02:00
Luke 61b03a45e9 Remove leading hyphen & space from provider description 2026-04-26 11:13:57 +01:00
Luke 59e2ff9614 Fix WitherHosting support article link 2026-04-26 11:11:05 +01:00
Joost b78d9b1817 Update KaasHosting instructions with auto-install support (#141) 2026-04-26 02:20:17 +01:00
Luke 32290a8b6f Add cursor: pointer to accordions to make it obvious they are clickable 2026-04-26 02:12:48 +01:00
SleepyPop 110a0f0665 Update WiseHosting instructions in code.json (#142) 2026-04-26 01:46:03 +01:00
Sahed Maltar e87ea8d2d0 Added new hosting provider and adjusted wording of existing one (#140)
* feat: Added new hosting provider and adjusted wording of existing one

* re-add empty line code.json

* re-add empty line in code.json

* Update code.json

Oops- added one tine too much

* Update providers.ts

re-add empty line
2026-04-24 09:03:23 -07:00
SleepyPop 105dd9ed21 Change Properties to Addons and update Crossplay FAQ link (#139) 2026-04-22 10:46:41 +01:00
CallumandLuke f5f15998be Update Rainbow's version in the wiki (#137)
* Update rainbow.md

* Fix grammar

---------

Co-authored-by: Luke <32024335+lukeeey@users.noreply.github.com>
2026-04-20 09:27:43 +02:00
qscbm187531 1d27d4d21a Update outdated content (#138)
* Change the footer link

* Add hyperlink at geyserintegratedpack.md

* Update api version

* Update links at extensions.md

* Update version
2026-04-20 09:27:27 +02:00
Vincent L. 9525858608 Add AxentHost to providers list (#49)
* Update providers.ts

* Update providers.ts

* Update providers.ts

* Update providers.ts

* Update providers.ts

* Add description for AxentHost provider

* Revise GeyserMC installation instructions for AxentHost

Updated the installation instructions for GeyserMC on AxentHost.

* Update AxentHost installation instructions for GeyserMC

* Update AxentHost installation instructions

* fix: normalize EOL
2026-04-15 00:04:31 +01:00
ZitchasandOlivia bd18dffbba Clarifying the version requirements by swapping "not running" to "running a version older than" (#136)
* Swap "not running" to "running a version earlier than"

* Update wiki/geyser/setup/provider/paper-spigot.mdx

Thanks!

Co-authored-by: Olivia <chew@chew.pw>

* earlier -> older

---------

Co-authored-by: Olivia <chew@chew.pw>
2026-04-06 13:07:06 +02:00
Jens Collaert 4cf8178c38 Merge pull request #134 from hasankayra04/netherlink 2026-03-30 02:17:38 +02:00
Hasan 35c095a27b Update Netherlink download link 2026-03-28 18:48:50 +03:00
Hasan f27896ad3b Update supported and latest versions for the 26.10 release (#132)
* Update supported and latest versions for the 26.10 release

Please do not merge this until feature/26.10 is merged.

* Update supported version for bedrock

* Update supported version for bedrock
2026-03-24 19:03:01 +01:00
chris 3a0da3cd67 Document Bedrock test instance block limitation, document increased collision_box range / size (#133)
Removed extended_collision_box from docs - while it'll still be accounted for, users should migrate to just increasing the normal collision box
2026-03-24 19:02:41 +01:00
Courier dd0f94116f Add SimpleGameHosting to the supported hosting providers list (#127) 2026-03-17 17:51:11 +00:00
oxy 6c4dcefcc6 Added Boar back to anticheat list. (#130)
* Added Boar back to anticheat list.

* Fix minor typo.
2026-03-13 22:58:18 +01:00
onebeastchris 038e675d2b Document equippable stackable item limitations 2026-03-11 16:58:23 +01:00
SleepyPop ca299ce958 Rename Modrinth Servers to Modrinth Hosting (#129)
* Change name from Modrinth Servers to Modrinth Hosting

* Update Modrinth Hosting URL
2026-03-07 09:55:56 +01:00
SleepyPop a206ccb004 Add 26.3 to versions.json (#128) 2026-03-06 09:38:37 +01:00
Hasan 5ef0254d97 Update Bisect Hosting description for wiki (#125)
* Update Bisect Hosting description for wiki

They no longer require dedicated ips, see:
https://canary.discord.com/channels/613163671870242838/1476042748544028733/1476042748544028733

* Remove uncomment instructions

* Grammer fixes and requested changes

* Redo bisect with updated info

* Fix oopsies

* More oopsies

* Update providers data as well
2026-03-03 03:06:12 +01:00
chris 9e77bb538f Update current-limitations page to include enchant limitations and second lines on advancement toasts 2026-02-26 15:30:16 +01:00
SleepyPop a20d6ef326 Add 26.2 to versions.json (#126) 2026-02-26 04:21:56 +01:00
chris 4a837d4543 ...and indicate it here too 2026-02-23 10:58:13 +01:00
chris 88717a5eff Indicate 26.1 Support 2026-02-23 10:57:04 +01:00
chris dd80edafc8 Indicate 26.0 support 2026-02-10 19:38:44 +01:00
pepeshki (screamer) b576ce4808 Update anticheat-compatibility.md (#122)
AntiAura and Spartan: Bedrock Edition are unavailable on SpigotMC and Boar is unmaintained
2026-02-07 19:03:19 +00:00
9918f4a047 Feature: Custom item v2 docs (#115)
* Start documenting custom item mappings: V2

* Document json definition types

* Continue documenting Bedrock item options

* Start on component docs

* Document removing components, start documenting predicates

* Sync all example types

* Rough draft should now be sort of there

* Resolve suggestions

* Split v1 and v2 docs

* Document & add examples to range predicates

* Component examples

* Minor fixes

* Remove warning on Hydraulic

* oops

* more tiny changes

* Add javadoc links

* Update the build number mentioned in docs

---------

Co-authored-by: rtm516 <ryantmilner@hotmail.co.uk>
Co-authored-by: Aurora <auroranova8756@gmail.com>
2026-02-07 19:36:25 +01:00
Auri 084d9371eb Remove loopback (#123) 2026-02-01 21:48:38 +00:00
Joost 64645a4047 Add KaasHosting to the supported hosting providers list (#121)
* Add KaasHosting to provider list with details for Geyser setup

* Remove trailing slash from KaasHosting URL
2026-01-30 20:33:07 +00:00
chris 7b4fb78b11 Document -DGeyser.NoPlayerListPS system property (#120) 2026-01-20 13:07:40 +01:00
SleepyPop 3a24dc582c Update versions.json to indicate 1.21.132 support (#119)
Signed-off-by: SleepyPop <81194303+SleepyPopp@users.noreply.github.com>
2026-01-18 22:14:02 +00:00
Jens Collaert 82efbc011b Add Netherlink app on Consoles page
Add Netherlink app on Consoles page
2026-01-15 03:47:40 +01:00
Jens-Co e873fc1627 Add Netherlink app on Consoles page 2026-01-13 01:16:42 +01:00
Callum a52ad83d51 Update Rainbow's wiki page (#117) 2026-01-05 00:15:21 +00:00
Zigy 5d1c2d11ae Add Emotecraft to the list of community projects (#116) 2026-01-02 23:26:01 +00:00
Luke 47463777c6 Change homepage layout (#112)
* Change homepage layout

* Fix translations
2025-12-27 13:53:48 +01:00
Adriel 26e00da63f Update versions.json to indicate 1.21.11 support (#113) 2025-12-17 20:33:19 -08:00
69 changed files with 2556 additions and 563 deletions

No files matched your search

+6 -2
View File
@@ -189,7 +189,7 @@ const config: Config = {
},
{
label: 'Other',
to: 'wiki/other/geyseroptionalpack',
to: 'wiki/other/geyserintegratedpack',
},
],
},
@@ -248,7 +248,11 @@ const config: Config = {
},
{
label: 'Global Linking',
to: 'https://link.geysermc.org/',
href: 'https://link.geysermc.org/',
},
{
label: 'Privacy Policy',
href: 'https://ziax.com/terms/privacy-policy/',
},
],
},
+87 -15
View File
@@ -9,13 +9,13 @@
"message": "Enable `clone-remote-port` (or manually set `bedrock port` to the Java port), and connect with the Java IP and port."
},
"providers.templates.ip_and_port": {
"message": "Enable `clone-remote-port` (or manually set `bedrock port` to the Java port), uncomment `bedrock address`, and change `0.0.0.0` to your Java server's IP. Connect with the Java IP and port."
"message": "Enable `clone-remote-port` (or manually set `bedrock port` to the Java port) and change `bedrock address` from `0.0.0.0` to your Java server's IP. Connect with the Java IP and port."
},
"providers.templates.forwarding_option": {
"message": "Offers a working port forwarding option."
},
"providers.templates.java_ip": {
"message": "Make sure your remote address is 'auto', uncomment `bedrock address`, and change `0.0.0.0` to your Java server's IP."
"message": "Change `bedrock address` from `0.0.0.0` to your Java server's IP."
},
"providers.provider.apex_hosting.description": {
"message": "Full auto installation. Go to the Customizations tab in the panel and select 'Enabled' under the 'Geyser Auto Installer' option. Then, restart and connect to your server with your Java IP and port. See [Apex's article](https://apexminecrafthosting.com/geysermc/) for more details."
@@ -68,6 +68,9 @@
"providers.provider.server.pro.description": {
"message": "Different instructions for different plans: On VPS, select Geyser in the [Service Type Menu](https://i.imgur.com/loSNmvu.png), Floodgate can be enabled on the dashboard configuration. For manual installation: Using a Premium or Free plan, use the same port as your Java server for the Bedrock port in the configuration file and connect that; for the Free plan, also enable the `clone-remote-port` option. If you are using a PRO or a VPS plan, you can use any port, which can be opened on the Firewall tab."
},
"providers.provider.serverprism.description": {
"message": "Order a [Minecraft server](https://serverprism.com/minecraft-server-hosting) on any plugin-compatible runtime (Paper, Spigot, Purpur, etc.), then install Geyser from the panel's plugin installer. Connect with the same IP and port as your Java server."
},
"providers.provider.snakecraft_hosting.description": {
"message": "Select 'Paper + Geyser with Floodgate' under the Jar Type at checkout to install the Geyser plugin. Players will Connect with the same IP and port as you would on Java."
},
@@ -78,7 +81,7 @@
"message": "Find the plugin in the control panel under the 'VG Recommended' category and restart your server. IP and port are the same as Java."
},
"providers.provider.wisehosting.description": {
"message": "Both auto and manual installation available. Find the GeyserMC presets from the `Properties` tab in the Game Panel. There, click `Install` and restart your server. See [Crossplay FAQ](https://help.wisehosting.com/en/articles/13-how-to-install-geysermc-java-bedrock-crossplay-to-your-server) for additional details."
"message": "Both auto and manual installation available. Find the GeyserMC presets from the `Addons` tab in the Game Panel. There, click `Install` and restart your server. See [Crossplay FAQ](https://wisehosting.com/help/how-to-install-geysermc-to-your-minecraft-server) for additional details."
},
"providers.provider.zaphosting.description": {
"message": "Find the plugin in the control panel and restart your server. IP and port are the same as Java."
@@ -90,10 +93,10 @@
"message": "Need to open a support ticket to get a UDP port, then use that as the `bedrock port`."
},
"providers.provider.bisecthosting.description": {
"message": "You must have a plan with a dedicated IP. In Geyser's config, uncomment the `bedrock address` and set it to the public IP of your server (e.g. `address: 51.79.129.18`). Leave the port as `19132`. Under the home tab, select 'Enable UDP Network' and restart the server. See Bisect's [article](https://www.bisecthosting.com/clients/index.php?rp=/knowledgebase/193/How-to-install-Geyser-and-Floodgate-on-a-Minecraft-Java-server.html) for full instructions. If you still cannot connect after following these instructions, contact Bisect Support as they reportedly have UDP disabled on some nodes."
"message": "Go to the Network tab and copy an available port not in use by other mods. In Geyser's config, under the bedrock section, on the port: line, edit the value to the port you copied. See Bisect's [article](https://www.bisecthosting.com/clients/index.php?rp=/knowledgebase/193/How-to-install-Geyser-and-Floodgate-on-a-Minecraft-Java-server.html) for full instructions. If you still cannot connect after following these instructions, contact Bisect Support, as they reportedly have UDP disabled on some nodes."
},
"providers.provider.bloomhost.description": {
"message": "See [Bloom's documentation](https://docs.bloom.host/plugins/geysermc/) for setup instructions."
"message": "See [Bloom's documentation](https://docs.bloom.host/multiplatform/geysermc) for setup instructions."
},
"providers.provider.craft-hosting.description": {
"message": "Set the Bedrock port to the Java server's port and connect with that port; note that this provider appears to only provide service in Russia."
@@ -111,7 +114,7 @@
"message": "Set the `bedrock port` in the config to the Java server's port or use one of the available ports allocated to your server, and connect with that port."
},
"providers.provider.falixnodes.description": {
"message": "Open a port yourself on the network page in the game panel, then use that port in the bedrock section of the Geyser config."
"message": "Enable `clone-remote-port` (or manually set `bedrock port` to the Java port), and connect with the Java IP and port."
},
"providers.provider.ferox_hosting.description": {
"message": "Open a port yourself in their panel and check out the [knowledgebase article](https://feroxhosting.nl/kb/) for how to install and configure Geyser."
@@ -140,6 +143,9 @@
"providers.provider.humbleservers.description": {
"message": "Set the Bedrock port to the Java server's port, or to one of the two extra ports, and connect with that port. If the subdomain doesn't work, use your regular numbered IP address."
},
"providers.provider.kaashosting.description": {
"message": "Automatic and manual installation supported. Go to the `Plugin Installer` tab, search for Geyser and click `Install Automatically`. Connect with the Java IP and port. See [KaasHosting's article](https://www.kaashosting.nl/help/nl/minecraft/hoe-maak-ik-mijn-minecraft-server-crossplay-met-geysermc) for more details."
},
"providers.provider.kekshost.description": {
"message": "Use the default bedrock port (19132) and the server ip to connect on Bedrock edition. No changes to the Geyser config are needed. You can also ask for a new port and use it instead."
},
@@ -156,7 +162,7 @@
"message": "Install Geyser with the dedicated Plugin installer. Use the same port as your Java server in your config. Connect with the same address and port as your Java server."
},
"providers.provider.nfoservers.description": {
"message": "Uncomment and set `bedrock address` to the server IP in the Geyser config file. As an alternative, you can run Geyser standalone separately on an Unmanaged VDS."
"message": "Set `bedrock address` to the server IP in the Geyser config file. As an alternative, you can run Geyser standalone separately on an Unmanaged VDS."
},
"providers.provider.nitrado.description": {
"message": "Get Geyser as a plugin. Add 4 to the Port of the Java server. See [here](https://wiki.nitrado.net/en/How_to_install_GeyserMC_and_Floodgate) for specific instructions."
@@ -164,6 +170,9 @@
"providers.provider.nodecraft.description": {
"message": "Use the default server port and `0.0.0.0` or your server IP as the host address."
},
"providers.provider.nolimithost.description": {
"message": "Check [NolimitHost's documentation](https://nolimithost.cc/docs/minecraft/geyser) for specific instructions."
},
"providers.provider.pebblehost.description": {
"message": "Enable `clone-remote-port` (or manually set `bedrock port` to the Java port), and connect with the Java IP and port. See [this video](https://youtu.be/v9lC80UBZF4) for a PebbleHost-specific tutorial."
},
@@ -198,7 +207,7 @@
"message": "Set the Bedrock port to the Java server's port and connect with that port. Alternatively, request an additional port, or buy a dedicated IP address."
},
"providers.provider.witherhosting.description": {
"message": "Either use the Java server's port, or create a port in the ports manager on the panel and use that for Bedrock. Refer to the hosts [support article](https://support.witherhosting.com/en/article/how-to-install-and-use-geysermc-1xn5l6v/) for further info."
"message": "Either use the Java server's port, or create a port in the ports manager on the panel and use that for Bedrock. Refer to the hosts [support article](https://my.witherhosting.com/kb/how-to-install-and-use-geysermc-java) for further info."
},
"providers.provider.myarena.description": {
"message": "Does seem to be working, but the Java version is too old in order for Geyser to run properly."
@@ -206,7 +215,7 @@
"providers.provider.nicraft.description": {
"message": "Does not provide Bedrock support, and are affected by a [firewall configuration issue](https://wiki.geysermc.org/geyser/port-forwarding/#ovh-and-soyoustart), which prohibits most players from joining."
},
"providers.provider.feather.description": {
"providers.provider.dawn.description": {
"message": "Their proxy network does not support UDP. Therefore, Geyser is not supported. As an alternative, set up a paper server with e.g. playit.gg instead of port forwarding."
},
"providers.provider.freemcserver_net.description": {
@@ -218,20 +227,32 @@
"providers.provider.bedrockhost.description": {
"message": "Easiest solution is: Go to hosting panel > install new engine > Ready-made solutions and select Geyser. This will install Paper & Geyser-Spigot - no setup needed, just connect with your Java IP and port. See [BedrockHost's article](https://bedrockhost.pl/w/geyser-czyli-serwer-minecraft-java-i-bedrock-w-jednym) for more details or for custom setup instructions (available in Polish)."
},
"providers.provider.simplegamehosting.description": {
"message": "Contact live chat support to open a port and check out the [help center guide](https://help.simplegamehosting.com/how-to-enable-crossplay-with-geyser-on-your-minecraft-server/) for how to install and configure Geyser on your server."
},
"providers.provider.axenthost.description": {
"message": "For a quick installation, navigate to your server Variants tab and select GeyserMC. The server will be automatically reinstalled with Geyser-Spigot alongside a Paper server. For a manual install using any other variant such as Paper, you will need to upload the GeyserMC jar to your server and set the the clone-remote-port option to true. See AxentHost's [guide](https://axenthost.com/knowledgebase/categories/minecraft/create-a-crossplay-server-with-geyser/) to see all the steps."
},
"pages.main.title": {
"message": "Revolutionize Your Minecraft Server"
},
"pages.main.subtitle": {
"message": "Enable clients from Minecraft Bedrock Edition to join your Minecraft Java server"
},
"components.homepage_features.1": {
"message": "Geyser is a program that allows Minecraft: Bedrock Edition clients to join Minecraft: Java Edition servers, allowing for true crossplay between both editions of the game. The ultimate goal of this project is to allow Minecraft: Bedrock Edition users to join Minecraft: Java Edition servers as seamlessly as possible."
"components.homepage_features.1.line1": {
"message": "Geyser is a program that allows Minecraft: Bedrock Edition clients to join Minecraft: Java Edition servers, allowing for true crossplay between both editions of the game."
},
"components.homepage_features.features.2": {
"components.homepage_features.1.line2": {
"message": "The ultimate goal of this project is to allow Minecraft: Bedrock Edition users to join Minecraft: Java Edition servers as seamlessly as possible."
},
"components.homepage_features.2": {
"message": "Geyser acts as a translator which sits between the Bedrock client and the Java server. It takes data from the Bedrock client and translates it into a format the Java server understands and vice versa. Geyser works with any modern Minecraft version and can be installed either as a plugin or ran as a standalone program."
},
"components.homepage_features.features.3": {
"message": "Geyser can be joined from Bedrock clients on Windows 10/11, iOS, Android, and even consoles. Geyser works with a wide array of hosting providers, but can also be used as its own standalone proxy to join any Minecraft server! If you are a server owner, you can install our Floodgate plugin which allows Xbox Live authenticated Bedrock users to join without a Java Edition account!"
"components.homepage_features.3.line1": {
"message": "Geyser can be joined from Bedrock clients on Windows 10/11, iOS, Android, and even consoles. Geyser works with a wide array of hosting providers, but can also be used as its own standalone proxy to join any Minecraft server!"
},
"components.homepage_features.3.line2": {
"message": "If you are a server owner, you can install our Floodgate plugin which allows Xbox Live authenticated Bedrock users to join without a Java Edition account!"
},
"pages.download.title": {
"message": "Download"
@@ -763,7 +784,7 @@
"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."
"message": "If your hosting provider is not listed, try using [Warden Signalling](/wiki/geyser/nethernet/setup#warden-signalling). If this doesn't work, ask your hosting provider for a TCP and 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."
@@ -802,5 +823,56 @@
"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"
},
"providers.provider.arth_hosting.description": {
"message": "Geyser is installed and configured on all servers by default. You can disable it in the 'Manage Plugins' menu."
},
"providers.provider.mcserverhost.description": {
"message": "Under the server configuration, select 'Crossplay' to automatically install Geyser and Floodgate. Join with the connection address. To update Geyser and Floodgate, replace the plugin jars in the server manager and restart the server."
},
"providers.provider.vemox_hosting.description": {
"message": "Full automatic installation. Go to one of the panel options and select the option to enable GeyserMC. Then, restart and connect to your server using your Java IP and port."
},
"providers.provider.mcforfree.de.description": {
"message": "Create an extra port in the game panel, then change the `port` in the `bedrock` section to the newly created port. To connect on Bedrock edition, use the Java server's IP and the port you've created. It may take a few minutes for the port to become active."
},
"providers.provider.modrinth.description": {
"message": "Check [Modrinth's documentation](https://support.modrinth.com/en/articles/10986613-adding-geyser-to-your-server) for specific instructions."
},
"providers.provider.orionnodes.description": {
"message": "Open a port yourself from the network page in the game panel, use that port in the bedrock section of the Geyser config."
},
"providers.provider.papernodes.description": {
"message": "Enable clone-remote-port (or manually set the Bedrock port to the Java port), and connect with the Java IP and port. Alternatively, you can contact the host to request an additional port or a dedicated IP."
},
"providers.provider.wepwawet.description": {
"message": "Add a new port in the Network tab. Use this new port as the bedrock port."
},
"pages.download.description.offhandextension": {
"message": "An extension that allows Bedrock players to switch their offhand and mainhand item by emoting."
},
"pages.download.description.rainbow": {
"message": "A Minecraft mod to generate Geyser item mappings and bedrock resourcepacks for use with Geyser's custom item API (v2)."
},
"pages.download.description.hydraulic": {
"message": "A companion mod to Geyser which allows for Bedrock players to join modded Minecraft: Java Edition servers."
},
"pages.download.description.thunder": {
"message": "A java application to convert simple Java Edition resource packs to Bedrock Edition ones."
},
"pages.dumpviewer.extensions": {
"message": "Extensions"
},
"pages.dumpviewer.extensions.noextensions": {
"message": "No extensions to show."
},
"pages.dumpviewer.extensions.helptext": {
"message": "Click on an extension to view more information."
},
"providers.provider.consulhosting.description": {
"message": "GeyserMC can be installed with a single click on ConsulHosting's Minecraft server hosting. Head to your server panel, find the GeyserMC option at Software, and install it automatically — no manual configuration needed. For step-by-step instructions, see [ConsulHosting's GeyserMC installation tutorial](https://consulhosting.com/help/install-geysermc/)."
},
"pages.download.description.floodgatedatabases": {
"message": "Database extension jars for Floodgate local linking."
}
}
@@ -186,5 +186,21 @@
"sidebar.geyserSidebar.category.Custom Resource Packs": {
"message": "Custom Resource Packs",
"description": "The label for category Custom Resource Packs in sidebar geyserSidebar"
},
"sidebar.geyserSidebar.category.Nethernet": {
"message": "Nethernet",
"description": "The label for category Nethernet in sidebar geyserSidebar"
},
"sidebar.geyserSidebar.category.Nethernet.link.generated-index.title": {
"message": "Nethernet",
"description": "The generated-index page title for category Nethernet in sidebar geyserSidebar"
},
"sidebar.geyserSidebar.category.Nethernet.link.generated-index.description": {
"message": "An explanation of Nethernet",
"description": "The generated-index page description for category Nethernet in sidebar geyserSidebar"
},
"sidebar.geyserSidebar.category.Custom Content": {
"message": "Custom Content",
"description": "The label for category Custom Content in sidebar geyserSidebar"
}
}
@@ -63,8 +63,16 @@
"message": "Global Linking",
"description": "The label of footer link with label=Global Linking linking to https://link.geysermc.org/"
},
"link.item.label.Privacy Policy": {
"message": "Privacy Policy",
"description": "The label of footer link with label=Privacy Policy linking to https://ziax.com/terms/privacy-policy/"
},
"logo.alt": {
"message": "GeyserMC logo",
"description": "The alt text of footer logo"
},
"copyright": {
"message": "Copyright © 2026 GeyserMC. Built with Docusaurus.<br>This website is not an official Minecraft website and is not associated with Mojang Studios or Microsoft. All product and company names are trademarks or registered trademarks of their respective holders. Use of these names does not imply any affiliation or endorsement by them.",
"description": "The footer copyright"
}
}
+17 -2
View File
@@ -54,6 +54,19 @@ const sidebars: SidebarsConfig = {
'geyser/port-forwarding'
]
},
{
type: 'category',
label: 'Nethernet',
link: {
type: "generated-index",
title: "Nethernet",
description: "An explanation of Nethernet",
slug: "/geyser/nethernet",
},
items: [
'geyser/nethernet/setup'
],
},
{
type: 'category',
label: 'Common Issues',
@@ -89,16 +102,18 @@ const sidebars: SidebarsConfig = {
},
{
type: 'category',
label: 'Custom Resource Packs',
label: 'Custom Content',
link: {
type: 'doc',
id: 'geyser/custom-resource-packs'
id: 'geyser/custom-content'
},
items: [
'geyser/packs',
'geyser/custom-items',
'geyser/custom-blocks',
'geyser/custom-skulls',
'geyser/custom-waypoints',
'geyser/custom-entities'
]
},
{
+25
View File
@@ -0,0 +1,25 @@
import clsx from 'clsx';
import { PropsWithChildren } from 'react';
import styles from "./styles.module.scss";
interface HomepageFeatureProps {
title: string;
image?: string;
flipped?: boolean;
}
export const HomepageFeature: React.FC<PropsWithChildren<HomepageFeatureProps>> = ({ title, image, flipped, children }) => {
return (
<div className={clsx(styles.feature, { [styles.flipped]: flipped })}>
<div className={clsx(styles.content, "text--left padding-horiz--md")}>
<h3 className={styles.title}>{title}</h3>
{children}
</div>
{image && (
<div>
<img src={image} alt={title} />
</div>
)}
</div>
);
}
@@ -0,0 +1,40 @@
.feature {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
}
.feature.flipped > *:first-child {
order: 2;
}
.feature.flipped > *:last-child {
order: 1;
}
.content {
margin-top: auto;
margin-bottom: auto;
}
.title {
font-size: 30px;
}
@media (max-width: 768px) {
.feature {
grid-template-columns: 1fr;
}
.feature > *:first-child {
order: 2;
}
.feature > *:last-child {
order: 1;
}
.title {
margin-top: 15px;
}
}
-78
View File
@@ -1,78 +0,0 @@
import clsx from 'clsx';
import Heading from '@theme/Heading';
import styles from './styles.module.scss';
import Crossplatform0Img from '@site/static/img/site/crossplatform_0.png';
import Crossplatform1Img from '@site/static/img/site/crossplatform_1.png';
import Crossplatform2Img from '@site/static/img/site/crossplatform_2.png';
import Translate from '@docusaurus/Translate';
type FeatureItem = {
title: string;
image?: string;
description: JSX.Element;
index?: number;
};
const FeatureList: FeatureItem[] = [
{
title: 'What is Geyser?',
image: Crossplatform2Img,
description: (
<>
<Translate id="components.homepage_features.1">Geyser is a program that allows Minecraft: Bedrock Edition clients to join Minecraft: Java Edition servers, allowing for true crossplay between both editions of the game. The ultimate goal of this project is to allow Minecraft: Bedrock Edition users to join Minecraft: Java Edition servers as seamlessly as possible.</Translate>
</>
),
},
{
title: 'How does it work?',
image: Crossplatform1Img,
description: (
<>
<Translate id='components.homepage_features.features.2'>Geyser acts as a translator which sits between the Bedrock client and the Java server. It takes data from the Bedrock client and translates it into a format the Java server understands and vice versa. Geyser works with any modern Minecraft version and can be installed either as a plugin or ran as a standalone program.</Translate>
</>
),
},
{
title: 'Join from anywhere',
image: Crossplatform0Img,
description: (
<>
<Translate id='components.homepage_features.features.3'>Geyser can be joined from Bedrock clients on Windows 10/11, iOS, Android, and even consoles. Geyser works with a wide array of hosting providers, but can also be used as its own standalone proxy to join any Minecraft server! If you are a server owner, you can install our Floodgate plugin which allows Xbox Live authenticated Bedrock users to join without a Java Edition account!</Translate>
</>
),
},
];
function Feature({ title, image, description, index }: FeatureItem) {
const Content = () => (
<div className="text--left padding-horiz--md">
<Heading as="h3">{title}</Heading>
<p>{description}</p>
</div>
);
const Image = () => (
image &&
<div className="column text--left">
<img src={image} alt={title} />
</div>
);
return (
<div className={clsx('column')}>
{index % 2 === 0 ? <><Image /><Content /></> : <><Content /><Image /></>}
</div>
);
}
export default function HomepageFeatures(): JSX.Element {
return (
<section className={styles.features}>
<div className="container">
<div className="row">
{FeatureList.map((props, idx) => (
<Feature key={idx} {...props} index={idx} />
))}
</div>
</div>
</section>
);
}
@@ -1,11 +0,0 @@
.features {
display: flex;
align-items: center;
padding: 2rem 0;
width: 100%;
}
.featureSvg {
height: 200px;
width: 200px;
}
+2 -2
View File
@@ -29,7 +29,7 @@ export const Provider = ({ type }) => {
</td>
<td>
{provider.description != null ? (
<ReactMarkdown children={`&nbsp;&hyphen; ${provider.description}`} components={{ p: noP }} />
<ReactMarkdown children={provider.description} components={{ p: noP }} />
) : (
''
)}
@@ -52,7 +52,7 @@ export const ProviderSelector = () => {
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."
message: "If your hosting provider is not listed, try using [Warden Signalling](/wiki/geyser/nethernet/setup#warden-signalling). If this doesn't work, ask your hosting provider for a TCP and UDP port and use that. For VPS/KVM servers please follow the self-hosting steps.",
})
} as HostingProvider);
+1
View File
@@ -174,6 +174,7 @@ html[data-theme='dark'] {
align-items: center;
width: 100%;
position: relative;
cursor: pointer;
h3 {
margin: 0;
+55 -104
View File
@@ -10,7 +10,7 @@ const descriptionTemplates = {
}),
ipAndPort: translate({
id: 'providers.templates.ip_and_port',
message: "Enable `clone-remote-port` (or manually set `bedrock port` to the Java port), and change `bedrock address` from `0.0.0.0` to your Java server's IP. Connect with the Java IP and port."
message: "Enable `clone-remote-port` (or manually set `bedrock port` to the Java port) and change `bedrock address` from `0.0.0.0` to your Java server's IP. Connect with the Java IP and port."
}),
forwardingOption: translate({
id: 'providers.templates.forwarding_option',
@@ -48,6 +48,14 @@ export const providersData: Providers = {
message: "Install Geyser in the Aternos plugin list and connect to your server with your Java IP and port. See [Aternos's article](https://support.aternos.org/hc/en-us/articles/360051047631) for more details. Do note: Aternos automatically installs the latest version of the plugin, but does not auto update it. To update Geyser on Aternos, simply reinstall the plugin (no need to uninstall the plugin/deleting the plugin files)."
})
},
{
name: 'AxentHost',
url: 'https://axenthost.com/games/minecraft/',
description: translate({
id: 'providers.provider.axenthost.description',
message: "For a quick installation, navigate to your server Variants tab and select GeyserMC. The server will be automatically reinstalled with Geyser-Spigot alongside a Paper server. For a manual install using any other variant such as Paper, you will need to upload the GeyserMC jar to your server and set the the clone-remote-port option to true. See AxentHost's [guide](https://axenthost.com/knowledgebase/categories/minecraft/create-a-crossplay-server-with-geyser/) to see all the steps."
})
},
{
name: 'BedrockHost',
url: 'https://bedrockhost.pl/',
@@ -57,13 +65,21 @@ export const providersData: Providers = {
})
},
{
name: 'Cloud Nord',
name: 'CloudNord',
url: 'https://cloudnord.net/',
description: translate({
id: 'providers.provider.cloud_nord.description',
message: "Go to their [Crossplay Server](https://cloudnord.net/minecraftcrossplay-server-hosting/) hosting section and order your server. Instructions on how to join are provided."
})
},
{
name: 'ConsulHosting',
url: 'https://consulhosting.com/minecraft-server-hosting/',
description: translate({
id: 'providers.provider.consulhosting.description',
message: "GeyserMC can be installed with a single click on ConsulHosting's Minecraft server hosting. Head to your server panel, find the GeyserMC option at Software, and install it automatically — no manual configuration needed. For step-by-step instructions, see [ConsulHosting's GeyserMC installation tutorial](https://consulhosting.com/help/install-geysermc/)."
})
},
{
name: 'CreeperHost',
url: 'https://www.creeperhost.net/',
@@ -104,6 +120,14 @@ export const providersData: Providers = {
message: "Can be installed to any server from their auto plugin setups. No further configuration needed."
})
},
{
name: 'KaasHosting',
url: 'https://www.kaashosting.nl/minecraft-servers',
description: translate({
id: 'providers.provider.kaashosting.description',
message: "Automatic and manual installation supported. Go to the `Plugin Installer` tab, search for Geyser and click `Install Automatically`. Connect with the Java IP and port. See [KaasHosting's article](https://www.kaashosting.nl/help/nl/minecraft/hoe-maak-ik-mijn-minecraft-server-crossplay-met-geysermc) for more details."
})
},
{
name: 'Lilypad',
url: 'https://lilypad.gg',
@@ -182,11 +206,11 @@ export const providersData: Providers = {
})
},
{
name: 'Snakecraft Hosting',
url: 'https://snakecrafthosting.com/',
name: 'ServerPrism',
url: 'https://serverprism.com/',
description: translate({
id: 'providers.provider.snakecraft_hosting.description',
message: "Select 'Paper + Geyser with Floodgate' under the Jar Type at checkout to install the Geyser plugin. Players will Connect with the same IP and port as you would on Java."
id: 'providers.provider.serverprism.description',
message: "Order a [Minecraft server](https://serverprism.com/minecraft-server-hosting) on any plugin-compatible runtime (Paper, Spigot, Purpur, etc.), then install Geyser from the panel's plugin installer. Connect with the same IP and port as your Java server."
})
},
{
@@ -203,7 +227,7 @@ export const providersData: Providers = {
description: translate({
id: 'providers.provider.ultraservers.description',
message: "Select 'Paper + Geyser' under the Change version tab. You can connect to your server using the same IP and port as you would on Java. Existing servers can use the Plugins/Minecraft mods tab to install Geyser. See [Crossplay](https://docs.ultraservers.com/minecraft/plugins-mods/crossplay-on-java-and-bedrock) for more information."
})
})
},
{
name: 'VemoxHost',
@@ -213,20 +237,12 @@ export const providersData: Providers = {
message: "Full automatic installation. Go to one of the panel options and select the option to enable GeyserMC. Then, restart and connect to your server using your Java IP and port."
})
},
{
name: 'Virtual Gladiators',
url: 'https://virtualgladiators.com/',
description: translate({
id: 'providers.provider.virtual_gladiators.description',
message: "Find the plugin in the control panel under the 'VG Recommended' category and restart your server. IP and port are the same as Java."
})
},
{
name: 'WiseHosting',
url: 'https://wisehosting.com',
description: translate({
id: 'providers.provider.wisehosting.description',
message: "Both auto and manual installation available. Find the GeyserMC presets from the `Properties` tab in the Game Panel. There, click `Install` and restart your server. See [Crossplay FAQ](https://help.wisehosting.com/en/articles/13-how-to-install-geysermc-java-bedrock-crossplay-to-your-server) for additional details."
message: "Both auto and manual installation available. Find the GeyserMC presets from the `Addons` tab in the Game Panel. There, click `Install` and restart your server. See [Crossplay FAQ](https://wisehosting.com/help/how-to-install-geysermc-to-your-minecraft-server) for additional details."
})
},
{
@@ -237,14 +253,6 @@ export const providersData: Providers = {
message: "Find the plugin in the control panel and restart your server. IP and port are the same as Java."
})
},
{
name: '365Hosts',
url: 'https://365hosts.com',
description: translate({
id: 'providers.provider.365hosts.description',
message: "Go to their [Minecraft: Crossplay](https://www.365hosts.com/gaming/crossplayminecraft) hosting section and order your server. Instructions on how to join are provided."
})
}
],
support: [
{
@@ -265,7 +273,7 @@ export const providersData: Providers = {
url: 'https://www.bisecthosting.com/',
description: translate({
id: 'providers.provider.bisecthosting.description',
message: "Navigate to the Network tab on your server panel to find the available ports. In Geyser's config, uncomment the `bedrock address` and set it to the public IP of your server (e.g. `address: 12.34.56.78`). Set the Bedrock port to one from your Network page, save the file and restart the server. See Bisect's [article](https://www.bisecthosting.com/clients/index.php?rp=/knowledgebase/193/How-to-install-Geyser-and-Floodgate-on-a-Minecraft-Java-server.html) for full instructions. If you still cannot connect after following these instructions, contact Bisect Support as they reportedly have UDP disabled on some nodes."
message: "Go to the Network tab and copy an available port not in use by other mods. In Geyser's config, under the bedrock section, on the port: line, edit the value to the port you copied. See Bisect's [article](https://www.bisecthosting.com/clients/index.php?rp=/knowledgebase/193/How-to-install-Geyser-and-Floodgate-on-a-Minecraft-Java-server.html) for full instructions. If you still cannot connect after following these instructions, contact Bisect Support, as they reportedly have UDP disabled on some nodes."
})
},
{
@@ -281,7 +289,7 @@ export const providersData: Providers = {
url: 'https://www.bloom.host/',
description: translate({
id: 'providers.provider.bloomhost.description',
message: "See [Bloom's documentation](https://docs.bloom.host/plugins/geysermc/) for setup instructions."
message: "See [Bloom's documentation](https://docs.bloom.host/multiplatform/geysermc) for setup instructions."
})
},
{
@@ -289,11 +297,6 @@ export const providersData: Providers = {
url: 'https://clovux.net/',
description: descriptionTemplates.javaIp
},
{
name: 'Consulhosting',
url: 'https://consulhosting.nl/',
description: descriptionTemplates.default
},
{
name: 'Craft-Hosting',
url: 'https://craft-hosting.ru/',
@@ -349,7 +352,7 @@ export const providersData: Providers = {
url: 'https://falixnodes.net/',
description: translate({
id: 'providers.provider.falixnodes.description',
message: "Open a port yourself on the network page in the game panel, then use that port in the bedrock section of the Geyser config."
message: "Enable `clone-remote-port` (or manually set `bedrock port` to the Java port), and connect with the Java IP and port."
})
},
{
@@ -370,24 +373,11 @@ export const providersData: Providers = {
url: 'https://freakhosting.com/',
description: descriptionTemplates.default
},
{
name: 'Fusion Hosting',
url: 'https://fusionhostingltd.co.uk',
description: translate({
id: 'providers.provider.fusion_hosting.description',
message: "Get Geyser as a plugin. Use the same port as your Java server for the Bedrock port in your config (either by setting it yourself, or enabling “clone-remote-port”) and connect with the same IP and port as you would on Java or create a port in the Network tab on the panel & use this for Geyser."
})
},
{
name: 'GameHosting.it',
url: 'https://www.gamehosting.it/',
description: descriptionTemplates.default
},
{
name: 'GameProHost',
url: 'https://gameprohost.com/',
description: descriptionTemplates.default
},
{
name: 'GPortal',
url: 'https://www.g-portal.com/',
@@ -396,14 +386,6 @@ export const providersData: Providers = {
message: "You have to adjust the port according to your query port. Scheme: Query port: xxx65. The ports from xxx66 to xxx70 are available. For example, if your query port is 12365, then Geyser can only run under the port range 12366-12370. Furthermore, you have to change the 'Bedrock' 'address' in the Geyser config to your IP address. You can find it above your query port. Don't forget to delete the # in front of `address'."
})
},
{
name: 'Heavynode',
url: 'https://www.heavynode.com/',
description: translate({
id: 'providers.provider.heavynode.description',
message: "Open a port yourself in the networking section of the control panel. Port `19132` is only available with a dedicated IP (contact support), otherwise you will need to use a randomly assigned port. To resolve further connection issues for servers located in Canada and the UK, contact their support with the info found [here](https://wiki.geysermc.org/geyser/port-forwarding/#ovh-and-soyoustart)."
})
},
{
name: 'Hicoria',
url: 'https://hicoria.com/en/',
@@ -470,14 +452,6 @@ export const providersData: Providers = {
url: 'https://mc-host24.de/',
description: descriptionTemplates.ipAndPort
},
{
name: 'MCFORFREE.DE',
url: 'https://mcforfree.de/',
description: translate({
id: 'providers.provider.mcforfree.de.description',
message: 'Create an extra port in the game panel, then change the `port` in the `bedrock` section to the newly created port. To connect on Bedrock edition, use the Java server\'s IP and the port you\'ve created. It may take a few minutes for the port to become active.'
})
},
{
name: 'MCPEhost.ru',
url: 'https://mcpehost.ru',
@@ -505,21 +479,13 @@ export const providersData: Providers = {
description: descriptionTemplates.default
},
{
name: 'Modrinth Servers',
url: 'https://modrinth.com/servers',
name: 'Modrinth Hosting',
url: 'https://modrinth.com/hosting',
description: translate({
id: 'providers.provider.modrinth.description',
message: "Check [Modrinth's documentation](https://support.modrinth.com/en/articles/10986613-adding-geyser-to-your-server) for specific instructions."
})
},
{
name: 'Netbela',
url: 'https://netbela.nl/store/minecraft',
description: translate({
id: 'providers.provider.netbela.description',
message: "Install Geyser with the dedicated Plugin installer. Use the same port as your Java server in your config. Connect with the same address and port as your Java server."
})
},
{
name: 'NFOservers',
url: 'https://nfoservers.com/',
@@ -545,11 +511,11 @@ export const providersData: Providers = {
})
},
{
name: 'OrionNodes',
url: 'https://orionnodes.com',
name: 'NolimitHost',
url: 'https://nolimithost.cc',
description: translate({
id: 'providers.provider.orionnodes.description',
message: "Open a port yourself from the network page in the game panel, use that port in the bedrock section of the Geyser config."
id: 'providers.provider.nolimithost.description',
message: "Check [NolimitHost's documentation](https://nolimithost.cc/docs/minecraft/geyser) for specific instructions."
})
},
{
@@ -582,8 +548,8 @@ export const providersData: Providers = {
})
},
{
name: 'RamShard',
url: 'https://ramshard.com/',
name: 'RackGenius',
url: 'https://rackgenius.com/',
description: descriptionTemplates.default
},
{
@@ -612,6 +578,14 @@ export const providersData: Providers = {
message: "The port will be automatically set after you download Geyser and restart the server. Connect with the same IP and port as on Java. For Geyser Standalone installation instructions, see [here](https://shockbyte.com/billing/knowledgebase/173/Introduction-to-GeyserMCorDragonProxy-How-GeyserMC-Works.html)."
})
},
{
name: 'SimpleGameHosting',
url: 'https://simplegamehosting.com/',
description: translate({
id: 'providers.provider.simplegamehosting.description',
message: "Contact live chat support to open a port and check out the [help center guide](https://help.simplegamehosting.com/how-to-enable-crossplay-with-geyser-on-your-minecraft-server/) for how to install and configure Geyser on your server."
})
},
{
name: 'Skynode.pro',
url: 'https://skynode.pro/',
@@ -633,14 +607,6 @@ export const providersData: Providers = {
message: "Set the Bedrock port to the Java server's port and connect with that port; note that this provider only provides service in Australia."
})
},
{
name: 'SyntexHosting',
url: 'https://syntexhosting.com/',
description: translate({
id: 'providers.provider.syntexhosting.description',
message: "Set the Bedrock port to the Java server's port and connect with that port, or request a (free) additional port."
})
},
{
name: 'The Minecraft Hosting',
url: 'https://theminecrafthosting.com/',
@@ -654,26 +620,11 @@ export const providersData: Providers = {
url: 'https://tnahosting.net/',
description: descriptionTemplates.default
},
{
name: 'TurboHost',
url: 'https://turbohost.nl/',
description: descriptionTemplates.default
},
{
name: 'UltimateSRV',
url: 'https://ultimatesrv.com/',
description: descriptionTemplates.default
},
{
name: 'VexyHost',
url: 'https://vexyhost.com/',
description: descriptionTemplates.default
},
{
name: 'Volcano Hosting',
url: 'https://www.volcanohosting.net/',
description: descriptionTemplates.default
},
{
name: 'VoltHosting',
url: 'https://www.volthosting.co.uk/',
@@ -719,7 +670,7 @@ export const providersData: Providers = {
url: 'https://witherhosting.com/',
description: translate({
id: 'providers.provider.witherhosting.description',
message: "Either use the Java server's port, or create a port in the ports manager on the panel and use that for Bedrock. Refer to the hosts [support article](https://support.witherhosting.com/en/article/how-to-install-and-use-geysermc-1xn5l6v/) for further info."
message: "Either use the Java server's port, or create a port in the ports manager on the panel and use that for Bedrock. Refer to the hosts [support article](https://my.witherhosting.com/kb/how-to-install-and-use-geysermc-java) for further info."
})
}
],
@@ -741,10 +692,10 @@ export const providersData: Providers = {
})
},
{
name: 'Feather',
url: 'https://feathermc.com/',
name: 'Dawn',
url: 'https://dawn.gg/',
description: translate({
id: 'providers.provider.feather.description',
id: 'providers.provider.dawn.description',
message: "Their proxy network does not support UDP. Therefore, Geyser is not supported. As an alternative, set up a paper server with e.g. playit.gg instead of port forwarding."
})
}
+4 -4
View File
@@ -1,12 +1,12 @@
{
"bedrock": {
"supported": "1.21.90-1.21.130",
"supported": "26.0-26.45",
"latest": {
"id": 898,
"name": "1.21.130"
"id": 2169,
"name": "26.45"
}
},
"java": {
"supported": "1.21.9-1.21.10"
"supported": "26.2"
}
}
+17 -13
View File
@@ -69,6 +69,23 @@ const DownloadPage: React.FC = () => (
</TabItem>
<TabItem value="other-projects" label="Other Projects">
<Collapsibles>
<Collapsible
title='Floodgate Databases'
subtitle={<Translate id='pages.download.description.floodgatedatabases'>Database extension jars for Floodgate local linking.</Translate>}
id='floodgatedb'
inner={
<ProjectDownload
projectId="floodgatedb"
setup='/wiki/floodgate/linking/#local-linking'
downloadsInfo={{
mongodb: <><FontAwesomeIcon icon={faFileZipper} /> MongoDB</>,
mysql: <><FontAwesomeIcon icon={faFileZipper} /> MySQL</>,
sqlite: <><FontAwesomeIcon icon={faFileZipper} /> SQLite</>,
}}
gridColumns={1}
/>
}
/>
<Collapsible
title='ThirdPartyCosmetics'
subtitle={<Translate id='pages.download.description.thirdpartycosmetics'>An extension that adds support for loading ears and other third party cosmetics on java players</Translate>}
@@ -132,7 +149,6 @@ const DownloadPage: React.FC = () => (
title='Rainbow'
subtitle={<Translate id='pages.download.description.rainbow'>A Minecraft mod to generate Geyser item mappings and bedrock resourcepacks for use with Geyser's custom item API (v2). </Translate>}
id='rainbow'
tags={['Beta']}
inner={
<ProjectDownload
projectId="rainbow"
@@ -158,18 +174,6 @@ const DownloadPage: React.FC = () => (
neoforge: <PlatformIcon img={NeoForgeIcon} text="NeoForge" />,
}}
gridColumns={1}
warning={ // Remove when Item API V2 is merged!
<>
<Translate id='pages.download.warning.hydraulic'>
A preview version of Geyser is required to run Hydraulic, you can download the Item API V2 preview below:
</Translate>
<p>
<a href="https://download.geysermc.org/v2/projects/geyserpreview/versions/pr.5189/builds/latest/downloads/fabric">Fabric</a>
<span>, </span>
<a href="https://download.geysermc.org/v2/projects/geyserpreview/versions/pr.5189/builds/latest/downloads/neoforge">NeoForge</a>
</p>
</>
}
/>
}
/>
+7
View File
@@ -66,4 +66,11 @@
display: flex;
align-items: center;
justify-content: center;
}
.features {
padding: 50px 0;
display: flex;
flex-direction: column;
gap: 40px;
}
+34 -4
View File
@@ -1,18 +1,21 @@
import clsx from 'clsx';
import Layout from '@theme/Layout';
import HomepageFeatures from '@site/src/components/HomepageFeatures';
import Crossplatform0Img from '@site/static/img/site/crossplatform_0.png';
import Crossplatform1Img from '@site/static/img/site/crossplatform_1.png';
import Crossplatform2Img from '@site/static/img/site/crossplatform_2.png';
import Heading from '@theme/Heading';
import HeroImage from '@site/static/img/site/geyser.png';
import styles from './index.module.scss';
import Translate from '@docusaurus/Translate';
import { HomepageFeature } from '../components/HomepageFeature';
function HomepageHeader() {
return (
<header className={clsx('hero hero--primary', styles.heroBanner)}>
<div className={styles.heroContent}>
<img src={HeroImage} alt="Geyser Logo" className={styles.heroImage}/>
<img src={HeroImage} alt="Geyser Logo" className={styles.heroImageBackgroundBlur}/>
<img src={HeroImage} alt="Geyser Logo" className={styles.heroImage} />
<img src={HeroImage} alt="Geyser Logo" className={styles.heroImageBackgroundBlur} />
<div className={styles.textSection}>
<Heading as="h1" className="hero__title">
<Translate id='pages.main.title'>Revolutionize Your Minecraft Server</Translate>
@@ -33,8 +36,35 @@ export default function Home(): JSX.Element {
description="Enable clients from Minecraft Bedrock Edition to join your Minecraft Java server."
>
<HomepageHeader />
<main>
<HomepageFeatures />
<div className={clsx(styles.features, "container")}>
<HomepageFeature
title="What is Geyser?"
image={Crossplatform2Img}
>
<Translate id="components.homepage_features.1.line1">Geyser is a program that allows Minecraft: Bedrock Edition clients to join Minecraft: Java Edition servers, allowing for true crossplay between both editions of the game.</Translate>
<br /><br />
<Translate id="components.homepage_features.1.line2">The ultimate goal of this project is to allow Minecraft: Bedrock Edition users to join Minecraft: Java Edition servers as seamlessly as possible.</Translate>
</HomepageFeature>
<HomepageFeature
title="How does it work?"
image={Crossplatform1Img}
flipped
>
<Translate id="components.homepage_features.2">Geyser acts as a translator which sits between the Bedrock client and the Java server. It takes data from the Bedrock client and translates it into a format the Java server understands and vice versa. Geyser works with any modern Minecraft version and can be installed either as a plugin or ran as a standalone program.</Translate>
</HomepageFeature>
<HomepageFeature
title="Join from anywhere"
image={Crossplatform0Img}
>
<Translate id="components.homepage_features.3.line1">Geyser can be joined from Bedrock clients on Windows 10/11, iOS, Android, and even consoles. Geyser works with a wide array of hosting providers, but can also be used as its own standalone proxy to join any Minecraft server!</Translate>
<br /><br />
<Translate id="components.homepage_features.3.line2">If you are a server owner, you can install our Floodgate plugin which allows Xbox Live authenticated Bedrock users to join without a Java Edition account!</Translate>
</HomepageFeature>
</div>
</main>
</Layout>
);
+47 -32
View File
@@ -8,16 +8,10 @@ import { Grid } from '@site/src/components/Grid';
import CodeBlock from '@theme/CodeBlock';
import clsx from 'clsx';
const DumpViewerPage: React.FC = () => {
const [dumpId, setDumpId] = useState('');
const [data, setData] = useState<any>({});
const [statusMessage, setStatusMessage] = useState('');
const PluginList = ({plugins}, {}) => {
const [activePlugin, setActivePlugin] = useState<any>({});
const pluginPopoverRef = useRef<any>(null);
const urlReg = /^(https?:\/\/)?dump\.geysermc\.org/;
useEffect(() => {
const handleClickOutside = (event) => setActivePlugin({});
document.addEventListener("mousedown", handleClickOutside);
@@ -27,6 +21,37 @@ const DumpViewerPage: React.FC = () => {
};
}, [pluginPopoverRef]);
return <Grid elementsPerRow={5}>
{plugins.map(plugin => (
<div key={plugin.main}>
<div onClick={() => setActivePlugin(plugin)} className={styles.pluginName}>
<b>{plugin.name}</b> <div className={styles.pluginEnabledIndicator} style={{ backgroundColor: plugin.enabled ? "green" : "red" }} />
</div>
{activePlugin?.main === plugin.main ? (
<div ref={pluginPopoverRef} className={styles.pluginInfoPopover}>
<p className={styles.pluginNamePopover}>{plugin.name}</p>
<p>{plugin.version}</p>
<p className={styles.pluginEnabled} style={{ backgroundColor: plugin.enabled ? "green" : "red" }}>{plugin.enabled ? "Enabled" : "Disabled"}</p>
<p className={styles.pluginAuthorsLabel}>Authors:</p>
<ul>
{plugin.authors.map(author => <li>{author}</li>)}
</ul>
</div>
) : undefined}
</div>
))}
</Grid>
};
const DumpViewerPage: React.FC = () => {
const [dumpId, setDumpId] = useState('');
const [data, setData] = useState<any>({});
const [statusMessage, setStatusMessage] = useState('');
const urlReg = /^(https?:\/\/)?dump\.geysermc\.org/;
useEffect(() => {
// Get the ID from the URL
let id = window.location.href.includes('?') ? window.location.href.split('?').pop() : '';
@@ -76,10 +101,6 @@ const DumpViewerPage: React.FC = () => {
return string.charAt(0).toUpperCase() + string.slice(1)
}
const handlePluginClick = (plugin) => {
setActivePlugin(plugin);
}
return (
<>
<HeroBanner
@@ -219,28 +240,22 @@ const DumpViewerPage: React.FC = () => {
<>
<p><Translate id='pages.dumpviewer.plugins.helptext'>Click on a plugin to view more information.</Translate></p>
<Grid elementsPerRow={5}>
{data.bootstrapInfo.plugins.map(plugin => (
<div>
<b onClick={() => handlePluginClick(plugin)} className={styles.pluginName}>
{plugin.name} <div className={styles.pluginEnabledIndicator} style={{ backgroundColor: plugin.enabled ? "green" : "red" }} />
</b>
<PluginList plugins={data.bootstrapInfo.plugins}></PluginList>
</>
)}
</div>
</div>
<div className={styles.card}>
<div className={styles.cardHeader}>
<Translate id='pages.dumpviewer.extensions'>Extensions</Translate> ({data.extensionInfo?.length ?? 0})
</div>
<div className={styles.cardBody}>
{!data.extensionInfo || data.extensionInfo.length === 0 ? (
<p><Translate id='pages.dumpviewer.extensions.noextensions'>No extensions to show.</Translate></p>) : (
<>
<p><Translate id='pages.dumpviewer.extensions.helptext'>Click on an extension to view more information.</Translate></p>
{activePlugin?.main === plugin.main ? (
<div ref={pluginPopoverRef} className={styles.pluginInfoPopover}>
<p className={styles.pluginNamePopover}>{plugin.name}</p>
<p>{plugin.version}</p>
<p className={styles.pluginEnabled} style={{ backgroundColor: plugin.enabled ? "green" : "red" }}>{plugin.enabled ? "Enabled" : "Disabled"}</p>
<p className={styles.pluginAuthorsLabel}>Authors:</p>
<ul>
{plugin.authors.map(author => <li>{author}</li>)}
</ul>
</div>
) : undefined}
</div>
))}
</Grid>
<PluginList plugins={data.extensionInfo}></PluginList>
</>
)}
</div>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 237 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 250 KiB

+1 -1
View File
@@ -43,7 +43,7 @@ You can also set up a local linking database on your server. Local linking can w
Note that you only have to follow these steps on your proxy (BungeeCord or Velocity), if you have one.
1. Download one of the linking databases extensions [here](https://ci.opencollab.dev/job/GeyserMC/job/Floodgate/job/fix-weird-via-issue/).
1. Download one of the linking databases extensions [here](https://geysermc.org/download?project=other-projects&floodgatedb=expanded).
If you need help picking the right one: choose `mysql` if you already have a database or want to have a multi-proxy setup. For anything else choose `sqlite`. The full name should be `floodgate-*type*-database.jar`.
2. Copy the database extension jar you just downloaded *into* the floodgate 2.0 plugin folder (e.g. `/plugins/floodgate/`).
3. Enable `enable-own-linking` in the `player-link` section of Floodgate.
+1 -3
View File
@@ -14,9 +14,7 @@ This is a community-compiled list and does not indicate any endorsement from Gey
Full Compatibility (Checks Bedrock Players Accurately)
- [AntiAura](https://www.spigotmc.org/resources/1368/) (Paid) - Last checked on 24th January 2023
- [Boar](https://github.com/oryxel1/Boar/) - Last check on 17th June 2025
- [Spartan: Bedrock Edition](https://builtbybit.com/resources/12832/) (Paid) - Last checked on 18th July 2024
- [Boar](https://modrinth.com/plugin/boar) - Last checked on 13th March 2026
- [Themis](https://www.spigotmc.org/resources/90766/) - Last checked on 11th July 2024
Partially Compatible (Does not Check/Ignores Bedrock Players)
+2 -5
View File
@@ -35,9 +35,9 @@ See [here](/wiki/geyser/fixing-unable-to-connect-to-world/) for fixing "Unable t
### `java.net.BindException: Address already in use: bind` on startup. {#javanetbindexception-address-already-in-use-bind-on-startup}
This means 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.
### [...]` 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}
### [...]` has been compiled by a more recent version of the Java Runtime (class file version 65.0)` {#-has-been-compiled-by-a-more-recent-version-of-the-java-runtime}
See this link for updating to Java 17: https://docs.papermc.io/misc/java-install.
See this link for updating to Java 21: https://docs.papermc.io/misc/java-install.
### Hosting provider will not immediately open up UDP. {#hosting-provider-will-not-immediately-open-up-udp}
@@ -121,6 +121,3 @@ And so on.
* Please also make sure that you have the same `key.pem` and `config.yml` on all of your servers.
If your players can't connect from the lobby to another backend server, check console.
### Plugins that can cause issues {#plugins-that-can-cause-issues}
* `HamsterAPI`
+1 -1
View File
@@ -7,7 +7,7 @@ description: Learn how to create a startup script for Geyser-Standalone.
:::caution
In order for this to work, you MUST have Java 17 (or higher) installed!
In order for this to work, you MUST have Java 21 (or higher) installed!
:::
+5 -2
View File
@@ -16,7 +16,7 @@ The following things cannot be fixed without changes to Bedrock or the Java prot
- Glowing effect
- Distinguishing between left and right clicks in inventories
- Redstone dot blockstates
- Potion colors implemented using NBT
- Potion colors implemented using the PotionContents data component
- Various command arguments for any command that doesn't use the Minecraft Brigadier library
- Anything that relies on tab complete or typing in the chat UI (related to the above) - Bedrock sends no packet that indicates they are in this menu
- Unable to see banner layers past 6
@@ -33,6 +33,9 @@ The following things cannot be fixed without changes to Bedrock or the Java prot
- Gliding without elytras/custom elytras (https://github.com/GeyserMC/Geyser/issues/3255, https://github.com/GeyserMC/Geyser/issues/3299)
- Custom furnace cook times ([GeyserMC/Geyser#4104](https://github.com/GeyserMC/Geyser/issues/4104))
- Maximum sign length different on Java/Bedrock edition ([GeyserMC/Geyser#4130](https://github.com/GeyserMC/Geyser/issues/4130))
- Second line on advancement toasts ([GeyserMC/Geyser#3205](https://github.com/GeyserMC/Geyser/issues/3205))
- Showing non-vanilla enchantment levels, such as "Silk Touch 2" ([GeyserMC/Geyser#5252](https://github.com/GeyserMC/Geyser/issues/5252))
- Test instance blocks are not available in Bedrock ([GeyserMC/Geyser#6164](https://github.com/GeyserMC/Geyser/issues/6164))
## Fixed with the included GeyserIntegratedPack {#fixed-with-geyserintegratedpack}
@@ -50,4 +53,4 @@ The following changes **are supported** with the included GeyserIntegratedPack,
The following issues can be worked around with the [Hurricane](/wiki/other/hurricane) plugin/mod. However, these involve Java server
modifications.
- Movement issues around bamboo due to offset differences between Java and Bedrock.
- Movement issues around bamboo due to offset differences between Java and Bedrock.
+9 -23
View File
@@ -7,6 +7,11 @@ To setup custom blocks in geyser, you have to choose how you are going to regist
It should be noted that blocks and their associated components are not very stable. Mojang tends to make changes to these much more often than they do for items. This means that any components Geyser allows you to register are liable to break in future versions of Bedrock.
:::warning
Geyser does not convert resource packs from Java Edition, and also does not generate custom block mappings automatically.
However, you can use automatic tools such as [Rainbow](/wiki/other/rainbow/) to make converting content simpler.
:::
## Enabling custom blocks {#enabling-custom-blocks}
Before beginning, ensure that `gameplay.enable-custom-content` is set to `true` in your `config.yml` file.
@@ -99,12 +104,12 @@ The following details the schema for the mappings file. Only the `name` field is
- Default: none
- Description: The name of the custom block.
- `collision_box`:
- Type: `object`
- Type: `object` or array of `object`s for multiple collision boxes
- `origin`:
- Type: `array`
- Default: Inferred from overridden block
- Description: An array of x, y, and z origin values
- Range: Must be in range `[-8, 0, -8]` to `[8, 16, 8]`, inclusive
- Range: Must be in range `[-8, 0, -8]` to `[8, 24, 8]`, inclusive
- `items`:
- Type: `float`
- Default: Inferred from overridden block
@@ -113,11 +118,12 @@ The following details the schema for the mappings file. Only the `name` field is
- Type: `array`
- Default: Inferred from overridden block
- Description: An array of x, y, and z size values
- Range: Must be in range `[0, 0, 0]` to `[16, 24, 16]`, inclusive
- `items`:
- Type: `float`
- Default: Inferred from overridden block
- Description: An size value for a single axis
- Range: Addittion of `origin` and `size` must be in range `[-8, 0, -8]` to `[8, 16, 8]`, inclusive.
- Range: The sum of `origin` and `size` must be in range `[-8, 0, -8]` to `[8, 24, 8]`, inclusive.
- `destructible_by_mining`:
- Type: `integer`
- Default: Inferred from overridden block
@@ -126,26 +132,6 @@ The following details the schema for the mappings file. Only the `name` field is
- Type: `string`
- Default: the name of the custom block
- Description: The display name of the block.
- `extended_collision_box`:
- Type: `object`
- `origin`:
- Type: `array`
- Default: Inferred from overridden block
- Description: An array of x, y, and z origin values
- Range: Must be in range `[-8, 0, -8]` to `[8, 16, 8]`, inclusive
- `items`:
- Type: `float`
- Default: Inferred from overridden block
- Description: An origin value for a single axis
- `size`:
- Type: `array`
- Default: Inferred from overridden block
- Description: An array of x, y, and z size values
- `items`:
- Type: `float`
- Default: Inferred from overridden block
- Description: An size value for a single axis
- Range: Addittion of `origin` and `size` must be in range `[-8, 0, -8]` to `[8, 16, 8]`, inclusive.
- `friction`:
- Type: `float`
- Range: `0.0` to `1.0`
+35
View File
@@ -0,0 +1,35 @@
---
title: Custom Content
description: How to use custom content (requiring resource packs) with Geyser.
---
Geyser supports mapping various custom additions to the game via resource packs and mappings, such as custom items, blocks, and skulls. See:
- [Custom items](/wiki/geyser/custom-items)
- [Custom blocks](/wiki/geyser/custom-blocks)
- [Custom skulls](/wiki/geyser/custom-skulls)
- [Custom waypoint icons](/wiki/geyser/custom-waypoints)
- [Custom entities](/wiki/geyser/custom-entities)
:::info
Geyser does not convert resource packs from Java Edition automatically.
However, you can use automatic tools such as [Rainbow](/wiki/other/rainbow/) or [Thunder](/wiki/other/thunder) to make converting custom content simpler.
:::
## JSON mappings {#json-mappings}
Various custom additions to the game will require writing custom JSON mappings for Geyser. These mappings are placed
within the `custom_mappings` folder in Geyser's config directory. To enable the usage of custom JSON mappings, ensure
that `gameplay.enable-custom-content` is set to `true` in your `config.yml` file:
```yaml
# Whether to add any items and blocks which normally does not exist in Bedrock Edition.
# This should only need to be disabled if using a proxy that does not use the "transfer packet" style of server switching.
# If this is disabled, furnace minecart items will be mapped to hopper minecart items.
# Geyser's block, item, and skull mappings systems will also be disabled.
# This option requires a restart of Geyser in order to change its setting.
enable-custom-content: true
```
JSON mappings will always have a `format_version` key defined at the root object. Refer to the documentation of the
content you're mapping (items, blocks, etc.) to see what the current `format_version` is.
+234
View File
@@ -0,0 +1,234 @@
---
title: Geyser Entity API
description: Geyser extensions can register custom Bedrock entity definitions, modify existing entities, and replace built-in types in entity spawning events.
---
:::warning Experimental API
The (Custom) Entity API was introduced with Geyser API **2.11.0** (26.2 update) and is currently marked `@ApiStatus.Experimental`. This means that the API may change or be rewritten in parts in a future version without prior deprecation.
If you have feedback on this API, encounter issues, or wish to request further features, please reach out to us!
The `GeyserDefineEntityPropertiesEvent` has been available since **2.9.0**, but its identifier parameter changed in 2.11.0: it now takes a **Bedrock** entity identifier instead of a Java one. See [Entity Properties](#entity-properties) for details.
:::
:::info
This API currently cannot be used via JSON mappings. In the future, we are planning to support entity variants, which would likely also be usable through JSON mappings.
:::
Custom entities currently (as of 26.2) do not exist in Minecraft: Java Edition. Instead, they can be simulated with armor stands holding item models, or item/block display entity combinations.
Unlike Java Edition, Bedrock does support custom entity types, but does not have item or block display entities. With this API, Geyser extensions can register custom Bedrock entity definitions to use instead of Java
entity types in entity spawning events to properly support custom entities for Bedrock players. Further, it allows modifying entity properties and data for any entity sent to a Bedrock player at runtime.
Additionally to registering custom entity definitions, you will also need to provide a resource pack to players [defining custom entity textures and animations](https://wiki.bedrock.dev/guide/custom-entity).
## Prerequisites: Vocabulary {#vocabulary}
- **Bedrock Entity Definition** (`GeyserEntityDefinition` / `CustomEntityDefinition`): Identifies the Bedrock entity type to spawn, either a built-in type, or a custom type
- **Entity Properties**: Bedrock Molang-queryable values (`query.property(...)`) registered per Bedrock entity type. See [here](https://learn.microsoft.com/en-us/minecraft/creator/documents/introductiontoentityproperties?view=minecraft-bedrock-stable) for official documentation.
- **Entity Data Types**: Properties on entities that can be changed dynamically, such as scale, size, hitboxes, and color.
## Registering a Custom Entity Definition {#registering-entity-definition}
Custom entity definitions are registered using `GeyserDefineEntitiesEvent`, which fires once during Geyser's startup:
```java
@Subscribe
public void onDefineEntities(GeyserDefineEntitiesEvent event) {
CustomEntityDefinition myEntity = CustomEntityDefinition.of(Identifier.of("mynamespace:my_entity"));
event.register(myEntity);
}
```
Do note:
- Custom entity definition type identifier must not use the `minecraft` namespace
- Entity types must have a unique identifier
## Summoning custom entities {#custom-entity-spawning}
Whenever the Java server creates a new non-player entity for any connection, a `ServerSpawnEntityEvent` is fired. It can be used to change which Bedrock entity definition is sent to the Bedrock player or cancel the spawn entirely.
Each connection has its own entity cache, so different players will never share the same entity instance.
Example:
```java
private static final Identifier ZOMBIE = Identifier.of("minecraft:zombie");
private static final CustomEntityDefinition MY_ENTITY = CustomEntityDefinition.of(Identifier.of("mynamespace:my_entity"));
@Subscribe
public void onDefineEntities(GeyserDefineEntitiesEvent event) {
event.register(MY_ENTITY);
}
@Subscribe
public void onSpawn(ServerSpawnEntityEvent event) {
if (event.entityType().is(ZOMBIE)) {
event.definition(MY_ENTITY); // definition must be registered beforehand
}
}
```
This example replaces all spawned zombies with our custom entity, which we registered in `onDefineEntities`.
:::info
The `ServerSpawnEntityEvent` fires before the entity is spawned (since it could be canceled). You can provide a consumer for the resulting `GeyserEntity` to set initial entity data values before the entity is spawned on the client:
```java
private static final Identifier ZOMBIE = Identifier.of("minecraft:zombie");
private static final CustomEntityDefinition MY_ENTITY = CustomEntityDefinition.of(Identifier.of("mynamespace:my_entity"));
@Subscribe
public void onSpawn(ServerSpawnEntityEvent event) {
if (!event.entityType().is(ZOMBIE)) {
return;
}
event.definition(MY_ENTITY);
event.preSpawnConsumer(entity -> {
entity.override(GeyserEntityDataTypes.SCALE, 2.0f);
entity.override(GeyserEntityDataTypes.COLOR, (byte) 5);
});
}
```
:::
### Modifying shoulder parrots {#shoulder-parrots}
`ServerAttachParrotsEvent` fires when a parrot is attached to a player's shoulder. It extends `ServerSpawnEntityEvent`, so definition replacement, cancellation, and setting a pre spawn consumer for the
resulting `GeyserEntity` instance are all available.
```java
@Subscribe
public void onParrotAttach(ServerAttachParrotsEvent event) {
event.definition(myParrotReplacement); // this entity definition would also be registered previously
}
```
## Modifying entity data {#entity-data}
Entity data consists of runtime-modifiable values such as scale, size, and hitboxes. All constants live in `GeyserEntityDataTypes`. Values for these types can be updated on a `GeyserEntity`
at any time using `entity.override(type, value)`, or set inside a pre-spawn consumer in the entity spawn events to modify it before the spawn packet is sent.
Updating any of these values will override the value sent by the server until the override is removed. To remove an override, a `null` value can be used.
| Constant | Value Type | Description |
|------------------------------------|----------------|------------------------------------------------------------------------------|
| `COLOR` | `Byte` | Bedrock color component (0–15) |
| `VARIANT` | `Integer` | Numeric variant index, queryable via `query.variant` in resource packs |
| `WIDTH` | `Float` | Collision box width |
| `HEIGHT` | `Float` | Collision box height |
| `VERTICAL_OFFSET` | `Float` | Y-axis offset applied on top of the Java entity position |
| `SCALE` | `Float` | Visual scale multiplier |
| `HITBOXES` | `List<Hitbox>` | Custom hitboxes. Set an empty list to remove all hitboxes |
| `SEAT_OFFSET` | `Vector3f` | Riding position offset |
| `ROTATION_LOCKED_TO_VEHICLE` | `Boolean` | Whether the rider's rotation is locked to the vehicle's rotation |
| `SEAT_LOCK_RIDER_ROTATION_DEGREES` | `Float` | The degrees of rotation a rider may rotate within when mounted on an entity. |
| `SEAT_HAS_ROTATION` | `Boolean` | Whether a seat has rotation |
| `ROTATE_RIDER_DEGREES` | `Float` | Rotation offset for the seat in degrees |
:::info
Hitbox `min`, `max` and `pivot` are absolute world coordinates, not relative to the entity's position.
:::
## Entity Properties {#entity-properties}
Entity properties expose Java-side state to Bedrock resource packs via `query.property('namespace:name')` in Molang. Entity properties can be registered for both custom, and vanilla entity types using the `GeyserDefineEntityPropertiesEvent`, which fires during Geyser startup.
:::warning Breaking Change in 2.11.0
`GeyserDefineEntityPropertiesEvent` has been available since **2.9.0**, but its first parameter changed in 2.11.0: it now takes a **Bedrock** entity type identifier.
:::
A maximum of 32 properties per entity type can be registered.
```java
private GeyserFloatEntityProperty aggression = null;
private GeyserIntEntityProperty state = null;
private GeyserBooleanEntityProperty enraged = null;
private GeyserEnumEntityProperty<Phase> phase = null;
private GeyserStringEnumProperty mode = null;
@Subscribe
public void onDefineProperties(GeyserDefineEntityPropertiesEvent event) {
Identifier zombieType = Identifier.of("minecraft:zombie");
// Float property: min, max, default (null default uses min)
aggression = event.registerFloatProperty(zombieType, Identifier.of("mynamespace:aggression"), 0f, 1f, 0f);
// Integer property
state = event.registerIntegerProperty(zombieType, Identifier.of("mynamespace:state"), 0, 10, null);
// Boolean property
enraged = event.registerBooleanProperty(zombieType, Identifier.of("mynamespace:enraged"), false);
// Enum from a Java enum class (max 16 values, names max 32 chars, must start with a letter)
phase = event.registerEnumProperty(zombieType, Identifier.of("mynamespace:phase"), Phase.class, Phase.IDLE);
// Enum from a string list
mode = event.registerEnumProperty(zombieType, Identifier.of("mynamespace:mode"), List.of("idle", "active", "fleeing"), "idle");
}
```
Properties can be updated on a `GeyserEntity` instance at any time:
```java
// Single property
entity.updateProperty(aggression, 0.5f);
```
## Looking up entities {#looking-up-entities}
After an entity has spawned it can be looked up through `GeyserConnection#entities()`. All lookup methods are thread-safe.
```java
EntityData entityData = connection.entities();
// By Java entity ID (int)
GeyserEntity entity = entityData.byJavaId(javaId);
// By UUID
GeyserEntity entity = entityData.byUuid(uuid);
// By Geyser/Bedrock runtime ID (long)
GeyserEntity entity = entityData.byGeyserId(geyserId);
```
All three return `null` if no entity is found. A `GeyserEntity` exposes various properties, such as the entity uuid, current passengers / vehicle if applicable, and it can further be used to update
entity properties or entity data type values.
## Full Example {#full-example}
<details>
<summary>Expand for a full extension example</summary>
```java
public class MyExtension implements Extension {
// Create a custom entity definition
private final CustomEntityDefinition enhancedZombie = CustomEntityDefinition.of(Identifier.of("myext:enhanced_zombie"));
private GeyserFloatEntityProperty healthFraction = null;
// Register the custom entity type
@Subscribe
public void onDefineEntities(GeyserDefineEntitiesEvent event) {
event.register(enhancedZombie);
}
// Optionally: Register entity properties (Bedrock identifier)
@Subscribe
public void onDefineProperties(GeyserDefineEntityPropertiesEvent event) {
healthFraction = event.registerFloatProperty(
enhancedZombie.identifier(),
Identifier.of("myext:health_fraction"),
0f, 1f, 1f
);
}
// Replace a default Bedrock entity definition with our custom one
@Subscribe
public void onSpawn(ServerSpawnEntityEvent event) {
// Unless you want to replace everything, you should probably add checks for e.g., entity type, or entity UUID
event.definition(enhancedZombie);
event.preSpawnConsumer(entity -> {
entity.override(GeyserEntityDataTypes.SCALE, 1.5f);
entity.override(GeyserEntityDataTypes.COLOR, (byte) 4);
});
}
}
```
</details>
@@ -1,11 +1,18 @@
---
title: Custom Items
description: Geyser allows custom Bedrock items to be added for an equivalency to Vanilla Java item predicates or modded items.
title: Custom Items (v1)
description: Legacy documentation for the first version of the custom item API
---
To setup custom items in geyser, you have to choose how you are going to register your items. The easiest is [using a json file](#json-mappings) but you can also [use a Geyser extension](#geyser-extensions).
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
## JSON mappings {#json-mappings}
### Format version 1 (legacy)
:::warning
`format_version: 1` is no longer receiving updates. New features will only be added to format version 2.
:::
## JSON mappings (v1)
1. Start your server, and you should have a folder called `custom_mappings` that is created. That would be with the folder of `Geyser.jar` file for standalone and inside your Geyser data folder for a plugin.
2. Create a `.json` file, it can be any name you like and as many files as you like. You don't need to make one file per item. Here is the structure of the file:
@@ -74,9 +81,9 @@ To setup custom items in geyser, you have to choose how you are going to registe
}
```
## Geyser extensions {#geyser-extensions}
## Geyser extensions (v1)
### Extending a vanilla item {#extending-a-vanilla-item}
### Extending a vanilla item (v1)
1. Create your custom item options or registrations, to which you can add any of the following. They can be stacked, so that all of the specified types need to match, but you **do NOT need all of them.**
```java
@@ -109,7 +116,7 @@ public void onGeyserPreInitializeEvent(GeyserDefineCustomItemsEvent event) {
}
```
### Non vanilla (modded) items with Geyser extensions (for example to use with Fabric) {#non-vanilla-modded-items-with-geyser-extensions-for-example-to-use-with-fabric}
### Non vanilla (modded) items with Geyser extensions (for example to use with Fabric) (v1)
1. Create your item data:
```java
@@ -127,28 +134,4 @@ public void onGeyserDefineCustomItemsEvent(GeyserDefineCustomItemsEvent event) {
}
```
## Resource pack {#resource-pack}
1. Setup a basic bedrock resource pack. If you need help, you can find it [here](https://wiki.bedrock.dev/guide/project-setup.html#rp-manifest).
2. Make a `textures` folder.
3. Create `item_texture.json` in the `textures`, and put this in it:
```json
{
"resource_pack_name": "MY_PACK_NAME_HERE",
"texture_name": "atlas.items",
"texture_data": {
}
}
```
4. Inside texture data, you can add your items. The texture name and path must match the name that you set in your mappings.
```json
"my_item": {
"textures": [
"textures/items/my_item"
]
}
```
5. Then you need to put your textures inside the `textures/items`. Make sure to have it match the texture path that you specified in `item_texture.json`!
File diff suppressed because it is too large. Load diff
-9
View File
@@ -1,9 +0,0 @@
---
title: Custom Resource Packs
description: How to use custom resource packs for Geyser.
---
Geyser supports custom resource packs for use with custom items, blocks, and skulls. See:
- [Custom items](/wiki/geyser/custom-items)
- [Custom blocks](/wiki/geyser/custom-blocks)
- [Custom skulls](/wiki/geyser/custom-skulls)
-139
View File
@@ -1,139 +0,0 @@
---
title: Custom Skulls
description: Geyser allows mapping of custom skulls to custom blocks for use in inventories and on entities.
---
Unlike Java Edition, Bedrock does not have native support for custom skull items. As a result, any method to display custom skulls with Geyser is, to some extent, a workaround. Geyser has long supported in-world custom skulls via the spawning of player entities. This, however, does not allow for the use of custom skulls in inventories, nor does it allow them to be worn by entities. To resolve this, Geyser now allows for the pre-registration of custom skulls via a config file. Geyser will then use this config file to generate a custom resource pack on start that contains the geometry and textures for the pre-registered custom skulls. To the client, these skulls are blocks. Therefore, they can be held in player inventories. In additional, attachables are defined for each skull block so that it is displayed correctly when worn and held by entities.
To setup custom skulls in geyser, you have to choose how you are going to register your blocks. The easiest is [using custom-skulls.yml](#custom-skullsyml), but you can also [use a Geyser extension](#geyser-extensions).
## Enabling custom skulls {#enabling-custom-skulls}
To enable custom skulls, you must set `gameplay.enable-custom-content` to `true` in the `config.yml` file. This will enable the generation of the custom resource pack and the translation of custom skulls to custom blocks. You can then add custom skulls to the `custom-skulls.yml` file.
```yaml
# Whether to add any items and blocks which normally does not exist in Bedrock Edition.
# This should only need to be disabled if using a proxy that does not use the "transfer packet" style of server switching.
# If this is disabled, furnace minecart items will be mapped to hopper minecart items.
# Geyser's block, item, and skull mappings systems will also be disabled.
# This option requires a restart of Geyser in order to change its setting.
enable-custom-content: true
```
## custom-skulls.yml {#custom-skullsyml}
The configuration file `custom-skulls.yml` is present in Geyser's configuration folder and is laid out as follows:
```yml
# --------------------------------
# Geyser Custom Skull Configuration Files
#
# This file is ignored with `add-custom-skull-blocks` disabled.
# See `config.yml` for the main set of configuration values
#
# Custom skulls with the player username, UUID, or texture specified in this file
# will be translated as custom blocks and be displayed in the inventory and on entities.
# --------------------------------
# Java player usernames
# Skins will be updated when Geyser starts and players will have to re-download
# the resource pack if any players had changed their skin.
player-usernames:
- GeyserMC
# Java player UUIDs
# Skins will be updated when Geyser starts and players will have to re-download
# the resource pack if any players had changed their skin.
player-uuids:
- 8b8d8e8f-2759-47c6-acb5-5827de8a72b8
# The long string of characters found in the NBT of custom player heads
player-profiles:
- ewogICJ0aW1lc3RhbXAiIDogMTY1NzMyMjIzOTgzMywKICAicHJvZmlsZUlkIiA6ICJjZGRiZTUyMGQwNDM0YThiYTFjYzlmYzkyZmRlMmJjZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJBbWJlcmljaHUiLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTkwNzkwYzU3ZTE4MWVkMTNhZGVkMTRjNDdlZTJmN2M4ZGUzNTMzZTAxN2JhOTU3YWY3YmRmOWRmMWJkZTk0ZiIsCiAgICAgICJtZXRhZGF0YSIgOiB7CiAgICAgICAgIm1vZGVsIiA6ICJzbGltIgogICAgICB9CiAgICB9CiAgfQp9
# The hash of the skin on Minecraft's skin server
skin-hashes:
- a90790c57e181ed13aded14c47ee2f7c8de3533e017ba957af7bdf9df1bde94f
```
To add a skull, you need to choose any of the four methods, and add a new entry. The following sections will explain each method:
### Player usernames {#player-usernames}
Skulls can be registered in this section via player usernames. These will be updated when Geyser starts. As a result, they may change if the player's username or skin changes.
### Player UUIDs {#player-uuids}
Skulls can be registered in this section via player UUIDs. These will be updated when Geyser starts. As a result, they may change if skin changes.
### Player profiles {#player-profiles}
Skulls can be registered in this section via the texture string found in the NBT of custom player heads. Unless the value is changed manually, these will not be updated when Geyser starts. As a result, they will not change if the player's username or skin changes. The data is simply base64 encoded JSON. For instance, the example given in the config decodes as follows:
```json
{
"timestamp" : 1657322239833,
"profileId" : "cddbe520d0434a8ba1cc9fc92fde2bcf",
"profileName" : "Amberichu",
"textures" : {
"SKIN" : {
"url" : "http://textures.minecraft.net/texture/a90790c57e181ed13aded14c47ee2f7c8de3533e017ba957af7bdf9df1bde94f",
"metadata" : {
"model" : "slim"
}
}
}
}
```
If on a paper server, this data can be obtained for a skull by holding the item in hand, and running the command `/paper dumpitem`. This will output the NBT data of the item to chat and console. The texture string is found in the `SkullOwner` tag, under the `Properties` tag, under the `textures` tag, under the `Value` tag. For example:
```log
[05:58:07 INFO]: .KastleFirefox issued server command: /paper dumpitem
[05:58:07 INFO]: minecraft:player_head{display: {Name: '{"text":"Test"}'}, SkullOwner: {Properties: {textures: [{Value: "ewogICJ0aW1lc3RhbXAiIDogMTY1NzMyMjIzOTgzMywKICAicHJvZmlsZUlkIiA6ICJjZGRiZTUyMGQwNDM0YThiYTFjYzlmYzkyZmRlMmJjZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJkYXZjaG9vIiwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2E5MDc5MGM1N2UxODFlZDEzYWRlZDE0YzQ3ZWUyZjdjOGRlMzUzM2UwMTdiYTk1N2FmN2JkZjlkZjFiZGU5NGYiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ"}]}, Id: [I; -229048314, -553040501, -1407961158, 465313087]}}
```
### Skin Hashes {#skin-hashes}
Skulls can be registered in this section via the hash of the skin on Minecraft's skin server. This is found at the end of the URL. For example, in the URL `http://textures.minecraft.net/texture/a90790c57e181ed13aded14c47ee2f7c8de3533e017ba957af7bdf9df1bde94f` the hash is `a90790c57e181ed13aded14c47ee2f7c8de3533e017ba957af7bdf9df1bde94f`.Unless the value is changed manually, these will not be updated when Geyser starts. As a result, they will not change if the player's username or skin changes.
This can be obtained by decoding the base64 data obtained from a player profile.
## Geyser extensions {#geyser-extensions}
In this example, we will register a custom skull from a player profile. We will use the player profile from the example above.
First, create a class that implements Geyser's Extension class:
```java
public class RegisterCustomSkull implements Extension {
//...
}
```
Next, create a method to register your blocks in the `GeyserDefineCustomSkullsEvent`:
```java
public class RegisterCustomSkull implements Extension {
@Subscribe
public void onDefineCustomSkulls(GeyserDefineCustomSkullsEvent event) {
//...
}
}
```
Finally, register your skull in the event. Use the enum SkullTextureType to specify that the value being passed is a player profile:
```java
public class RegisterCustomSkull implements Extension {
@Subscribe
public void onDefineCustomSkulls(GeyserDefineCustomSkullsEvent event) {
String profile = "ewogICJ0aW1lc3RhbXAiIDogMTY1NzMyMjIzOTgzMywKICAicHJvZmlsZUlkIiA6ICJjZGRiZTUyMGQwNDM0YThiYTFjYzlmYzkyZmRlMmJjZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJkYXZjaG9vIiwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2E5MDc5MGM1N2UxODFlZDEzYWRlZDE0YzQ3ZWUyZjdjOGRlMzUzM2UwMTdiYTk1N2FmN2JkZjlkZjFiZGU5NGYiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ"
event.register(profile, SkullTextureType.PROFILE);
}
}
```
## Scraping custom skulls from a world {#scraping-custom-skulls-from-a-world}
Custom skulls can be extracted from an existing world for easy implementation via mappings or API using the tool [HeadExtractor](https://github.com/davchoo/HeadExtractor) made by Amberichu. See the linked repository for usage instructions.
+106
View File
@@ -0,0 +1,106 @@
---
title: Custom Skulls
description: Geyser allows mapping of custom skulls to custom blocks for use in inventories and on entities.
---
import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";
Unlike Minecraft: Java Edition, Bedrock Edition does not have native support for custom skull items.
As a result, any method to display custom skulls with Geyser is, to some extent, a workaround.
Geyser has long supported in-world custom skulls via the spawning of player entities.
This, however, does not allow for the use of custom skulls in inventories, nor does it allow them to be worn by entities.
To resolve this, Geyser allows for the pre-registration of custom skulls via custom JSON mappings
or the Geyser API. Geyser will then generate a custom resource pack on start that contains the geometry and textures
for the pre-registered custom skulls.
To the client, these skulls are blocks. Therefore, they can be held in player inventories.
In addition, attachables are defined for each skull block, so that it is displayed correctly when worn and held by entities.
To set up custom skulls in Geyser, you have to choose how you are going to register them.
The easiest is using custom mappings via JSON files. Alternatively, you can also use the Geyser API, for example using a Geyser extension or a plugin.
:::info
You can use tools such as [Rainbow](/wiki/other/rainbow/) to automatically generate custom JSON mappings for skulls.
:::
:::info
Custom skulls used to be registered using a YAML file in Geyser's config directory, `custom-skulls.yml`. This file
is legacy and its contents will automatically be migrated to custom JSON mappings when Geyser starts.
:::
## Registering custom skulls
Custom skulls can be registered through 4 methods:
- By player username. These will be updated when Geyser starts. As a result, they may change if the player's username or skin changes.
- Use this option for skulls marked `Dynamic` on Java Edition.
- By player UUID. These will also be updated when Geyser starts. As a result, they may change if skin changes.
- Use this option for skulls marked `Dynamic` on Java Edition.
- By the base-64 encoded `textures` property of game profiles. These will only ever change when the registered value itself changes, as they hold a static reference to a skin.
- You can get these values from a custom skull in your hand using the following command in Minecraft: Java Edition: `/data get entity @s SelectedItem.components."minecraft:profile".properties[{name:"textures"}].value`.
- Please note that this command has only been tested on Java Edition 26.2. If the command fails, that could mean your custom skull is a dynamic one, and you should register a UUID or username instead.
- By skin texture hash. These will also only ever change when the value itself changes. They are a static reference to a skin texture over at `https://textures.minecraft.net/texture/`.
- You generally don't need to use this option, as it is often easier to just use the base-64 profile found in a skull.
- If you want to publish an extension or custom skull mappings however, this option can be useful to hide player names/UUIDs, if you wish to do so.
<Tabs groupId="custom-skull-implementation">
<TabItem value="json" label="JSON mappings">
For setting up JSON mappings, please see the instructions [here](/wiki/geyser/custom-content#json-mappings).
JSON mappings have to specify the `format_version` set to `1`, and list all custom skulls under the
`skulls` key. This key holds an object in which Java Edition usernames, user UUIDs, profile hashes or skin texture
hashes can be specified.
For example, take the following `custom_skulls.json` file:
```json
{
"format_version": 1,
"skulls": {
"username": [
"GeyserMC"
],
"uuid": [
"8b8d8e8f-2759-47c6-acb5-5827de8a72b8"
],
"profile": [
"ewogICJ0aW1lc3RhbXAiIDogMTY1NzMyMjIzOTgzMywKICAicHJvZmlsZUlkIiA6ICJjZGRiZTUyMGQwNDM0YThiYTFjYzlmYzkyZmRlMmJjZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJBbWJlcmljaHUiLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTkwNzkwYzU3ZTE4MWVkMTNhZGVkMTRjNDdlZTJmN2M4ZGUzNTMzZTAxN2JhOTU3YWY3YmRmOWRmMWJkZTk0ZiIsCiAgICAgICJtZXRhZGF0YSIgOiB7CiAgICAgICAgIm1vZGVsIiA6ICJzbGltIgogICAgICB9CiAgICB9CiAgfQp9"
],
"skin_hash": [
"a90790c57e181ed13aded14c47ee2f7c8de3533e017ba957af7bdf9df1bde94f"
]
}
}
```
These mappings specify skulls for the `GeyserMC` user, the `Camotoy` user (using UUID `8b8d8e8f-2759-47c6-acb5-5827de8a72b8`),
and [this](http://textures.minecraft.net/texture/a90790c57e181ed13aded14c47ee2f7c8de3533e017ba957af7bdf9df1bde94f) skin (through the base-64 `profile` entry and the `skin_hash` entry).
</TabItem>
<TabItem value="api" label="Geyser API">
Custom skulls are registered at startup through the `GeyserDefineCustomSkullsEvent`. All skulls are registered
through the `register(String texture, SkullTextureType type)` method, in which the `type` parameter defines the
type of the string registered, which is one of:
- `SkullTextureType.USERNAME` for usernames.
- `SkullTextureType.UUID` for UUIDs.
- `SkullTextureType.PROFILE` for base-64 encoded `textures` properties of game profiles.
- `SkullTextureType.SKIN_HASH` for skin texture hashes.
As an example:
```java
@Subscribe
public void onDefineCustomSkulls(GeyserDefineCustomSkullsEvent event) {
event.register("GeyserMC", SkullTextureType.USERNAME);
event.register("8b8d8e8f-2759-47c6-acb5-5827de8a72b8", SkullTextureType.UUID);
event.register("ewogICJ0aW1lc3RhbXAiIDogMTY1NzMyMjIzOTgzMywKICAicHJvZmlsZUlkIiA6ICJjZGRiZTUyMGQwNDM0YThiYTFjYzlmYzkyZmRlMmJjZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJBbWJlcmljaHUiLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTkwNzkwYzU3ZTE4MWVkMTNhZGVkMTRjNDdlZTJmN2M4ZGUzNTMzZTAxN2JhOTU3YWY3YmRmOWRmMWJkZTk0ZiIsCiAgICAgICJtZXRhZGF0YSIgOiB7CiAgICAgICAgIm1vZGVsIiA6ICJzbGltIgogICAgICB9CiAgICB9CiAgfQp9", SkullTextureType.PROFILE);
event.register("a90790c57e181ed13aded14c47ee2f7c8de3533e017ba957af7bdf9df1bde94f", SkullTextureType.SKIN_HASH);
}
```
This example specifies skulls for the `GeyserMC` user, the `Camotoy` user (using UUID `8b8d8e8f-2759-47c6-acb5-5827de8a72b8`),
and [this](http://textures.minecraft.net/texture/a90790c57e181ed13aded14c47ee2f7c8de3533e017ba957af7bdf9df1bde94f) skin (through the base-64 `PROFILE` entry and the `SKIN_HASH` entry).
</TabItem>
</Tabs>
+228
View File
@@ -0,0 +1,228 @@
---
title: Custom Waypoint Icons
description: Geyser supports custom locator bar icons (also known as waypoint icons), though they have to be mapped manually.
---
import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";
Minecraft: Java Edition supports showing custom icons on the locator bar. These are known as custom waypoints and, on
Java Edition, are implemented through custom "waypoint styles" in a resource pack. These waypoint styles specify a near
and far distance in blocks, and a list of sprites to display on the locator bar.
Bedrock Edition also supports custom waypoint icons through behaviour + resource packs. In Geyser, these are implemented through custom JSON mappings, similar to custom block or item mappings, alongside a Bedrock resource pack.
Geyser extensions can also make use out of Bedrock's support for custom waypoint icons. Unlike JSON mappings however,
extensions have more freedom in how icons are displayed to the client.
When an unknown custom waypoint style is sent to Geyser by the Java server,
Geyser will display the waypoint using vanilla's default icons.
:::info
This guide only describes the steps required to write custom waypoint style mappings. You still need to create a resource pack
for Bedrock Edition, add the waypoint icons to it, and use it in Geyser. Geyser cannot automatically pull icons from
Java Edition resource packs.
:::
:::warning
As with custom blocks and items, Geyser does not convert resource packs from Java Edition, and also does not generate
custom waypoint mappings automatically. However, [Rainbow](/wiki/other/rainbow/) has
support for these conversions.
:::
## Simple icons
Custom waypoint icons following Java's system of having a near- and far-distance should be mapped using JSON mappings, or,
when using Geyser extensions, Geyser's `CustomWaypointStyle.VanillaBuilder` helper builder. Both of these methods follow
the same format as Java's custom waypoint styles and should feel very familiar.
<Tabs groupId="custom-waypoint-implementation">
<TabItem value="json" label="JSON-mappings">
For setting up JSON mappings, please see the instructions [here](/wiki/geyser/custom-content#json-mappings).
JSON mappings have to specify the `format_version` set to `1`, and list all custom waypoint styles under the
`waypoint_styles` key. This key holds an object in which keys are identifiers of waypoint styles, and each
value is the definition of that waypoint style.
For example, take the following `waypoint_mappings.json` file:
```json
{
"format_version": 1,
"waypoint_styles": {
"geyser:my_first_waypoint": {
"near_distance": 10,
"far_distance": 100,
"sprites": [
"geyser:custom_waypoint_0",
"geyser:custom_waypoint_1"
]
},
"geyser:my_second_waypoint": {
"sprites": [
"geyser:second_waypoint/texture_1",
"geyser:second_waypoint/texture_2",
"geyser:second_waypoint/texture_3",
"geyser:second_waypoint/texture_4"
]
},
"geyser:the_best_waypoint": {
"near_distance": 50,
"sprites": [
"geyser:ultimate_waypoint/near",
"geyser:ultimate_waypoint/far"
]
}
}
}
```
These mappings specify 3 custom waypoint styles, `geyser:my_first_waypoint`, `geyser:my_second_waypoint`, and
`geyser:the_best_waypoint`.
Just like on Java Edition, the default value for `near_distance` when not specified is 128, and for `far_distance`
it is 332. And, just like on Java Edition, at least one texture sprite must be specified.
Since namespaces do not exist in Bedrock Edition's resource packs, Geyser must flatten the texture sprite identifier
to be used in the resource pack on Bedrock Edition. Geyser does this using the following format:
> `textures/ui/<namespace>/locator_bar_dot/<path>`
As such, in the example above, the `geyser:my_first_waypoint` waypoint style refers to the following textures in the Bedrock resource pack:
- `textures/ui/geyser/locator_bar_dot/custom_waypoint_0`
- `textures/ui/geyser/locator_bar_dot/custom_waypoint_1`
</TabItem>
<TabItem value="api" label="Geyser API">
The Geyser API provides a helper builder, called `VanillaBuilder` in `CustomWaypointStyle`, to implement custom
waypoint icons that are similar to Java Edition's custom icons. The builder is similar to JSON-mappings in use
and requires the same fields to be specified.
Custom waypoint styles are registered per-connection in the `SessionDefineCustomWaypointsEvent`,
and as such you can check the `GeyserConnection` before registering a custom waypoint style. If a custom waypoint
style is used across multiple connections, it can be useful to only create it once to save memory.
`VanillaBuilder` instances are created by using `CustomWaypointStyle#vanillaLike(int nearDistance, int farDistance)`.
When not specifying a near- and far-distance, the Java defaults of 128 and 332 are used.
```java
@Subscribe
public void onSessionDefineCustomWaypoints(SessionDefineCustomWaypointsEvent event) {
event.register(Identifier.of("geyser:my_first_waypoint"), CustomWaypointStyle.vanillaLike(10, 100)
.withTexture(Identifier.of("geyser:custom_waypoint_0"))
.withTexture(Identifier.of("geyser:custom_waypoint_1"))
.build());
event.register(Identifier.of("geyser:my_second_waypoint"), CustomWaypointStyle.vanillaLike()
.withTexture(Identifier.of("geyser:second_waypoint/texture_1"))
.withTexture(Identifier.of("geyser:second_waypoint/texture_2"))
.withTexture(Identifier.of("geyser:second_waypoint/texture_3"))
.withTexture(Identifier.of("geyser:second_waypoint/texture_4"))
.build());
event.register(Identifier.of("geyser:the_best_waypoint"), CustomWaypointStyle.vanillaLike(50, 332)
.withTexture(Identifier.of("geyser:ultimate_waypoint/near"))
.withTexture(Identifier.of("geyser:ultimate_waypoint/far"))
.build());
}
```
As with JSON mappings, Geyser flattens the texture identifier into a string using the following format:
> `textures/ui/<namespace>/locator_bar_dot/<path>`
However, you can also pass a literal texture string to `withTexture`. This string must not be prefixed with
`textures/` and must also not be suffixed with the texture extension (e.g. `.png`).
You can register the same custom waypoint style for multiple waypoint style identifiers. However, each
waypoint style identifier may only have one custom waypoint style attached to it. If a duplicate is registered,
a `CustomWaypointStyleRegisterException` will be thrown.
</TabItem>
</Tabs>
---
<details>
<summary>Changing vanilla waypoint styles</summary>
Creating custom waypoint styles for vanilla waypoint styles, like `minecraft:default`, is allowed, and can be done
as follows:
<Tabs groupId="custom-waypoint-implementation">
<TabItem value="json" label="JSON-mappings">
```json
{
"format_version": 1,
"waypoint_styles": {
"minecraft:default": {
"sprites": [
"geyser:custom_vanilla_0",
"geyser:custom_vanilla_1",
"geyser:custom_vanilla_2",
"geyser:custom_vanilla_3",
"geyser:custom_vanilla_4"
]
}
}
}
```
</TabItem>
<TabItem value="api" label="Geyser API">
```java
@Subscribe
public void onSessionDefineCustomWaypoints(SessionDefineCustomWaypointsEvent event) {
event.register(Identifier.of("minecraft:default"), CustomWaypointStyle.vanillaLike(128, 332)
.withTexture(Identifier.of("geyser:custom_vanilla_0"))
.withTexture(Identifier.of("geyser:custom_vanilla_1"))
.withTexture(Identifier.of("geyser:custom_vanilla_2"))
.withTexture(Identifier.of("geyser:custom_vanilla_3"))
.withTexture(Identifier.of("geyser:custom_vanilla_4"))
.build());
}
```
</TabItem>
</Tabs>
</details>
## Advanced icons
Geyser API users may write custom implementations of `CustomWaypointStyle`, to run custom checks for waypoint textures
and waypoint icon sizes. Just like waypoint styles created using the `VanillaBuilder`, these can be registered for one
or more custom waypoint style identifiers in the `SessionDefineCustomWaypointsEvent`. For example, the following
implementation will always use the same texture and icon size, no matter the distance:
```java
public final class MyCustomWaypointStyle implements CustomWaypointStyle {
public static final CustomWaypointStyle INSTANCE = new MyCustomWaypointStyle();
private static final Vector2f SIZE = Vector2f.from(0.5, 0.5);
private MyCustomWaypointStyle() {}
@Override
public String texturePath(Identifier style, float distance) {
return "ui/geyser/locator_bar_dot/my_icon";
}
@Override
public Vector2f textureSize(Identifier style, float distance) {
return SIZE;
}
}
```
Implementations must always implement `texturePath(Identifier, float)` and `textureSize(Identifier, float)`. The first
returns the texture path to use for that waypoint style and distance (not prefixed with `textures/`), and the second
returns the size of the texture to use (where a size of `[1, 1]` is the size icons normally appear as when the waypoint
is close to the player).
Implementations can then be registered through the `SessionDefineCustomWaypointsEvent` as follows:
```java
@Subscribe
public void onSessionDefineCustomWaypoints(SessionDefineCustomWaypointsEvent event) {
event.register(Identifier.of("geyser:my_style", MyCustomWaypointStyle.INSTANCE));
}
```
Like with `VanillaBuilder`, should you use a custom waypoint style across multiple connections,
it can be useful to only keep one instance of it, to save memory. Also, avoid running time-taking operations in your
`texturePath` or `textureSize` implementations, since these methods are called frequently. For full implementation details,
refer to the Javadocs of `CustomWaypointStyle`.
+2 -2
View File
@@ -41,7 +41,7 @@ To update extensions, use the `update` folder within the extensions directory as
## Creating Geyser Extensions {#creating-geyser-extensions}
The easiest way to create an extension would be utilizing [this official template](https://github.com/GeyserMC/GeyserExampleExtension/).
The easiest way to create an extension would be utilizing [this official template](https://github.com/GeyserMC/GeyserExtensionTemplate/).
Simply create a new repository from the template, customize the `extension.yml` & `settings.gradle` files, and get started making the extension.
Geyser recognizes extensions when they have a file called `extension.yml` in the jars `resources` folder.
@@ -71,7 +71,7 @@ Explanations for the individual fields:
## Creating the main class {#creating-the-main-class}
The main class, the entrypoint for the extension, needs to [implement the **Extension** interface provided by Geyser](https://github.com/GeyserMC/GeyserExampleExtension/blob/master/src/main/java/org/geyser/extension/exampleid/ExampleExtension.java#L12).
The main class, the entrypoint for the extension, needs to [implement the **Extension** interface provided by Geyser](https://github.com/GeyserMC/GeyserExtensionTemplate/blob/master/src/main/java/org/geyser/extension/exampleid/ExampleExtension.java#L15).
That way, Geyser recognizes the extension, and gives you access to important methods - such as `logger()`, to get your extensions logger.
To see all the methods provided by that interface, see [here](https://github.com/GeyserMC/Geyser/blob/master/api/src/main/java/org/geysermc/geyser/api/extension/Extension.java).
@@ -98,22 +98,3 @@ Your firewall is likely in the way. Try adding an exception to Java, or disable
## As a last resort for troubleshooting... {#as-a-last-resort-for-troubleshooting}
Minecraft offers a vanilla Bedrock server [here](https://www.minecraft.net/download/server/bedrock). Downloading, running, and attempting to connect to it may help isolate if the issue is on Geyser's end, or your computer/network's end.
## Using Geyser on the same computer {#using-geyser-on-the-same-computer}
### Windows 10/11 {#windows-1011}
_This only affects people trying to join Geyser from Windows 10/11 Edition with Geyser hosted on the same computer._
This is an issue caused by Loopback restrictions not being lifted. By default, Microsoft Apps have this restriction on all their apps for local connections. Geyser will attempt to resolve this automatically; however, if you're still having connection problems, you can lift it by typing the following in Windows PowerShell in administrator mode: (it should return `OK.` if it worked)
```powershell
CheckNetIsolation LoopbackExempt -a -n="Microsoft.MinecraftUWP_8wekyb3d8bbwe"
```
Should this not work, you can try this set of steps:
1. Hold down Windows Key + R
2. In the prompt, type `hdwwiz.exe`, then press Enter then Next
3. Install the Hardware Manually
4. Choose Network Adapter > Next > Microsoft > "Microsoft KM-TEST Loopback Adapter" then hit Next until it's done.
+3 -3
View File
@@ -23,7 +23,7 @@ Then we'll talk about sending the form, receiving a response and doing advanced
While this is the easiest form type it's also the least customisable.
You have a title, description (content) and two buttons.
![Example of a ModalForm](https://i.imgur.com/kMpMgOh.png)
![Example of a ModalForm](/img/wiki/cumulus/modalform-example.png)
Code used in the image:
@@ -40,7 +40,7 @@ ModalForm.builder()
While this one is less easy than ModalForm is, it also has more customizability.
It's still limited to a title, content and buttons, but these buttons can also have images and do not have a minimum and maximum of two.
![Example of a SimpleForm](https://i.imgur.com/3rj2OQ2.png)
![Example of a SimpleForm](/img/wiki/cumulus/simpleform-example.png)
Code used in the image:
```java
@@ -58,7 +58,7 @@ While the CustomForm is the last one on our list (and thus the least easy one),
This form exists of a title, content and a list of different components e.g. label, slider and input.
See [Components](https://github.com/GeyserMC/Cumulus/tree/master/src/main/java/org/geysermc/cumulus/component) for more information about every component you can use and in which form type.
![Example of a CustomForm](https://i.imgur.com/zHgxELm.png)
![Example of a CustomForm](/img/wiki/cumulus/customform-example.png)
Code used in the image:
+4 -4
View File
@@ -32,7 +32,7 @@ Add Geyser's API codebase as a dependency:
<dependency>
<groupId>org.geysermc.geyser</groupId>
<artifactId>api</artifactId>
<version>2.9.0-SNAPSHOT</version>
<version>2.11.2-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
```
@@ -40,7 +40,7 @@ Add Geyser's API codebase as a dependency:
**Gradle**
```groovy
dependencies {
compileOnly('org.geysermc.geyser:api:2.9.0-SNAPSHOT')
compileOnly('org.geysermc.geyser:api:2.11.2-SNAPSHOT')
}
```
@@ -66,7 +66,7 @@ Add Floodgate's API as a dependency:
<dependency>
<groupId>org.geysermc.floodgate</groupId>
<artifactId>api</artifactId>
<version>2.2.4-SNAPSHOT</version>
<version>2.2.5-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
```
@@ -74,7 +74,7 @@ Add Floodgate's API as a dependency:
**Gradle**
```groovy
dependencies {
compileOnly('org.geysermc.floodgate:api:2.2.4-SNAPSHOT')
compileOnly('org.geysermc.floodgate:api:2.2.5-SNAPSHOT')
}
```
@@ -59,6 +59,9 @@ Disabling Geyser warnings from being logged will not fix the real issue! Only di
- `-DGeyser.AddTeamSuggestions=true`
- Allows you to turn off suggestions for teams in the scoreboard command. This is enabled by default, disabling this can help with performance if there are a lot of teams defined.
Setting "command-suggestions" to false in the config will also disable this.
- `-DGeyser.NoPlayerListPS=true`
- Enables a less-than-ideal workaround to resolve client crashing when chatting / typing commands on PlayStation consoles with lots of player online.
Disabled by default, as it is not needed for most setups.
- `-DGeyser.RakPacketLimit=120`
- Sets RakNet's per-ip per-tick (10ms) post-connection packet limit.
- `-DGeyser.RakGlobalPacketLimit=100000`
+73
View File
@@ -0,0 +1,73 @@
---
title: Nethernet Setup Guide
description: A guide for setting Nethernet up with Geyser.
---
Geyser now supports the new Nethernet mode of transport used by default on Bedrock as of build #1237, this is preferred over Raknet which will be removed in the upcoming 26.60 update (Date TBA).
## Differences between Nethernet and Raknet
The important different between Nethernet and Raknet is that Nethernet requires a TCP port **and** a UDP port, compared to Raknet that only needed a UDP port. This makes Nethernet more difficult to setup on certain hosting providers/networking setups.
Nethernet will do the following with a bedrock server:
- Contact the "Signalling" server found on the TCP port in order to get the following:
- The MOTD, player count and ping
- The connection details with bedrock will use to connect via UDP (WebRTC)
- The client then connects to the server via WebRTC which is where the UDP port is required
Raknet will do the following with a bedrock server:
- Make a small connection to the server to get the MOTD, player count and ping
- The client then connects to the server properly and starts sending the join data
This small difference shakes up the entire networking involved when connecting to a server on Bedrock. For this reason, the migration to Nethernet may be difficult for some users; but, we're hoping with the preparation time we've been given, we can make the transition smoother.
## What does this mean for you?
Depending on how you host your server, this could mean different things. Generally, you need to redo your network configurations if you made any previously for your server.
:::caution
If you used `clone-remote-port` when setting up your Geyser server, it is important to note this option **no longer works**! You must either change the port used, or setup [Nethernet External Signalling](#nethernet-external-signalling), if you do not, the Nethernet TCP port will collide with the Java server's port and the Nethernet signalling server will fail to boot, making it impossible to connect to your server.
:::
### Self-hosting
Ensure you have port forwarded your bedrock port for TCP also, this will allow Geyser to run the signalling server and continue accepting connections successfully. If you cannot do this for some reason, there is another option in order to get Nethernet working, see [Nethernet External Signalling](#nethernet-external-signalling).
### Hosting provider
When using a hosting provider, the fix is variable depending on which provider you're using, but we can help a bit here.
If you manually setup your network for Geyser by assigning a UDP port, good news! There's a good chance Nethernet should just work, as many providers will also allocate a TCP port with it. However, if this is not the case, allocate your UDP port for TCP also.
If you did not manage the networking, odds are you should be fine, as your hosting provider will hopefully be prepared for Nethernet, as we've given them the tools in order to get Nethernet setup.
If you only needed to enable `clone-remote-port`, see the caution above, with describes why this option **no longer works**.
If after this, none of those options worked, you may want to look into [Nethernet External Signalling](#nethernet-external-signalling).
## Nethernet External Signalling
Nethernet External Signalling (or NXS for short) is an open standard developed by [Open Collaboration](https://opencollaboration.dev/) alongside [Ziax](https://ziax.com/)! This standard allows you to run the Nethernet signalling server (the TCP port part) away from your server, then have them connect to each other!
This is good because:
- The signalling server can handle multiple servers at once, under a single port, making the networking setup more simple
- Any external provider can be used, not just your own, for example, [Warden](#warden-signalling)
- A hosting provider can automatically setup a signalling server and tell Geyser to use it, making setup much simpler!
### Warden Signalling
Warden Signalling, or just Warden, is a free service offered by [Ziax](https://ziax.com/) which Geyser can connect to in order to be given an IP which can be used to connect to your server!
What this means:
- You do not need to forward a TCP port
- You will not have a custom IP address, but something like `turquoisemango.wdn.gg` instead
- You **still** need to forward a UDP port for Warden to connect to, otherwise Warden will send the client to an unconnectable address
- You do not need any other signalling server, Warden is plug and play with Geyser
:::info
Warden is designed for smaller servers, if you own a big server, it is strongly advised you use your own signalling server or use Geyser's built in one.
:::
+2 -1
View File
@@ -81,7 +81,8 @@ However, many things that are possible with add-ons or behavior packs can be don
or [custom blocks](/wiki/geyser/custom-blocks).
- **Does Geyser convert Java edition resource packs?** <br />
Not currently. For now, you need to manually create a Bedrock edition resource pack equivalent.
Not currently. For now, you need to manually create a Bedrock edition resource pack equivalent. You can however
use automatic tools such as [Rainbow](/wiki/other/rainbow/) or [Thunder](/wiki/other/thunder) to make converting content simpler.
- **Can I allow players to choose resource packs themselves?** <br />
On most Bedrock platforms (except consoles), players are able to download and install resource packs on the client.
+28 -17
View File
@@ -13,31 +13,42 @@ You must be able to connect to your Geyser instance locally!
The playit.gg Minecraft server plugin does not support UDP tunnels. You will need to use the program agent instead!
:::
- If you already have playit.gg running & set up (for e.g. Minecraft Java edition), skip steps 1 and 2 and proceed with step 3.
## Setup {#setup}
1. Head over to [playit.gg's website](https://playit.gg/) - download the program & run it. It will open the login site in the browser - create an account & sign in. Or, use a guest account.
2. Once logged in, make sure to connect the program + site, until step 4 is reached. This should happen automatically, if it does not, follow the instructions on the website and the playit.gg program console.
![img](/img/wiki/playit-gg/running.png)
3. Click "Create Tunnel" if you see the screen above, or, select the "Tunnels" tab when logged in to your account. There, select "Minecraft Bedrock", leave "Enable Tunnel" ticked, and click "Add tunnel".
![img](/img/wiki/playit-gg/add_tunnel.png)
4. Once "Add tunnel" is clicked, it should create a new tunnel, and you are set! Scroll down until you see this:
![img](/img/wiki/playit-gg/added_tunnel.png)
In Geyser config, set the `advanced.bedrock.broadcast-port` to the playit.gg port from the "Allocation" tab. It is necessary for the motd to appear.
**Please do not change your Geyser port in `config.yml`** unless you have a reason to (e.g. hosting another Geyser server on the same machine), in which case skip to the paragraph below. The bedrock (Geyser) port in `config.yml` and the playit.gg ports are entirely seperate, playit.gg will forward its port to the default Geyser port and should already work. Changing it can cause errors. If you have changed your config port, change the bedrock port back to the default of 19132 and ensure that `clone-remote-port` is `false`.
If you have Geyser running on a port that is not 19132, update the "Local Port" with your Geyser port on the page shown above. The "Local Address" does not need to be changed unless you are not running playit.gg and Geyser on the same device.
5. Connect to your server - use the IP and Port from the "Allocation" tab. In our example - "180.ip.ply.gg" as the IP, and "17019" as the port. Alternatively, use the Domain it gives you instead of the IP.
6. If you join successfully, then you are done! Make sure to leave the playit.gg program running as closing it will close the tunnel. You also may want to ratelimit individual connections - use the "Per Connection Rate Limit" option to do so.
1. Head over to [playit.gg's website](https://playit.gg/) - download the program & run it.
2. The program will provide a claiming link. Visit that link, log in.
![img](/img/wiki/playit-gg/playit_claim.png)
3. Confirm your agent.
![img](/img/wiki/playit-gg/playit_claim_confirm.png)
4. Add the agent.
![img](/img/wiki/playit-gg/playit_add_agent.png)
5. After the agent is created, create a tunnel.
![img](/img/wiki/playit-gg/playit_add_tunnel.png)
6. Name your tunnel and click Next.
![img](/img/wiki/playit-gg/playit_name_tunnel.png)
7. Select "Minecraft Bedrock" as the tunnel type and click Next.
![img](/img/wiki/playit-gg/playit_tunnel_type.png)
8. Select the Free Network and click Next.
![img](/img/wiki/playit-gg/playit_select_network.png)
**Do not change your Geyser port in `config.yml` unless you have a reason (for example, hosting another Geyser server on the same machine).** The Bedrock (Geyser) port in `config.yml` and the playit.gg ports are separate. playit.gg will forward its port to the default Geyser port and should work as-is. Changing it can cause errors. If you have changed your config port, set the Bedrock port back to the default `19132` and ensure `clone-remote-port` is `false`.
9. If the playit.gg agent and Geyser are running on the same device, leave the IP as `127.0.0.1` and set the port to whatever you configured in Geyser's config.
![img](/img/wiki/playit-gg/playit_set_ipandport.png)
10. Select `proxy-protocol-v2` for the Proxy Protocol section and click Next.
11. In the Geyser config, under `advanced:` `bedrock:`, set `use-haproxy-protocol` to `true`.
12. Click Create Tunnel and wait for the tunnel to be created.
![img](/img/wiki/playit-gg/playit_create_tunnel.png)
13. Copy your tunnel's port. For example, if your tunnel address is `visiting-phone.gl.at.ply.gg:6695`, then `6695` is the tunnel port.
14. In the Geyser config under `advanced:` `bedrock:`, set `broadcast-port` to your tunnel port (`6695` in the example).
15. Save your config. Start your Minecraft server and connect using your tunnel's IP and port.
16. If you join successfully, then you are done! Make sure to leave the playit.gg program running as closing it will close the tunnel. You also may want to ratelimit individual connections - use the "Per Connection Rate Limit" option to do so.
(If you failed to join, check out the [troubleshooting](#troubleshooting) section of the page.)
## Troubleshooting {#troubleshooting}
### I can't connect to my server! {#i-cant-connect-to-my-server}
* *Try going to the Agents page, set your agent to IPv4 only, and change the region. You may need to switch regions a few times before you can connect.*
* *Are there errors in your minecraft server console?*
* *Unless you manually changed the "Local Port" on the playit.gg website, in Geyser config, ensure that the bedrock port is the default of `19132` and that `clone-remote-port` is `false`.*
* *If you changed the `bedrock-port` or set `clone-remote-port` to `true` and have a reason for doing so (e.g. hosting another Geyser server on the same machine), you'll have to tell playit.gg to use that port instead! See the last paragraph in step 4.*
* *If you changed the `bedrock-port` or set `clone-remote-port` to `true` and have a reason for doing so (e.g. hosting another Geyser server on the same machine), you'll have to tell playit.gg to use that port instead! See the last paragraph in step 8.*
* *Check that you're joining with playit.gg's IP and port from the "Allocation" tab.*
* *Make sure that you have the program agent open while trying to join.*
* *See [here](/wiki/geyser/fixing-unable-to-connect-to-world/) for general troubleshooting steps.*
+1 -1
View File
@@ -7,7 +7,7 @@ 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>.
If your server is running a version older than <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.
:::
+3 -1
View File
@@ -34,7 +34,9 @@ Geyser only works with **server-side** mods. Mods that require a client-side ins
clone-remote-port: false
```
The vital part is the port. This is the port that Bedrock players will use to connect to your server!
If you enable `clone-remote-port`, the port will be overridden and the Java port is used.
If you enable `clone-remote-port`, the port will be overridden and the Java port is used, but be careful,
as this only works when using [Nethernet External Signalling](/wiki/geyser/nethernet/setup#nethernet-external-signalling)
as the Nethernet TCP port cannot collide with the Java one.
Since you are self-hosting, you can choose the port freely - the default port is 19132.
**Important**: Other services/mods that rely on ports with UDP, such as Voice Chats or Query, cannot share the port with Geyser.
+4 -2
View File
@@ -6,7 +6,7 @@ description: Learn how to set up Geyser on your self-hosted Paper or Spigot serv
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>.
If your server is running a version older than <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.
:::
@@ -29,7 +29,9 @@ See also [this page](/wiki/geyser/supported-versions/) on supported versions.
clone-remote-port: false
```
The vital part is the port. This is the port that Bedrock players will use to connect to your server!
If you enable `clone-remote-port`, the port will be overridden and the Java port is used.
If you enable `clone-remote-port`, the port will be overridden and the Java port is used, but be careful,
as this only works when using [Nethernet External Signalling](/wiki/geyser/nethernet/setup#nethernet-external-signalling)
as the Nethernet TCP port cannot collide with the Java one.
Since you are self-hosting, you can choose the port freely - the default port is 19132.
**Important**: Other services/plugins that rely on ports with UDP, such as Voice Chats or Query, cannot share the port with Geyser.
+3 -1
View File
@@ -31,7 +31,9 @@ import { Versions } from '@site/src/components/Versions'
clone-remote-port: false
```
The vital part is the port. This is the port that Bedrock players will use to connect to your server!
If you enable `clone-remote-port`, the port will be overridden and the Java port is used.
If you enable `clone-remote-port`, the port will be overridden and the Java port is used, but be careful,
as this only works when using [Nethernet External Signalling](/wiki/geyser/nethernet/setup#nethernet-external-signalling)
as the Nethernet TCP port cannot collide with the Java one.
Since you are self-hosting, you can choose the port freely - the default port is 19132.
**Important**: Other services/plugins that rely on ports with UDP, such as Voice Chats or Query, cannot share the port with Geyser.
+2 -2
View File
@@ -5,7 +5,7 @@ hide_title: true
---
:::info
You need to have Java 17 or higher installed to run Geyser. To run Geyser Standalone on Android, see the bottom of this page.
You need to have Java 21 or higher installed to run Geyser. To run Geyser Standalone on Android, see the bottom of this page.
:::
:::caution
@@ -87,7 +87,7 @@ Applications such as Termux on Android are capable of running Geyser, but this l
##### Termux (Android) \{#termux-android}
1. Download and install [Termux](https://termux.com/)
2. Run `pkg install openjdk-17`
2. Run `pkg install openjdk-21`
3. Run `wget https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/standalone`
4. Run `java -jar Geyser-Standalone.jar`
+3 -1
View File
@@ -23,7 +23,9 @@ description: Learn how to set up Geyser with ViaProxy.
clone-remote-port: false
```
The vital part is the port. This is the port that Bedrock players will use to connect to your server!
If you enable `clone-remote-port`, the port will be overridden and the ViaProxy port is used.
If you enable `clone-remote-port`, the port will be overridden and the ViaProxy port is used, but be careful,
as this only works when using [Nethernet External Signalling](/wiki/geyser/nethernet/setup#nethernet-external-signalling)
as the Nethernet TCP port cannot collide with the Java one.
Since you are self-hosting, you can choose the port freely - the default port is 19132.
**Important**: Other services/plugins that rely on ports with UDP, such as Voice Chats or Query, cannot share the port with Geyser.
+4 -4
View File
@@ -21,12 +21,12 @@ Geyser emulates a <Versions platform="java"/> client, so a Java server must acce
This is possible thanks to [ViaVersion](https://viaversion.com/), which allows Java edition players with newer versions to join servers
that run older versions of the game.
### Using Geyser-Spigot on a Spigot/Paper server running on 1.16.5 or above
You can use Geyser-Spigot on servers that run on 1.16.5 or above. Do note that Geyser requires Java 17 to run! You will also need to run at least Java 17 or later to use Geyser. See [here](https://docs.papermc.io/misc/java-install) for more info on updating Java. Paper versions not supporting Java 17 can add `-DPaper.IgnoreJavaVersion=true` flag to the Java startup arguments to allow Paper to run on Java 17.
### Using Geyser-Spigot on a Spigot/Paper server running on 1.20.5 or above
You can use Geyser-Spigot on servers that run on 1.20.5 or above. You will also need to run at least Java 21 or later to use Geyser. See [here](https://docs.papermc.io/misc/java-install) for more info on updating Java. Paper versions not supporting Java 21 can add `-DPaper.IgnoreJavaVersion=true` flag to the Java startup arguments to allow Paper to run on Java 21.
In order for Bedrock players to chat (1.19.3+) or join (1.19.1/1.19.2), you need to disable chat signing. More information about that can be read on the [chat signing page](/wiki/geyser/secure-chat).
### Using Geyser-Spigot on a Spigot/Paper server running on a version below 1.16.5
### Using Geyser-Spigot on a Spigot/Paper server running on a version below 1.20.5
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.
@@ -36,4 +36,4 @@ Geyser with older versions would be to install [ViaProxy](https://github.com/Via
translates between different Minecraft: Java edition versions, and to install Geyser-ViaProxy on it. This will also work with Floodgate auth.
### Using Geyser-Velocity or Geyser-BungeeCord on a proxy
Make sure you update your proxy software to the latest available version, and, if the backend servers are not on <Versions platform="java"/>, also install the [ViaVersion](https://github.com/ViaVersion/ViaVersion) plugin on the backend servers. Velocity/BungeeCord support most Minecraft versions, so you can update them regardless of the backend server versions.
Make sure you update your proxy software to the latest available version, and, if the backend servers are not on <Versions platform="java"/>, also install the [ViaVersion](https://github.com/ViaVersion/ViaVersion) plugin on the backend servers. Velocity/BungeeCord support most Minecraft versions, so you can update them regardless of the backend server versions.
+11 -2
View File
@@ -58,10 +58,19 @@ Text directions:
If you'd rather try emulating a LAN game on your network on another device, here's how you'd do that.
*Note that this method will not work with the Nintendo Switch.*
### MultiPlatform {#multiplatform}
#### MCCompanion — free and ad-free.
- iOS (iOS 12.0 or later): [Download on the App Store](https://apps.apple.com/be/app/netherlink/id6747323142?l=en)
- Android: [Download on the Play Store](https://play.google.com/store/apps/details?id=net.netherdev.netherLink)
- macOS: [Download on the App Store](https://apps.apple.com/us/app/mccompanion/id6747323142?platform=mac)
- Windows: [Download on the Microsoft Store](https://apps.microsoft.com/detail/9NSFPT6D8PTR)
### Using a PC {#using-a-pc}
If you have a PC, you can use [Phantom](https://github.com/jhead/phantom).
*Note that this method will not work with the Nintendo Switch.*
- [Phantom](https://github.com/jhead/phantom).
### Using an Android Device {#using-an-android-device}
If you have an Android device, you have several options:
+29
View File
@@ -59,6 +59,25 @@ A Spigot plugin that allows users to enter commands starting with `.`, to work a
Creator: [Chew](https://github.com/Chew)
## Emotecraft {#emotecraft}
A mod (NeoForge, Fabric), plugin (Paper), and Geyser extension that allows Java players to view Bedrock emotes, and for both Java and Bedrock players to be able to play custom emotes.
:::note
Java clients obviously need the mod to be installed.
You need both the extension, and the mod or plugin for your server.
:::
* [Wiki](https://docs.zigythebird.com/emotecraft/geyserext)
* [Modrinth (all downloads)](https://modrinth.com/plugin/emotecraft)
* [CurseForge (Fabric)](https://www.curseforge.com/minecraft/mc-mods/emotecraft)
* [CurseForge (NeoForge)](https://www.curseforge.com/minecraft/mc-mods/emotecraft-forge)
* [Hangar](https://hangar.papermc.io/dima_dencep/emotecraft)
* [GitHub](https://github.com/KosmX/emotes)
Creators: [dima_dencep](https://github.com/dima-dencep), [Zigy](https://github.com/ZigyTheBird), [KosmX](https://github.com/KosmX)
## FloodgatePlaceholders {#floodgateplaceholders}
Placeholders support for Floodgate.
@@ -111,6 +130,16 @@ This is a Spigot/BungeeCord/Velocity plugin that can be used to automatically up
Creators: [Jens](https://github.com/Jens-Co), [YHDiamond](https://github.com/YHDiamond), [Konicai](https://github.com/Konicai)
## Junction {#junction}
A modern Geyser and Floodgate management solution for Paper, Purpur, and Folia servers. It automates Bedrock player management by executing platform-specific commands and handling LuckPerms or Vault group assignments.
* [Modrinth](https://modrinth.com/plugin/junction)
* [Hangar](https://hangar.papermc.io/Maboroshi/Junction)
* [Documentation](https://docs.maboroshi.org/projects/junction)
* [GitHub](https://github.com/MaboroshiKobo/Junction)
Creator: [muhdfdeen](https://github.com/muhdfdeen)
## SleepingServerStarter {#sleepingserverstarter}
Small application that waits for a player to connect before launching actual minecraft server.
* [GitHub](https://github.com/vincss/mcsleepingserverstarter)
+1 -1
View File
@@ -5,7 +5,7 @@ description: GeyserIntegratedPack is a Bedrock resource pack that fixes parity i
:::info
Geyser includes the GeyserIntegratedPack (previously called "GeyserOptionalPack"), you do not need to add it manually!
See the "Migration" section for further details.
See the "[Migration](#migration)" section for further details.
:::
GeyserIntegratedPack is a Bedrock resource pack that adds more features to Geyser to bring Bedrock Edition in line with Java Edition.
+3 -2
View File
@@ -28,5 +28,6 @@ you're interested in helping out with Hydraulic.
1. Clone the repo to your computer.
2. Navigate to the Hydraulic root directory and run `git submodule update --init --recursive`. This command downloads all the needed submodules for Hydraulic and is a crucial step in this process.
3. The project should import into your IDE after the loom setup is complete. For more detailed information, see the [Fabric setup](https://fabricmc.net/wiki/tutorial:setup)
4. Use `./gradlew build` to compile a jar file, or use `./gradlew :fabric:runServer` or `./gradlew :neoforge:runServer` to run a server with Hydraulic installed. Make sure to install Geyser into your `mods` folder!
3. If your default JVM/JDK is not Java 25, please set your IDE to use a valid Java 25 JVM. Otherwise, you will run into an error while building Hydraulic.
4. The project should import into your IDE after the loom setup is complete. For detailed information, see the [Fabric setup](https://docs.fabricmc.net/develop/getting-started/setting-up).
5. Use `./gradlew build` to compile a jar file, or use `./gradlew :fabric:runServer` to run a server with Hydraulic installed. Make sure you have Geyser in your `mods` folder along with Hydraulic!
+1
View File
@@ -16,6 +16,7 @@ This includes community projects, but also other projects by the GeyserMC team,
'community-geyser-projects',
'hurricane',
'thunder',
'rainbow',
'thirdpartycosmetics',
'hydraulic',
'geyserconnect',
+153 -18
View File
@@ -1,35 +1,170 @@
---
title: Rainbow
description: A Minecraft mod to generate Geyser item mappings and bedrock resourcepacks for use with Geyser's Custom Item API V2.
description: A tool to convert custom content to Bedrock.
---
Rainbow is a Fabric client-sided Minecraft mod to generate Geyser item mappings and bedrock resourcepacks for use with Geyser's custom item API (v2) for use on servers.
Rainbow is a client-sided Minecraft mod to convert resource packs with custom content created for Java Edition to
an equivalent resource pack for Bedrock Edition, together with custom mappings to be used in Geyser. Rainbow is available
for the Fabric modloader.
## What is Rainbow? {#what-is-rainbow}
Rainbow can be downloaded at [our website](https://geysermc.org/download?project=other-projects&rainbow=expanded),
or over at [Modrinth](https://modrinth.com/mod/rainbow-mod).
Rainbow is a generator to create Geyser item mappings and Bedrock Edition resource packs, it uses the Geyser Custom Item API V2 format to allow the use of 1.21.4+ Java Edition packs.
:::info
Rainbow is a mod installed on the Java client! As such, you need to be able to use a Java client to use Rainbow.
Rainbow can be used with every resource pack, regardless of your server's software (it may be used with Spigot or
Paper servers, for example).
:::
:::warning
Rainbow is used to convert resource packs adding new, custom content. For resource packs modifying vanilla content,
you should look into using [Thunder](/wiki/other/thunder).
:::
:::caution
This project is early in development! Any bugs and issues should be reported in our [Discord](https://discord.gg/geysermc).
This project is in early development! Any bugs and issues should be reported at its [issue tracker](https://github.com/GeyserMC/Rainbow/issues).
:::
You can use Rainbow to convert custom content of datapacks (that require a resource pack), custom content plugins like Nexo or ItemsAdder, or even
server-side only Fabric/NeoForge mods, such as Polymer mods. However, these custom content providers may use
[item displays](https://minecraft.wiki/w/Display), which Geyser does not yet support. This may result in your custom blocks or items
not rendering on Bedrock when placed in the world.
You can use extensions created by the community, such as [GeyserDisplayEntity](https://github.com/GeyserExtensionists/GeyserDisplayEntity),
to add support for item displays to Geyser. However, keep in mind that these are not created by or affiliated with Geyser,
and as such any issues that may occur should not be reported to us.
## Usage {#usage}
To use Rainbow:
1. You need setup a 1.21.9/.10 Fabric client for Java Edition and ensure the mod is present on the client.
2. Join your server of choice to start converting packs and run `/rainbow create <pack name>` with `<pack name>` being the name of your output pack.
3. You can map things in a couple of ways:
- Hold each item in your hand one by one and run `/rainbow map` while holding the item.
- Fill your inventory with the custom items and run `/rainbow mapinventory` to map your entire inventory.
- Run `/rainbow auto inventory` and open a UI with the custom content (For example, a chest or command from a plugin to show custom content.). Rainbow will continue mapping all custom items until you stop the process with `/rainbow auto stop`.
4. Run `/rainbow finish` to finish your conversion, Rainbow will then output your pack and mappings file to `<instance folder>/rainbow/<pack name>`, optionally, you can click the `Wrote pack to disk` message in chat to open the folder.
5. In this folder, you will find 3 files, `pack.zip` which you put in your `packs` folder of your server, `geyser_mappings.json` which you put in your `custom_mappings` folder of your server and finally `report.txt` which you can send in our [Discord](https://discord.gg/geysermc) if you face issues, otherwise, you can ignore this file.
Rainbow works by analysing the loaded resource packs on the client and extracting the custom content found. As such,
you need to ensure all the necessary resource packs for your custom content are loaded on your client. If custom content
appears correctly on your Java client, then Rainbow is able to analyse it.
## Download {#download}
Generally, you use Rainbow as follows:
You can download Rainbow [here](/download/?project=other-projects&rainbow=expanded).
1. Set up a Java Edition 26.2 client, with Fabric installed, and ensure that Rainbow is present on your client.
2. Join a world or server of choice and make sure all the necessary resource packs are loaded. Then, run `/rainbow create <pack name>`, with `<pack name>` replaced with the name of your resource pack on Bedrock Edition.
3. You can then start converting (or "mapping") custom content to be exported in your Bedrock resource pack. You can find a full list of ways to map custom content below.
4. Run `/rainbow finish` to finish your conversion. Rainbow will then output the generated resource pack and additional files to `.minecraft/rainbow/<pack name>`. You can click the `Wrote pack to disk` message in chat to open that folder.
5. In this folder, you'll find 4 important files/folders:
- `custom_mappings`: you need to put the files in here in the `custom_mappings` folder in Geyser's config folder. These are the generated Geyser mappings.
- `pack.zip`: this is the generated resource pack for Bedrock Edition. You need to put this file in the `packs` folder in Geyser's config folder.
- `lang`: you need to put all files in this folder in the `locales/overrides` folder in Geyser's config folder.
- The folder can be empty or non-existent if no language files were found. This is usually not an issue!
- `report.txt`: you don't need to do anything with this file, but it contains information about generated assets and possible problems that occurred. It can be useful to diagnose potential issues with Rainbow, and you should upload it when filing a bug report.
6. Once you've taken all the necessary steps and uploaded the generated content to your Geyser server, restart your server. If everything went well, Bedrock users should now see your custom content!
### Mapping custom blocks
Rainbow is able to map custom blocks that are created by overriding unused vanilla block states. Most blocks can automatically
be mapped by running `/rainbow auto blocks`, which will scan through all loaded resource packs for custom blocks created using block state overrides,
and mapping all that are found.
:::warning
Running `/rainbow auto blocks` may shortly freeze your client.
:::
With some resource packs, Rainbow may not be able to automatically detect all custom blocks. In this case, you may have to
map blocks manually, which you can do by using `/rainbow map block <target>`, where `<target>` is a position in the world,
at which a custom block is placed.
### Mapping custom items and skulls
Rainbow supports mapping custom items, by detecting items with custom `minecraft:item_model` or `minecraft:custom_model_data` components.
Rainbow is also able to map custom skulls. Each method of mapping custom items is described below.
#### Mapping manually
You can map custom items manually by running `/rainbow map item`. This will map the custom item or skull you're currently
holding in your hand in-game, if any. You can also run `/rainbow mapinventory`, which will scan your entire inventory
for any custom items or skulls, and maps all that are found.
:::info
Rainbow is automatically able to find most kinds of custom items when using `mapinventory`, however,
items created by overriding a vanilla item model definition may not be automatically detected,
so you'll have to map these explicitly.
:::
#### Mapping inventory menus automatically
Custom item plugins, like Nexo or ItemsAdder, commonly include an inventory menu listing all custom items. Rainbow
can make use of this and automatically map all items listed in such an inventory menu, by running `/rainbow auto inventory`.
This will scan all inventory menus and containers you open for custom items or skulls, and maps all that are found.
You can also use this with chests that are filled with custom items, for example.
Run `/rainbow auto stop` to stop the mapping of custom items.
:::info
Like with `mapinventory`, items created by overriding a vanilla item model definition may not be automatically detected,
so you'll have to map these explicitly.
:::
#### Mapping custom items from recipe outputs automatically
Rainbow is able to search through all known recipes for outputs that are custom items or skulls, and map any that are found,
by running `/rainbow auto recipes`. This can be useful when mapping datapacks that add large amounts of custom items with
custom recipes, for example.
:::info
You can use the vanilla `/recipe give @s *` command to give yourself all recipes, which helps Rainbow recognise custom items when using this
way of mapping items.
:::
:::info
As with `mapinventory` and `auto inventory`, items created by overriding a vanilla item model definition may not be automatically detected,
so you'll have to map these explicitly.
:::
### Mapping custom sounds
Custom sounds may be mapped by using `/rainbow auto sounds`, which scans through all loaded resource packs for custom sounds,
and maps all that are found. You may also use `/rainbow map sound <namespace>`, which maps all the custom sounds
of the given namespace. This can be useful when you only want to export custom sounds of a single resource pack.
### Mapping custom waypoint styles
Custom waypoint styles, also known as locator bar icons, may be mapped by using `/rainbow auto waypoints`, which scans
through all loaded resource packs for custom styles, and maps all that are found. You may also use
`/rainbow map waypoint <waypoint style>`, which maps a single waypoint style.
## Capabilities and limitations
Rainbow is currently capable of the following:
- Generating Geyser block mappings for custom blocks made using block state overrides, both automatically and manually from loaded resource packs.
- Generating Geyser item mappings complete with data components and proper bedrock options, by detecting items with custom `minecraft:item_model` or `minecraft:custom_model_data` components, and analysing their components.
- Also includes generating mappings with predicates for more complicated Java item model definitions, such as checks for if an item is broken. The following definition types are currently supported by Rainbow:
- Plain item model definitions.
- Conditional item models, supported properties are:
- `broken`,
- `damaged`,
- `custom_model_data`,
- `has_component`, and,
- `fishing_rod/cast`.
- Range dispatch item models, supported properties are:
- `bundle/fullness`,
- `count`,
- `custom_model_data`, and,
- `damage`.
- Select item models, supported properties are:
- `charge_type`,
- `trim_material`,
- `context_dimension`, and,
- `custom_model_data`.
- For the `display_context` property, the `gui` case is mapped, if present.
- Also includes detecting if an item should be displayed handheld by looking at the item's model.
- Also is able to detect and map items using the "legacy" `custom_model_data` range-dispatch style, and map them to Geyser's `legacy` item mappings.
- Generating Geyser skull mappings.
- Generating Geyser waypoint style mappings for custom waypoint styles (locator bar icons).
- Generating a simple Bedrock resource pack for blocks and simple 2D items, as well as:
- Simple custom armour items, by analysing an item's `minecraft:equippable` component and loaded equipment assets.
- Custom elytra items also work, but only visually, due to bedrock limitations.
- 3D items, by converting the Java model to a bedrock one, and generating an attachable and animations for it, as well as rendering a custom GUI icon.
- Is able to translate display transformations for the head, first-person and third-person item slots.
- Custom sounds.
- Generating working animated (flipbook) textures for 2D items and 3D items that make use of a single texture only.
- Exporting merged language files from loaded resource packs to a folder, for easy copying to Geyser's `locales/overrides` folder.
- Files from different resource packs for the same language are merged together.
## Contributing {#contributing}
+1 -1
View File
@@ -17,7 +17,7 @@ Not only is this project in early beta, it does **not** convert custom items! Pl
## Usage {#usage}
1. Ensure you have Java 17 or higher installed, if you do you should be able to open the file like a normal program.
1. Ensure you have Java 21 or higher installed, if you do you should be able to open the file like a normal program.
2. Select the Java edition resource pack using the button on the left. Once you do, if it was successful you should see the icon of the pack.
3. Change the output pack name. This is the name shown to the Bedrock client.
4. Hit the convert button to start the conversion process. This step may take a while.