diff --git a/examples/typescript/build.gradle.kts b/examples/typescript/build.gradle.kts index 388669a..358ca79 100644 --- a/examples/typescript/build.gradle.kts +++ b/examples/typescript/build.gradle.kts @@ -17,9 +17,10 @@ minecraft { } repositories { - maven { - url = uri("https://maven.thebrokenrail.com/") - } + //maven { + // url = uri("https://maven.thebrokenrail.com/") + //} + mavenLocal() } dependencies { diff --git a/examples/typescript/gradle.properties b/examples/typescript/gradle.properties index 8688c00..ef30ecd 100644 --- a/examples/typescript/gradle.properties +++ b/examples/typescript/gradle.properties @@ -3,9 +3,9 @@ org.gradle.jvmargs = -Xmx1G # Fabric Properties # check these on https://fabricmc.net/use - minecraft_version = 1.16-pre3 - yarn_build = 1 - fabric_loader_version = 0.8.7+build.201 + minecraft_version = 1.16.2 + yarn_build = 21 + fabric_loader_version = 0.9.2+build.206 # Mod Properties mod_version = 1.0.0 diff --git a/examples/typescript/src/main/ts/src/modid/index.ts b/examples/typescript/src/main/ts/src/modid/index.ts index 3002b84..87e20bf 100644 --- a/examples/typescript/src/main/ts/src/modid/index.ts +++ b/examples/typescript/src/main/ts/src/modid/index.ts @@ -1,33 +1,12 @@ -import { BlockSettings, Identifier, Registry, BlockState, ActionResult, World, Pos, Hand, PlayerEntity, BlockItem, ItemSettings, CustomItem, Direction, LivingEntity, CustomBlockWithEntity, CustomBlockEntity, CompoundTag, NumberType } from 'minecraft'; +import { BlockSettings, Identifier, Registry, BlockState, ActionResult, World, Pos, Hand, PlayerEntity, BlockItem, ItemSettings, Direction, BuiltinRegistry } from 'minecraft'; console.log('hello'); -class MyBlockEntity extends CustomBlockEntity { - ticks = 0; - - toTag(tag: CompoundTag): CompoundTag { - tag.set('MyTicks', this.ticks, NumberType.INT); - return tag; - } - - fromTag(tag: CompoundTag): void { - const obj = tag.get('MyTicks'); - if (typeof obj === 'number') { - this.ticks = obj; - } else { - this.ticks = 0; - } - } - - tick(): void { - this.ticks++; - this.markDirty(); - } -} +const ironBlock = BuiltinRegistry.BLOCK.get(new Identifier('minecraft:iron_block')); class MyBlock extends CustomBlockWithEntity { constructor() { - super(new BlockSettings('STONE', 'IRON')); + super(new BlockSettings(ironBlock.getMaterial(), ironBlock.getMaterialColor())); } onUse(world: World, blockState: BlockState, blockPos: Pos, side: Direction, player: PlayerEntity, hand: Hand): ActionResult { @@ -46,28 +25,3 @@ class MyBlock extends CustomBlockWithEntity { Registry.register(Registry.BLOCK, new Identifier('modid', 'my_block'), new MyBlock()); Registry.register(Registry.ITEM, new Identifier('modid', 'my_block'), new BlockItem(new Identifier('modid', 'my_block'), new ItemSettings())); - -class MyItem extends CustomItem { - constructor() { - super(new ItemSettings().setItemGroup('building_blocks').setMaxCount(128)); - } - - onUse(world: World, player: PlayerEntity, hand: Hand): ActionResult { - console.log('Item Use: Normal'); - return ActionResult.SUCCESS; - } - - onUseOnBlock(world: World, blockPos: Pos, side: Direction, player: PlayerEntity, hand: Hand): ActionResult { - console.log('Item Use: Block ' + blockPos.toString()); - world.spawnEntity(new Identifier('minecraft:cow'), blockPos.offset(side).add(new Pos(0.5, 0, 0.5))).toString(); - return ActionResult.SUCCESS; - } - - onUseOnEntity(player: PlayerEntity, target: LivingEntity, hand: Hand): ActionResult { - console.log('Item Use: Entity ' + target.toTag().toString()); - console.log('Health: ' + target.toTag().get('Health').toString()); - return ActionResult.SUCCESS; - } -} - -Registry.register(Registry.ITEM, new Identifier('modid', 'my_item'), new MyItem()); diff --git a/scriptcraft/gradle.properties b/scriptcraft/gradle.properties index 5e92bab..e933af8 100644 --- a/scriptcraft/gradle.properties +++ b/scriptcraft/gradle.properties @@ -3,9 +3,9 @@ org.gradle.jvmargs = -Xmx1G # Fabric Properties # check these on https://fabricmc.net/use - minecraft_version = 1.16-pre3 - yarn_build = 1 - fabric_loader_version = 0.8.7+build.201 + minecraft_version = 1.16.2 + yarn_build = 21 + fabric_loader_version = 0.9.2+build.206 # Mod Properties maven_group = com.thebrokenrail @@ -13,4 +13,4 @@ org.gradle.jvmargs = -Xmx1G # Dependencies # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api - fabric_api_version = 0.11.8+build.357-1.16 + fabric_api_version = 0.19.0+build.398-1.16 diff --git a/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/BlockBridges.java b/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/BlockBridges.java new file mode 100644 index 0000000..aee3a61 --- /dev/null +++ b/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/BlockBridges.java @@ -0,0 +1,13 @@ +package com.thebrokenrail.scriptcraft.api.bridge; + +import com.thebrokenrail.scriptcraft.core.ScriptCraftCore; +import net.minecraft.block.Block; +import net.minecraft.block.Material; + +class BlockBridges { + static void register() { + ScriptCraftCore.addBridge("Block.getMaterial", args -> ((Block) args[0]).getDefaultState().getMaterial()); + ScriptCraftCore.addBridge("Block.getMaterialColor", args -> ((Block) args[0]).getDefaultState().getTopMaterialColor(null, null)); + ScriptCraftCore.addBridge("Block.isValid", args -> args[0] instanceof Block); + } +} diff --git a/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/BlockSettingsBridges.java b/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/BlockSettingsBridges.java index be22882..ff7d93f 100644 --- a/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/BlockSettingsBridges.java +++ b/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/BlockSettingsBridges.java @@ -10,26 +10,14 @@ import java.util.Locale; class BlockSettingsBridges { static void register() { ScriptCraftCore.addBridge("BlockSettings.create", args -> { - try { - String materialID = ((String) args[0]).toUpperCase(Locale.ROOT); - Material material = (Material) Material.class.getField(materialID).get(null); + Material material = (Material) args[0]; + MaterialColor materialColor = (MaterialColor) args[1]; - MaterialColor materialColor; - if (args[1] != null) { - String materialColorID = ((String) args[1]).toUpperCase(Locale.ROOT); - materialColor = (MaterialColor) MaterialColor.class.getField(materialColorID).get(null); - } else { - materialColor = material.getColor(); - } + AbstractBlock.Settings settings = AbstractBlock.Settings.of(material, materialColor); - AbstractBlock.Settings settings = AbstractBlock.Settings.of(material, materialColor); + settings.strength(((Double) args[2]).floatValue(), ((Double) args[3]).floatValue()); - settings.strength(((Double) args[2]).floatValue(), ((Double) args[3]).floatValue()); - - return settings; - } catch (NoSuchFieldException | IllegalAccessException e) { - throw new RuntimeException(e); - } + return settings; }); } } diff --git a/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/Bridges.java b/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/Bridges.java index 174ce8a..2410126 100644 --- a/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/Bridges.java +++ b/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/Bridges.java @@ -3,7 +3,7 @@ package com.thebrokenrail.scriptcraft.api.bridge; public class Bridges { public static void init() { BlockSettingsBridges.register(); - RegistryBridge.register(); + RegistryBridges.register(); ItemStackBridges.register(); LivingEntityBridges.register(); BlockStateBridges.register(); @@ -16,5 +16,9 @@ public class Bridges { PlayerEntityBridges.register(); BlockEntityBridges.register(); EventBridges.register(); + MaterialBridges.register(); + MaterialColorBridges.register(); + BlockBridges.register(); + BuiltinRegistryBridges.register(); } } diff --git a/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/BuiltinRegistryBridges.java b/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/BuiltinRegistryBridges.java new file mode 100644 index 0000000..6f7375f --- /dev/null +++ b/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/BuiltinRegistryBridges.java @@ -0,0 +1,11 @@ +package com.thebrokenrail.scriptcraft.api.bridge; + +import com.thebrokenrail.scriptcraft.core.ScriptCraftCore; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +class BuiltinRegistryBridges { + static void register() { + ScriptCraftCore.addBridge("BuiltinRegistry.getBlock", args -> Registry.BLOCK.get(new Identifier((String) args[0]))); + } +} diff --git a/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/DamageSourceBridges.java b/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/DamageSourceBridges.java index 3890179..114f098 100644 --- a/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/DamageSourceBridges.java +++ b/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/DamageSourceBridges.java @@ -5,21 +5,15 @@ import net.minecraft.entity.LivingEntity; import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.player.PlayerEntity; -import java.util.Locale; - class DamageSourceBridges { static void register() { - ScriptCraftCore.addBridge("DamageSource.create", args -> { - try { - String id = ((String) args[0]).toUpperCase(Locale.ROOT); - return DamageSource.class.getField(id).get(null); - } catch (NoSuchFieldException | IllegalAccessException e) { - throw new RuntimeException(e); - } - }); + ScriptCraftCore.addBridge("DamageSource.getGeneric", args -> DamageSource.GENERIC); + ScriptCraftCore.addBridge("DamageSource.getOutOfWorld", args -> DamageSource.OUT_OF_WORLD); - ScriptCraftCore.addBridge("DamageSource.createFromPlayer", args -> DamageSource.player((PlayerEntity) args[1])); - ScriptCraftCore.addBridge("DamageSource.createFromMob", args -> DamageSource.mob((LivingEntity) args[1])); + ScriptCraftCore.addBridge("DamageSource.createFromExplosion", args -> DamageSource.explosion((LivingEntity) args[0])); + + ScriptCraftCore.addBridge("DamageSource.createFromPlayer", args -> DamageSource.player((PlayerEntity) args[0])); + ScriptCraftCore.addBridge("DamageSource.createFromMob", args -> DamageSource.mob((LivingEntity) args[0])); ScriptCraftCore.addBridge("DamageSource.isValid", args -> args[0] instanceof DamageSource); } diff --git a/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/MaterialBridges.java b/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/MaterialBridges.java new file mode 100644 index 0000000..cf3216e --- /dev/null +++ b/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/MaterialBridges.java @@ -0,0 +1,11 @@ +package com.thebrokenrail.scriptcraft.api.bridge; + +import com.thebrokenrail.scriptcraft.core.ScriptCraftCore; +import net.minecraft.block.Material; + +class MaterialBridges { + static void register() { + ScriptCraftCore.addBridge("Material.getColor", args -> ((Material) args[0]).getColor()); + ScriptCraftCore.addBridge("Material.isValid", args -> args[0] instanceof Material); + } +} diff --git a/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/MaterialColorBridges.java b/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/MaterialColorBridges.java new file mode 100644 index 0000000..4a8383d --- /dev/null +++ b/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/MaterialColorBridges.java @@ -0,0 +1,11 @@ +package com.thebrokenrail.scriptcraft.api.bridge; + +import com.thebrokenrail.scriptcraft.core.ScriptCraftCore; +import net.minecraft.block.Material; +import net.minecraft.block.MaterialColor; + +class MaterialColorBridges { + static void register() { + ScriptCraftCore.addBridge("MaterialColor.isValid", args -> args[0] instanceof MaterialColor); + } +} diff --git a/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/RegistryBridge.java b/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/RegistryBridges.java similarity index 98% rename from scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/RegistryBridge.java rename to scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/RegistryBridges.java index f7f2fe9..2494cde 100644 --- a/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/RegistryBridge.java +++ b/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/api/bridge/RegistryBridges.java @@ -12,7 +12,7 @@ import net.minecraft.item.Item; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -class RegistryBridge { +class RegistryBridges { static void register() { ScriptCraftCore.addBridge("Registry.registerBlock", args -> { Registry.register(Registry.BLOCK, new Identifier((String) args[0]), new CustomBlock((Block.Settings) args[1], new Identifier((String) args[0]))); diff --git a/scriptcraft/src/main/ts/src/minecraft/block.ts b/scriptcraft/src/main/ts/src/minecraft/block.ts index cf855a4..f4a8058 100644 --- a/scriptcraft/src/main/ts/src/minecraft/block.ts +++ b/scriptcraft/src/main/ts/src/minecraft/block.ts @@ -1,16 +1,57 @@ import { World } from './world'; import { PlayerEntity } from './entity'; -import { Identifier, Hand, Pos, ActionResult, Direction, SimpleRegistry, JavaObjectWrapper } from './core'; +import { Identifier, Hand, Pos, ActionResult, Direction, SimpleRegistry, JavaObjectWrapper, SimpleBuiltinRegistry } from './core'; import { CompoundTag } from './tag'; import { useBridge, addBridge } from 'scriptcraft-core'; import { Inventory } from './inventory'; +/** + * Block Material + */ +class Material extends JavaObjectWrapper { + /** + * Create Material Wrapper From Java Object + * @param javaObject Java Object + */ + constructor(javaObject: JavaObject | JavaObjectWrapper) { + super(javaObject); + this.assertValidJavaObject('Material'); + } + + /** + * Get Associated Material Color + * @returns Material Color + */ + getColor(): MaterialColor { + const obj = useBridge('Material.getColor', this.getJavaObject()) as JavaObject; + if (obj) { + return new MaterialColor(obj); + } else { + return null; + } + } +} + +/** + * Block Material Color + */ +class MaterialColor extends JavaObjectWrapper { + /** + * Create Material Color Wrapper From Java Object + * @param javaObject Java Object + */ + constructor(javaObject: JavaObject | JavaObjectWrapper) { + super(javaObject); + this.assertValidJavaObject('MaterialColor'); + } +} + /** * Settings for {@link CustomBlock} */ export class BlockSettings { - #material: string; - #materialColor: string; + #material: Material; + #materialColor: MaterialColor; #resistance: number; #hardness: number; @@ -20,11 +61,11 @@ export class BlockSettings { * @param material Material * @param materialColor Material Color */ - constructor(material: string); - constructor(material: string, materialColor: string); - constructor(material: string, materialColor?: string) { + constructor(material: Material); + constructor(material: Material, materialColor: MaterialColor); + constructor(material: Material, materialColor?: MaterialColor) { this.#material = material; - this.#materialColor = materialColor; + this.#materialColor = materialColor !== null ? materialColor : material.getColor(); this.#resistance = 0; this.#hardness = 0; @@ -63,7 +104,7 @@ export class BlockSettings { * Get Material * @returns Material */ - getMaterial(): string { + getMaterial(): Material { return this.#material; } @@ -71,7 +112,7 @@ export class BlockSettings { * Set Material * @param material Material */ - setMaterial(material: string): BlockSettings { + setMaterial(material: Material): BlockSettings { this.#material = material; return this; } @@ -80,7 +121,7 @@ export class BlockSettings { * Set Material Color * @param materialColor Material Color */ - setMaterialColor(materialColor: string): BlockSettings { + setMaterialColor(materialColor: MaterialColor): BlockSettings { this.#materialColor = materialColor; return this; } @@ -89,7 +130,7 @@ export class BlockSettings { * Get Material Color * @returns Material Color */ - getMaterialColor(): string { + getMaterialColor(): MaterialColor { return this.#materialColor; } @@ -114,7 +155,7 @@ export class BlockSettings { * @returns Java Object */ createJavaObject(): JavaObject { - return useBridge('BlockSettings.create', this.getMaterial(), this.getMaterialColor(), this.getHardness(), this.getResistance()) as JavaObject; + return useBridge('BlockSettings.create', this.getMaterial().getJavaObject(), this.getMaterialColor().getJavaObject(), this.getHardness(), this.getResistance()) as JavaObject; } } @@ -337,6 +378,44 @@ export class CustomBlockWithEntity extends CustomBlock { } } +/** + * Built-In Block + */ +export class Block extends JavaObjectWrapper { + /** + * Create Built-In Block Wrapper From Java Object + * @param javaObject Java Object + */ + constructor(javaObject: JavaObject | JavaObjectWrapper) { + super(javaObject); + this.assertValidJavaObject('Block'); + } + + /** + * Get Block Material + */ + getMaterial(): Material { + const obj = useBridge('Block.getMaterial', this.getJavaObject()) as JavaObject; + if (obj) { + return new Material(obj); + } else { + return null; + } + } + + /** + * Get Block MaterialColor + */ + getMaterialColor(): MaterialColor { + const obj = useBridge('Block.getMaterialColor', this.getJavaObject()) as JavaObject; + if (obj) { + return new MaterialColor(obj); + } else { + return null; + } + } +} + /** * @internal */ @@ -419,3 +498,22 @@ addBridge('CustomBlockEntity.free', (i: number) => { addBridge('CustomBlock.onUse', (id: string, world: JavaObject, state: JavaObject, x: number, y: number, z: number, side: keyof typeof Direction, player: JavaObject, hand: keyof typeof Hand): string => { return BlockRegistry.INSTANCE.get(new Identifier(id)).onUse(new World(world), new BlockState(state), new Pos(x, y, z), Direction[side], new PlayerEntity(player), Hand[hand]); }); + +/** + * @internal + */ +export class BlockBuiltinRegistry implements SimpleBuiltinRegistry { + static readonly INSTANCE = new BlockBuiltinRegistry(); + + private constructor() { + } + + get(id: Identifier): Block { + const obj = useBridge('BuiltinRegistry.getBlock', id.toString()) as JavaObject; + if (obj) { + return new Block(obj); + } else { + return null; + } + } +} diff --git a/scriptcraft/src/main/ts/src/minecraft/builtin-registry.ts b/scriptcraft/src/main/ts/src/minecraft/builtin-registry.ts new file mode 100644 index 0000000..92b67e3 --- /dev/null +++ b/scriptcraft/src/main/ts/src/minecraft/builtin-registry.ts @@ -0,0 +1,12 @@ +import { Block, BlockBuiltinRegistry } from './block'; +import { SimpleBuiltinRegistry } from './core'; + +/** + * Builtin Registry + */ +export class BuiltinRegistry { + /** + * Block Builtin Registry + */ + static BLOCK: SimpleBuiltinRegistry = BlockBuiltinRegistry.INSTANCE; +} diff --git a/scriptcraft/src/main/ts/src/minecraft/core.ts b/scriptcraft/src/main/ts/src/minecraft/core.ts index 3e4811d..d2f8a32 100644 --- a/scriptcraft/src/main/ts/src/minecraft/core.ts +++ b/scriptcraft/src/main/ts/src/minecraft/core.ts @@ -335,3 +335,15 @@ export interface SimpleRegistry { */ getID(obj: T): Identifier; } + +/** + * Simple Builtin Registry + */ +export interface SimpleBuiltinRegistry { + /** + * Get Object From ID + * @param id ID + * @returns Object + */ + get(id: Identifier): T; +} diff --git a/scriptcraft/src/main/ts/src/minecraft/entity.ts b/scriptcraft/src/main/ts/src/minecraft/entity.ts index 01f4556..51de76c 100644 --- a/scriptcraft/src/main/ts/src/minecraft/entity.ts +++ b/scriptcraft/src/main/ts/src/minecraft/entity.ts @@ -5,7 +5,16 @@ import { CompoundTag } from './tag'; import { useBridge } from 'scriptcraft-core'; import { Inventory } from './inventory'; -function buildDamageSource(bridge: string, value: BridgeValueType): DamageSource { +function buildDamageSource(bridge: string): DamageSource { + const obj = useBridge(bridge) as JavaObject; + if (obj !== null) { + return new DamageSource(obj); + } else { + return null; + } +} + +function buildDamageSourceWithValue(bridge: string, value: BridgeValueType): DamageSource { const obj = useBridge(bridge, value) as JavaObject; if (obj !== null) { return new DamageSource(obj); @@ -18,6 +27,15 @@ function buildDamageSource(bridge: string, value: BridgeValueType): DamageSource * Damage Source */ export class DamageSource extends JavaObjectWrapper { + /** + * Generic Damage Source + */ + static GENERIC = buildDamageSource('DamageSource.getGeneric'); + /** + * Void Damage Source + */ + static OUT_OF_WORLD = buildDamageSource('DamageSource.getOutOfWorld'); + /** * Create Damage Source Wrapper From Java Object * @param javaObject Java Object @@ -28,12 +46,12 @@ export class DamageSource extends JavaObjectWrapper { } /** - * Create Damage Source from type - * @param value Type + * Create Damage Source from an explosion + * @param value Explosion Source * @returns Damage Source */ - static create(value: string): DamageSource { - return buildDamageSource('DamageSource.create', value); + static createFromExplosion(value: LivingEntity): DamageSource { + return buildDamageSourceWithValue('DamageSource.explosion', value.getJavaObject()); } /** @@ -42,7 +60,7 @@ export class DamageSource extends JavaObjectWrapper { * @returns Damage Source */ static createFromPlayer(value: PlayerEntity): DamageSource { - return buildDamageSource('DamageSource.createFromPlayer', value.getJavaObject()); + return buildDamageSourceWithValue('DamageSource.createFromPlayer', value.getJavaObject()); } /** @@ -51,7 +69,7 @@ export class DamageSource extends JavaObjectWrapper { * @returns Damage Source */ static createFromMob(value: LivingEntity): DamageSource { - return buildDamageSource('DamageSource.createFromMob', value.getJavaObject()); + return buildDamageSourceWithValue('DamageSource.createFromMob', value.getJavaObject()); } } diff --git a/scriptcraft/src/main/ts/src/minecraft/index.ts b/scriptcraft/src/main/ts/src/minecraft/index.ts index 96e1cf9..4ffdba3 100644 --- a/scriptcraft/src/main/ts/src/minecraft/index.ts +++ b/scriptcraft/src/main/ts/src/minecraft/index.ts @@ -17,3 +17,4 @@ export { CompoundTag, ListTag, NumberType } from './tag'; export { Registry } from './registry'; export { Inventory } from './inventory'; export { Events, Event, BlockEvent, ItemEvent, WorldEvent } from './event'; +export { BuiltinRegistry } from './builtin-registry';