import { world } from 'mojang-minecraft'
import { ActionForm, MessageForm } from "../../Papers/FormPaper.js";
import { ExplosionOptions } from 'mojang-minecraft'
//Form Creation
let form1 = new ui.ActionFormData()
form1.title("§b§lMENU")
form1.body("§7--------------------------------\n§bWelcome To §cStem§7-§a11\n§7--------------------------------
")
//Starts at 0
form1.button("§bSpawn")
form1.button("§abWild")
form1.button("§cPvp")
let form2 = new ui.ActionFormData()
form2.title("§bWild")
form2.body("Teleports You To Random Place")
form2.button("§aTeleport")
function page1(player) {
form1.show(player).then(result => {
let selection = result.selection
if (selection == 0) {
player.runCommand(
"tp @s 0 64 20"
)
}
if (selection == 1) {
page2(player)
}
if (selection == 2) {
player.runCommand(
"tp @s 0 64 0"
)
}
})
}
function page2(player) {
form2.show(player).then(result => {
let selection = result.selection
if (selection == 0) {
player.runCommand(
"function wild"
)
}
})
}
world.events.beforeItemUse.subscribe(eventData => {
let player = eventData.source
let item = eventData.item
if (item.id == "minecraft:compass") {
page1(player)
}
})```
#Why this think dont work?
1 messages · Page 1 of 1 (latest)
Debug Result
JavaScript/TypeScript code blocks not detected in [message](#1074840595383734342 message ).
Example:
```js
console.log("Hi mom!")
```
What version of Minecraft do you use?
1.19.61
mojang-minecraft >> @minecraft/server
runCommand >> runCommandAsync
done but still dont work
?script manifest
Script API manifest.json
v1.19.50.21+
{
"format_version": 2,
"header": {
"name": "Bedrock Addons",
"description": "Script API Template",
"uuid": "bf67828b-e511-4c72-9922-b6dc179926f4",
"version": [ 0, 1, 0 ],
"min_engine_version": [ 1, 19, 50 ]
},
"modules": [
{
"type": "script",
"language": "javascript",
"uuid": "b7055392-4154-4aa8-813f-afa6291f1056",
"entry": "scripts/server/script.js",
"version": [ 0, 1, 0 ]
}
],
// to use eval() and Function()
"capabilities": [ "script_eval" ],
"dependencies": [
{
"module_name": "@minecraft/server",
"version": "1.1.0-beta"
},
{
"module_name": "@minecraft/server-ui",
"version": "1.0.0-beta"
}
]
}
?uuids in #bot-usage for the complete list of uuids
Last updated:
·
Canceling Watchdog Termination
1. Required import
import {system} from "@minecraft/server";
2. Cancellation of Watchdog Termination
system.events.beforeWatchdogTerminate.subscribe(eventData=>eventData.cancel = true);
Available in @minecraft/server module via module version 1.0.0-beta and above.
?script index.js
Learn Javascript!
As the Script API is a framework built on JavaScript code, having an understanding of JavaScript is key.
If you are being shown this, then you most likely are a beginner with JS and could use a little guidance.
📺 Videos on Learning JavaScript
Javascript in 1 hour
Javascript Classes in 1 hour
Web Guide:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide
Reference Sites:
https://www.w3schools.com/jsref/default.asp
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference
https://javascript.info
bruh, dont copy
ur supposed to understand and compare it with urs
btw, show ur original manifest
its already been deleted
u know what to put in the "entry":, right?
no
im still new on this
of actionform and modalform
its same on me
ohh u mean that ye thats my entry
none
oh
idk why theres no error
did u change the uuid?
no
close/open MC
the behavior loads but the script dont
still dont work
in ur main.js```js
import { world } from "@minecraft/server";
world.say('hello world')
my main.js
import 'gametests/ui_1';
add this
ok
for testing yk
its say hello world
now the error is the
import * as ui from 'mojang-minecraft-ui'
it say that not found
.
find all
mojang-minecraft
replace with
@minecraft/server
the first line also?
everything
yea
this is ui_1.js?
show the changed one
yea
then
player.id.runCommandAsync?
what line do i need to change
.id == "compass" thing
what if i use this
const { source: entity, item } = eventData;
if (
item.typeId !== "minecraft:stick" ||
item.nameTag !== "Admin Menu"
|| entity.typeId !== "minecraft:player"
|| !entity.hasTag("admin")
) {
return;
}
const result = await adminform.show(entity);```
sure
well, that should be easy to fix
how
paste ur event here
ActionFormData,
MessageFormData,
ModalFormData
} from "@minecraft/server-ui";
import { world } from '@minecraft/server' ;
//Form Creation
let form1 = new ui.ActionFormData();
form1.title("§b§lMENU");
form1.body("§7--------------------------------\n§bWelcome To §cStem§7-§a11\n§7--------------------------------");
//Starts at 0
form1.button("§bSpawn");
form1.button("§abWild");
form1.button("§cPvp");
let form2 = new ui.ActionFormData()
form2.title("§bWild")
form2.body("Teleports You To Random Place")
form2.button("§aTeleport")
function page1(player) {
form1.show(player).then(result => {
let selection = result.selection
if (selection == 0) {
player.runCommandAsync(
"tp @s 0 64 20"
)
}
if (selection == 1) {
page2(player)
}
if (selection == 2) {
player.runCommandAsync(
"tp @s 0 64 0"
)
}
})
}
function page2(player) {
form2.show(player).then(result => {
let selection = result.selection
if (selection == 0) {
player.runCommandAsync(
"function wild"
)
}
})
}
world.events.beforeItemUse.subscribe(async eventData => {
const { source: entity, item } = eventData;
if (
item.typeId !== "minecraft:compass")
) {
return;
}
const result = await form1.show(entity);
}```
what do i do
ohh
what's the next error
anyway
ill give u this simple logger for reference on what to put in ur code
export function createObj(param){
switch (typeof param) {
case 'string':
case 'number':
case 'boolean':
case 'undefined': return param;
}
if (Array.isArray(param)||Symbol.iterator in param) return Array.from(param,createObj)
const O = new Object()
for (const key in param) {
const value = param[key]
switch (typeof value) {
case 'string':
case 'number':
case 'boolean':
case 'undefined': O[key] = value; continue;
case 'object': O[key] = createObj(value); continue;
default: continue;
}
} return O
}
use this like
const display = (data) => JSON.stringify(createObj(data),0,5)
world.say(display(eventData))
world.say(display(player))
world.say(display(item))
world.say(display(block))
idk yet
const { source: entity, item } = eventData;
if (
item.typeId !== "minecraft:compass")
) {
return;
}
const result = await form1.show(entity);
}```
like this ?
compass"
("minecraft:compass")?
no
if (
item.typeId !== "minecraft:compass")//remove this
) {//cus u have it here already
return;
}
) <<<this one
const { source: entity, item } = eventData;
if (
item.typeId !== "minecraft:compass")
{
return;
}
const result = await form1.show(entity);
}```
ok
i dont prefer that kind of formatting btw, but that depends on u what makes u read it better
add ) in last....
the }) last part
Debug Result
JavaScript/TypeScript code blocks not detected in [message](#1074840595383734342 message ).
Example:
```js
console.log("Hi mom!")
```
function createObj(param){
switch (typeof param) {
case 'string':
case 'number':
case 'boolean':
case 'undefined': return param;
}
if (Array.isArray(param)||Symbol.iterator in param) return Array.from(param,createObj)
const O = new Object()
for (const key in param) {
const value = param[key]
switch (typeof value) {
case 'string':
case 'number':
case 'boolean':
case 'undefined': O[key] = value; continue;
case 'object': O[key] = createObj(value); continue;
default: continue;
}
} return O
}
console.log(Object.keys(createObj(console)))
poggers
Program Output
{
log: [Function: Function],
warn: [Function: Function],
dir: [Function: Function],
time: [Function: Function],
timeEnd: [Function: Function],
timeLog: [Function: Function],
trace: [Function: Function],
assert: [Function: Function],
Remember M9#8416 | javascript | nodejs-16.14.0 | wandbox.org
bruh there's a lot
16:46:25[Scripting][error]-Plugin [Bedrock Addons - 0.1.0] - [main.js] ran with error: [SyntaxError: expecting ',' at gametests/ui_1.js:63
show whats in 63
Program Output
[
'log', 'warn',
'dir', 'time',
'timeEnd', 'timeLog',
'trace', 'assert',
'clear', 'count',
'countReset', 'group',
'groupEnd', 'table',
'debug', 'info',
'dirxml',
Remember M9#8416 | javascript | nodejs-16.14.0 | wandbox.org
ohh ok that the new error
ScriptAPI - Debug Bot
Here have a test bot dedicated towards debuging script-api code blocks within discord by yourself.
Usage
1. Make sure to use JS Code Block formating
`
console.warn("like this")
2. ` Long press Code Block message
3. Click Apps from the menu
4. Select Debug (Preview) for beta and Debug (Stable) for stable
5. Pog! you should be seeing all the issues, if any
Last updated:
·
also
import {
ActionFormData
} from "@minecraft/server-ui";
let form1 = new ActionFormData();
import * as ui from "@minecraft/server-ui";
let form1 = new ui.ActionFormData();
No errors
No errors in [code](#1074840595383734342 message)
No errors
No errors in [code](#1074840595383734342 message)
should i use one? or both?
choose one
of course it wont
u have to use ur functions
if (item.typeId !== "minecraft:compass") return;
page1(entity);
should i remove the const result = await form1.show(entity);
and replace with that?
yes
ok
just showing this so u'll understand the difference
function page2(player) {
form2.show(player).then(result => {
const selection = result.selection
if (selection == 0) {
player.runCommandAsync(
"function wild"
)
}
})
}```
```js
async function page2(player) {
const result = await form2.show(player)
const selection = result.selection
if (selection == 0) {
player.runCommandAsync(
"function wild"
)
}
}
show code pls
wait the async i forgot to remove
world.events.beforeItemUse.subscribe(async eventData => {
const { source: entity, item } = eventData;
if (item.typeId !== "minecraft:compass") return;
page1(entity);
})
both of these wont work
import * as ui from "@minecraft/server-ui";
import { world } from '@minecraft/server' ;
//Form Creation
let form1 = new ui.ActionFormData();
form1.title("§b§lMENU");
form1.body("§7--------------------------------\n§bWelcome To §cStem§7-§a11\n§7--------------------------------");
//Starts at 0
form1.button("§bSpawn");
form1.button("§abWild");
form1.button("§cPvp");
let form2 = new ui.ActionFormData()
form2.title("§bWild")
form2.body("Teleports You To Random Place")
form2.button("§aTeleport")
async function page1(player) {
const result = await form1.show(player)
const selection = result.selection
if (selection == 0) {
player.runCommandAsync(
"tp @s 0 64 20"
)
}
if (selection == 1) {
page2(player)
}
if (selection == 2) {
player.runCommandAsync(
"tp @s 0 64 0"
)
}
}
async function page2(player) {
const result = await form2.show(player)
const selection = result.selection
if (selection == 0) {
player.runCommandAsync(
"function wild"
)
}
}
world.events.beforeItemUse.subscribe(async eventData => {
const { source: entity, item } = eventData;
if (item.typeId !== "minecraft:compass")
{
return;page1(entity);
}
})```
@sturdy heart
show ur code...
import * as ui from "@minecraft/server-ui";
import { world } from '@minecraft/server' ;
//Form Creation
let form1 = new ui.ActionFormData();
form1.title("§b§lMENU");
form1.body("§7--------------------------------\n§bWelcome To §cStem§7-§a11\n§7--------------------------------");
//Starts at 0
form1.button("§bSpawn");
form1.button("§abWild");
form1.button("§cPvp");
let form2 = new ui.ActionFormData()
form2.title("§bWild")
form2.body("Teleports You To Random Place")
form2.button("§aTeleport")
async function page1(player) {
const result = await form1.show(player)
const selection = result.selection
if (selection == 0) {
player.runCommandAsync(
"tp @s 0 64 20"
)
}
if (selection == 1) {
page2(player)
}
if (selection == 2) {
player.runCommandAsync(
"tp @s 0 64 0"
)
}
}
async function page2(player) {
const result = await form2.show(player)
const selection = result.selection
if (selection == 0) {
player.runCommandAsync(
"function wild"
)
}
}
world.events.beforeItemUse.subscribe(async eventData => {
const { source: entity, item } = eventData;
if (item.typeId !== "minecraft:compass")
return;
page1(entity);
})```
now it works
thank you
i just need to reload tha game
ok
if i change the type of ui
should it be ?
new ui.MessageFormData
new ui.ModalFormData
yes
ok thx
No errors
No errors in [code](#1074840595383734342 message)
solved ?
do u know about custom commands?
its basically string methods from ur message
import { world } from '@minecraft/server';
world.events.beforeChat.subscribe(async (eventData) => {
const player = eventData.sender;
switch (eventData.message) {
case '!gmc':
eventData.cancel = true;
await player.runCommandAsync('gamemode c');
break;
case '!help';
eventData.cancel = true;
await player.runCommandAsync('function help');
break;
case '!say';
eventData.cancel = true;
await player.sendMessage('${args[0]}');
break;
case '!gms':
eventData.cancel = true;
await player.runCommandAsync('gamemode s');
break;
default: break;
}
});
should i use '' or `` on running commands?
and the ${args[0]} does it still work? or there new code for it
Template literals
i usually use `` so I can do smth like
const a = 123
let text = 'number: ${a}'
let text2 = `number: ${a}`
console.log(text)
console.log(text2)
Remember M9#8416 | javascript | nodejs-16.14.0 | wandbox.org
same thing
Program Output
number: ${a}
number: 123
Remember M9#8416 | javascript | nodejs-16.14.0 | wandbox.org
case '!say';
eventData.cancel = true;
const args = 123
let text = `number: ${args}` ;
await player.sendMessage(`${args}`);
break;
`
that?
ok ill try
r u fond of rawtext?
idk
player.tell({rawtext:[{text:`hello my name is ${player.name}`}]})
//or
player.tell(`hello my name is ${player.name}`)
.tell() is in .60
.sendMessage() is in .70+
const message = '!say hello'
const firstSpace = message.search(' ')
const msg = message.slice(firstSpace)
const cmd = message.slice(0,firstSpace)
console.log(JSON.stringify([msg,cmd]))
const player = {
tell: console.log
}
const message = '!say hello'
const firstSpace = message.search(' ')
const msg = message.slice(firstSpace).trim()
const cmd = message.trim().slice(0,firstSpace)
switch (cmd) {
case '!say':
player.tell(msg)
break;
}
ohh ok
Program Output
hello
Remember M9#8416 | javascript | nodejs-16.14.0 | wandbox.org
dont work
show code what doesnt work, not just saying that w/o context
theres no error
import { world } from '@minecraft/server';
world.events.beforeChat.subscribe(async (eventData) => {
const player = eventData.sender;
switch (eventData.message) {
case '!gmc':
eventData.cancel = true;
await player.runCommandAsync('gamemode c');
break;
case '!help':
eventData.cancel = true;
await player.runCommandAsync('function help');
break;
//const message = '!new hello'
const player = {
tell: console.log
}
const message = '!say hello'
const firstSpace = message.search(' ')
const msg = message.slice(firstSpace).trim()
const cmd = message.trim().slice(0,firstSpace)
switch (cmd) {
case '!say':
player.tell(msg)
break;
}
case '!gms':
eventData.cancel = true;
await player.runCommandAsync('gamemode s');
break;
default: break;
}
});
u didnt do this
i did
beforeChat
then paste that
world.events.beforeChat.subscribe(async eventData=>{
const message = eventData.message
const player = eventData.sender
const firstSpace......
the const player?
switch (cmd){
case '!say':.....
case '!gmc':
.....
const player = {
tell: console.log
}
const message = '!say hello'
ohh ok
import { world } from '@minecraft/server';
world.events.beforeChat.subscribe(async (eventData) => {
const player = eventData.sender;
const message = eventData.sender;
const firstSpace = message.search(' ')
const msg = message.slice(firstSpace).trim()
const cmd = message.trim().slice(0,firstSpace)
switch (eventData.message) {
case '!gmc':
eventData.cancel = true;
await player.runCommandAsync('gamemode c');
break;
case '!help':
eventData.cancel = true;
await player.runCommandAsync('function help');
break;
case '!say':
player.tell(msg)
break;
case '!gms':
eventData.cancel = true;
await player.runCommandAsync('gamemode s');
break;
default: break;
}
});
const message = eventData.message
``````js
switch (cmd){}//not (eventData.message)
iy work now ty
ok
can u add button on ModalFormData
ok
what the code to run the textField
i cant find any in wiki
import * as ui from "@minecraft/server-ui";
import { world } from '@minecraft/server';
let loginform = new ui.ModalFormData();
loginform.title("§bLogin");
loginform.textField("Login", "Username");
async function page1(player) {
const result = await loginform.show(player)
const formValues = result.formValues
//idk what to put
//i want this textField to work when u type a username it run a command
}
world.events.beforeItemUse.subscribe(async eventData => {
const { source: entity, item } = eventData;
if (item.typeId !== "minecraft:diamond_sword")
return;
page1(entity);
})```
ModalFormData Doesn't Has Selection
It has formValues
so const formValues = result formValues?
Yeah
Basically
That is array
formValues Array contains string for textField, boolean for toggle, number for slider and index for dropdown
@sturdy heart
So if you wanna get value from textField
you must have it's index
Like you used it on top
how
You added it on top right?
yea the formValues
Nah not that
The textField
Getting values depend on , which sequel you used that
In ur case
You used like
let form = new ui.ModalFormData()
form.title("Login")
form.textField("UserName","Username")
form.toggle("Remember Me")
let result = form.show(player)
let formValues = result.formValues
//getting value of textField
formValues[0] //you used it on top so its 0
//getting value of toggle
formValues[1] //its on second position so 1
@sturdy heart
Don't use const
in formValues
If you had used toggle first and textField second
So ur code will look like
let form = new ui.ModalFormData()
form.title("Login")
form.toggle("Remember Me")
form.textField("UserName","Username")
let result = form.show(player)
let formValues = result.formValues
//getting value of toggle
formValues[0] //you used it on top so its 0
//getting value of textField
formValues[1] //its on second position so 1
You can get it value by this
And then match it by username
And if its matched
Or not
Run the code
Or command
Like
import * as ui from "@minecraft/server-ui";
import { world } from '@minecraft/server';
let loginform = new ui.ModalFormData();
loginform.title("§bLogin");
loginform.textField("Login", "Username");
async function page1(player) {
const result = await loginform.show(player)
let formValues = result.formValues
let userName = formValues[0] //according to how you sequenced it
if (userName == "Bruh Name") {
player.tell("You Are Accessed")
//your code
} else {
player.tell("Credential Dont Matched")
//kick user or what u want
//code
}
}
world.events.beforeItemUse.subscribe(async eventData => {
const { source: entity, item } = eventData;
if (item.typeId !== "minecraft:diamond_sword")
return;
page1(entity);
})```
@sturdy heart
if type something in the textField it runs the command?
ahh ok thx
Wc
if i change this```js
player.tell("Credential Dont Matched")
to
```js
player.runCommandAsync("tag @s add aa") ```
do the command only activate on the person who use the ui or the near player will be affected if i use @p?
ok ty again
Or there is a method
player.addTag("Whatever")
and also
.
player.removeTag("whatever")
if the player type a name on the textField and run addtag only the name of the person inside the textField?
wdym?
example if u type a name in textField and run tag (name from the textField) add member
So u want to set tag to the player "member" if credential matched
Yes it will add it to the player who had opened the form
ok 👌
And
I will not suggest that way
If player had the tag already
So he can enter right?
So if someone else enter with his name
He had already the tag
So he can join
Without any issue
@sturdy heart
K
if (item.typeId !== "minecraft:diamond_sword")
how to add if u have member tag u cant open the ui
should it be like this ```js
if (item.typeId !== "minecraft:diamond_sword" || player.hasTag("member")
if (item.typeId !== "minecraft:diamond_sword") return
if (!entity.hasTag("member") return
page1(entity)
entity not player
thx
Wait
@sturdy heart
That was wrong
if (item.typeId !== "minecraft:diamond_sword") return
if (!entity.hasTag("member")) return
page1(entity)
Try this
@sturdy heart
thx
if only players that dont have the tag can access and the player that has the tag cant access?
Yes
the code do the opposite
only the player that has the tag can access and the player dont have the tag cant access
ohh ok ill try
if (item.typeId !== "minecraft:diamond_sword") return
if (entity.hasTag("member")) return
page1(entity)
it works ty
@subtle ore