Skip to content

API reference / @jsprismarine/mapping

@jsprismarine/mapping ​

The Java Edition to Bedrock Edition seam. This package owns the knowledge that two editions exist: it maps Java 26.3 identifiers onto Bedrock 1.26.51 identifiers through generated, vendored tables and a reviewed loss list. Nothing outside this package should name both editions.

Interface ​

Four total functions, one per domain. Each returns a typed result: mapped, a reviewed loss with a reason and a reference, passthrough for non-minecraft: identifiers, or unknown for identifiers the pinned Java version does not have. A lookup never returns undefined.

ts
import {
    javaBlockStateToBedrock,
    javaEntityTypeToBedrock,
    javaIdentifierToBedrock,
    javaItemToBedrock
} from '@jsprismarine/mapping';

javaBlockStateToBedrock('minecraft:oak_log', { axis: 'x' });
// { kind: 'mapped', bedrock: { name: 'minecraft:oak_log', states: { pillar_axis: 'x' } } }

javaItemToBedrock('minecraft:debug_stick');
// { kind: 'loss', loss: { reason: ..., reference: ... }, bedrock: { identifier: 'minecraft:stick' } }

javaEntityTypeToBedrock('minecraft:zombified_piglin');
// { kind: 'mapped', bedrock: 'minecraft:zombie_pigman' }

javaIdentifierToBedrock('enchantment', 'minecraft:infinity');
// { kind: 'mapped', bedrock: 'minecraft:bow_infinity' }

One inverse, for the one domain that has one. A chunk stores a numeric Bedrock biome id, so bedrockBiomeToJava() resolves that number, or the Bedrock biome identifier, back to the Bedrock biome and the Java biome behind it. It is total over the 89 biomes the pinned Bedrock data lists: 62 carry a Java source, and the 27 legacy biomes Java 26.3 deleted in its 1.18 terrain rewrite are BEDROCK_BIOME_LOSSES, each with a reason.

ts
import { bedrockBiomeToJava } from '@jsprismarine/mapping';

bedrockBiomeToJava(37);
// { kind: 'mapped', bedrock: { id: 37, identifier: 'minecraft:mesa' }, java: 'minecraft:badlands' }

bedrockBiomeToJava('minecraft:taiga_hills');
// { kind: 'loss', bedrock: { id: 19, identifier: 'minecraft:taiga_hills' }, loss: { reason: ... } }

bedrockDimensionOverlay() is the edition boundary for dimensions. Keyed by Java dimension_type id, the three-row table src/tables/dimensions.json carries the Bedrock integer id, the client's name (minecraft:nether for Java's minecraft:the_nether), the Generator value StartGame sends, and a minY and height only where the client disagrees with the Java type. The Nether row is the one that does: Java's type is 256 tall with logical_height 128, and the client discards or crashes on sub chunks above 128, so the clamp is written as data. A type with no row is a custom dimension and returns undefined. javaDimensionTypeOf() reads a Bedrock name back to the Java id. This table is hand-maintained, not generated: no pinned source publishes the pairing.

ts
bedrockDimensionOverlay('minecraft:the_nether');
// { dimensionId: 1, bedrockName: 'minecraft:nether', minY: 0, height: 128, generatorType: 3 }
javaDimensionTypeOf('minecraft:nether'); // 'minecraft:the_nether'

javaBlockFluidKindOf() reads the fluid carried by a Java block state. It returns water for water-bearing blocks such as kelp and seagrass, water for a state with waterlogged=true, lava for lava, and empty otherwise.

ts
javaBlockFluidKindOf({ name: 'minecraft:kelp', properties: {} }); // 'water'

javaDyeColorIndexOf() gives the Java palette ordinal used by entity minecraft:color components. bedrockDyeIndexOf() resolves the reversed Bedrock data value used by banners from the same color name list.

createPackIdentifierResolver() wraps these lookups in the IdentifierResolver shape that reportIdentifiers in @jsprismarine/packs injects, so a datapack's referenced identifiers can be checked against the tables without that package knowing two editions exist. This is what lets the server refuse to start on an identifier nothing accounts for, and it covers every registry a Java datapack can reference:

  • Items, blocks, entity types, biomes (worldgen/biome), enchantments, mob effects and potions go through their lookup. mapped and passthrough report as known, reviewed losses as loss.
  • The registries with no Bedrock side go to the generated Java 26.3 census in src/tables/javaIdentifiers.json, which says only that the identifier is a real entry of that registry. That reports as known for the nine registries the server evaluates in Java's own shape, which src/packRegistries.ts lists with a reason each, and as loss for the three in UNTRANSLATED_REGISTRIES: banner patterns, goat horn instruments and painting variants reach a Bedrock client as a short code, a data value and a texture name, and no pinned source publishes the pairing. There is no passthrough here, so a custom structure or game event is unknown.
  • A tag reference is unknown. Resolving one means knowing which tags the stack loaded, which only reportIdentifiers can see, so it answers those itself.

Run against the real 26.3 datapack this resolves all 4088 referenced identifiers: 3977 known, 111 on the allow list, none left over. src/vanillaIdentifiers.test.ts is that measurement.

The reviewed loss list is exported alongside the functions (BLOCK_LOSSES, ITEM_LOSSES, ENTITY_LOSSES, REGISTRY_LOSSES, BEDROCK_BIOME_LOSSES, BLOCK_STATE_LOSSES, UNTRANSLATED_REGISTRIES, the merge lists and the dropped-property lists). Every known loss carries a reason and a reference, and the property tests fail both when an unlisted loss appears and when a listed one stops occurring. UNTRANSLATED_REGISTRIES is the one registry-wide row shape; its entry count is a review baseline surfaced by the parity dashboard, while the loader still verifies each referenced identifier against the generated census.

The tables ​

The tables under src/tables/ are generated and committed. They come from the pinned sources in packages/bedrock-data/sources.json: GeyserMC/mappings blocks.nbt (positional over Java block state ids) joined against Mojang's reports/blocks.json, GeyserMC items.json and biomes.json, and this repository's own BDS 1.26.51.1 captures as the Bedrock source of truth. The GeyserMC data is MIT; see NOTICE.

To regenerate after a version bump:

sh
pnpm --filter @jsprismarine/bedrock-data run fetch:sources
pnpm --filter @jsprismarine/mapping run generate:tables

The generator runs Mojang's Java data generator against the hash-verified server jar when its reports are missing from the cache, which needs a JDK of at least version 25 (JAVA_HOME or JSP_JAVA_HOME). It refuses to emit when any Java identifier has neither a mapping nor a loss entry, or when any produced Bedrock state is missing from the pinned palette.

The block state vocabularies ​

bedrockBlockStates(name, states) and javaBlockStates(name, states) translate a whole state record between Java's words and the Bedrock palette's own spelling. Java writes a direction as facing=north; Bedrock writes a number, under a state name of its own, and the number is per block - a dropper's facing_direction calls north 2 and a piston's calls it 3. A redstone torch spells north south, and a door spells it east. None of it follows from the state's name.

ts
bedrockBlockStates('minecraft:piston', { facing_direction: 'north', extended_bit: true });
// { facing_direction: 3 } - Bedrock has no extended state; an extended piston has an arm in front
javaBlockStates('minecraft:dropper', { facing_direction: 2 }); // { facing_direction: 'north' }

The table is read out of the block mapping, per block, by finding the one Java property whose values pick each Bedrock state's values; regenerate it with:

sh
pnpm --filter @jsprismarine/mapping run generate:block-states

It needs only committed inputs. The 27 (block, state) pairs that have no word vocabulary at all, because Bedrock folds two Java properties into one state or packs several booleans into one number, are listed in BLOCK_STATE_LOSSES and travel as the Bedrock value untouched.

The block property table ​

bedrockBlockPropertiesOf(name, states?) answers the Java-sourced per-state block properties - hardness, blast resistance, friction, light emission and dampening, correct-tool requirement, random tick, push reaction, and fire odds - keyed by Bedrock block state, the server's identity. The table is flattened from the Java 26.3 jar dump golden in @jsprismarine/bedrock-data through the block mapping; regenerate it with:

sh
pnpm --filter @jsprismarine/mapping run generate:block-properties

It needs only committed inputs, no fetched sources. Bedrock-only blocks with no Java source (the chemistry set, allow, deny, the deprecated palette entries) are listed in BEDROCK_ONLY_BLOCKS and return undefined, so callers keep their own values rather than a silent default. Where collapsed Java states disagreed on a value, the kept rows are listed in BLOCK_PROPERTY_CONFLICTS for review.

The property tests ​

src/mappingProperties.test.ts adopts Chunker's five property tests, run one way: every Java palette entry maps; every output carries exactly the declared Bedrock state set; the mapping composed with the reverse index is identity except for the reviewed loss list; every output identifier exists in the real Bedrock palette for the pinned version; and every output state value is in that state's real domain.

Interfaces ​

BannerLayer ​

Defined in: blockEntityContent.ts:18

One layer of a banner, as either edition names one.

Properties ​

color ​

readonly color: string

Defined in: blockEntityContent.ts:22

The Java dye color word, for example light_gray.

pattern ​

readonly pattern: string

Defined in: blockEntityContent.ts:20

The Java pattern identifier, for example minecraft:triangle_top.


BedrockBiome ​

Defined in: registryMapping.ts:45

One Bedrock biome: what a chunk stores it as, and what the client calls it.

Properties ​

id ​

readonly id: number

Defined in: registryMapping.ts:50

The number a chunk stores and the client resolves grass color, fog and ambient sound from. Mojang's own, not a registry position, so it cannot be derived from the name.

identifier ​

readonly identifier: string

Defined in: registryMapping.ts:52

The namespaced Bedrock biome identifier, such as minecraft:mesa.


BedrockBiomeLoss ​

Defined in: lossList.ts:910

A Bedrock biome the inverse direction cannot name in Java.

Properties ​

bedrockId ​

readonly bedrockId: string

Defined in: lossList.ts:912

The Bedrock biome identifier.

reason ​

readonly reason: string

Defined in: lossList.ts:913

reference ​

readonly reference: string

Defined in: lossList.ts:914


BedrockBlockProperties ​

Defined in: blockProperties.ts:12

The Java-sourced properties of one Bedrock block state.

Properties ​

blastResistance ​

readonly blastResistance: number

Defined in: blockProperties.ts:16

Java explosion resistance; bedrock is 3600000, obsidian 1200, stone 6.

burnOdds ​

readonly burnOdds: number

Defined in: blockProperties.ts:32

Fire's odds of consuming the block once lit.

friction ​

readonly friction: number

Defined in: blockProperties.ts:18

Ground friction: 0.6 for almost everything, 0.98 for ice, 0.989 for blue ice.

hardness ​

readonly hardness: number

Defined in: blockProperties.ts:14

Java destroy time; -1 marks the unbreakable blocks (bedrock, barriers, portals).

igniteOdds ​

readonly igniteOdds: number

Defined in: blockProperties.ts:30

Fire's odds of igniting the block, 0 for the fireproof.

lightDampening ​

readonly lightDampening: number

Defined in: blockProperties.ts:22

How much light the block swallows, 0 to 15.

lightEmission ​

readonly lightEmission: number

Defined in: blockProperties.ts:20

Emitted light, 0 to 15.

pushReaction ​

readonly pushReaction: string

Defined in: blockProperties.ts:28

How a piston treats the block: push_pull, immoveable, popped, block or ignore.

randomTick ​

readonly randomTick: boolean

Defined in: blockProperties.ts:26

Whether the block receives random ticks (crops grow, ice melts, fire spreads).

requiresCorrectTool ​

readonly requiresCorrectTool: boolean

Defined in: blockProperties.ts:24

Whether breaking without the right tool yields nothing.


BedrockBlockState ​

Defined in: blockMapping.ts:7

One Bedrock block state: the identifier and the exact state set its palette entry declares.

Properties ​

name ​

readonly name: string

Defined in: blockMapping.ts:9

The namespaced Bedrock block identifier.

states ​

readonly states: Readonly<Record<string, string | number>>

Defined in: blockMapping.ts:11

The Bedrock state values, exactly the keys the pinned palette declares for the identifier.


BedrockDimensionOverlay ​

Defined in: dimensionMapping.ts:14

What the Bedrock client needs to know about a Java dimension type that Java's dimension_type JSON does not say: the integer id, the client's spelling of the name, the height clamp and the StartGame generator value.

A Java type with no overlay is a custom dimension. It gets an id from 1000 up in stem order and is announced through DimensionDataPacket, which is the caller's job, not this table's.

Properties ​

bedrockName ​

readonly bedrockName: string

Defined in: dimensionMapping.ts:18

The client's spelling of the dimension, minecraft:nether for Java's minecraft:the_nether.

dimensionId ​

readonly dimensionId: number

Defined in: dimensionMapping.ts:16

The integer the client, the LevelDB chunk key and ChangeDimension use: 0, 1 or 2.

generatorType ​

readonly generatorType: Generator

Defined in: dimensionMapping.ts:32

The Generator enum value StartGame carries: OVERWORLD 1, NETHER 3, END 4.

height? ​

readonly optional height?: number

Defined in: dimensionMapping.ts:30

The client's height, present only where it differs from the Java type. The Nether carries 128: Java's type says 256 with logical_height 128, and the client discards or crashes on sub chunks above 128.

minY? ​

readonly optional minY?: number

Defined in: dimensionMapping.ts:24

The client's floor, present only where it differs from the Java type. The Nether row carries 0, matching its Java min_y; the Overworld and End rows leave it out and the Java type's min_y applies.


BedrockItem ​

Defined in: itemMapping.ts:6

One Bedrock item reference: the identifier and the legacy damage value when one selects a sub-item.

Properties ​

data? ​

readonly optional data?: number

Defined in: itemMapping.ts:10

The legacy Bedrock damage value, present only where it selects a sub-item.

identifier ​

readonly identifier: string

Defined in: itemMapping.ts:8

The namespaced Bedrock item identifier.


BlockEntityContentLoss ​

Defined in: lossList.ts:1051

A field of a Java block entity that does not reach the Bedrock block entity.

Properties ​

field ​

readonly field: string

Defined in: lossList.ts:1055

The Java NBT field that is dropped, as the saved compound spells it.

javaType ​

readonly javaType: string

Defined in: lossList.ts:1053

The Java block entity type, for example minecraft:sign.

kind ​

readonly kind: BlockEntityContentLossKind

Defined in: lossList.ts:1056

reason ​

readonly reason: string

Defined in: lossList.ts:1057

reference ​

readonly reference: string

Defined in: lossList.ts:1058


BlockLoss ​

Defined in: lossList.ts:566

A Java block with no Bedrock concept at all.

Properties ​

bedrockFallback ​

readonly bedrockFallback: string

Defined in: lossList.ts:570

The Bedrock identifier every state falls back to.

javaId ​

readonly javaId: string

Defined in: lossList.ts:568

The Java block identifier.

reason ​

readonly reason: string

Defined in: lossList.ts:571

reference ​

readonly reference: string

Defined in: lossList.ts:572


BlockMerge ​

Defined in: lossList.ts:458

A Bedrock identifier that several Java blocks legitimately collapse onto.

Properties ​

bedrockId ​

readonly bedrockId: string

Defined in: lossList.ts:460

The shared Bedrock identifier.

reason ​

readonly reason: string

Defined in: lossList.ts:461

reference ​

readonly reference: string

Defined in: lossList.ts:462


BlockStateLoss ​

Defined in: lossList.ts:363

A Bedrock block state whose values no single Java property spells, so there is no word vocabulary for it in import('./blockStates').bedrockBlockStates.

Properties ​

blocks ​

readonly blocks: readonly string[]

Defined in: lossList.ts:367

Every Bedrock block that carries the state this way.

reason ​

readonly reason: string

Defined in: lossList.ts:368

reference ​

readonly reference: string

Defined in: lossList.ts:369

state ​

readonly state: string

Defined in: lossList.ts:365

The Bedrock state name.


DroppedBlockProperty ​

Defined in: lossList.ts:31

A Java block state property that the Bedrock block state cannot express: two Java states differing only in this property map to one Bedrock state for every state of the listed blocks.

Properties ​

blocks ​

readonly blocks: { count: number; } | readonly string[]

Defined in: lossList.ts:35

Every affected Java block, or only the count where the list is too long to review name by name.

property ​

readonly property: string

Defined in: lossList.ts:33

The Java property name.

reason ​

readonly reason: string

Defined in: lossList.ts:37

recovery ​

readonly recovery: BlockPropertyRecovery

Defined in: lossList.ts:36

reference ​

readonly reference: string

Defined in: lossList.ts:38


EntityLoss ​

Defined in: lossList.ts:697

A Java entity type that cannot reach the Bedrock client as itself.

Properties ​

bedrockFallback? ​

readonly optional bedrockFallback?: string

Defined in: lossList.ts:702

The Bedrock entity (or block) shown instead, when one exists.

javaId ​

readonly javaId: string

Defined in: lossList.ts:699

The Java entity type identifier.

kind ​

readonly kind: EntityLossKind

Defined in: lossList.ts:700

reason ​

readonly reason: string

Defined in: lossList.ts:703

reference ​

readonly reference: string

Defined in: lossList.ts:704


EntityMerge ​

Defined in: lossList.ts:806

A Bedrock entity identifier several Java entity types share.

Properties ​

bedrockId ​

readonly bedrockId: string

Defined in: lossList.ts:808

The shared Bedrock identifier.

recovery ​

readonly recovery: string

Defined in: lossList.ts:810

How the merged Java identity is recovered.

reference ​

readonly reference: string

Defined in: lossList.ts:811


ItemLoss ​

Defined in: lossList.ts:595

A Java item whose identity does not survive the mapping.

Properties ​

bedrockFallback ​

readonly bedrockFallback: string

Defined in: lossList.ts:599

The Bedrock identifier the item falls back to.

javaId ​

readonly javaId: string

Defined in: lossList.ts:597

The Java item identifier.

reason ​

readonly reason: string

Defined in: lossList.ts:600

reference ​

readonly reference: string

Defined in: lossList.ts:601


ItemMerge ​

Defined in: lossList.ts:648

A Bedrock item identifier several Java items share.

Properties ​

bedrockId ​

readonly bedrockId: string

Defined in: lossList.ts:650

The shared Bedrock identifier.

recovery ​

readonly recovery: string

Defined in: lossList.ts:652

How the merged Java identity is recovered, when it is.

reference ​

readonly reference: string

Defined in: lossList.ts:653


JavaBlockState ​

Defined in: blockMapping.ts:106

One Java 26.3 block state: the identifier and a value for every property the block declares.

Properties ​

name ​

readonly name: string

Defined in: blockMapping.ts:108

The namespaced Java block identifier, such as minecraft:black_concrete_slab.

properties ​

readonly properties: Readonly<Record<string, string>>

Defined in: blockMapping.ts:110

Every property the Java block declares, each at the value this state names.


PackIdentifierResolver ​

Defined in: packIdentifierResolver.ts:22

Resolves Java identifiers per registry, in the shape the @jsprismarine/packs identifier report injects.

Methods ​

resolve() ​

resolve(registry, javaId): PackIdentifierResolution

Defined in: packIdentifierResolver.ts:29

Resolves one referenced identifier.

Parameters ​
registry ​

string

The Java registry the reference points into, such as item or block.

javaId ​

string

The namespaced id; tag references keep their # prefix.

Returns ​

PackIdentifierResolution


PartialBlockPropertyCollapse ​

Defined in: lossList.ts:306

A Java block whose state property collapses only for some of its values, so the property is dropped for part of the block's state space rather than all of it.

Properties ​

block ​

readonly block: string

Defined in: lossList.ts:308

The Java block identifier.

properties ​

readonly properties: readonly string[]

Defined in: lossList.ts:310

The properties whose collapse depends on the other properties' values.

reason ​

readonly reason: string

Defined in: lossList.ts:311

reference ​

readonly reference: string

Defined in: lossList.ts:312


RegistryLoss ​

Defined in: lossList.ts:834

A Java registry entry whose identity does not survive the mapping.

Properties ​

bedrockFallback? ​

readonly optional bedrockFallback?: string

Defined in: lossList.ts:840

The Bedrock identifier the entry falls back to, when one exists.

javaId ​

readonly javaId: string

Defined in: lossList.ts:838

The Java identifier.

reason ​

readonly reason: string

Defined in: lossList.ts:841

reference ​

readonly reference: string

Defined in: lossList.ts:842

registry ​

readonly registry: "biome" | "enchantment" | "mob_effect" | "potion"

Defined in: lossList.ts:836

The registry the entry belongs to.


ServerSideRegistry ​

Defined in: packRegistries.ts:17

A registry the server evaluates in Java's own shape.

Properties ​

reason ​

readonly reason: string

Defined in: packRegistries.ts:21

Why no Bedrock identifier is needed.

registry ​

readonly registry: string

Defined in: packRegistries.ts:19

The registry as a datapack reference names it, such as game_event or worldgen/structure.


UntranslatedRegistry ​

Defined in: lossList.ts:995

A whole Java registry whose entries reach the Bedrock client but which this package has no table for.

The row is registry-wide rather than one row per entry because the gap is the same for every entry: the value travels in Bedrock, and nothing here decides what it travels as. The identifier still has to be an entry of the pinned Java 26.3 registry, so a typo fails the load. entries.count is a review baseline reported by the parity dashboard, not a gate on registry size.

Properties ​

carrier ​

readonly carrier: string

Defined in: lossList.ts:1001

What carries the value on the Bedrock side, which is what a later table has to produce.

entries ​

readonly entries: object

Defined in: lossList.ts:999

How many entries the pinned Java 26.3 data publishes for it.

count ​

readonly count: number

reason ​

readonly reason: string

Defined in: lossList.ts:1002

reference ​

readonly reference: string

Defined in: lossList.ts:1003

registry ​

readonly registry: string

Defined in: lossList.ts:997

The registry as a datapack reference names it.

Type Aliases ​

BedrockBiomeResult ​

BedrockBiomeResult = { bedrock: BedrockBiome; java: string; kind: "mapped"; } | { bedrock: BedrockBiome; kind: "loss"; loss: BedrockBiomeLoss; } | { biome: number | string; kind: "unknown"; }

Defined in: registryMapping.ts:56

What a Bedrock biome lookup produced.

Union Members ​

Type Literal ​

{ bedrock: BedrockBiome; java: string; kind: "mapped"; }

A Bedrock biome with a Java 26.3 biome behind it.


Type Literal ​

{ bedrock: BedrockBiome; kind: "loss"; loss: BedrockBiomeLoss; }

A reviewed loss: one of the 27 legacy Bedrock biomes Java 26.3 has no identifier for. The Bedrock side is still known, so a caller that only wanted the identifier has it.


Type Literal ​

{ biome: number | string; kind: "unknown"; }

Neither a pinned Bedrock biome id nor a pinned Bedrock biome identifier.


BlockEntityContentLossKind ​

BlockEntityContentLossKind = "unrepresentable" | "coarsened" | "unresolvable"

Defined in: lossList.ts:1042

What a Java block entity's field runs into on the Bedrock side.


BlockMappingResult ​

BlockMappingResult = { bedrock: BedrockBlockState; kind: "mapped"; } | { bedrock: BedrockBlockState; kind: "loss"; loss: BlockLoss; } | { bedrock: BedrockBlockState; kind: "passthrough"; } | { javaId: string; kind: "unknown"; }

Defined in: blockMapping.ts:15

What a Java block state lookup produced.

Union Members ​

Type Literal ​

{ bedrock: BedrockBlockState; kind: "mapped"; }

A real Bedrock palette state with nothing lost at the block level.


Type Literal ​

{ bedrock: BedrockBlockState; kind: "loss"; loss: BlockLoss; }

A reviewed loss: the Java block has no Bedrock concept, and bedrock is its listed fallback.


Type Literal ​

{ bedrock: BedrockBlockState; kind: "passthrough"; }

A non-minecraft: identifier, passed through untouched for custom content.


Type Literal ​

{ javaId: string; kind: "unknown"; }

Not a Java 26.3 block state: an unknown identifier, property or value.


BlockPropertyRecovery ​

BlockPropertyRecovery = "second-layer" | "block-entity" | "client-computed" | "none"

Defined in: lossList.ts:16

Where the information a collapsed Java block property reappears, if anywhere.


BlockStateValue ​

BlockStateValue = string | number | boolean

Defined in: blockStates.ts:22

A block state value as either edition writes one; the palette carries booleans as 0 and 1.


EntityLossKind ​

EntityLossKind = "rerender" | "unrepresentable" | "block"

Defined in: lossList.ts:688

How a Java entity type fails to reach Bedrock as itself.


EntityMappingResult ​

EntityMappingResult = { bedrock: string; kind: "mapped"; } | { kind: "loss"; loss: EntityLoss; } | { bedrock: string; kind: "passthrough"; } | { javaId: string; kind: "unknown"; }

Defined in: entityMapping.ts:6

What a Java entity type lookup produced.

Union Members ​

Type Literal ​

{ bedrock: string; kind: "mapped"; }

A Bedrock entity identifier the pinned identifier list knows.


Type Literal ​

{ kind: "loss"; loss: EntityLoss; }

A reviewed loss. rerender losses carry the substitute entity in loss.bedrockFallback, block losses the Bedrock block identifier, and unrepresentable losses carry no fallback at all.


Type Literal ​

{ bedrock: string; kind: "passthrough"; }

A non-minecraft: identifier, passed through untouched for custom content.


Type Literal ​

{ javaId: string; kind: "unknown"; }

Not a Java 26.3 entity type.


IdentifierMappingResult ​

IdentifierMappingResult = { bedrock: string; kind: "mapped"; } | { kind: "loss"; loss: RegistryLoss; } | { bedrock: string; kind: "passthrough"; } | { javaId: string; kind: "unknown"; registry: MappedRegistry; }

Defined in: registryMapping.ts:11

What a Java registry identifier lookup produced.

Union Members ​

Type Literal ​

{ bedrock: string; kind: "mapped"; }

A Bedrock identifier the pinned data set knows.


Type Literal ​

{ kind: "loss"; loss: RegistryLoss; }

A reviewed loss. Merged biomes carry the shared Bedrock biome in loss.bedrockFallback; sweeping_edge, the four effects and the luck potion carry no fallback, because Bedrock has no id for them at all.


Type Literal ​

{ bedrock: string; kind: "passthrough"; }

A non-minecraft: identifier, passed through untouched for custom content.


Type Literal ​

{ javaId: string; kind: "unknown"; registry: MappedRegistry; }

Not a Java 26.3 entry of the registry.


ItemMappingResult ​

ItemMappingResult = { bedrock: BedrockItem; kind: "mapped"; } | { bedrock: BedrockItem; kind: "loss"; loss: ItemLoss; } | { bedrock: BedrockItem; kind: "passthrough"; } | { javaId: string; kind: "unknown"; }

Defined in: itemMapping.ts:14

What a Java item lookup produced.

Union Members ​

Type Literal ​

{ bedrock: BedrockItem; kind: "mapped"; }

A Bedrock item the pinned item registry knows, with the Java identity intact or recoverable.


Type Literal ​

{ bedrock: BedrockItem; kind: "loss"; loss: ItemLoss; }

A reviewed loss: the Java item's identity does not survive, and bedrock is its listed fallback.


Type Literal ​

{ bedrock: BedrockItem; kind: "passthrough"; }

A non-minecraft: identifier, passed through untouched for custom content.


Type Literal ​

{ javaId: string; kind: "unknown"; }

Not a Java 26.3 item.


JavaBlockFluidKind ​

JavaBlockFluidKind = "empty" | "water" | "lava"

Defined in: blockFluid.ts:4

A Java block state's fluid kind.


JavaMappingResult ​

JavaMappingResult = { java: JavaBlockState; kind: "mapped"; } | { bedrockId: string; kind: "unknown"; }

Defined in: blockMapping.ts:114

What a Bedrock block state lookup produced.

Union Members ​

Type Literal ​

{ java: JavaBlockState; kind: "mapped"; }

A Java 26.3 block state that maps onto the Bedrock state asked about.


Type Literal ​

{ bedrockId: string; kind: "unknown"; }

A Bedrock identifier no Java block state reaches, which is every Bedrock-only block.


MappedRegistry ​

MappedRegistry = typeof MAPPED_REGISTRIES[number]

Defined in: registryMapping.ts:8

One of MAPPED_REGISTRIES.


PackIdentifierResolution ​

PackIdentifierResolution = "known" | "loss" | "unknown"

Defined in: packIdentifierResolver.ts:16

How one Java identifier resolves against the mapping tables: known has a Bedrock identifier, loss is on the reviewed loss list, unknown is neither. Structurally identical to the IdentifierResolution type of @jsprismarine/packs, which defines the seam this package fills.


ServerSideRegistryId ​

ServerSideRegistryId = typeof SERVER_SIDE_REGISTRIES[number]["registry"]

Defined in: packRegistries.ts:71

One of SERVER_SIDE_REGISTRIES.

Variables ​

BEDROCK_BIOME_LOSSES ​

const BEDROCK_BIOME_LOSSES: readonly [{ bedrockId: "minecraft:bamboo_jungle_hills"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:birch_forest_hills"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:birch_forest_hills_mutated"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:cold_taiga_hills"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:cold_taiga_mutated"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:deep_warm_ocean"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:desert_hills"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:desert_mutated"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:extreme_hills_edge"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:extreme_hills_plus_trees_mutated"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:forest_hills"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:ice_mountains"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:jungle_edge_mutated"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:jungle_hills"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:jungle_mutated"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:legacy_frozen_ocean"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:mega_taiga_hills"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:mesa_plateau"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:mesa_plateau_mutated"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:mesa_plateau_stone_mutated"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:mushroom_island_shore"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:redwood_taiga_hills_mutated"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:roofed_forest_mutated"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:savanna_plateau_mutated"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:swampland_mutated"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:taiga_hills"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }, { bedrockId: "minecraft:taiga_mutated"; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 6"; }]

Defined in: lossList.ts:943

The Bedrock biomes import('./registryMapping').bedrockBiomeToJava cannot name in Java: 27 of the 89 the pinned Bedrock data lists, none of which any of Java 26.3's 67 biome documents reaches.

They are all legacy terrain, kept so an old Bedrock world still reads back. A chunk only carries one if it was generated by a Bedrock version older than the 1.18 terrain change, so the inverse reports the loss rather than guessing which modern Java biome stands in for a biome Java deleted.


BEDROCK_ONLY_BLOCKS ​

const BEDROCK_ONLY_BLOCKS: ReadonlySet<string>

Defined in: blockProperties.ts:66

Bedrock palette blocks no Java block state maps onto: the Education Edition chemistry set, the world-editing blocks (allow, deny, border_block), the deprecated palette entries and the other Bedrock-only identifiers. The table has no row for them, so a lookup returns undefined and the caller keeps its own values rather than receiving a silent default.


BEDROCK_TARGET_STATE_COUNT ​

const BEDROCK_TARGET_STATE_COUNT: number = palette.length

Defined in: blockMapping.ts:103

The number of distinct Bedrock states the Java palette reaches; exposed for the parity dashboard.


BLOCK_ENTITY_CONTENT_LOSSES ​

const BLOCK_ENTITY_CONTENT_LOSSES: readonly [{ field: "allow_op_features"; javaType: "minecraft:sign"; kind: "unrepresentable"; reason: "A Java sign may be allowed to run the click events an operator wrote into its text. Bedrock signs run nothing, so there is no flag to carry. All five signs in the structure templates set it."; reference: "docs/research/java-to-bedrock-translation.md section 7"; }, { field: "filtered_messages"; javaType: "minecraft:sign"; kind: "unrepresentable"; reason: "Java keeps a second, profanity-filtered copy of a sign's four lines for Realms. A Bedrock sign face holds one string, so only the unfiltered copy travels. One template sign carries the second copy."; reference: "docs/research/java-to-bedrock-translation.md section 7"; }, { field: "RecipesUsed"; javaType: "minecraft:furnace"; kind: "coarsened"; reason: "Java tallies how many of each recipe a furnace smelted, to hand back the right experience. Bedrock keeps one number, `StoredXPInt`, and no recipe names. The 48 furnaces, blast furnaces and smokers in the templates carry the tally; one of them has anything in it."; reference: "docs/research/java-to-bedrock-translation.md section 7"; }, { field: "normal_config"; javaType: "minecraft:trial_spawner"; kind: "unresolvable"; reason: "Java may write a trial spawner's two configurations as a reference into its `trial_spawner` registry, and all 14 in the templates do. Bedrock has no reference form and takes the configuration inline, so resolving one means reading the Java registry, which this server does not load. A configuration written inline translates."; reference: "docs/research/java-to-bedrock-translation.md section 7"; }, { field: "patterns"; javaType: "minecraft:banner"; kind: "unrepresentable"; reason: "Bedrock draws banner patterns from its own client assets and names them by a short code, so a pattern a datapack shipped has no code to be named by and the layer is dropped. Every pattern Java 26.3 publishes has one; no template uses a pattern that does not."; reference: "docs/research/java-to-bedrock-translation.md section 5"; }, { field: "Items[].components.minecraft:potion_contents"; javaType: "minecraft:brewing_stand"; kind: "coarsened"; reason: "Bedrock tells its potions apart by the stack's data value rather than by name, and no pinned source publishes which number is which potion, so a stack of a named potion arrives as the plain bottle. Three stacks in the templates are potions: two of strong healing in an end city, one splash potion of weakness in an igloo."; reference: "docs/research/java-to-bedrock-translation.md section 3"; }]

Defined in: lossList.ts:1074

The fields a Java block entity's contents lose on the way to a Bedrock one.

blockentity/javaBlockEntityContent.ts in @jsprismarine/prismarine translates the rest: a banner's color and patterns, a sign's two faces, a decorated pot's four sherds, a vault's key, a spawner's mob and every container's stacks. These five are what it knowingly drops, and each is dropped because Bedrock has nowhere to put it rather than because nobody wrote the code.

The counts in the reasons were measured over the 1511 Java 26.3 structure templates, which declare 1124 block entities once the jigsaws and structure blocks that are consumed during placement are set aside.


BLOCK_LOSSES ​

const BLOCK_LOSSES: readonly [{ bedrockFallback: "minecraft:unknown"; javaId: "minecraft:test_block"; reason: "Test blocks do not exist on Bedrock."; reference: "docs/research/java-to-bedrock-translation.md section 2; GeyserMC/Geyser#6164"; }, { bedrockFallback: "minecraft:unknown"; javaId: "minecraft:test_instance_block"; reason: "Test instance blocks do not exist on Bedrock."; reference: "docs/research/java-to-bedrock-translation.md section 2; GeyserMC/Geyser#6164"; }]

Defined in: lossList.ts:579

The Java blocks with no Bedrock representation. All five of their states map to minecraft:unknown, and a lookup reports the loss.


BLOCK_MERGES ​

const BLOCK_MERGES: readonly [{ bedrockId: "minecraft:acacia_hanging_sign"; reason: "Bedrock uses one block for the floor and wall variants; the placement travels in the block state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:air"; reason: "Java's air, cave_air and void_air are one Bedrock air."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:bamboo_hanging_sign"; reason: "Bedrock uses one block for the floor and wall variants; the placement travels in the block state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:bed"; reason: "The 16 Java bed colors are one Bedrock bed; the color travels in block entity NBT."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:big_dripleaf"; reason: "Bedrock uses one block where Java splits a plant into a head and a body ('_plant') block."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:birch_hanging_sign"; reason: "Bedrock uses one block for the floor and wall variants; the placement travels in the block state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:cauldron"; reason: "Java's empty, water, lava and powder snow cauldrons are one Bedrock cauldron with a liquid state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:cave_vines"; reason: "Bedrock uses one block where Java splits a plant into a head and a body ('_plant') block."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:cherry_hanging_sign"; reason: "Bedrock uses one block for the floor and wall variants; the placement travels in the block state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:copper_torch"; reason: "Bedrock uses one block for the floor and wall variants; the placement travels in the block state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:creeper_head"; reason: "Bedrock uses one block for the floor and wall variants; the placement travels in the block state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:crimson_hanging_sign"; reason: "Bedrock uses one block for the floor and wall variants; the placement travels in the block state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:dark_oak_hanging_sign"; reason: "Bedrock uses one block for the floor and wall variants; the placement travels in the block state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:dragon_head"; reason: "Bedrock uses one block for the floor and wall variants; the placement travels in the block state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:flower_pot"; reason: "The pot and all 39 potted plants are one Bedrock flower pot; the contents travel in block entity NBT."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:jungle_hanging_sign"; reason: "Bedrock uses one block for the floor and wall variants; the placement travels in the block state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:kelp"; reason: "Bedrock uses one block where Java splits a plant into a head and a body ('_plant') block."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:mangrove_hanging_sign"; reason: "Bedrock uses one block for the floor and wall variants; the placement travels in the block state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:melon_stem"; reason: "Java's attached stem is a Bedrock stem state, not a separate block."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:oak_hanging_sign"; reason: "Bedrock uses one block for the floor and wall variants; the placement travels in the block state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:pale_oak_hanging_sign"; reason: "Bedrock uses one block for the floor and wall variants; the placement travels in the block state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:piglin_head"; reason: "Bedrock uses one block for the floor and wall variants; the placement travels in the block state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:player_head"; reason: "Bedrock uses one block for the floor and wall variants; the placement travels in the block state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:poplar_hanging_sign"; reason: "Bedrock uses one block for the floor and wall variants; the placement travels in the block state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:pumpkin_stem"; reason: "Java's attached stem is a Bedrock stem state, not a separate block."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:redstone_torch"; reason: "Bedrock uses one block for the floor and wall variants; the placement travels in the block state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:seagrass"; reason: "Java's tall seagrass halves are Bedrock seagrass states."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:skeleton_skull"; reason: "Bedrock uses one block for the floor and wall variants; the placement travels in the block state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:soul_torch"; reason: "Bedrock uses one block for the floor and wall variants; the placement travels in the block state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:spruce_hanging_sign"; reason: "Bedrock uses one block for the floor and wall variants; the placement travels in the block state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:standing_banner"; reason: "The 16 Java banner colors are one Bedrock banner; the color travels in block entity NBT."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:torch"; reason: "Bedrock uses one block for the floor and wall variants; the placement travels in the block state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:twisting_vines"; reason: "Bedrock uses one block where Java splits a plant into a head and a body ('_plant') block."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:unknown"; reason: "The two Java test blocks have no Bedrock concept; see BLOCK_LOSSES."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:unlit_redstone_torch"; reason: "Bedrock uses one block for the floor and wall variants; the placement travels in the block state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:wall_banner"; reason: "The 16 Java wall banner colors are one Bedrock wall banner; the color travels in block entity NBT."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:warped_hanging_sign"; reason: "Bedrock uses one block for the floor and wall variants; the placement travels in the block state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:weeping_vines"; reason: "Bedrock uses one block where Java splits a plant into a head and a body ('_plant') block."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:wither_skeleton_skull"; reason: "Bedrock uses one block for the floor and wall variants; the placement travels in the block state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockId: "minecraft:zombie_head"; reason: "Bedrock uses one block for the floor and wall variants; the placement travels in the block state."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }]

Defined in: lossList.ts:479

Bedrock identifiers that receive more than one Java block. The round-trip property test accepts a cross-block round trip only for these targets.


BLOCK_PROPERTY_CONFLICTS ​

const BLOCK_PROPERTY_CONFLICTS: readonly Readonly<Conflict>[] = table.conflicts

Defined in: blockProperties.ts:73

The reviewed flattening disagreements: Bedrock states whose Java sources did not agree on a property, each kept value chosen by the rule the generator documents. All of them come from Java properties Bedrock does not represent - piston extension, leaf distance, bamboo stage.


BLOCK_PROPERTY_VERSIONS ​

const BLOCK_PROPERTY_VERSIONS: object

Defined in: blockProperties.ts:76

The version pair the property table was flattened from.

Type Declaration ​

bedrockVersion ​

readonly bedrockVersion: string = table.bedrockVersion

javaVersion ​

readonly javaVersion: string = table.javaVersion


BLOCK_STATE_LOSSES ​

const BLOCK_STATE_LOSSES: readonly [{ blocks: readonly ["minecraft:acacia_button", "minecraft:bamboo_button", "minecraft:birch_button", "minecraft:cherry_button", "minecraft:crimson_button", "minecraft:dark_oak_button", "minecraft:jungle_button", "minecraft:mangrove_button", "minecraft:pale_oak_button", "minecraft:polished_blackstone_button", "minecraft:poplar_button", "minecraft:spruce_button", "minecraft:stone_button", "minecraft:warped_button", "minecraft:wooden_button"]; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 2"; state: "facing_direction"; }, { blocks: readonly ["minecraft:brown_mushroom_block", "minecraft:mushroom_stem", "minecraft:red_mushroom_block"]; reason: "Bedrock packs the six face booleans Java carries separately into the bits of one number."; reference: "docs/research/java-to-bedrock-translation.md section 2"; state: "huge_mushroom_bits"; }, { blocks: readonly ["minecraft:glow_lichen", "minecraft:resin_clump", "minecraft:sculk_vein"]; reason: "Bedrock packs the six face booleans Java carries separately into the bits of one number."; reference: "docs/research/java-to-bedrock-translation.md section 2"; state: "multi_face_direction_bits"; }, { blocks: readonly ["minecraft:chiseled_bookshelf"]; reason: "Bedrock packs the six face booleans Java carries separately into the bits of one number."; reference: "docs/research/java-to-bedrock-translation.md section 2"; state: "books_stored"; }, { blocks: readonly ["minecraft:vine"]; reason: "Bedrock packs the six face booleans Java carries separately into the bits of one number."; reference: "docs/research/java-to-bedrock-translation.md section 2"; state: "vine_direction_bits"; }, { blocks: readonly ["minecraft:jigsaw"]; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 2"; state: "facing_direction"; }, { blocks: readonly ["minecraft:jigsaw"]; reason: "The roll half of Java's jigsaw orientation; see this list's `facing_direction` entry."; reference: "docs/research/java-to-bedrock-translation.md section 2"; state: "rotation"; }, { blocks: readonly ["minecraft:lever"]; reason: "Java's `face` and `facing` together, the same fold as the button's."; reference: "docs/research/java-to-bedrock-translation.md section 2"; state: "lever_direction"; }, { blocks: readonly ["minecraft:lever"]; reason: string; reference: "docs/research/java-to-bedrock-translation.md section 2"; state: "open_bit"; }]

Defined in: lossList.ts:405

The Bedrock states a caller cannot write in Java's words.

import('./blockStates').bedrockBlockStates reads every other state's vocabulary out of the block mapping, by finding the one Java property whose values pick its values. These twenty-seven (block, state) pairs have no such property: Bedrock either folds two Java properties into one state or packs several booleans into one number, so a word has nothing to translate to. A caller that holds one of them keeps the Bedrock value it read.


DROPPED_BLOCK_PROPERTIES ​

const DROPPED_BLOCK_PROPERTIES: readonly [{ blocks: { count: 504; }; property: "waterlogged"; reason: "Bedrock has no waterlogged flag; water travels in the second block storage layer."; recovery: "second-layer"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: { count: 72; }; property: "powered"; reason: "Doors, trapdoors, fence gates, pressure plates and heads render identically powered or not in both editions."; recovery: "none"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: readonly ["minecraft:black_shulker_box", "minecraft:blue_shulker_box", "minecraft:brown_shulker_box", "minecraft:cyan_shulker_box", "minecraft:gray_shulker_box", "minecraft:green_shulker_box", "minecraft:light_blue_shulker_box", "minecraft:light_gray_shulker_box", "minecraft:lime_shulker_box", "minecraft:magenta_shulker_box", "minecraft:moving_piston", "minecraft:orange_shulker_box", "minecraft:pink_shulker_box", "minecraft:purple_shulker_box", "minecraft:red_shulker_box", "minecraft:shulker_box", "minecraft:white_shulker_box", "minecraft:yellow_shulker_box"]; property: "facing"; reason: "Shulker box facing travels in Bedrock block entity NBT, not the block state."; recovery: "block-entity"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: readonly ["minecraft:acacia_leaves", "minecraft:azalea_leaves", "minecraft:birch_leaves", "minecraft:cherry_leaves", "minecraft:dark_oak_leaves", "minecraft:flowering_azalea_leaves", "minecraft:jungle_leaves", "minecraft:mangrove_leaves", "minecraft:oak_leaves", "minecraft:orange_poplar_leaves", "minecraft:pale_oak_leaves", "minecraft:red_poplar_leaves", "minecraft:spruce_leaves", "minecraft:yellow_poplar_leaves"]; property: "distance"; reason: "The Bedrock client recomputes leaf decay distance from neighbors."; recovery: "client-computed"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: readonly ["minecraft:chest", "minecraft:copper_chest", "minecraft:exposed_copper_chest", "minecraft:moving_piston", "minecraft:oxidized_copper_chest", "minecraft:trapped_chest", "minecraft:waxed_copper_chest", "minecraft:waxed_exposed_copper_chest", "minecraft:waxed_oxidized_copper_chest", "minecraft:waxed_weathered_copper_chest", "minecraft:weathered_copper_chest"]; property: "type"; reason: "The double-chest pair position travels in Bedrock block entity NBT."; recovery: "block-entity"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: readonly ["minecraft:copper_golem_statue", "minecraft:exposed_copper_golem_statue", "minecraft:oxidized_copper_golem_statue", "minecraft:waxed_copper_golem_statue", "minecraft:waxed_exposed_copper_golem_statue", "minecraft:waxed_oxidized_copper_golem_statue", "minecraft:waxed_weathered_copper_golem_statue", "minecraft:weathered_copper_golem_statue"]; property: "copper_golem_pose"; reason: "Copper golem poses are block states on Java and block entity NBT on Bedrock."; recovery: "block-entity"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: readonly ["minecraft:creeper_head", "minecraft:dragon_head", "minecraft:piglin_head", "minecraft:player_head", "minecraft:skeleton_skull", "minecraft:wither_skeleton_skull", "minecraft:zombie_head"]; property: "rotation"; reason: "Skull rotation travels in Bedrock block entity NBT as degrees."; recovery: "block-entity"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: readonly ["minecraft:calibrated_sculk_sensor", "minecraft:sculk_sensor", "minecraft:target"]; property: "power"; reason: "The output power level is not visual on these blocks."; recovery: "none"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: readonly ["minecraft:chorus_plant", "minecraft:fire", "minecraft:redstone_wire"]; property: "north"; reason: "The Bedrock client computes block connections from neighbors."; recovery: "client-computed"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: readonly ["minecraft:chorus_plant", "minecraft:fire", "minecraft:redstone_wire"]; property: "south"; reason: "The Bedrock client computes block connections from neighbors."; recovery: "client-computed"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: readonly ["minecraft:chorus_plant", "minecraft:fire", "minecraft:redstone_wire"]; property: "east"; reason: "The Bedrock client computes block connections from neighbors."; recovery: "client-computed"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: readonly ["minecraft:chorus_plant", "minecraft:fire", "minecraft:redstone_wire"]; property: "west"; reason: "The Bedrock client computes block connections from neighbors."; recovery: "client-computed"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: readonly ["minecraft:chorus_plant", "minecraft:fire", "minecraft:vine"]; property: "up"; reason: "The Bedrock client computes block connections from neighbors."; recovery: "client-computed"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: readonly ["minecraft:chorus_plant"]; property: "down"; reason: "The Bedrock client computes block connections from neighbors."; recovery: "client-computed"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: readonly ["minecraft:grass_block", "minecraft:mycelium", "minecraft:podzol"]; property: "snowy"; reason: "The Bedrock client computes the snowy top texture from the block above."; recovery: "client-computed"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: readonly ["minecraft:bamboo", "minecraft:mangrove_propagule"]; property: "stage"; reason: "The sapling growth stage is not visual."; recovery: "none"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: readonly ["minecraft:campfire", "minecraft:soul_campfire"]; property: "signal_fire"; reason: "Whether a campfire sits on hay is not part of the Bedrock block state."; recovery: "none"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: readonly ["minecraft:piston", "minecraft:sticky_piston"]; property: "extended"; reason: "Bedrock tracks piston extension in the piston block entity."; recovery: "none"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: readonly ["minecraft:decorated_pot"]; property: "cracked"; reason: "Decorated pot detail travels in Bedrock block entity NBT."; recovery: "block-entity"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: readonly ["minecraft:jukebox"]; property: "has_record"; reason: "The inserted disc travels in Bedrock block entity NBT."; recovery: "block-entity"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: readonly ["minecraft:lectern"]; property: "has_book"; reason: "The held book travels in Bedrock block entity NBT."; recovery: "block-entity"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: readonly ["minecraft:note_block"]; property: "instrument"; reason: "Bedrock derives the note block instrument from the block below."; recovery: "none"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: readonly ["minecraft:note_block"]; property: "note"; reason: "The pitch travels in Bedrock block entity NBT."; recovery: "block-entity"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: readonly ["minecraft:piston_head"]; property: "short"; reason: "The shortened mid-push arm is not part of the Bedrock block state."; recovery: "none"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: readonly ["minecraft:repeater"]; property: "locked"; reason: "Repeater locking is recomputed from neighboring repeaters."; recovery: "none"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: readonly ["minecraft:scaffolding"]; property: "bottom"; reason: "The Bedrock client computes the floating-scaffolding bottom face itself."; recovery: "client-computed"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { blocks: readonly ["minecraft:test_block"]; property: "mode"; reason: "The test block has no Bedrock concept at all; see BLOCK_LOSSES."; recovery: "none"; reference: "docs/research/java-to-bedrock-translation.md section 2"; }]

Defined in: lossList.ts:46

Java block properties the Bedrock state drops for every state of the listed blocks. The counts and lists are verified against the generated table by the round-trip property test.


ENTITY_LOSSES ​

const ENTITY_LOSSES: readonly [{ bedrockFallback: "minecraft:armor_stand"; javaId: "minecraft:text_display"; kind: "rerender"; reason: "Bedrock has no display entities; Geyser shows text displays as armor stands."; reference: "docs/research/java-to-bedrock-translation.md section 4; GeyserMC/Geyser#3810"; }, { bedrockFallback: "minecraft:armor_stand"; javaId: "minecraft:interaction"; kind: "rerender"; reason: "Bedrock has no interaction entity."; reference: "docs/research/java-to-bedrock-translation.md section 4"; }, { bedrockFallback: "minecraft:arrow"; javaId: "minecraft:spectral_arrow"; kind: "rerender"; reason: "Bedrock has no spectral arrow entity."; reference: "docs/research/java-to-bedrock-translation.md section 4"; }, { bedrockFallback: "minecraft:minecart"; javaId: "minecraft:furnace_minecart"; kind: "rerender"; reason: "Bedrock has no furnace minecart."; reference: "docs/research/java-to-bedrock-translation.md section 4"; }, { bedrockFallback: "minecraft:minecart"; javaId: "minecraft:spawner_minecart"; kind: "rerender"; reason: "Bedrock has no spawner minecart."; reference: "docs/research/java-to-bedrock-translation.md section 4"; }, { bedrockFallback: "minecraft:zombie"; javaId: "minecraft:giant"; kind: "rerender"; reason: "Bedrock has no giant; it is shown as a zombie."; reference: "docs/research/java-to-bedrock-translation.md section 4"; }, { bedrockFallback: "minecraft:evocation_illager"; javaId: "minecraft:illusioner"; kind: "rerender"; reason: "Bedrock has no illusioner; it is shown as an evoker."; reference: "docs/research/java-to-bedrock-translation.md section 4"; }, { javaId: "minecraft:block_display"; kind: "unrepresentable"; reason: "Bedrock has no display entities and no stand-in renders a block."; reference: "docs/research/java-to-bedrock-translation.md section 4; GeyserMC/Geyser#3810"; }, { javaId: "minecraft:item_display"; kind: "unrepresentable"; reason: "Bedrock has no display entities and no stand-in renders an item."; reference: "docs/research/java-to-bedrock-translation.md section 4; GeyserMC/Geyser#3810"; }, { javaId: "minecraft:marker"; kind: "unrepresentable"; reason: "Markers render in neither edition and are only sent inside non-vanilla entity type tags."; reference: "docs/research/java-to-bedrock-translation.md section 4"; }, { javaId: "minecraft:mannequin"; kind: "unrepresentable"; reason: "Java 26.3 added the mannequin and the pinned Bedrock identifier list has no counterpart; listed rather than guessed."; reference: "reports/registries.json (Java 26.3) against entity_identifiers (BDS 1.26.51.1)"; }, { bedrockFallback: "minecraft:frame"; javaId: "minecraft:item_frame"; kind: "block"; reason: "Item frames are entities on Java and blocks on Bedrock."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { bedrockFallback: "minecraft:glow_frame"; javaId: "minecraft:glow_item_frame"; kind: "block"; reason: "Glow item frames are entities on Java and blocks on Bedrock."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }]

Defined in: lossList.ts:715

The Java entity types without a Bedrock entity of their own against the pinned 1.26.51 identifier list. The research note counts ten re-renders against Geyser's 1.26.50 data; three of those resolve here instead: evoker maps to its real Bedrock name evocation_illager, and lingering_potion and trader_llama exist in the 1.26.51 identifier list under their own names.


ENTITY_MERGES ​

const ENTITY_MERGES: readonly [{ bedrockId: "minecraft:boat"; recovery: "Java's eleven wooden boats and rafts are one Bedrock boat; the wood travels as a variant."; reference: "docs/research/java-to-bedrock-translation.md section 4"; }, { bedrockId: "minecraft:chest_boat"; recovery: "Java's eleven wooden chest boats and rafts are one Bedrock chest boat; the wood travels as a variant."; reference: "docs/research/java-to-bedrock-translation.md section 4"; }]

Defined in: lossList.ts:819

Bedrock entity identifiers that receive more than one Java entity type. The round-trip property test accepts a non-identity round trip only for these.


ITEM_LOSSES ​

const ITEM_LOSSES: readonly [{ bedrockFallback: "minecraft:arrow"; javaId: "minecraft:spectral_arrow"; reason: "Bedrock has no spectral arrow; it becomes a plain arrow."; reference: "docs/research/java-to-bedrock-translation.md section 3"; }, { bedrockFallback: "minecraft:stick"; javaId: "minecraft:debug_stick"; reason: "Bedrock has no debug stick; it becomes a plain stick."; reference: "docs/research/java-to-bedrock-translation.md section 3"; }, { bedrockFallback: "minecraft:book"; javaId: "minecraft:knowledge_book"; reason: "Bedrock has no knowledge book; it becomes a plain book."; reference: "docs/research/java-to-bedrock-translation.md section 3"; }, { bedrockFallback: "minecraft:hopper_minecart"; javaId: "minecraft:furnace_minecart"; reason: "Bedrock has no furnace minecart item."; reference: "docs/research/java-to-bedrock-translation.md section 3"; }, { bedrockFallback: "minecraft:unknown"; javaId: "minecraft:test_block"; reason: "Test blocks do not exist on Bedrock."; reference: "docs/research/java-to-bedrock-translation.md section 3; GeyserMC/Geyser#6164"; }, { bedrockFallback: "minecraft:unknown"; javaId: "minecraft:test_instance_block"; reason: "Test instance blocks do not exist on Bedrock."; reference: "docs/research/java-to-bedrock-translation.md section 3; GeyserMC/Geyser#6164"; }]

Defined in: lossList.ts:608

The genuinely lossy item merges: a Bedrock player sees the fallback item with none of the Java item's identity.


ITEM_MERGES ​

const ITEM_MERGES: readonly [{ bedrockId: "minecraft:arrow"; recovery: "Tipped arrows recover from potion NBT; spectral arrows do not recover."; reference: "docs/research/java-to-bedrock-translation.md section 3"; }, { bedrockId: "minecraft:banner"; recovery: "The color recovers from Bedrock NBT."; reference: "docs/research/java-to-bedrock-translation.md section 3"; }, { bedrockId: "minecraft:bed"; recovery: "The color recovers from Bedrock NBT."; reference: "docs/research/java-to-bedrock-translation.md section 3"; }, { bedrockId: "minecraft:book"; recovery: "The knowledge book does not recover."; reference: "docs/research/java-to-bedrock-translation.md section 3"; }, { bedrockId: "minecraft:filled_map"; recovery: "The 16 structure locator maps recover from map NBT."; reference: "docs/research/java-to-bedrock-translation.md section 3"; }, { bedrockId: "minecraft:hopper_minecart"; recovery: "The furnace minecart does not recover."; reference: "docs/research/java-to-bedrock-translation.md section 3"; }, { bedrockId: "minecraft:stick"; recovery: "The debug stick does not recover."; reference: "docs/research/java-to-bedrock-translation.md section 3"; }, { bedrockId: "minecraft:unknown"; recovery: "The two test block items do not recover."; reference: "docs/research/java-to-bedrock-translation.md section 3"; }]

Defined in: lossList.ts:660

Bedrock item identifiers that receive more than one Java item. The round-trip property test accepts a non-identity round trip only for these.


MAPPED_REGISTRIES ​

const MAPPED_REGISTRIES: readonly ["biome", "enchantment", "mob_effect", "potion"]

Defined in: registryMapping.ts:6

The registries beyond blocks, items and entities that this package maps.


MAPPING_VERSIONS ​

const MAPPING_VERSIONS: object

Defined in: blockMapping.ts:26

The pinned version pair and GeyserMC/mappings commit the tables were generated from.

Type Declaration ​

bedrockVersion ​

readonly bedrockVersion: string = blocksTable.bedrockVersion

geyserMappingsCommit ​

readonly geyserMappingsCommit: string = blocksTable.geyserMappingsCommit

javaVersion ​

readonly javaVersion: string = blocksTable.javaVersion


PARTIAL_BLOCK_PROPERTY_COLLAPSES ​

const PARTIAL_BLOCK_PROPERTY_COLLAPSES: readonly [{ block: "minecraft:acacia_button"; properties: readonly ["facing"]; reason: "Bedrock's facing_direction 0 and 1 (floor and ceiling) ignore the horizontal facing Java keeps."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { block: "minecraft:bamboo_button"; properties: readonly ["facing"]; reason: "Bedrock's facing_direction 0 and 1 (floor and ceiling) ignore the horizontal facing Java keeps."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { block: "minecraft:birch_button"; properties: readonly ["facing"]; reason: "Bedrock's facing_direction 0 and 1 (floor and ceiling) ignore the horizontal facing Java keeps."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { block: "minecraft:cherry_button"; properties: readonly ["facing"]; reason: "Bedrock's facing_direction 0 and 1 (floor and ceiling) ignore the horizontal facing Java keeps."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { block: "minecraft:crimson_button"; properties: readonly ["facing"]; reason: "Bedrock's facing_direction 0 and 1 (floor and ceiling) ignore the horizontal facing Java keeps."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { block: "minecraft:dark_oak_button"; properties: readonly ["facing"]; reason: "Bedrock's facing_direction 0 and 1 (floor and ceiling) ignore the horizontal facing Java keeps."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { block: "minecraft:jungle_button"; properties: readonly ["facing"]; reason: "Bedrock's facing_direction 0 and 1 (floor and ceiling) ignore the horizontal facing Java keeps."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { block: "minecraft:mangrove_button"; properties: readonly ["facing"]; reason: "Bedrock's facing_direction 0 and 1 (floor and ceiling) ignore the horizontal facing Java keeps."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { block: "minecraft:oak_button"; properties: readonly ["facing"]; reason: "Bedrock's facing_direction 0 and 1 (floor and ceiling) ignore the horizontal facing Java keeps."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { block: "minecraft:pale_oak_button"; properties: readonly ["facing"]; reason: "Bedrock's facing_direction 0 and 1 (floor and ceiling) ignore the horizontal facing Java keeps."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { block: "minecraft:polished_blackstone_button"; properties: readonly ["facing"]; reason: "Bedrock's facing_direction 0 and 1 (floor and ceiling) ignore the horizontal facing Java keeps."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { block: "minecraft:poplar_button"; properties: readonly ["facing"]; reason: "Bedrock's facing_direction 0 and 1 (floor and ceiling) ignore the horizontal facing Java keeps."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { block: "minecraft:spruce_button"; properties: readonly ["facing"]; reason: "Bedrock's facing_direction 0 and 1 (floor and ceiling) ignore the horizontal facing Java keeps."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { block: "minecraft:stone_button"; properties: readonly ["facing"]; reason: "Bedrock's facing_direction 0 and 1 (floor and ceiling) ignore the horizontal facing Java keeps."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { block: "minecraft:warped_button"; properties: readonly ["facing"]; reason: "Bedrock's facing_direction 0 and 1 (floor and ceiling) ignore the horizontal facing Java keeps."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { block: "minecraft:lever"; properties: readonly ["facing", "powered"]; reason: "Bedrock's lever_direction merges the floor and ceiling facings, and the powered bit folds into the direction for some orientations."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { block: "minecraft:brown_mushroom_block"; properties: readonly ["down", "east", "north", "south", "up", "west"]; reason: "Java's 64 face combinations collapse onto Bedrock's huge_mushroom_bits values."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { block: "minecraft:mushroom_stem"; properties: readonly ["down", "east", "north", "south", "up", "west"]; reason: "Java's 64 face combinations collapse onto Bedrock's huge_mushroom_bits values."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }, { block: "minecraft:red_mushroom_block"; properties: readonly ["down", "east", "north", "south", "up", "west"]; reason: "Java's 64 face combinations collapse onto Bedrock's huge_mushroom_bits values."; reference: "docs/research/java-to-bedrock-translation.md section 2"; }]

Defined in: lossList.ts:332

Blocks where a state property collapses for only part of the state space. The round-trip property test accepts a non-identity round trip for these blocks only on the listed properties.


REGISTRY_LOSSES ​

const REGISTRY_LOSSES: readonly [{ bedrockFallback: "minecraft:river"; javaId: "minecraft:the_void"; reason: "Bedrock has no void biome; Geyser maps it onto biome id 7, which is the river."; reference: "docs/research/java-to-bedrock-translation.md section 6"; registry: "biome"; }, { bedrockFallback: "minecraft:the_end"; javaId: "minecraft:end_barrens"; reason: "Bedrock's single End biome (id 9) serves all five Java End biomes."; reference: "docs/research/java-to-bedrock-translation.md section 6"; registry: "biome"; }, { bedrockFallback: "minecraft:the_end"; javaId: "minecraft:end_highlands"; reason: "Bedrock's single End biome (id 9) serves all five Java End biomes."; reference: "docs/research/java-to-bedrock-translation.md section 6"; registry: "biome"; }, { bedrockFallback: "minecraft:the_end"; javaId: "minecraft:end_midlands"; reason: "Bedrock's single End biome (id 9) serves all five Java End biomes."; reference: "docs/research/java-to-bedrock-translation.md section 6"; registry: "biome"; }, { bedrockFallback: "minecraft:the_end"; javaId: "minecraft:small_end_islands"; reason: "Bedrock's single End biome (id 9) serves all five Java End biomes."; reference: "docs/research/java-to-bedrock-translation.md section 6"; registry: "biome"; }, { javaId: "minecraft:sweeping_edge"; reason: "The only vanilla Java enchantment with no Bedrock id; Geyser renders it as lore text with a glint."; reference: "docs/research/java-to-bedrock-translation.md section 3; GeyserMC/Geyser#3121"; registry: "enchantment"; }, { javaId: "minecraft:dolphins_grace"; reason: "Bedrock gives a dolphin's boost no effect of its own; the swim speed is applied directly."; reference: "docs/research/java-to-bedrock-translation.md section 3"; registry: "mob_effect"; }, { javaId: "minecraft:glowing"; reason: "Bedrock has no glowing effect; the outline a Java client draws is one of the 44 client-decided differences."; reference: "docs/research/java-to-bedrock-translation.md section 3"; registry: "mob_effect"; }, { javaId: "minecraft:luck"; reason: "Bedrock has no luck effect, and no loot table field it would weight."; reference: "docs/research/java-to-bedrock-translation.md section 3"; registry: "mob_effect"; }, { javaId: "minecraft:unluck"; reason: "Bedrock has no bad luck effect; it is Java's luck effect with a negative amplifier and shares its fate."; reference: "docs/research/java-to-bedrock-translation.md section 3"; registry: "mob_effect"; }, { javaId: "minecraft:luck"; reason: "The luck potion is Java-only, because the luck effect it applies has no Bedrock counterpart."; reference: "docs/research/java-to-bedrock-translation.md section 3"; registry: "potion"; }]

Defined in: lossList.ts:863

The reviewed losses in the remaining registries: the biome merges onto Bedrock's shared ids, the one vanilla enchantment with no Bedrock id, and the four mob effects and one potion Bedrock's pinned name lists do not have.


SERVER_SIDE_REGISTRIES ​

const SERVER_SIDE_REGISTRIES: readonly [{ reason: "A predicate asks what fluid a position holds; the server answers from its own world, and the Bedrock client reads water and lava as blocks, which the block table already maps."; registry: "fluid"; }, { reason: "Vibrations and sculk listening are decided entirely by the server; Bedrock sends no game event identifier to a client."; registry: "game_event"; }, { reason: "Job sites, beds and the village point-of-interest graph are server-side AI state."; registry: "point_of_interest_type"; }, { reason: "26.3's scheduling registry drives server-side timers; the client is told the resulting state, never the timeline."; registry: "timeline"; }, { reason: "A trade id names one of Java's trade definitions. The server compiles the trades it picks into Bedrock's trade table format, so the Java id never leaves the server."; registry: "villager_trade"; }, { reason: "World generation runs on the server and ships finished chunks; a feature id never reaches a client."; registry: "worldgen/feature"; }, { reason: "A superflat preset configures the generator before the world exists."; registry: "worldgen/flat_level_generator_preset"; }, { reason: "Structure placement is server-side. Explorer maps and structure locating are Phase 4 work and will carry Bedrock structure feature names, not these ids."; registry: "worldgen/structure"; }, { reason: "A world preset chooses dimensions and generators at world creation."; registry: "worldgen/world_preset"; }]

Defined in: packRegistries.ts:31

The registries whose identifiers stay inside the server.

Each is checked against the generated Java 26.3 census rather than against a Bedrock table, so a typo still fails the load: the identifier has to be an entry Mojang's own data publishes.


UNTRANSLATED_REGISTRIES ​

const UNTRANSLATED_REGISTRIES: readonly [{ carrier: "the banner's block entity NBT, which lists patterns by a short code such as `bs` or `cr`"; entries: { count: 43; }; reason: "Bedrock names banner patterns by two-letter code rather than by identifier, and no pinned source publishes the pairing; Geyser keeps it in client code."; reference: "docs/research/java-to-bedrock-translation.md section 5"; registry: "banner_pattern"; }, { carrier: "the goat horn item's data value, 0 to 7"; entries: { count: 8; }; reason: "Bedrock selects a goat horn sound by the item data value, in the order the eight horns were added; the identifiers exist only on the Java side."; reference: "docs/research/java-to-bedrock-translation.md section 5"; registry: "instrument"; }, { carrier: "the painting entity's `Motive` string, which is a resource pack name rather than a registry id"; entries: { count: 51; }; reason: "Bedrock paintings are named by the resource pack texture they draw, so the set a client knows is whatever its pack ships; the pinned metadata lists no painting registry."; reference: "docs/research/java-to-bedrock-translation.md section 5"; registry: "painting_variant"; }]

Defined in: lossList.ts:1017

The three registries whose entries this package cannot name in Bedrock yet.

All three are pinned-source problems rather than design problems: Bedrock holds each of these as a number or a short code decided in client code, and neither GeyserMC/mappings nor the bedrock-samples metadata publishes the correspondence, so there is nothing to generate a table from. Mapping them means capturing the Bedrock side first, which is Phase 2 and Phase 3 work.


bedrockBannerType ​

const bedrockBannerType: object

Defined in: blockEntityContent.ts:110

Bedrock's Type for a banner that is the ominous one, and for a banner that is not.

Type Declaration ​

normal ​

readonly normal: 0 = 0

ominous ​

readonly ominous: 1 = 1

Functions ​

bedrockBiomeToJava() ​

bedrockBiomeToJava(biome): BedrockBiomeResult

Defined in: registryMapping.ts:96

The inverse of the biome half of javaIdentifierToBedrock: resolves what a chunk stores back to the Bedrock biome, and to the Java 26.3 biome that produced it.

Total over the pinned Bedrock biomes, which is every biome the generated world can hold: each returns mapped or a reviewed loss, never undefined. Where several Java biomes share one Bedrock biome - the River takes the_void as well, and the End takes all five of Java's End biomes - the result names the Java biome the Bedrock one is the counterpart of, which is the one import('./lossList').REGISTRY_LOSSES does not list.

There is no passthrough variant, because a custom biome has no vanilla id to be stored as; an identifier the pinned data does not have is unknown whichever namespace it is in.

Parameters ​

biome ​

string | number

The numeric id a chunk stores, or the Bedrock identifier.

Returns ​

BedrockBiomeResult

The Bedrock biome and its Java source, a reviewed loss, or unknown.

Example ​

typescript
bedrockBiomeToJava(37); // { kind: 'mapped', bedrock: { id: 37, identifier: 'minecraft:mesa' }, java: 'minecraft:badlands' }
bedrockBiomeToJava('minecraft:taiga_hills'); // { kind: 'loss', bedrock: { id: 19, ... }, loss: { reason: ... } }

bedrockBlockEntityDyeIndexOf() ​

bedrockBlockEntityDyeIndexOf(javaBlock, bedrockBlock): number | undefined

Defined in: blockEntityContent.ts:216

The index a Bedrock block entity holds for a Java block's color.

Parameters ​

javaBlock ​

string

The namespaced Java block, for example minecraft:blue_bed.

bedrockBlock ​

string

The Bedrock identifier it maps to, for example minecraft:bed.

Returns ​

number | undefined

The bed's color or the banner's Base, or undefined for a block whose color, if it has one, is in its Bedrock identifier.

Example ​

typescript
bedrockBlockEntityDyeIndexOf('minecraft:blue_bed', 'minecraft:bed'); // 11

bedrockBlockPropertiesOf() ​

bedrockBlockPropertiesOf(name, states?): BedrockBlockProperties | undefined

Defined in: blockProperties.ts:111

The Java-sourced properties of a Bedrock block state, or undefined for a block with no Java source (see BEDROCK_ONLY_BLOCKS).

Without states, the answer is the block's base row: the value the majority of its states share, which for every property but the handful of per-state overrides is the value of all of them. With states, any override matching the given values is folded in - a lit candle's light, an extended piston's missing base.

Parameters ​

name ​

string

The namespaced Bedrock block identifier, such as minecraft:stone.

states? ​

Readonly<Record<string, StateValue>>

The state's values, when the caller has them.

Returns ​

BedrockBlockProperties | undefined

The property row, or undefined with no Java source.

Example ​

typescript
bedrockBlockPropertiesOf('minecraft:blue_ice')?.friction; // 0.989
bedrockBlockPropertiesOf('minecraft:element_1'); // undefined

bedrockBlockStateToJava() ​

bedrockBlockStateToJava(bedrockId, states?): JavaMappingResult

Defined in: blockMapping.ts:276

Maps one Bedrock block state back to the Java 26.3 state it came from, the inverse of javaBlockStateToBedrock.

The states matter, because Bedrock splits blocks Java keeps whole and keeps blocks Java splits. A minecraft:black_concrete_double_slab is Java's black_concrete_slab at type=double, and a minecraft:torch facing a wall is Java's wall_torch rather than its torch. Nothing but the state can tell those apart.

Where several Java states collapse onto one Bedrock state, the answer is the first in alphabetical Java block order, at the value Java's default state gives each property Bedrock dropped. A waterlogged slab comes back dry, because Bedrock holds the water in a layer of its own and nothing in the state can say otherwise. That is the information import('./lossList').DROPPED_BLOCK_PROPERTIES records as lost.

Parameters ​

bedrockId ​

string

The namespaced Bedrock block identifier.

states? ​

Readonly<Record<string, BlockStateValue>>

The state values as the palette holds them. A name the block does not carry is ignored, and a set of values that names no state of the block falls back to the block's first palette state. Omitting them altogether answers for that first state.

Returns ​

JavaMappingResult

The Java state, or unknown for an identifier no Java block reaches.

Example ​

typescript
bedrockBlockStateToJava('minecraft:black_concrete_double_slab');
// { kind: 'mapped', java: { name: 'minecraft:black_concrete_slab', properties: { type: 'double', waterlogged: 'false' } } }

bedrockBlockStates() ​

bedrockBlockStates(name, states): Record<string, BlockStateValue>

Defined in: blockStates.ts:72

Rewrites a block's states into the Bedrock palette's own spelling.

Every word the block has a vocabulary for becomes the value Bedrock stores, and every state this Bedrock block does not carry is dropped - Java's piston extended has no Bedrock state, because an extended Bedrock piston is a piston with an arm block in front of it. A state the block does carry and has no vocabulary for travels untouched, which is what a number, a boolean, and the reviewed import('./lossList').BLOCK_STATE_LOSSES all want.

Parameters ​

name ​

string

The namespaced Bedrock block identifier, such as minecraft:piston.

states ​

Readonly<Record<string, BlockStateValue>>

The states, which may be spelled Java's way.

Returns ​

Record<string, BlockStateValue>

The states the palette holds. A block the pinned data does not know - a custom block, or one of the Bedrock-only palette entries no Java block maps onto - comes back unchanged, because there is nothing to translate it against.

Example ​

typescript
bedrockBlockStates('minecraft:piston', { facing_direction: 'north', extended_bit: true });
// { facing_direction: 3 }

bedrockBlockToJava() ​

bedrockBlockToJava(bedrockId): readonly string[]

Defined in: blockMapping.ts:306

Every Java 26.3 block that some state of a Bedrock block maps from, in alphabetical order.

The list has more than one member wherever Java splits a block Bedrock keeps whole: Bedrock's one minecraft:torch answers minecraft:torch and minecraft:wall_torch, and its one minecraft:air answers all three of Java's air blocks. Use it when a per-state answer is not enough, such as finding the one Java block of the set that a datapack registered something for.

Parameters ​

bedrockId ​

string

The namespaced Bedrock block identifier.

Returns ​

readonly string[]

The Java block ids, empty for a Bedrock-only block.

Example ​

typescript
bedrockBlockToJava('minecraft:torch'); // ['minecraft:torch', 'minecraft:wall_torch']

bedrockDimensionOverlay() ​

bedrockDimensionOverlay(javaDimensionTypeId): BedrockDimensionOverlay | undefined

Defined in: dimensionMapping.ts:55

The Bedrock side of a Java dimension_type id, or undefined for a type the client has no built-in dimension for.

Parameters ​

javaDimensionTypeId ​

string

A Java 26.3 dimension_type id such as minecraft:the_nether.

Returns ​

BedrockDimensionOverlay | undefined

Example ​

typescript
bedrockDimensionOverlay('minecraft:the_nether');
// { dimensionId: 1, bedrockName: 'minecraft:nether', minY: 0, height: 128, generatorType: 3 }
bedrockDimensionOverlay('mypack:sky'); // undefined

bedrockDyeIndexOf() ​

bedrockDyeIndexOf(javaColor): number | undefined

Defined in: blockEntityContent.ts:161

The index Bedrock files a banner's color under, for Java's word.

Bedrock counts the sixteen the other way round, so Java's white is 15 and Java's black is 0. The inversion is not asserted here, it is read out of the generated item table: Bedrock files all sixteen banners under one minecraft:banner and tells them apart by the item's data value, which is the same number the block entity's Base holds. Deriving it keeps one pinned source for the sixteen rather than a second copy that can drift from the first.

Parameters ​

javaColor ​

string

The Java dye color word, for example light_gray.

Returns ​

number | undefined

The Bedrock index, or undefined for a word that is not one of Java's sixteen dyes.


bedrockSignTextColorOf() ​

bedrockSignTextColorOf(javaColor): number | undefined

Defined in: blockEntityContent.ts:306

The SignTextColor a Java dye color writes.

Parameters ​

javaColor ​

string

The Java dye color word a sign's face carries under color.

Returns ​

number | undefined

The signed 32-bit ARGB, or undefined for a word that is not one of Java's sixteen dyes.


createPackIdentifierResolver() ​

createPackIdentifierResolver(): PackIdentifierResolver

Defined in: packIdentifierResolver.ts:87

Creates the resolver reportIdentifiers in @jsprismarine/packs accepts, answered from this package's generated tables.

Three answers, in the order they are tried. Items, blocks, entity types, biomes, enchantments, mob effects and potions go through their mapping lookup: mapped and passthrough report as known, reviewed losses as loss. A registry with no Bedrock table goes to the generated Java 26.3 census instead, which says only that the identifier is a real entry of that registry; that reports as known when the server evaluates the registry in Java's own shape, and as loss when the value does reach a Bedrock client but this package cannot name it yet. Everything else is unknown, which is what makes a strict loader refuse to start.

Tag references are not this resolver's to answer: a #tag resolves against the tags the pack stack loaded, which only the report can see, so reportIdentifiers handles those and anything reaching here with a # is unknown.

Returns ​

PackIdentifierResolver

A resolver over the pinned tables; it holds no state, so one instance serves every load.

Example ​

typescript
const resolver = createPackIdentifierResolver();
resolver.resolve('item', 'minecraft:stone'); // 'known'
resolver.resolve('game_event', 'minecraft:step'); // 'known', server-side
resolver.resolve('painting_variant', 'minecraft:kebab'); // 'loss'
resolver.resolve('item', 'minecraft:not_an_item'); // 'unknown'

isOminousBannerPattern() ​

isOminousBannerPattern(layers): boolean

Defined in: blockEntityContent.ts:257

Whether a banner's layers are the ominous banner's eight.

Parameters ​

layers ​

readonly BannerLayer[]

The layers in the order the banner stacks them, which is the order they are saved in; a different order is a different banner.

Returns ​

boolean


javaBannerPatternToBedrock() ​

javaBannerPatternToBedrock(javaPattern): string | undefined

Defined in: blockEntityContent.ts:245

Bedrock's short code for a Java banner pattern.

Parameters ​

javaPattern ​

string

The Java pattern identifier, for example minecraft:triangle_top.

Returns ​

string | undefined

The code, or undefined for a pattern Java 26.3 does not publish. A datapack's own pattern lands here, and it has no Bedrock code at all: Bedrock draws patterns from its own client assets and has nowhere to put one that was shipped with a world.


javaBannerPatternsWithBedrockCodes() ​

javaBannerPatternsWithBedrockCodes(): readonly string[]

Defined in: blockEntityContent.ts:249

Every Java banner pattern this package has a Bedrock code for, for the totality check.

Returns ​

readonly string[]


javaBlockFluidKindOf() ​

javaBlockFluidKindOf(state): JavaBlockFluidKind

Defined in: blockFluid.ts:22

Reads the Java fluid state carried by one block state.

Parameters ​

state ​

JavaBlockState

The Java block identifier and its complete property set.

Returns ​

JavaBlockFluidKind

water, lava, or empty, matching Java 26.3's block fluid state.


javaBlockOfBedrockDyeIndex() ​

javaBlockOfBedrockDyeIndex(bedrockBlock, index): string | undefined

Defined in: blockEntityContent.ts:230

The Java block a Bedrock block and its block entity's color index stand for.

The inverse of bedrockBlockEntityDyeIndexOf: Bedrock's bed with a color of 11 is Java's blue_bed, and its standing_banner with a Base of 4 is Java's blue_banner.

Parameters ​

bedrockBlock ​

string

The namespaced Bedrock block identifier.

index ​

number

The color index its block entity holds.

Returns ​

string | undefined

The Java block, or undefined when the identifier does not keep its color in the block entity or no Java block has that index.


javaBlockStateToBedrock() ​

javaBlockStateToBedrock(javaId, properties?): BlockMappingResult

Defined in: blockMapping.ts:66

Maps one Java 26.3 block state to its Bedrock 1.26.51 palette state. Total over all 35723 Java states: every valid state returns mapped or a reviewed loss, never undefined.

Omitted properties take the block's default state values, as Java does. Non-minecraft: identifiers pass through untouched. Anything that is not a Java block state at the pinned version returns unknown.

Parameters ​

javaId ​

string

properties? ​

Readonly<Record<string, string>>

Returns ​

BlockMappingResult


javaBlockStates() ​

javaBlockStates(name, states): Record<string, BlockStateValue>

Defined in: blockStates.ts:103

Rewrites a block's states into Java's words, the inverse of bedrockBlockStates.

Nothing is dropped and nothing is added: a state with no vocabulary, which is every number and every boolean, travels untouched.

Parameters ​

name ​

string

The namespaced Bedrock block identifier.

states ​

Readonly<Record<string, BlockStateValue>>

The states as the palette holds them.

Returns ​

Record<string, BlockStateValue>

The same states, with Java's word wherever one exists.

Example ​

typescript
javaBlockStates('minecraft:piston', { facing_direction: 3 }); // { facing_direction: 'north' }

javaDimensionTypeOf() ​

javaDimensionTypeOf(bedrockName): string | undefined

Defined in: dimensionMapping.ts:66

The inverse of bedrockDimensionOverlay on the name: the Java dimension_type id behind a Bedrock dimension name, or undefined when no row spells its name that way. Only Bedrock spellings match, so minecraft:nether answers minecraft:the_nether and minecraft:the_nether itself answers undefined; a caller that accepts either spelling falls back to its input.

Parameters ​

bedrockName ​

string

Returns ​

string | undefined


javaDyeColorIndexOf() ​

javaDyeColorIndexOf(javaColor): number | undefined

Defined in: blockEntityContent.ts:144

The palette index Java assigns to one dye color.

Parameters ​

javaColor ​

string

The Java dye color word, for example light_gray.

Returns ​

number | undefined

The Java dye ordinal, or undefined for a word outside the palette.


javaEntityTypeToBedrock() ​

javaEntityTypeToBedrock(javaId): EntityMappingResult

Defined in: entityMapping.ts:28

Maps one Java 26.3 entity type to its Bedrock 1.26.51 entity identifier. Total over all 161 Java entity types: every type returns mapped or a reviewed loss, never undefined. Non-minecraft: identifiers pass through untouched.

Parameters ​

javaId ​

string

Returns ​

EntityMappingResult


javaIdentifierToBedrock() ​

javaIdentifierToBedrock(registry, javaId): IdentifierMappingResult

Defined in: registryMapping.ts:35

Maps one Java 26.3 identifier of the named registry to its Bedrock 1.26.51 identifier. Total over the registry's vanilla entries: every entry returns mapped or a reviewed loss, never undefined. Non-minecraft: identifiers pass through untouched.

Parameters ​

registry ​

"biome" | "enchantment" | "mob_effect" | "potion"

javaId ​

string

Returns ​

IdentifierMappingResult


javaItemToBedrock() ​

javaItemToBedrock(javaId): ItemMappingResult

Defined in: itemMapping.ts:31

Maps one Java 26.3 item identifier to its Bedrock 1.26.51 item. Total over all 1658 Java items: every item returns mapped or a reviewed loss, never undefined. Non-minecraft: identifiers pass through untouched.

Parameters ​

javaId ​

string

Returns ​

ItemMappingResult