Skip to content

Commit 0d2f975

Browse files
authored
add multiple scripts (JaylyDev#83)
* Delete LICENSE from get-gamemode by Jayly#1397 * Delete new-package-tests.js from get-gamemode by Jayly#1397 * Delete index.ts from getgamemode by Jayly#1397 * Delete index.js from getgamemode by Jayly#1397 * Delete tests.js from getgamemode by Jayly#1397 * Delete tests.ts from getgamemode by Jayly#1397 * Add force-show * Add force-show * Add get-gamemode * Add get-gamemode * Add get-gamemode * Add is-moving * Add is-moving * Add world-time * Add world-time * Delete worldTime.js from world-time by Jayly#1397 * Add world-time * Add world-time * Add world-time * Add world-time * Add world-time
1 parent f590031 commit 0d2f975

14 files changed

Lines changed: 215 additions & 193 deletions

File tree

scripts/force-show/index.js

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,22 @@
1-
/**
2-
* @template {import("@minecraft/server-ui").ActionFormData | import("@minecraft/server-ui").MessageFormData | import("@minecraft/server-ui").ModalFormData} Form
3-
* @param {Form} form
4-
* @param {import("@minecraft/server").Player} player
5-
* @returns {Promise<Awaited<ReturnType<Form["show"]>>>}
6-
*/
7-
export async function forceShow(player, form) {
8-
while (true) {
9-
const response = await /** @type {ReturnType<Form["show"]>} */(form.show(player));
10-
if (response.cancelationReason !== "userBusy") {
11-
return response;
12-
}
13-
}
14-
};
1+
// Script examples for ScriptAPI
2+
// Author: Jayly#1397 <Jayly Discord>
3+
import { Player, system } from "@minecraft/server";
4+
import { ActionFormData, MessageFormData, ModalFormData } from "@minecraft/server-ui";
5+
6+
/**
7+
* @template {ActionFormData | MessageFormData | ModalFormData} Form
8+
* @param {Player} player
9+
* @param {Form} form
10+
* @param {number} timeout
11+
* @returns {Promise<Awaited<ReturnType<Form["show"]>>>}
12+
*/
13+
export async function forceShow(player, form, timeout = Infinity) {
14+
const startTick = system.currentTick;
15+
while ((system.currentTick - startTick) < timeout) {
16+
const response = await /** @type {ReturnType<Form["show"]>} */(form.show(player));
17+
if (response.cancelationReason !== "userBusy") {
18+
return response;
19+
}
20+
};
21+
throw new Error(`Timed out after ${timeout} ticks`);
22+
};

scripts/force-show/tests.js

Lines changed: 61 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,61 @@
1-
import { world, system, Player } from "@minecraft/server";
2-
import { ModalFormData, ActionFormData, MessageFormData } from "@minecraft/server-ui";
3-
import { forceShow } from "force-show";
4-
5-
world.events.beforeChat.subscribe(async (event) => {
6-
event.cancel = true;
7-
8-
const modalForm = new ModalFormData();
9-
modalForm.title('Title');
10-
modalForm.dropdown('Dropdown', ['0','1']);
11-
12-
const response = await forceShow(event.sender, modalForm);
13-
14-
// response should be ModalFormResponse
15-
for (const value of response.formValues) {
16-
console.log(value);
17-
}
18-
});
19-
20-
world.events.beforeItemUse.subscribe(async (event) => {
21-
if (!(event.source instanceof Player)) return;
22-
event.cancel = true;
23-
24-
const form = new ActionFormData();
25-
form.button('button');
26-
form.button('button');
27-
form.button('button');
28-
29-
const response = await forceShow(event.source, form);
30-
31-
// response should be ActionFormResponse
32-
world.say(String(response.selection));
33-
});
34-
35-
36-
37-
system.run(async function () {
38-
for (let player of world.getAllPlayers()) {
39-
40-
const form = new MessageFormData();
41-
form.title('title');
42-
form.button1('button');
43-
form.button2('button');
44-
45-
const response = await forceShow(player, form);
46-
47-
// response should be MessageFormResponse
48-
world.say(String(response.selection));
49-
};
50-
});
1+
// Script examples for ScriptAPI
2+
// Author: Jayly#1397 <Jayly Discord>
3+
import { world, system, Player } from "@minecraft/server";
4+
import { ModalFormData, ActionFormData, MessageFormData } from "@minecraft/server-ui";
5+
import { forceShow } from "force-show";
6+
7+
world.events.beforeChat.subscribe(async (event) => {
8+
event.cancel = true;
9+
10+
const modalForm = new ModalFormData();
11+
modalForm.title('Title');
12+
modalForm.dropdown('Dropdown', ['0','1']);
13+
14+
const response = await forceShow(event.sender, modalForm);
15+
16+
// response should be ModalFormResponse
17+
for (const value of response.formValues) {
18+
console.log(value);
19+
}
20+
});
21+
22+
world.events.beforeItemUse.subscribe(async (event) => {
23+
if (!(event.source instanceof Player)) return;
24+
event.cancel = true;
25+
26+
const form = new ActionFormData();
27+
form.button('button');
28+
form.button('button');
29+
form.button('button');
30+
31+
const response = await forceShow(event.source, form);
32+
33+
// response should be ActionFormResponse
34+
world.say(String(response.selection));
35+
});
36+
37+
38+
39+
system.run(async function () {
40+
for (let player of world.getAllPlayers()) {
41+
42+
const form = new MessageFormData();
43+
form.title('title');
44+
form.button1('button');
45+
form.button2('button');
46+
47+
const response = await forceShow(player, form);
48+
49+
// response should be MessageFormResponse
50+
world.say(String(response.selection));
51+
};
52+
});
53+
54+
// test timeout feature
55+
world.events.chat.subscribe((event) => {
56+
const { sender, message } = event;
57+
58+
forceShow(sender, new MessageFormData().title('Title').body(message), 10).then((res) => {
59+
console.log('Success');
60+
}).catch(console.error);
61+
});

scripts/get-gamemode/LICENSE

Lines changed: 0 additions & 21 deletions
This file was deleted.

scripts/get-gamemode/index.js

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
1-
/**
2-
* Get player gamemode
3-
* @param player
4-
* @returns gamemode number
5-
* @deprecated
6-
*/
7-
export function getGamemode(player) {
8-
const GameModes = ['survival', 'creative', 'adventure', 'spectator'];
9-
for (let i of GameModes) {
10-
try {
11-
player.runCommand(`testfor @s[m=${i}]`);
12-
return i;
13-
} catch {};
14-
};
15-
};
1+
// Script examples for ScriptAPI
2+
// Author: Jayly#1397 <Jayly Discord>
3+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
4+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
5+
if (ar || !(i in from)) {
6+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
7+
ar[i] = from[i];
8+
}
9+
}
10+
return to.concat(ar || Array.prototype.slice.call(from));
11+
};
12+
import { GameMode, world } from "@minecraft/server";
13+
/**
14+
* Gets the Gamemode of a player
15+
* @author Smell of Curry
16+
* @param {Player} player player to get
17+
* @returns {keyof typeof GameMode}
18+
* @example if (getGamemode(player) == "creative") return;
19+
*/
20+
export function getGamemode(player) {
21+
return Object.values(GameMode).find(function (g) { return __spreadArray([], world.getPlayers({ name: player.name, gameMode: g }), true).length; });
22+
}

scripts/get-gamemode/index.ts

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
1-
// @ts-nocheck
2-
import { Player } from "@minecraft/server";
3-
4-
/**
5-
* Get player gamemode
6-
* @param player
7-
* @returns gamemode number
8-
* @deprecated
9-
*/
10-
export function getGamemode(player: Player): string {
11-
const GameModes = ['survival', 'creative', 'adventure', 'spectator'];
12-
for (let gamemode of GameModes) {
13-
try {
14-
player.runCommand(`testfor @s[m=${gamemode}]`);
15-
return gamemode;
16-
} catch {};
17-
};
18-
};
1+
// Script examples for ScriptAPI
2+
// Author: Jayly#1397 <Jayly Discord>
3+
import { GameMode, Player, world } from "@minecraft/server";
4+
5+
/**
6+
* Gets the Gamemode of a player
7+
* @author Smell of Curry
8+
* @param {Player} player player to get
9+
* @returns {GameMode}
10+
* @example if (getGamemode(player) == "creative") return;
11+
*/
12+
export function getGamemode(player: Player): GameMode {
13+
return Object.values(GameMode).find(
14+
(g) => [...world.getPlayers({ name: player.name, gameMode: g })].length
15+
);
16+
}

scripts/get-gamemode/new-package-tests.js

Lines changed: 0 additions & 8 deletions
This file was deleted.

scripts/get-gamemode/tests.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// Script examples for ScriptAPI
2+
// Author: Jayly#1397 <Jayly Discord>
3+
import { world } from "@minecraft/server";
4+
import { getGamemode } from "get-gamemode";
5+
6+
world.events.beforeChat.subscribe((event) => {
7+
if (event.message !== 'gamemode') return;
8+
const gamemode = getGamemode(event.sender);
9+
event.sender.tell('GameMode' + gamemode);
10+
})

scripts/getgamemode/index.js

Lines changed: 0 additions & 20 deletions
This file was deleted.

scripts/getgamemode/index.ts

Lines changed: 0 additions & 14 deletions
This file was deleted.

scripts/getgamemode/tests.js

Lines changed: 0 additions & 2 deletions
This file was deleted.

0 commit comments

Comments
 (0)