Curator is ChunkBounds personal Rewrite of the GeyserDisplayEntities Extension for GeyserMC
Find a file
Sye 24ee823605 2.0.1: /curator reload puts the pack back too
The pack now gets rewritten if it's missing on startup, geyser reload and
/curator reload. Swapped GeyserPostReloadEvent for GeyserDefineResourcePacksEvent
since that one fires reliably. Curator also logs the full path when it writes
the pack, and a failed write won't break startup anymore.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 18:20:45 -05:00
gradle/wrapper Curator 1.0.0: Chunkbound fork of GeyserDisplayEntity 2026-10-16 07:55:02 -05:00
src 2.0.1: /curator reload puts the pack back too 2026-10-17 18:20:45 -05:00
.gitattributes Curator 1.0.0: Chunkbound fork of GeyserDisplayEntity 2026-10-16 07:55:02 -05:00
.gitignore 1.0.1: fix pack already registered error and 26.3 build 2026-10-17 17:33:36 -05:00
build.gradle.kts 2.0.1: /curator reload puts the pack back too 2026-10-17 18:20:45 -05:00
gradlew Curator 1.0.0: Chunkbound fork of GeyserDisplayEntity 2026-10-16 07:55:02 -05:00
gradlew.bat Curator 1.0.0: Chunkbound fork of GeyserDisplayEntity 2026-10-16 07:55:02 -05:00
README.md 2.0.1: /curator reload puts the pack back too 2026-10-17 18:20:45 -05:00
settings.gradle.kts Curator 1.0.0: Chunkbound fork of GeyserDisplayEntity 2026-10-16 07:55:02 -05:00

Curator

A Geyser extension that shows Java item displays and block displays to Bedrock players.

This is Chunkbound's own rewritten fork of GeyserDisplayEntity. The main difference is control. You can line up how a display looks and which way it faces per item, and stop guessing.

What's different from the original

  • Each mapping can set its own offset and rotation. Chest slot items get moved and turned with them too. The original mostly ignored that for chest items.
  • match-translation and match-scale let one item type have different mappings depending on how the display is posed.
  • The resource pack comes inside the jar. Curator writes it out for you, you just drop it in Geyser's packs folder.
  • A reload that fails keeps the old config running, so a typo doesn't break every display.
  • Broken mapping entries get skipped with a warning instead of crashing.
  • Less config overall. You don't touch entity property files anymore.

Which jar

There's one jar per Minecraft version. Pick the one that matches your Geyser.

Jar Java version Geyser
Curator-<version>-mc26.1.jar 26.1 2.10.0, 2.10.1
Curator-<version>-mc26.2.jar 26.2 2.11.0 to 2.11.3
Curator-<version>-mc26.3.jar 26.3 2.12.0

Platform doesn't matter. Spigot, Paper, Velocity, BungeeCord, Fabric, NeoForge, Standalone and ViaProxy all use the same jar, because Geyser loads extensions the same way everywhere.

Wrong jar? Curator says so in the console and tells you which one it is.

Install

  1. Put the right jar in Geyser's extensions folder.
  2. Restart. Curator makes extensions/curator/CuratorPack.mcpack.
  3. Copy CuratorPack.mcpack into Geyser's packs folder.
  4. Restart again so Geyser picks up the pack.

The resource pack

Bedrock needs a resource pack to draw displays. Curator doesn't send it for you. You add it to Geyser yourself:

  1. Curator writes CuratorPack.mcpack into its own folder (extensions/curator/) on startup, geyser reload and /curator reload, but only if it's missing. It logs the full path when it does.
  2. Copy it into Geyser's packs folder and restart. Geyser sends it to Bedrock players when they join.

Things worth knowing:

  • Curator never overwrites the file. After updating Curator, delete the old CuratorPack.mcpack, run /curator reload to get the new one, and copy it into packs again.
  • You can edit the pack. Just edit the copy in Geyser's packs folder.
  • If you still have the old GeyserDisplayEntity pack installed, remove it. Both use the same entity ids and they'll fight.

Updating from 1.x

Curator 1.x sent the pack by itself. 2.0.0 doesn't, so if you skip copying it into packs, Bedrock players won't see displays right. The send-pack option is gone too. If it's still in your config.yml it's just ignored.

Config

  • config.yml holds the defaults and decides what gets hidden. Each setting has a comment.
  • mappings/ holds per-item settings. Look at example.yml, it has every option in it.

/curator reload reloads both, and puts the pack back if it's missing. Permission: curator.reload.

entity-height needs a full restart. Reload doesn't pick it up.

Mapping files from GeyserDisplayEntity

They mostly just work. Copy them into mappings/. The old displayentityoptions: and options: blocks still get read, but display: is the new name.

Don't copy the old config.yml. The layout changed, so start from the new one.

Building

./gradlew build

You need Java 21. All three jars end up in build/libs/.

How the source is laid out:

  • src/shared is used by every jar. Almost everything is in here.
  • src/mc26_1, src/mc26_2, src/mc26_3 only hold the bits that change between Geyser versions. That's how entities get registered and one renamed field.

To build against a specific Geyser build: ./gradlew build -Pgeyser.mc26_2=2.11.0-SNAPSHOT

Credits

Forked from GeyserDisplayEntity by zimzaza4 and xSquishyLiam. That was based on Kastle's display entity branch of Geyser. The resource pack started as theirs too.