Conversation
- Deleted all graves scripts, including event handling, dynamic properties, UI and utility functions - Removed the associated resources: entity definitions, textures and language files - Cleaned up the project structure by dropping the unused directories and files
- Added `yarn create-addon` (tools/create-addon.mjs), a wrapper around the bedrock-core CLI which scaffolds addons into addons/files/<category>/<addon_name>/ with the BT conventions (creator `bt`, `bt_<category_initials>_<addon_name>` namespace, author credit, private `@bedrock-tweaks/<addon_name>` workspace package, category workspace registration) - Removed the legacy templates/addon boilerplate, replaced by templates/addon.md pointing to the scaffolder
- Rebuilt the addon on the bedrock-core stack (creator `bt`, namespace `bt_gc_graves`) with a typed RPC layer and custom server UI - Graves keep inventory, armor, offhand and XP: interact to open like a chest, sneak + interact to restore items to their original slots, hit twice to scatter them - Graves are fireproof, explosion proof, float on lava and are rescued from the void - Only the owner can open a grave unless grave robbing is enabled or the opener holds a grave key - Added `/bt_gc_graves:graves`, `:config`, `:guide`, `:gravekey` and `:gravesadmin` commands with an in-game guide and admin panel - Registered the pack in addons/packs.json without a version: addon versions and the minimum engine version now come from the pack manifest
- Documented the `yarn create-addon` scaffolder in place of the removed addon template and its key replacement list - Fixed the watch command (`yarn run watch`) and clarified that versions are bumped in the addon package.json and BP/RP manifests, not in addons/packs.json - Updated the packs.json interfaces: addons no longer carry a pack version or a root version, both are added by the server from the pack manifests - Dropped the JSON UI restriction for addons and refreshed the technical details to prefer custom commands and UI
- Rebuilt the grave model as a stone brick wall with east/west connections and a raised centre post, using the vanilla stone brick texture - Reworked the grave list, admin panel and detail screens onto the bedrock-core screen shell: card parent, fixed header and a scroll region below it, with the detail actions pinned under the scroll - Added a settings gear to the list and admin headers which opens the addon config through the shared bedrock-core UI - Replaced the grave shake with a damped spring around the vertical axis, driven by an animation controller so every hit restarts it - Updated the addon to @bedrock-core/ui 0.11.0 and its core UI pack dependency
- Corrected the bedrock-core addon list credit format in the create-addon description
There was a problem hiding this comment.
Pull request overview
This PR migrates addon scaffolding and the existing Graves addon to the bedrock-core stack, replacing the legacy in-repo addon template with a root-level scaffolding tool and updating repo docs/metadata accordingly.
Changes:
- Added a root
yarn create-addonwrapper to scaffold new addons intoaddons/files/...using@bedrock-core/cli, with Bedrock Tweaks conventions applied. - Removed the legacy
templates/addon/template content and updated CONTRIBUTING guidance around addon creation/versioning. - Refactored the Graves addon substantially (bedrock-core UI/config/guide integration, new entity/item definitions, new index/purge/rpc/placement/capture logic, updated pack manifests/assets).
Reviewed changes
Copilot reviewed 124 out of 128 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| tools/create-addon.mjs | New Bedrock Tweaks wrapper around @bedrock-core/cli for addon scaffolding. |
| package.json | Adds create-addon script entry. |
| templates/addon.md | New docs pointer for addon scaffolding via yarn create-addon. |
| CONTRIBUTING.md | Updates addon creation workflow, watch command naming, and addon versioning guidance. |
| addons/packs.json | Adjusts addon catalog metadata (removes section version, updates Graves description). |
| templates/addon/tsconfig.json | Removed legacy addon template file. |
| templates/addon/packs/RP/texts/languages.json | Removed legacy addon template file. |
| templates/addon/packs/RP/texts/en_US.lang | Removed legacy addon template file. |
| templates/addon/packs/RP/texts/en_GB.lang | Removed legacy addon template file. |
| templates/addon/packs/RP/manifest.json | Removed legacy addon template file. |
| templates/addon/packs/data/.gitkeep | Removed legacy addon template file. |
| templates/addon/packs/BP/texts/languages.json | Removed legacy addon template file. |
| templates/addon/packs/BP/texts/en_US.lang | Removed legacy addon template file. |
| templates/addon/packs/BP/texts/en_GB.lang | Removed legacy addon template file. |
| templates/addon/packs/BP/scripts/Util/Scoreboard.ts | Removed legacy addon template file. |
| templates/addon/packs/BP/scripts/Util/index.ts | Removed legacy addon template file. |
| templates/addon/packs/BP/scripts/Util/DynamicProperties.ts | Removed legacy addon template file. |
| templates/addon/packs/BP/scripts/UI/index.ts | Removed legacy addon template file. |
| templates/addon/packs/BP/scripts/UI/Example.ts | Removed legacy addon template file. |
| templates/addon/packs/BP/scripts/Models/index.ts | Removed legacy addon template file. |
| templates/addon/packs/BP/scripts/Models/EntityTypes.ts | Removed legacy addon template file. |
| templates/addon/packs/BP/scripts/main.ts | Removed legacy addon template file. |
| templates/addon/packs/BP/scripts/Events/index.ts | Removed legacy addon template file. |
| templates/addon/packs/BP/scripts/Events/EntityDie.ts | Removed legacy addon template file. |
| templates/addon/packs/BP/scripts/Actions/Uninstall.ts | Removed legacy addon template file. |
| templates/addon/packs/BP/scripts/Actions/index.ts | Removed legacy addon template file. |
| templates/addon/packs/BP/manifest.json | Removed legacy addon template file. |
| templates/addon/package.json | Removed legacy addon template file. |
| templates/addon/filters/.gitkeep | Removed legacy addon template file. |
| templates/addon/eslint.config.mjs | Removed legacy addon template file. |
| templates/addon/config.json | Removed legacy addon template file. |
| templates/addon/.vscode/settings.json | Removed legacy addon template file. |
| templates/addon/.vscode/launch.json | Removed legacy addon template file. |
| templates/addon/.vscode/extensions.json | Removed legacy addon template file. |
| templates/addon/.gitignore | Removed legacy addon template file. |
| addons/files/gameplay_changes/graves/tsconfig.json | Updates TS config for bedrock-core UI/JSX + generated modules and broader includes. |
| addons/files/gameplay_changes/graves/README.md | New addon readme (commands, dev workflow, design notes). |
| addons/files/gameplay_changes/graves/packs/RP/textures/ui/icon.png | Adds addon UI icon (LFS). |
| addons/files/gameplay_changes/graves/packs/RP/textures/item_texture.json | Renames RP atlas ids to match updated namespace/id scheme. |
| addons/files/gameplay_changes/graves/packs/RP/textures/entity/grave.png | Updates grave texture asset (LFS). |
| addons/files/gameplay_changes/graves/packs/RP/texts/languages.json | Adds RP languages list (en_US). |
| addons/files/gameplay_changes/graves/packs/RP/texts/en_US.lang | Adjusts RP lang content to i18n-filter-generated approach. |
| addons/files/gameplay_changes/graves/packs/RP/render_controllers/grave.rc.json | New render controller for grave client entity. |
| addons/files/gameplay_changes/graves/packs/RP/models/entity/grave.geo.json | Updates grave geometry/UVs/bounds. |
| addons/files/gameplay_changes/graves/packs/RP/manifest.json | Updates RP manifest (localized name/desc keys, uuids, min engine, authors). |
| addons/files/gameplay_changes/graves/packs/RP/entity/grave.entity.json | Updates client entity id, adds animations/controllers, updates render controller. |
| addons/files/gameplay_changes/graves/packs/RP/animations/grave.animation.json | New shake animation definition. |
| addons/files/gameplay_changes/graves/packs/RP/animation_controllers/grave.ac.json | New shake animation controller. |
| addons/files/gameplay_changes/graves/packs/data/i18n/es_ES.ts | New Spanish locale file for bedrock-core i18n. |
| addons/files/gameplay_changes/graves/packs/data/i18n/en_US.ts | New default locale file + config schema labels/descriptions. |
| addons/files/gameplay_changes/graves/packs/data/guides/en_US/server-settings.mdx | New in-game guide page (server settings). |
| addons/files/gameplay_changes/graves/packs/data/guides/en_US/intro.mdx | New in-game guide page (intro). |
| addons/files/gameplay_changes/graves/packs/data/guides/en_US/configuration.mdx | New in-game guide page (player settings). |
| addons/files/gameplay_changes/graves/packs/data/guides/en_US/admin.mdx | New in-game guide page (operator/admin + RPC notes). |
| addons/files/gameplay_changes/graves/packs/data/.gitkeep | Removes legacy placeholder file. |
| addons/files/gameplay_changes/graves/packs/BP/texts/languages.json | Adds BP languages list (en_US). |
| addons/files/gameplay_changes/graves/packs/BP/texts/en_US.lang | Adds BP lang note for i18n-filter-generated meta keys. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/Util/Scoreboard.ts | Removes legacy util module from Graves. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/Util/index.ts | Removes legacy util barrel from Graves. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/Util/DynamicProperties.ts | Removes legacy util module from Graves. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/util.ts | New shared helpers (dimension names, time formatting, cause text, etc.). |
| addons/files/gameplay_changes/graves/packs/BP/scripts/UI/SettingsButton.tsx | New UI settings button integrating with shared bedrock-core config UI. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/UI/Settings.ts | Removes legacy modal-form settings UI. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/UI/index.ts | Removes legacy UI exports. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/UI/i18n.ts | New typed i18n instance wiring for bedrock-core UI. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/UI/GravesApp.tsx | New navigation stack/root render entry for Graves UI. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/UI/GraveList.tsx | New graves list screen UI. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/UI/GraveDetail.tsx | New grave detail screen UI (admin actions included). |
| addons/files/gameplay_changes/graves/packs/BP/scripts/UI/Config.ts | Removes legacy config menu UI. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/UI/AdminPanel.tsx | New admin panel UI listing all graves via index. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/types.ts | New shared types (index record, RPC surface, placement). |
| addons/files/gameplay_changes/graves/packs/BP/scripts/rpc.ts | New typed RPC surface for cross-addon integration. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/registration.ts | New bedrock-core core.register wiring (config/i18n/guides/icon). |
| addons/files/gameplay_changes/graves/packs/BP/scripts/open/restore.ts | New “sneak + interact” restore-to-inventory implementation. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/open/gate.ts | New before-event interact gate for authorization + open behavior. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/open/container.ts | New container watch/poll logic for native container open path. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/open/auth.ts | New authorization/key consumption logic for graves. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/open/attack.ts | New “hit twice to scatter” behavior with shake window. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/Models/ScriptEvents.ts | Removes legacy script-event enum. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/Models/ItemTypes.ts | Removes legacy item-id enum. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/Models/index.ts | Removes legacy models barrel. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/Models/EntityTypes.ts | Removes legacy entity-id enum. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/Models/DynamicProperties.ts | Removes legacy dynamic-properties model definitions. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/main.ts | Replaces legacy tick/event wiring with bedrock-core UI + new init pipeline. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/lifecycle.ts | New centralized grave entity plumbing (container/xp/removal helpers). |
| addons/files/gameplay_changes/graves/packs/BP/scripts/index/store.ts | New index storage in world dynamic properties (+ core.state summary). |
| addons/files/gameplay_changes/graves/packs/BP/scripts/index/reconcile.ts | New reconciliation logic on entity load (orphans/tombstones/drift). |
| addons/files/gameplay_changes/graves/packs/BP/scripts/index/purge.ts | New purge + force-purge ticking-area implementation. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/Events/WorldInitialize.ts | Removes legacy event wiring. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/Events/ScriptEventReceive.ts | Removes legacy script-event based command wiring. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/Events/PlayerInteractWithEntity.ts | Removes legacy interact behavior. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/Events/index.ts | Removes legacy event barrel. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/Events/GameRuleChange.ts | Removes legacy gamerule change handling. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/Events/EntityHit.ts | Removes legacy hit handling. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/Events/EntityDie.ts | Removes legacy death handling. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/despawn.ts | New time-based despawn sweep (epoch ms from index). |
| addons/files/gameplay_changes/graves/packs/BP/scripts/death/spawn.ts | New grave spawn logic (container fill + indexing + name tag policy). |
| addons/files/gameplay_changes/graves/packs/BP/scripts/death/placement.ts | New placement solver using raycasts + void/lava/protection rules. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/death/keepInventory.ts | New keepInventory ownership/enforcement + enable/disable hooks. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/death/impenetrable.ts | New multi-layer “impenetrable” policy (tag/config/RPC/vanilla). |
| addons/files/gameplay_changes/graves/packs/BP/scripts/death/capture.ts | New death capture pipeline (snapshot → grave → clear inventory/equipment). |
| addons/files/gameplay_changes/graves/packs/BP/scripts/constants.ts | New shared ids/constants (namespace, props, sizes, tags, repellers). |
| addons/files/gameplay_changes/graves/packs/BP/scripts/config.ts | New bedrock-core config schema definitions. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/commands.ts | New custom commands (graves, gravekey, gravesadmin). |
| addons/files/gameplay_changes/graves/packs/BP/scripts/Actions/uninstall.ts | Removes legacy uninstall action. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/Actions/settings.ts | Removes legacy settings storage/actions. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/Actions/listGraves.ts | Removes legacy chat-based listing. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/Actions/index.ts | Removes legacy actions barrel. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/Actions/Grave.ts | Removes legacy monolithic grave implementation. |
| addons/files/gameplay_changes/graves/packs/BP/scripts/Actions/giveGraveKey.ts | Removes legacy grave key handout action. |
| addons/files/gameplay_changes/graves/packs/BP/manifest.json | Updates BP manifest (localized name/desc keys, uuids, deps, module versions). |
| addons/files/gameplay_changes/graves/packs/BP/items/grave_key.json | Replaces legacy JSON item definition. |
| addons/files/gameplay_changes/graves/packs/BP/items/grave_key.item.ts | New TS-driven item definition for generator filter. |
| addons/files/gameplay_changes/graves/packs/BP/functions/graves/uninstall.mcfunction | Removes legacy script-event function. |
| addons/files/gameplay_changes/graves/packs/BP/functions/graves/config.mcfunction | Removes legacy script-event function. |
| addons/files/gameplay_changes/graves/packs/BP/entities/grave.json | Replaces legacy JSON entity definition. |
| addons/files/gameplay_changes/graves/packs/BP/entities/grave.entity.ts | New TS-driven entity definition for generator filter. |
| addons/files/gameplay_changes/graves/package.json | Updates addon package deps/scripts for bedrock-core + watch command. |
| addons/files/gameplay_changes/graves/config.json | Updates regolith pipeline (generator/guides/i18n/bundler) and metadata. |
| addons/files/gameplay_changes/graves/.vscode/settings.json | Updates addon-local VSCode settings. |
| addons/files/gameplay_changes/graves/.vscode/launch.json | Updates debugger paths/uuid and schema version. |
| addons/files/gameplay_changes/graves/.vscode/extensions.json | Updates recommended extensions list. |
| addons/files/gameplay_changes/graves/.mcignore | Adds mcpack ignore patterns. |
| addons/files/gameplay_changes/graves/.gitignore | Expands ignore rules and filter/artifact ignores. |
| .gitignore | Ignores additional vt-diff tool output/cache directories. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
- Added a locator bar for graves: each grave becomes a waypoint on its owner's bar with a custom grave icon, so nobody has to read coordinates out of chat - Waypoints are owner only and cannot be turned on for anyone else's graves, with a server switch for operators and a per player switch for everyone - Added a per grave checkbox in the grave list so a single grave can be taken off the bar without hiding the rest - Removed the close button from the grave detail screen, the header already carries back and close - Guarded the native container open path against a disconnected player, matching the sneak path - Updated the Minecraft modules to the latest stable: server 2.9.0, common 1.3.0, vanilla data 1.26.44, minimum engine version 1.26.40 - Fixed the addon gitignore not matching nested regolith directories and added an editorconfig for the addon formatting
- Fixed a bare --author silently falling back to the git name and consuming the next argument, which turned the addon name into the description - Fixed the category initials producing "undefined" when a segment held consecutive underscores
- Noted that an addon may override the repository indentation for its own JS/TS when its ESLint config matches
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 127 out of 131 changed files in this pull request and generated 1 comment.
Suppressed comments (4)
addons/files/gameplay_changes/graves/packs/BP/scripts/locator.ts:169
- Same issue here:
world.getDimension(record.dim)may throw. If that happens during a drift update, locator syncing will crash instead of just skipping the move.
addons/files/gameplay_changes/graves/.vscode/settings.json:47 - This JSON file has a trailing comma before the closing brace, which makes it invalid JSON and will prevent VS Code from loading the settings.
"eslint.workingDirectories": [
{
"mode": "auto"
}
],
}
addons/files/gameplay_changes/graves/packs/BP/scripts/locator.ts:64
world.getDimension(record.dim)can throw for unknown/removed dimensions (and elsewhere in the addon you already guard it with try/catch). Here it’s unguarded, so a bad record could crash the locator sync path.
This issue also appears on line 156 of the same file.
addons/files/gameplay_changes/graves/packs/BP/scripts/UI/GraveDetail.tsx:49
world.getDimension(record.dim)may throw; if it does, using the teleport action will crash the handler instead of safely doing nothing. Consider guarding this the same way as other dimension lookups (e.g., in forcepurge).
- Run the bedrock-core CLI with an argument array instead of a shell string, so a description containing $(...), backticks, & or %VAR% is passed through as text - Resolve npm's npx-cli.js next to the running Node binary, since Windows ships npx as a .cmd shim that cannot be spawned without a shell Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Add util.dimensionOf(), a guarded world.getDimension() for stored record.dim ids, which throws rather than returning undefined when the dimension no longer resolves - Route the locator bar (waypoint build + drift move) and the admin teleport action through it, so a stale dimension id skips the work instead of crashing the handler - Drop the trailing comma from the addon .vscode/settings.json Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Also took the three suppressed findings from the second review pass, since they were the same real bug in two places.
Added one guard in export const dimensionOf = (dimId: string): Dimension | undefined => {
try {
return world.getDimension(dimId);
} catch {
return undefined;
}
};
|
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 127 out of 131 changed files in this pull request and generated 3 comments.
Suppressed comments (2)
addons/files/gameplay_changes/graves/packs/BP/scripts/UI/GraveList.tsx:56
- The mapped grave rows don’t provide a stable
key, which can cause incorrect reconciliation when the list changes (e.g., after purges/toggles).
addons/files/gameplay_changes/graves/packs/BP/scripts/UI/AdminPanel.tsx:39 - The mapped admin rows don’t provide a stable
key, which can cause incorrect reconciliation when the list changes.
Both found by the new GameTest suite, both silent in the released addon. The fluid sounding in the placement solver asked for `includePassableBlocks: false, includeLiquidBlocks: true`. A liquid IS a passable block, so the first flag discarded it before the second was ever consulted and the ray sailed through to the bed underneath. Measured from six blocks above a two-deep water source column: `passable=F liquid=T` returns the stone below, only `passable=T liquid=T` returns the water. §3b rows 7-9 — resting on water, and `floatOnLava` — were dead code. Replaced with `firstFluid()`, which also steps over a non-liquid passable hit (a lily pad, a sign) instead of giving up on it. `SHAKE_WINDOW_TICKS` was 10, and an entity gets ~10 ticks of damage invulnerability after being hit. Every swing inside the window produced no damage event at all, so the gate never saw it, and the first swing that could land was already past the window — where it counts as a fresh first hit. Nobody could scatter a grave, only shake it forever. Now 30 ticks, which clears invulnerability with margin and is a kinder double-hit window for a human than 0.5 s. Robustness, same source: - ray origins are now the CENTRE of a cell. An integer block position is the cell's minimum corner, so a downward ray began in the cell below — a death inside a fluid returned the block under its own surface — and ran along the boundary where four columns meet. - `isImpenetrable` read `block.hasTag` first, which throws on a chunk that is loaded but not TICKING. The id-set checks (which cannot throw) run first now and the tag read is guarded; `isFreeCell` is total; the two long soundings are split into `solveDownward` behind a try/catch that falls back to spawn. A death near the edge of the loaded area could otherwise take the whole `entityDie` handler down with it. - the `entityDie` handler returns early unless `player.isValid` — a player that leaves on the same tick it dies would fail every read below it. - `locator.ts` leaked a per-player config subscription for players removed WITHOUT `playerLeave`. It now also drops on `entityRemove`, and `syncAll` prunes any id the world no longer lists. `types.ts` gained `GraveSummary` and `GRAVES_STATE_KEY`, and the index publishes through `core.state.set<GraveSummary>` — the state surface is part of the cross-addon contract, so it is typed like the RPC one. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
44 tests over four groups, run with `yarn build:test` and then `/gametest runset graves` in a world with Beta APIs on. graves_ready written and expected to pass graves_todo registered but not drivable; red on purpose graves_placement one group (also _capture, _open, _state) graves the class name: every test, todos included @minecraft/server-gametest is a beta module, so only this build declares it: `gametest.ts` is the test entry point, paired with `manifest.test.json` and `tsconfig.test.json`. `yarn build` and `yarn watch` still produce a pack with no beta modules at all — main.ts never imports from here. `harness.ts` answers the three things that make this addon awkward to test: - the index is world state, so every test's simulated players and index records are tracked PER TEST (`Map<Test, Scope>`) and undone in `runOnFinish`. Module-global bookkeeping does not work: a runset runs its tests in parallel, and the first to finish was disconnecting everyone else's players mid-run. - server config is world-global, so every config-SENSITIVE body — readers included, not just writers — goes through one promise chain and states the config it assumes. A neighbour setting `xpPercent: 50` silently halved another test's expected XP before that was true. - a test needs a real structure file. `tools/pad.mjs` generates the 16³ pad as little-endian NBT; GameTest does NOT resolve a structure written from script into the world store, it quietly substitutes a smaller area instead, so `pad_probe` reads the pad's shape back to prove which one is in play. The pad's own frame is DISCOVERED, not assumed: GameTest's relative (0,0,0) is the structure block, and the offset is undocumented. Results go to the content log (`PASS`/`FAIL <name> — <message>`), never to chat: `test.print` broadcasts to every player and a runset would bury the game in it. Six checks are registered as todos rather than faked green, each carrying the measurement that proved it undrivable and a manual repro: chat messages and engine container screens cannot be observed from script, a simulated player's sneak state does not reach the interact BEFORE-event, and `entityLoad`/`forcepurge` need a real chunk load, which a test pad never is. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Critical issues in purge handling and dependency installation, along with moderate correctness and configuration issues, remain unresolved.
Review effort: Lite
Findings: 2
Open (4)
Resolved since last review (3)
| const entity = world.getEntity(record.id); | ||
|
|
||
| if (entity) { | ||
| removeGrave(entity); | ||
| count++; | ||
| } | ||
|
|
||
| graves.patch({ records: { [record.id]: undefined } }); |
| "devDependencies": { | ||
| "@bedrock-core/bds-runner": "portal:../../Minecraft/Proyectos/@bedrock-core/bds-runner" | ||
| }, |
| "version": [1, 21, 0], | ||
| "categories": [ |
| categoryPkg.workspaces ??= []; | ||
|
|
||
| if (!categoryPkg.workspaces.includes(name)) { | ||
| categoryPkg.workspaces.push(name); | ||
| categoryPkg.workspaces.sort(); | ||
| } | ||
|
|
||
| writeFileSync(categoryPackagePath, `${JSON.stringify(categoryPkg, null, '\t')}\n`); |


Graves but with extra bs
Removed old addon template now there is addon scaffolding tooling based on @bedrock-core in root package.json adjusted for BT
By checking the following boxes with an X, you ensure that:
The pack was tested ingame in at least one device.
The pack is an existing BT pack, is a missing pack from VT or is an accepted pack/change in a discussion.
The pack code follows the style guide.
The commits follow the contribution guidelines.
The PR follows the contribution guidelines.
(Optional) Tested in Windows
(Optional) Tested in Android
(Optional) Tested in iOS
(Optional) Tested in any console
(Optional) Tested in BDS