Author SHA1 Message Date
Eclipse cd743a8e76 Address reviews 2026-08-04 13:17:51 +00:00
Eclipse cd4b48ee45 Some more updates 2026-08-04 11:06:17 +00:00
Eclipse 247718bb74 Update custom-skulls page for JSON mappings 2026-08-04 10:46:49 +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
10 changed files with 163 additions and 150 deletions

No files matched your search

+3 -3
View File
@@ -1,9 +1,9 @@
{
"bedrock": {
"supported": "26.0-26.32",
"supported": "26.0-26.40",
"latest": {
"id": 1001,
"name": "26.32"
"id": 2168,
"name": "26.40"
}
},
"java": {
+17
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>}
+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.
+18
View File
@@ -15,3 +15,21 @@ Geyser supports mapping various custom additions to the game via resource packs
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.
+2
View File
@@ -18,6 +18,8 @@ would normally require mods to be installed on the Java client.
To set up custom items in Geyser, you have to choose how you are going to register your items. The easiest is using a json mapping file,
but you can also use a Geyser extension which uses the [Geyser API](/wiki/geyser/api/). Further, a Bedrock edition resource pack must also be supplied to ensure Bedrock players can see custom items.
For setting up JSON mappings, please see the instructions [here](/wiki/geyser/custom-content#json-mappings).
:::warning
Geyser does not convert resource packs from Java Edition, and also does not generate custom item mappings automatically.
However, you can use automatic tools such as [Rainbow](/wiki/other/rainbow/) to make converting content simpler.
-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>
+3 -1
View File
@@ -26,7 +26,7 @@ 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/) is planning
custom waypoint mappings automatically. However, [Rainbow](/wiki/other/rainbow/) has
support for these conversions.
:::
@@ -38,6 +38,8 @@ 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.
+3 -3
View File
@@ -30,14 +30,14 @@ The playit.gg Minecraft server plugin does not support UDP tunnels. You will nee
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 GeyserMC are running on the same device, leave the IP as `127.0.0.1` and set the port to whatever you configured in GeyserMC's config.
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 GeyserMC config, under `advanced:` `bedrock:`, set `use-haproxy-protocol` to `true`.
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 GeyserMC config under `advanced:` `bedrock:`, set `broadcast-port` to your tunnel port (`6695` in the example).
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.)
+10 -3
View File
@@ -42,12 +42,11 @@ appears correctly on your Java client, then Rainbow is able to analyse it.
Generally, you use Rainbow as follows:
1. Set up a Java Edition 26.1 client, with Fabric installed, and ensure that Rainbow is present on your client.
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 5 important files/folders:
- `custom-skulls.yml`: put this in Geyser's config folder. These are the exported player skulls. The file may already exist in Geyser's config folder, be careful with overwriting it!
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.
@@ -122,6 +121,12 @@ Custom sounds may be mapped by using `/rainbow auto sounds`, which scans through
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:
@@ -149,6 +154,8 @@ Rainbow is currently capable of the following:
- 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.