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.
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.
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.
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.
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.mappedandpassthroughreport asknown, reviewed losses asloss. - 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 asknownfor the nine registries the server evaluates in Java's own shape, whichsrc/packRegistries.tslists with a reason each, and aslossfor the three inUNTRANSLATED_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 isunknown. - A tag reference is
unknown. Resolving one means knowing which tags the stack loaded, which onlyreportIdentifierscan 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:
pnpm --filter @jsprismarine/bedrock-data run fetch:sources
pnpm --filter @jsprismarine/mapping run generate:tablesThe 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.
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:
pnpm --filter @jsprismarine/mapping run generate:block-statesIt 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:
pnpm --filter @jsprismarine/mapping run generate:block-propertiesIt 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
readonlycolor:string
Defined in: blockEntityContent.ts:22
The Java dye color word, for example light_gray.
pattern
readonlypattern: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
readonlyid: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
readonlyidentifier: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
readonlybedrockId:string
Defined in: lossList.ts:912
The Bedrock biome identifier.
reason
readonlyreason:string
Defined in: lossList.ts:913
reference
readonlyreference:string
Defined in: lossList.ts:914
BedrockBlockProperties
Defined in: blockProperties.ts:12
The Java-sourced properties of one Bedrock block state.
Properties
blastResistance
readonlyblastResistance:number
Defined in: blockProperties.ts:16
Java explosion resistance; bedrock is 3600000, obsidian 1200, stone 6.
burnOdds
readonlyburnOdds:number
Defined in: blockProperties.ts:32
Fire's odds of consuming the block once lit.
friction
readonlyfriction:number
Defined in: blockProperties.ts:18
Ground friction: 0.6 for almost everything, 0.98 for ice, 0.989 for blue ice.
hardness
readonlyhardness:number
Defined in: blockProperties.ts:14
Java destroy time; -1 marks the unbreakable blocks (bedrock, barriers, portals).
igniteOdds
readonlyigniteOdds:number
Defined in: blockProperties.ts:30
Fire's odds of igniting the block, 0 for the fireproof.
lightDampening
readonlylightDampening:number
Defined in: blockProperties.ts:22
How much light the block swallows, 0 to 15.
lightEmission
readonlylightEmission:number
Defined in: blockProperties.ts:20
Emitted light, 0 to 15.
pushReaction
readonlypushReaction:string
Defined in: blockProperties.ts:28
How a piston treats the block: push_pull, immoveable, popped, block or ignore.
randomTick
readonlyrandomTick:boolean
Defined in: blockProperties.ts:26
Whether the block receives random ticks (crops grow, ice melts, fire spreads).
requiresCorrectTool
readonlyrequiresCorrectTool: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
readonlyname:string
Defined in: blockMapping.ts:9
The namespaced Bedrock block identifier.
states
readonlystates: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
readonlybedrockName:string
Defined in: dimensionMapping.ts:18
The client's spelling of the dimension, minecraft:nether for Java's minecraft:the_nether.
dimensionId
readonlydimensionId:number
Defined in: dimensionMapping.ts:16
The integer the client, the LevelDB chunk key and ChangeDimension use: 0, 1 or 2.
generatorType
readonlygeneratorType:Generator
Defined in: dimensionMapping.ts:32
The Generator enum value StartGame carries: OVERWORLD 1, NETHER 3, END 4.
height?
readonlyoptionalheight?: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?
readonlyoptionalminY?: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?
readonlyoptionaldata?:number
Defined in: itemMapping.ts:10
The legacy Bedrock damage value, present only where it selects a sub-item.
identifier
readonlyidentifier: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
readonlyfield:string
Defined in: lossList.ts:1055
The Java NBT field that is dropped, as the saved compound spells it.
javaType
readonlyjavaType:string
Defined in: lossList.ts:1053
The Java block entity type, for example minecraft:sign.
kind
readonlykind:BlockEntityContentLossKind
Defined in: lossList.ts:1056
reason
readonlyreason:string
Defined in: lossList.ts:1057
reference
readonlyreference:string
Defined in: lossList.ts:1058
BlockLoss
Defined in: lossList.ts:566
A Java block with no Bedrock concept at all.
Properties
bedrockFallback
readonlybedrockFallback:string
Defined in: lossList.ts:570
The Bedrock identifier every state falls back to.
javaId
readonlyjavaId:string
Defined in: lossList.ts:568
The Java block identifier.
reason
readonlyreason:string
Defined in: lossList.ts:571
reference
readonlyreference:string
Defined in: lossList.ts:572
BlockMerge
Defined in: lossList.ts:458
A Bedrock identifier that several Java blocks legitimately collapse onto.
Properties
bedrockId
readonlybedrockId:string
Defined in: lossList.ts:460
The shared Bedrock identifier.
reason
readonlyreason:string
Defined in: lossList.ts:461
reference
readonlyreference: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
readonlyblocks: readonlystring[]
Defined in: lossList.ts:367
Every Bedrock block that carries the state this way.
reason
readonlyreason:string
Defined in: lossList.ts:368
reference
readonlyreference:string
Defined in: lossList.ts:369
state
readonlystate: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
readonlyblocks: {count:number; } | readonlystring[]
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
readonlyproperty:string
Defined in: lossList.ts:33
The Java property name.
reason
readonlyreason:string
Defined in: lossList.ts:37
recovery
readonlyrecovery:BlockPropertyRecovery
Defined in: lossList.ts:36
reference
readonlyreference: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?
readonlyoptionalbedrockFallback?:string
Defined in: lossList.ts:702
The Bedrock entity (or block) shown instead, when one exists.
javaId
readonlyjavaId:string
Defined in: lossList.ts:699
The Java entity type identifier.
kind
readonlykind:EntityLossKind
Defined in: lossList.ts:700
reason
readonlyreason:string
Defined in: lossList.ts:703
reference
readonlyreference:string
Defined in: lossList.ts:704
EntityMerge
Defined in: lossList.ts:806
A Bedrock entity identifier several Java entity types share.
Properties
bedrockId
readonlybedrockId:string
Defined in: lossList.ts:808
The shared Bedrock identifier.
recovery
readonlyrecovery:string
Defined in: lossList.ts:810
How the merged Java identity is recovered.
reference
readonlyreference:string
Defined in: lossList.ts:811
ItemLoss
Defined in: lossList.ts:595
A Java item whose identity does not survive the mapping.
Properties
bedrockFallback
readonlybedrockFallback:string
Defined in: lossList.ts:599
The Bedrock identifier the item falls back to.
javaId
readonlyjavaId:string
Defined in: lossList.ts:597
The Java item identifier.
reason
readonlyreason:string
Defined in: lossList.ts:600
reference
readonlyreference:string
Defined in: lossList.ts:601
ItemMerge
Defined in: lossList.ts:648
A Bedrock item identifier several Java items share.
Properties
bedrockId
readonlybedrockId:string
Defined in: lossList.ts:650
The shared Bedrock identifier.
recovery
readonlyrecovery:string
Defined in: lossList.ts:652
How the merged Java identity is recovered, when it is.
reference
readonlyreference: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
readonlyname:string
Defined in: blockMapping.ts:108
The namespaced Java block identifier, such as minecraft:black_concrete_slab.
properties
readonlyproperties: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
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
readonlyblock:string
Defined in: lossList.ts:308
The Java block identifier.
properties
readonlyproperties: readonlystring[]
Defined in: lossList.ts:310
The properties whose collapse depends on the other properties' values.
reason
readonlyreason:string
Defined in: lossList.ts:311
reference
readonlyreference: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?
readonlyoptionalbedrockFallback?:string
Defined in: lossList.ts:840
The Bedrock identifier the entry falls back to, when one exists.
javaId
readonlyjavaId:string
Defined in: lossList.ts:838
The Java identifier.
reason
readonlyreason:string
Defined in: lossList.ts:841
reference
readonlyreference:string
Defined in: lossList.ts:842
registry
readonlyregistry:"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
readonlyreason:string
Defined in: packRegistries.ts:21
Why no Bedrock identifier is needed.
registry
readonlyregistry: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
readonlycarrier:string
Defined in: lossList.ts:1001
What carries the value on the Bedrock side, which is what a later table has to produce.
entries
readonlyentries:object
Defined in: lossList.ts:999
How many entries the pinned Java 26.3 data publishes for it.
count
readonlycount:number
reason
readonlyreason:string
Defined in: lossList.ts:1002
reference
readonlyreference:string
Defined in: lossList.ts:1003
registry
readonlyregistry: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
constBEDROCK_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
constBEDROCK_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
constBEDROCK_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
constBLOCK_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
constBLOCK_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
constBLOCK_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
constBLOCK_PROPERTY_CONFLICTS: readonlyReadonly<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
constBLOCK_PROPERTY_VERSIONS:object
Defined in: blockProperties.ts:76
The version pair the property table was flattened from.
Type Declaration
bedrockVersion
readonlybedrockVersion:string=table.bedrockVersion
javaVersion
readonlyjavaVersion:string=table.javaVersion
BLOCK_STATE_LOSSES
constBLOCK_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
constDROPPED_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
constENTITY_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
constENTITY_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
constITEM_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
constITEM_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
constMAPPED_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
constMAPPING_VERSIONS:object
Defined in: blockMapping.ts:26
The pinned version pair and GeyserMC/mappings commit the tables were generated from.
Type Declaration
bedrockVersion
readonlybedrockVersion:string=blocksTable.bedrockVersion
geyserMappingsCommit
readonlygeyserMappingsCommit:string=blocksTable.geyserMappingsCommit
javaVersion
readonlyjavaVersion:string=blocksTable.javaVersion
PARTIAL_BLOCK_PROPERTY_COLLAPSES
constPARTIAL_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
constREGISTRY_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
constSERVER_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
constUNTRANSLATED_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
constbedrockBannerType: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
readonlynormal:0=0
ominous
readonlyominous: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
The Bedrock biome and its Java source, a reviewed loss, or unknown.
Example
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
bedrockBlockEntityDyeIndexOf('minecraft:blue_bed', 'minecraft:bed'); // 11bedrockBlockPropertiesOf()
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
bedrockBlockPropertiesOf('minecraft:blue_ice')?.friction; // 0.989
bedrockBlockPropertiesOf('minecraft:element_1'); // undefinedbedrockBlockStateToJava()
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
The Java state, or unknown for an identifier no Java block reaches.
Example
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
bedrockBlockStates('minecraft:piston', { facing_direction: 'north', extended_bit: true });
// { facing_direction: 3 }bedrockBlockToJava()
bedrockBlockToJava(
bedrockId): readonlystring[]
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
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
bedrockDimensionOverlay('minecraft:the_nether');
// { dimensionId: 1, bedrockName: 'minecraft:nether', minY: 0, height: 128, generatorType: 3 }
bedrockDimensionOverlay('mypack:sky'); // undefinedbedrockDyeIndexOf()
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
A resolver over the pinned tables; it holds no state, so one instance serves every load.
Example
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
The Java block identifier and its complete property set.
Returns
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
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
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
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
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