create-mcbe 0.1.0-beta.4 → 0.1.0-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -0
- package/dist/index.js +5 -5
- package/package.json +3 -3
- package/templates/begame/README.md +5 -0
- package/templates/begame/_gitignore +5 -0
- package/templates/begame/bp/manifest.json +19 -0
- package/templates/begame/package.json +17 -0
- package/templates/begame/rp/manifest.json +17 -0
- package/templates/begame/rp/texts/en_US.lang +2 -0
- package/templates/begame/src/main.ts +7 -0
- package/templates/begame/tsconfig.json +10 -0
package/README.md
CHANGED
|
@@ -34,6 +34,12 @@ Use `--json` when an agent needs machine-readable output:
|
|
|
34
34
|
npm create mcbe@latest my-addon -- --template bepack-addon --yes --install --json
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
+
Create a gameplay-ready behavior pack and resource pack with a player-join starter:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
npm create mcbe@latest my-game -- --template begame --yes
|
|
41
|
+
```
|
|
42
|
+
|
|
37
43
|
## Templates
|
|
38
44
|
|
|
39
45
|
| Template | Description |
|
|
@@ -41,6 +47,7 @@ npm create mcbe@latest my-addon -- --template bepack-addon --yes --install --jso
|
|
|
41
47
|
| `sapi-pro` | SAPI-Pro behavior pack with the built-in `sapi-pro` BePack plugin |
|
|
42
48
|
| `bepack-behavior` | TypeScript behavior pack managed by BePack |
|
|
43
49
|
| `bepack-addon` | TypeScript behavior pack and resource pack managed by BePack |
|
|
50
|
+
| `begame` | Gameplay-ready TypeScript add-on with behavior and resource packs managed by BePack |
|
|
44
51
|
| `behavior-pack` | Data-only behavior pack without scripts or build tools |
|
|
45
52
|
| `resource-pack` | Data-only resource pack without scripts or build tools |
|
|
46
53
|
|
|
@@ -50,6 +57,8 @@ List available templates:
|
|
|
50
57
|
npm create mcbe@latest -- --list-templates
|
|
51
58
|
```
|
|
52
59
|
|
|
60
|
+
BePack templates generate a `dev` script that copies into the Minecraft development folder. On Windows the generated `bepack.config.ts` sets `copy: { defaultTarget: "win" }` (the same default `bepack init` writes), so `npm run dev` works immediately. BePack's built-in copy targets are Windows-only paths, so on macOS and Linux no copy target is written and the `--copy` flag is dropped from the script — add `copy.targets` (plus `--copy`) once you have a destination.
|
|
61
|
+
|
|
53
62
|
## Common options
|
|
54
63
|
|
|
55
64
|
- `--template <id>`: Select a template.
|
package/dist/index.js
CHANGED
|
@@ -46,8 +46,8 @@ ${o}${e}
|
|
|
46
46
|
`}case`submit`:{let e=o?`${n?` `:``}${t(`dim`,o)}`:``;return`${r}${n?t(`gray`,R):``}${e}`}case`cancel`:{let e=o?` ${t([`strikethrough`,`dim`],o)}`:``,i=n?t(`gray`,R):``;return`${r}${i}${e}${o.trim()?`
|
|
47
47
|
${i}`:``}`}default:return`${r}${n?`${t(`cyan`,R)} `:``}${a}
|
|
48
48
|
${n?t(`cyan`,z):``}
|
|
49
|
-
`}}}).prompt();let G=!0;const K=typeof self<`u`?self:typeof window<`u`?window:typeof global<`u`?global:{};let ze=0;if(K.process&&K.process.env&&K.process.stdout){let{FORCE_COLOR:e,NODE_DISABLE_COLORS:t,NO_COLOR:n,TERM:r,COLORTERM:i}=K.process.env;G=t||n||e===`0`?!1:e===`1`||e===`2`||e===`3`?!0:r===`dumb`?!1:`CI`in K.process.env&&[`TRAVIS`,`CIRCLECI`,`APPVEYOR`,`GITLAB_CI`,`GITHUB_ACTIONS`,`BUILDKITE`,`DRONE`].some(e=>e in K.process.env)?!0:process.stdout.isTTY,G&&(ze=process.platform===`win32`||i&&(i===`truecolor`||i===`24bit`)?3:r&&(r.endsWith(`-256color`)||r.endsWith(`256`))?2:1)}let Be={enabled:G,supportLevel:ze};function q(e,t,n=1){let r=`\x1b[${e}m`,i=`\x1b[${t}m`,a=RegExp(`\\x1b\\[${t}m`,`g`);return e=>Be.enabled&&Be.supportLevel>=n?r+(``+e).replace(a,r)+i:``+e}q(0,0);const Ve=q(1,22),He=q(2,22);q(3,23),q(4,24),q(7,27),q(8,28),q(9,29),q(30,39);const Ue=q(31,39),We=q(32,39);q(33,39),q(34,39),q(35,39);const Ge=q(36,39);q(97,39),q(90,39),q(37,39),q(91,39),q(92,39),q(93,39),q(94,39),q(95,39),q(96,39),q(40,49),q(41,49),q(42,49),q(43,49),q(44,49),q(45,49),q(46,49),q(107,49),q(100,49),q(101,49),q(102,49),q(103,49),q(104,49),q(105,49),q(106,49),q(47,49);async function J(e){try{return await s.access(e),!0}catch{return!1}}async function Ke(e){if(!await J(e))return!0;let t=await s.readdir(e);return t.length===0||t.every(e=>e===`.git`)}async function qe(e){await s.mkdir(e,{recursive:!0});let t=await s.readdir(e);await Promise.all(t.map(async t=>{t!==`.git`&&await s.rm(o.join(e,t),{recursive:!0,force:!0})}))}async function Je(e,t){await s.mkdir(t,{recursive:!0});let n=await s.readdir(e,{withFileTypes:!0});for(let r of n){if(r.name===`.DS_Store`)continue;let n=o.join(e,r.name),i=o.join(t,Ye(r.name));if(r.isDirectory())await Je(n,i);else if(r.isFile())await s.mkdir(o.dirname(i),{recursive:!0}),await s.copyFile(n,i);else if(r.isSymbolicLink()){let e=await s.readlink(n);await s.symlink(e,i)}}}function Ye(e){return e===`_gitignore`?`.gitignore`:e===`_npmrc`?`.npmrc`:e}function Xe(){let e=process.env.npm_config_user_agent||``;return e.startsWith(`pnpm`)?`pnpm`:e.startsWith(`yarn`)?`yarn`:e.startsWith(`bun`)?`bun`:`npm`}function Ze(e){return{npm:`npm@11`,pnpm:`pnpm@9`,yarn:`yarn@1.22`,bun:`bun@1`}[e]}function Qe(e,t){return e===`npm`?`npm run ${t}`:e===`yarn`?`yarn ${t}`:e===`bun`?`bun run ${t}`:`pnpm ${t}`}async function $e(e,t){await Y(e,e===`yarn`?[]:[`install`],t)}async function et(e,t){for(let n of e)await Y(`npx`,[`--yes`,`skills@latest`,`add`,n,`--copy`,`--yes`],t)}function tt(e){return e.map(e=>`npx --yes skills@latest add ${e} --copy --yes`).join(` && `)}async function nt(e){await Y(`git`,[`init`],e)}function Y(e,t,n){return new Promise((r,i)=>{let a=c(e,t,{cwd:n,stdio:`ignore`,shell:process.platform===`win32`});a.on(`error`,i),a.on(`close`,n=>{n===0?r():i(/* @__PURE__ */ Error(`${e} ${t.join(` `)} failed with code ${n}`))})})}function rt(e){return e.trim().replace(/([a-z])([A-Z])/g,`$1-$2`).replace(/\s+/g,`-`).replace(/_/g,`-`).toLowerCase().replace(/[^a-z0-9@/.-]/g,``).replace(/-+/g,`-`).replace(/^-|-$/g,``)||`mcbe-addon`}function it(e){let t=e.trim(),n=t.toLowerCase().replace(/([a-z])([A-Z])/g,`$1_$2`).replace(/[^a-z0-9]+/g,`_`).replace(/^_+|_+$/g,``)||`mcbe_${at(t)}`;return`${/^[a-z]/.test(n)?n:`mcbe_${n}`}_${l.randomBytes(3).toString(`hex`)}`}function at(e){return l.createHash(`sha1`).update(e,`utf8`).digest(`hex`).slice(0,8)}async function ot(e){let t=await s.readFile(e,`utf8`);return JSON.parse(t)}async function st(e,t){await s.writeFile(e,`${JSON.stringify(t,null,2)}\n`,`utf8`)}async function ct(e,t){let n=await ot(e);return await t(n),await st(e,n),n}async function X(e){let t=[[o.join(e.root,`bp`,`manifest.json`),`BP`],[o.join(e.root,`rp`,`manifest.json`),`RP`],[o.join(e.root,`manifest.json`),e.template.id===`resource-pack`?`RP`:`BP`]];for(let[n,r]of t)await J(n)&&await ct(n,t=>{t.header.name=`${e.projectName} ${r}`,t.header.description=`${e.projectName} ${r.toLowerCase()}`,t.header.uuid=l.randomUUID();for(let e of t.modules??[])e.uuid=l.randomUUID()})}async function
|
|
50
|
-
$1$2: `),i=t?r.replace(/^\{\n/,n?`{\n plugins: [${t.call}],\n`:`{\n plugins: ['${t.name}'],\n`):r,a=n&&t?`import { defineConfig, ${t.importName} } from '@bepack/cli';`:n?`import { defineConfig } from '@bepack/cli';`:``,o=n?`defineConfig(${i})`:i;return`${a?`${a}\n\n`:``}export default ${o};\n`}function Z(e){let{id:t,title:n,description:r,templateDir:i,skills:a,...o}=e;return{id:t,title:n,description:r,templateDir:i,defaultPackageManager:`npm`,skills:a,workflow:`bepack`,prepare:e=>
|
|
51
|
-
`));let n=await
|
|
52
|
-
Next steps:`);for(let t of e.nextSteps)console.log(` ${t}`)}function
|
|
53
|
-
`)}\n`}await
|
|
49
|
+
`}}}).prompt();let G=!0;const K=typeof self<`u`?self:typeof window<`u`?window:typeof global<`u`?global:{};let ze=0;if(K.process&&K.process.env&&K.process.stdout){let{FORCE_COLOR:e,NODE_DISABLE_COLORS:t,NO_COLOR:n,TERM:r,COLORTERM:i}=K.process.env;G=t||n||e===`0`?!1:e===`1`||e===`2`||e===`3`?!0:r===`dumb`?!1:`CI`in K.process.env&&[`TRAVIS`,`CIRCLECI`,`APPVEYOR`,`GITLAB_CI`,`GITHUB_ACTIONS`,`BUILDKITE`,`DRONE`].some(e=>e in K.process.env)?!0:process.stdout.isTTY,G&&(ze=process.platform===`win32`||i&&(i===`truecolor`||i===`24bit`)?3:r&&(r.endsWith(`-256color`)||r.endsWith(`256`))?2:1)}let Be={enabled:G,supportLevel:ze};function q(e,t,n=1){let r=`\x1b[${e}m`,i=`\x1b[${t}m`,a=RegExp(`\\x1b\\[${t}m`,`g`);return e=>Be.enabled&&Be.supportLevel>=n?r+(``+e).replace(a,r)+i:``+e}q(0,0);const Ve=q(1,22),He=q(2,22);q(3,23),q(4,24),q(7,27),q(8,28),q(9,29),q(30,39);const Ue=q(31,39),We=q(32,39);q(33,39),q(34,39),q(35,39);const Ge=q(36,39);q(97,39),q(90,39),q(37,39),q(91,39),q(92,39),q(93,39),q(94,39),q(95,39),q(96,39),q(40,49),q(41,49),q(42,49),q(43,49),q(44,49),q(45,49),q(46,49),q(107,49),q(100,49),q(101,49),q(102,49),q(103,49),q(104,49),q(105,49),q(106,49),q(47,49);async function J(e){try{return await s.access(e),!0}catch{return!1}}async function Ke(e){if(!await J(e))return!0;let t=await s.readdir(e);return t.length===0||t.every(e=>e===`.git`)}async function qe(e){await s.mkdir(e,{recursive:!0});let t=await s.readdir(e);await Promise.all(t.map(async t=>{t!==`.git`&&await s.rm(o.join(e,t),{recursive:!0,force:!0})}))}async function Je(e,t){await s.mkdir(t,{recursive:!0});let n=await s.readdir(e,{withFileTypes:!0});for(let r of n){if(r.name===`.DS_Store`)continue;let n=o.join(e,r.name),i=o.join(t,Ye(r.name));if(r.isDirectory())await Je(n,i);else if(r.isFile())await s.mkdir(o.dirname(i),{recursive:!0}),await s.copyFile(n,i);else if(r.isSymbolicLink()){let e=await s.readlink(n);await s.symlink(e,i)}}}function Ye(e){return e===`_gitignore`?`.gitignore`:e===`_npmrc`?`.npmrc`:e}function Xe(){let e=process.env.npm_config_user_agent||``;return e.startsWith(`pnpm`)?`pnpm`:e.startsWith(`yarn`)?`yarn`:e.startsWith(`bun`)?`bun`:`npm`}function Ze(e){return{npm:`npm@11`,pnpm:`pnpm@9`,yarn:`yarn@1.22`,bun:`bun@1`}[e]}function Qe(e,t){return e===`npm`?`npm run ${t}`:e===`yarn`?`yarn ${t}`:e===`bun`?`bun run ${t}`:`pnpm ${t}`}async function $e(e,t){await Y(e,e===`yarn`?[]:[`install`],t)}async function et(e,t){for(let n of e)await Y(`npx`,[`--yes`,`skills@latest`,`add`,n,`--copy`,`--yes`],t)}function tt(e){return e.map(e=>`npx --yes skills@latest add ${e} --copy --yes`).join(` && `)}async function nt(e){await Y(`git`,[`init`],e)}function Y(e,t,n){return new Promise((r,i)=>{let a=c(e,t,{cwd:n,stdio:`ignore`,shell:process.platform===`win32`});a.on(`error`,i),a.on(`close`,n=>{n===0?r():i(/* @__PURE__ */ Error(`${e} ${t.join(` `)} failed with code ${n}`))})})}function rt(e){return e.trim().replace(/([a-z])([A-Z])/g,`$1-$2`).replace(/\s+/g,`-`).replace(/_/g,`-`).toLowerCase().replace(/[^a-z0-9@/.-]/g,``).replace(/-+/g,`-`).replace(/^-|-$/g,``)||`mcbe-addon`}function it(e){let t=e.trim(),n=t.toLowerCase().replace(/([a-z])([A-Z])/g,`$1_$2`).replace(/[^a-z0-9]+/g,`_`).replace(/^_+|_+$/g,``)||`mcbe_${at(t)}`;return`${/^[a-z]/.test(n)?n:`mcbe_${n}`}_${l.randomBytes(3).toString(`hex`)}`}function at(e){return l.createHash(`sha1`).update(e,`utf8`).digest(`hex`).slice(0,8)}async function ot(e){let t=await s.readFile(e,`utf8`);return JSON.parse(t)}async function st(e,t){await s.writeFile(e,`${JSON.stringify(t,null,2)}\n`,`utf8`)}async function ct(e,t){let n=await ot(e);return await t(n),await st(e,n),n}function lt(e){return o.join(e,`package.json`)}async function ut(e,t){return ct(lt(e),t)}async function dt(e,t){return ut(e,e=>{e.name=t.name,t.packageManager&&(e.packageManager=Ze(t.packageManager))})}async function X(e){let t=[[o.join(e.root,`bp`,`manifest.json`),`BP`],[o.join(e.root,`rp`,`manifest.json`),`RP`],[o.join(e.root,`manifest.json`),e.template.id===`resource-pack`?`RP`:`BP`]];for(let[n,r]of t)await J(n)&&await ct(n,t=>{t.header.name=`${e.projectName} ${r}`,t.header.description=`${e.projectName} ${r.toLowerCase()}`,t.header.uuid=l.randomUUID();for(let e of t.modules??[])e.uuid=l.randomUUID()})}function ft(e=process.platform){return e===`win32`?`win`:void 0}async function pt(e,t){await X(e);let n=JSON.parse(await s.readFile(o.join(e.root,t.bpRoot,`manifest.json`),`utf8`)),r=t.rpRoot?JSON.parse(await s.readFile(o.join(e.root,t.rpRoot,`manifest.json`),`utf8`)):void 0,i=n.modules?.find(e=>e.type===`script`);t.namespace&&await ht(e,it(e.projectName));let a=ft(),c={name:e.packageName,version:`1.0.0`,description:`${e.projectName} Bedrock add-on`,target:`latest`,packs:{bp:{root:t.bpRoot,uuid:n.header.uuid,...i?.uuid?{moduleUuid:i.uuid}:{},compile:{entry:`src/main.ts`},dependencies:t.dependencies??{"@minecraft/server":`stable`}},...r?{rp:{root:t.rpRoot,uuid:r.header.uuid,moduleUuid:r.modules?.[0]?.uuid}}:{}},pack:{outDir:`dist`},...a?{copy:{defaultTarget:a}}:{},...t.replaceBuiltins?{replace:{builtins:{NAME:!0,DESCRIPTION:!0,VERSION:!0,UUID:!0}}}:{}};await s.writeFile(o.join(e.root,`bepack.config.ts`),gt(c,t.plugin,e.installBepack),`utf8`),a||await mt(e.root)}async function mt(e){await J(o.join(e,`package.json`))&&await ut(e,e=>{let t=e.scripts?.dev;if(!t)return;let n=t.replace(/\s*--copy\b/,``).trim();n&&n!==t&&(e.scripts.dev=n)})}async function ht(e,t){let n=o.join(e.root,`src`,`main.ts`);if(!await J(n))return;let r=await s.readFile(n,`utf8`);await s.writeFile(n,r.replaceAll(`**NAMESPACE**`,t),`utf8`)}function gt(e,t,n){let r=JSON.stringify(e,null,2).replace(/\n( +)"([a-zA-Z_$][a-zA-Z0-9_$]*)": /g,`
|
|
50
|
+
$1$2: `),i=t?r.replace(/^\{\n/,n?`{\n plugins: [${t.call}],\n`:`{\n plugins: ['${t.name}'],\n`):r,a=n&&t?`import { defineConfig, ${t.importName} } from '@bepack/cli';`:n?`import { defineConfig } from '@bepack/cli';`:``,o=n?`defineConfig(${i})`:i;return`${a?`${a}\n\n`:``}export default ${o};\n`}function Z(e){let{id:t,title:n,description:r,templateDir:i,skills:a,...o}=e;return{id:t,title:n,description:r,templateDir:i,defaultPackageManager:`npm`,skills:a,workflow:`bepack`,prepare:e=>pt(e,o)}}const Q=[Z({id:`sapi-pro`,title:`SAPI-Pro + BEPack`,description:`SAPI-Pro behavior pack managed and packed by BEPack.`,templateDir:`sapi-pro`,bpRoot:`.`,dependencies:{"@minecraft/server":`stable`,"@minecraft/server-ui":`stable`,"@minecraft/vanilla-data":`stable`,"sapi-pro":`stable`},plugin:{name:`sapi-pro`,importName:`sapiPro`,call:`sapiPro()`},replaceBuiltins:!0,namespace:!0}),Z({id:`bepack-behavior`,title:`BEPack Behavior Pack`,description:`TypeScript Script API behavior pack built and packed by BEPack.`,templateDir:`bepack-behavior`,bpRoot:`.`}),Z({id:`bepack-addon`,title:`BEPack Add-on (BP + RP)`,description:`TypeScript behavior pack plus resource pack, managed by BEPack.`,templateDir:`bepack-addon`,bpRoot:`bp`,rpRoot:`rp`}),Z({id:`begame`,title:`BEGame (BP + RP)`,description:`Gameplay-ready TypeScript add-on with behavior and resource packs, managed by BEPack.`,templateDir:`begame`,bpRoot:`bp`,rpRoot:`rp`}),{id:`behavior-pack`,title:`Behavior Pack`,description:`Simple behavior pack without scripts or build tools.`,templateDir:`behavior-pack`,prepare:X},{id:`resource-pack`,title:`Resource Pack`,description:`Simple resource pack without scripts or build tools.`,templateDir:`resource-pack`,prepare:X}],_t=o.resolve(o.dirname(u(import.meta.url)),`..`);async function vt(e){let t=await yt(e);St(t);let n=await bt(e),r=await xt(e,n),i=o.resolve(e.cwd,t),a=e.packageManager||n.defaultPackageManager||`npm`,s={cli:e,cwd:e.cwd,root:i,projectName:t,packageName:rt(t),template:n,packageManager:a,installBepack:r,templateOptions:n.defaultOptions??{}};await Ct(s),await Je(o.resolve(_t,`templates`,n.templateDir),i),await J(o.join(i,`package.json`))&&(await dt(i,{name:s.packageName,packageManager:a}),n.workflow===`bepack`&&!r&&await Dt(i)),await n.prepare?.(s);let c=!1;e.git&&(await nt(i),c=!0);let l=!1,u=!1;if(e.install){await J(o.join(i,`package.json`))&&(n.workflow===`bepack`&&r?(await $e(a,i),await Et(a,`bepack:install`,i)):n.workflow===`bepack`?await Y(`bepack`,[`install`],i):await $e(a,i),l=!0);let t=Tt(n.skills);!e.skipSkillsInstall&&t.length>0&&(await et(t,i),u=!0)}return{root:i,projectName:t,template:n.id,packageManager:a,installedDependencies:l,installedSkills:u,initializedGit:c,warnings:[],nextSteps:wt(s,l,u||e.skipSkillsInstall)}}async function yt(e){if(e.projectName)return e.projectName;if(e.yes||!process.stdin.isTTY)return`mcbe-addon`;let t=await Re({message:`Project name`,placeholder:`my-addon`,defaultValue:`my-addon`,validate(e){if(!e?.trim())return`Project name is required.`}});if(j(t))throw t;return String(t)}async function bt(e){if(e.template){let t=Q.find(t=>t.id===e.template);if(!t)throw Error(`Unknown template "${e.template}". Available: ${Q.map(e=>e.id).join(`, `)}`);return t}if(e.yes||!process.stdin.isTTY)return Q[0];let t=await W({message:`Select a template`,options:Q.map(e=>({value:e.id,label:e.title,hint:e.description}))});if(j(t))throw t;return Q.find(e=>e.id===String(t))}async function xt(e,t){if(t.workflow!==`bepack`)return!1;if(e.installBepack!==void 0)return e.installBepack;if(e.yes||!process.stdin.isTTY)return!0;let n=await Pe({message:`Install BEPack in this project?`,initialValue:!0});if(j(n))throw n;return!!n}function St(e){if(!e.trim()||e===`.`||e===`..`||o.isAbsolute(e))throw Error(`Project name must be a non-empty relative child directory, not . or an absolute path.`);let t=o.normalize(e);if(t===`..`||t.startsWith(`..${o.sep}`))throw Error(`Project name cannot escape the working directory.`)}async function Ct(e){if(!await J(e.root)){await s.mkdir(e.root,{recursive:!0});return}if(await Ke(e.root))return;if(e.cli.force){await qe(e.root);return}if(e.cli.yes||!process.stdin.isTTY)throw Error(`Target directory is not empty: ${e.root}. Use --force to overwrite.`);let t=await W({message:`Target directory ${e.projectName} is not empty`,options:[{value:`cancel`,label:`Cancel`},{value:`overwrite`,label:`Overwrite`}]});if(j(t)||t===`cancel`)throw Error(`Cancelled.`);await qe(e.root)}function wt(e,t,n){let r=[`cd ${o.relative(process.cwd(),e.root)||`.`}`];if(e.template.workflow===`bepack`&&(e.installBepack&&!t?(r.push(`${e.packageManager} install`),r.push(Qe(e.packageManager,`bepack:install`))):e.installBepack||r.push(`bepack install`),r.push(Qe(e.packageManager,`build`))),!n){let t=Tt(e.template.skills);t.length>0&&r.push(tt(t))}return r}function Tt(e){return(Array.isArray(e)?e:e?[e]:[]).map(e=>e.trim()).filter(Boolean)}async function Et(e,t,n){return e===`npm`?Y(`npm`,[`run`,t],n):e===`pnpm`?Y(`pnpm`,[t],n):e===`yarn`?Y(`yarn`,[t],n):Y(`bun`,[`run`,t],n)}async function Dt(e){let t=o.join(e,`package.json`),n=JSON.parse(await s.readFile(t,`utf8`));n.devDependencies&&delete n.devDependencies[`@bepack/cli`],n.scripts&&delete n.scripts[`bepack:install`],await s.writeFile(t,`${JSON.stringify(n,null,2)}\n`,`utf8`)}var Ot=/* @__PURE__ */ y((/* @__PURE__ */ _(((e,t)=>{function n(e){return e==null?[]:Array.isArray(e)?e:[e]}function r(e,t,n,r){var i,a=e[t],o=~r.string.indexOf(t)?n==null||n===!0?``:String(n):typeof n==`boolean`?n:~r.boolean.indexOf(t)?n===`false`?!1:n===`true`||(e._.push((i=+n,i*0==0?i:n)),!!n):(i=+n,i*0==0?i:n);e[t]=a==null?o:Array.isArray(a)?a.concat(o):[a,o]}t.exports=function(e,t){e||=[],t||={};var i,a,o,s,c,l={_:[]},u=0,d=0,f=0,p=e.length;let m=t.alias!==void 0,h=t.unknown!==void 0,g=t.default!==void 0;if(t.alias=t.alias||{},t.string=n(t.string),t.boolean=n(t.boolean),m)for(i in t.alias)for(a=t.alias[i]=n(t.alias[i]),u=0;u<a.length;u++)(t.alias[a[u]]=a.concat(i)).splice(u,1);for(u=t.boolean.length;u-->0;)for(a=t.alias[t.boolean[u]]||[],d=a.length;d-->0;)t.boolean.push(a[d]);for(u=t.string.length;u-->0;)for(a=t.alias[t.string[u]]||[],d=a.length;d-->0;)t.string.push(a[d]);if(g){for(i in t.default)if(s=typeof t.default[i],a=t.alias[i]=t.alias[i]||[],t[s]!==void 0)for(t[s].push(i),u=0;u<a.length;u++)t[s].push(a[u])}let _=h?Object.keys(t.alias):[];for(u=0;u<p;u++){if(o=e[u],o===`--`){l._=l._.concat(e.slice(++u));break}for(d=0;d<o.length&&o.charCodeAt(d)===45;d++);if(d===0)l._.push(o);else if(o.substring(d,d+3)===`no-`){if(s=o.substring(d+3),h&&!~_.indexOf(s))return t.unknown(o);l[s]=!1}else{for(f=d+1;f<o.length&&o.charCodeAt(f)!==61;f++);for(s=o.substring(d,f),c=o.substring(++f)||u+1===p||(``+e[u+1]).charCodeAt(0)===45||e[++u],a=d===2?[s]:s,f=0;f<a.length;f++){if(s=a[f],h&&!~_.indexOf(s))return t.unknown(`-`.repeat(d)+s);r(l,s,f+1<a.length||c,t)}}}if(g)for(i in t.default)l[i]===void 0&&(l[i]=t.default[i]);if(m)for(i in l)for(a=t.alias[i]||[];a.length>0;)l[a.shift()]=l[i];return l}})))(),1);const kt=/* @__PURE__ */ new Set([`npm`,`pnpm`,`yarn`,`bun`]);function At(e=[]){let t=(0,Ot.default)(e,{alias:{h:`help`,v:`version`,t:`template`},boolean:[`help`,`version`,`yes`,`force`,`install`,`skip-skills-install`,`install-bepack`,`skip-bepack-install`,`git`,`json`,`list-templates`],string:[`template`,`pm`,`cwd`],default:{install:!1,git:!1}}),n=String(t.pm||Xe());if(!kt.has(n))throw Error(`Unknown package manager: ${n}`);if(t[`install-bepack`]&&t[`skip-bepack-install`])throw Error(`--install-bepack and --skip-bepack-install cannot be used together.`);let r=Array.isArray(t._)?t._.find(Boolean):void 0;return{cwd:o.resolve(String(t.cwd||process.cwd())),projectName:r===void 0?void 0:String(r),template:t.template?String(t.template):void 0,packageManager:n,yes:!!t.yes,force:!!t.force,install:!!t.install,skipSkillsInstall:!!t[`skip-skills-install`],installBepack:t[`skip-bepack-install`]?!1:t[`install-bepack`]?!0:void 0,git:!!t.git,json:!!t.json,listTemplates:!!t[`list-templates`],help:!!t.help,version:!!t.version}}const $=e(import.meta.url)(`../package.json`);async function jt(e=process.argv.slice(2)){let t;try{if(t=At(e),t.help)return console.log(Nt());if(t.version)return console.log($.version);if(t.listTemplates)return console.log(Q.map(e=>`${Ge(e.id.padEnd(18))} ${e.description}`).join(`
|
|
51
|
+
`));let n=await vt(t);if(t.json)return console.log(JSON.stringify({ok:!0,result:n},null,2));Mt(n)}catch(n){let r=n instanceof Error?n.message:String(n),i=j(n);t?.json||e.includes(`--json`)?console.log(JSON.stringify({ok:!1,error:i?`cancelled`:r},null,2)):i?Fe(`Cancelled.`):console.error(Ue(`Error: ${r}`)),process.exitCode=1}}function Mt(e){Ie(`${We(`Created`)} ${Ve(e.projectName)}`),console.log(He(`\nTemplate: ${e.template}`)),console.log(`
|
|
52
|
+
Next steps:`);for(let t of e.nextSteps)console.log(` ${t}`)}function Nt(){return`\n${[`${Ve(`create-mcbe`)} ${He(`v${$.version}`)}`,``,`Usage:`,` npm create mcbe@latest [project-name] -- [options]`,``,`Options:`,` --template <id> Template id`,` --pm <npm|pnpm|yarn|bun>`,` --yes Use defaults`,` --force Overwrite a non-empty target directory`,` --install Install dependencies after creation`,` --skip-skills-install Skip template skills installation`,` --install-bepack Install BEPack in the project`,` --skip-bepack-install Use global BEPack instead`,` --git Initialize git`,` --cwd <dir> Working directory`,` --json Machine-readable output`,` --list-templates List templates`,` -h, --help Show help`,` -v, --version Show version`,``,`Templates:`,...Q.map(e=>` ${e.id.padEnd(18)} ${e.description}`)].join(`
|
|
53
|
+
`)}\n`}await jt();export{};
|
package/package.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-mcbe",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.5",
|
|
4
4
|
"description": "A small, extensible scaffolder for Minecraft Bedrock Edition projects.",
|
|
5
5
|
"author": "XiaoYangx666",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
9
|
-
"url": "https://github.com/XiaoYangx666/BEPack.git",
|
|
9
|
+
"url": "git+https://github.com/XiaoYangx666/BEPack.git",
|
|
10
10
|
"directory": "packages/create-mcbe"
|
|
11
11
|
},
|
|
12
12
|
"homepage": "https://github.com/XiaoYangx666/BEPack/tree/main/packages/create-mcbe#readme",
|
|
13
13
|
"type": "module",
|
|
14
14
|
"bin": {
|
|
15
|
-
"create-mcbe": "
|
|
15
|
+
"create-mcbe": "dist/index.js"
|
|
16
16
|
},
|
|
17
17
|
"files": [
|
|
18
18
|
"dist",
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# BEGame starter
|
|
2
|
+
|
|
3
|
+
This project contains a BEPack-managed behavior pack and resource pack. The behavior pack includes a small `@minecraft/server` example that welcomes players on their first spawn.
|
|
4
|
+
|
|
5
|
+
Run `npm run build` to build the packs, or `npm run dev` to copy them into the Minecraft development folder on Windows. On macOS and Linux, configure a copy target in `bepack.config.ts` before using `bepack dev --copy`.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"format_version": 2,
|
|
3
|
+
"header": {
|
|
4
|
+
"name": "Behavior Pack",
|
|
5
|
+
"description": "BEGame behavior pack",
|
|
6
|
+
"uuid": "00000000-0000-4000-0000-000000000001",
|
|
7
|
+
"version": [1, 0, 0],
|
|
8
|
+
"min_engine_version": [1, 21, 0]
|
|
9
|
+
},
|
|
10
|
+
"modules": [
|
|
11
|
+
{
|
|
12
|
+
"type": "script",
|
|
13
|
+
"language": "javascript",
|
|
14
|
+
"uuid": "00000000-0000-4000-8000-000000000002",
|
|
15
|
+
"version": [1, 0, 0],
|
|
16
|
+
"entry": "scripts/main.js"
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "mcbe-begame",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"bepack:install": "bepack install",
|
|
8
|
+
"dev": "bepack dev --copy",
|
|
9
|
+
"build": "bepack build",
|
|
10
|
+
"pack": "bepack pack",
|
|
11
|
+
"release": "bepack build --install --pack"
|
|
12
|
+
},
|
|
13
|
+
"devDependencies": {
|
|
14
|
+
"@bepack/cli": "^0.1.0-beta.4",
|
|
15
|
+
"typescript": "7.0.2"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"format_version": 2,
|
|
3
|
+
"header": {
|
|
4
|
+
"name": "Resource Pack",
|
|
5
|
+
"description": "BEGame resource pack",
|
|
6
|
+
"uuid": "00000000-0000-4000-0000-000000000003",
|
|
7
|
+
"version": [1, 0, 0],
|
|
8
|
+
"min_engine_version": [1, 21, 0]
|
|
9
|
+
},
|
|
10
|
+
"modules": [
|
|
11
|
+
{
|
|
12
|
+
"type": "resources",
|
|
13
|
+
"uuid": "00000000-0000-4000-8000-000000000004",
|
|
14
|
+
"version": [1, 0, 0]
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|