Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
// IntelliSense を使用して利用可能な属性を学べます。
// 既存の属性の説明をホバーして表示します。
// 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "minecraft-js",
"request": "attach",
"name": "Attach to Minecraft",
"mode": "listen",
"localRoot": "${workspaceFolder}/scripts",
"host": "localhost",
"port": 19144
}
]
}
71 changes: 71 additions & 0 deletions @types/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import * as MC from "@minecraft/server";
import * as MCUI from "@minecraft/server-ui";

declare module "@minecraft/server" {
interface EntityComponentMap {
"inventory": MC.EntityInventoryComponent;
"health": MC.EntityHealthComponent
}

interface ItemComponentMap {
"enchantments": MC.ItemEnchantsComponent;
}

interface Entity { // getComponentNew("inventory") -> Inventory index.jsの41行目
getComponent<T extends keyof EntityComponentMap>(componentId: T): EntityComponentMap[T]
isPlayer(): this is Player;

addTags(tags: string[]): void;
removeTags(tags: string[]): void;
addTagWillRemove(tag: string): void;
}

interface ItemStack {
getComponent<T extends keyof ItemComponentMap>(componentId: T): ItemComponentMap[T];
}

interface Player {
/** @deprecated moved to <Player>.score */
setScore(objectName: string, score: number, type?: "set" | "reset" | "remove" | "add"): void;

score: ScoreboardManager;

rename?: string | false;
resetName?: boolean;
setItem?: any | false;
run?: any | false;
tell?: string | false;
kick?: string | false;
knockback?: string | false;
join?: any;

setItemJson?: any | false;
formJson?: any | false;

pushedTime?: number;


}

export interface ScoreboardManager {
set: (objectName: string, score: number) => void;
reset: (objectName: string) => void;
add: (objectName: string, score: number) => void;
remove: (objectName: string, score: number) => void;
get: (objectName: string) => number;
}
}

declare module "@minecraft/server-ui" {
interface ActionFormData {
show(player: MC.Player): Promise<MCUI.ActionFormResponse>;
}

interface ModalFormData {
show(player: MC.Player): Promise<MCUI.ModalFormResponse>;
}

interface MessageFormData {
show(player: MC.Player): Promise<MCUI.MessageFormResponse>;
}
}
File renamed without changes.
File renamed without changes.
File renamed without changes.
1 change: 1 addition & 0 deletions functions/Capi/version.mcfunction
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
tellraw @s {"rawtext":[{"text":"Commander API >> Version 1.5.0 (Alpha Official Release)"}]}
1 change: 0 additions & 1 deletion functions/Capi_version.mcfunction

This file was deleted.

10 changes: 5 additions & 5 deletions manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"name": "Commander API",
"description": "マインクラフト統合版のコマンドを拡張します。",
"uuid": "ebac7142-c210-4d32-87ba-5650be52f456",
"version": [ 1, 4, 0 ],
"version": [ 1, 5, 0 ],
"min_engine_version": [ 1, 19, 0 ]
},
"metadata": {
Expand All @@ -15,24 +15,24 @@
{
"type": "data",
"uuid": "36f425e9-10c9-466d-a620-0362a30c9b6f",
"version": [ 1, 4, 1 ]
"version": [ 1, 5, 0 ]
},
{
"language": "javascript",
"type": "script",
"uuid": "0d1f29e1-417f-48fb-b5fe-5a980830885a",
"version": [ 1, 4, 1 ],
"version": [ 1, 5, 0 ],
"entry": "scripts/index.js"
}
],
"dependencies": [
{
"module_name": "@minecraft/server",
"version": "1.2.0-beta"
"version": "1.3.0-beta"
},
{
"module_name": "@minecraft/server-ui",
"version": "1.0.0-beta"
"version": "1.1.0-beta"
}
]
}
123 changes: 123 additions & 0 deletions scripts/NativeCode.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
/**
*
* ░█████╗░░█████╗░███╗░░░███╗███╗░░░███╗░█████╗░███╗░░██╗██████╗░███████╗██████╗░  ░█████╗░██████╗░██╗
* ██╔══██╗██╔══██╗████╗░████║████╗░████║██╔══██╗████╗░██║██╔══██╗██╔════╝██╔══██╗  ██╔══██╗██╔══██╗██║
* ██║░░╚═╝██║░░██║██╔████╔██║██╔████╔██║███████║██╔██╗██║██║░░██║█████╗░░██████╔╝  ███████║██████╔╝██║
* ██║░░██╗██║░░██║██║╚██╔╝██║██║╚██╔╝██║██╔══██║██║╚████║██║░░██║██╔══╝░░██╔══██╗  ██╔══██║██╔═══╝░██║
* ╚█████╔╝╚█████╔╝██║░╚═╝░██║██║░╚═╝░██║██║░░██║██║░╚███║██████╔╝███████╗██║░░██║  ██║░░██║██║░░░░░██║
* ░╚════╝░░╚════╝░╚═╝░░░░░╚═╝╚═╝░░░░░╚═╝╚═╝░░╚═╝╚═╝░░╚══╝╚═════╝░╚══════╝╚═╝░░╚═╝  ╚═╝░░╚═╝╚═╝░░░░░╚═╝
*
* @LICENSE GNU General Public License v3.0
* @AUTHORS Nano, arutaka
* @LINK https://github.com/191225/Commander-API
*/

import * as Minecraft from "@minecraft/server";
import Config from "./config.js";

const { world, system } = Minecraft;


/**
*
* @param {Minecraft.Player} player
* @returns { Minecraft.ScoreboardManager }
*/
function createScoreboardManager(player) {
return {
set: (objectName, score) => {
// console.warn(objectName, score)
try {
const objective = world.scoreboard.getObjective(objectName);
if (!objective) return undefined;
world.scoreboard.setScore(objective, player.scoreboardIdentity, score);
} catch (e) {
player.runCommandAsync(`scoreboard players set @s "${objectName}" ${score}`);
}
},
reset: (objectName) => {
player.runCommandAsync(`scoreboard players reset @s "${objectName}"`);
},
add: (objectName, score) => {
try {
const objective = world.scoreboard.getObjective(objectName);
if (!objective) return undefined;
score += world.scoreboard.getScore(objective, player.scoreboardIdentity);
world.scoreboard.setScore(objective, player.scoreboardIdentity, score);
} catch (e) {
player.runCommandAsync(`scoreboard players add @s "${objectName}" ${score}`);
}
},
remove: (objectName, score) => {
try {
const objective = world.scoreboard.getObjective(objectName);
if (!objective) return undefined;
score = world.scoreboard.getScore(objective, player.scoreboardIdentity) - score;
world.scoreboard.setScore(objective, player.scoreboardIdentity, score);
} catch (e) {
player.runCommandAsync(`scoreboard players remove @s "${objectName}" ${score}`);
}
},
get: (objectName) => {
try {
const objective = world.scoreboard.getObjective(objectName);
if (!objective) return undefined;
return world.scoreboard.getScore(objective, player.scoreboardIdentity) || undefined;
} catch (e) {
return undefined;
}
}
}
}

export function configureNativeFunction () {
world.getAllPlayers().forEach(player => {
// @ts-ignore
if(!player.score) player.score = createScoreboardManager(player);
});
};

system.runInterval(() => configureNativeFunction());
// console.warn("NativeCode.js is loaded.")

// world.afterEvents.playerSpawn.subscribe(() => configureNativeFunction());

// @ts-ignore
// Minecraft.Entity.prototype.getTypedComponent = function(componentId) {
// return this.getComponent(componentId);
// }

// Minecraft.Entity.prototype.isPlayer = function() {
// return this.typeId === Minecraft.MinecraftEntityTypes.player.id || this instanceof Minecraft.Player;
// }

// Minecraft.Entity.prototype.addTags = function(tags) {
// for (const tag of tags) this.addTag(tag);
// }

// Minecraft.Entity.prototype.removeTags = function(tags) {
// for(const tag of tags) this.removeTag(tag);
// }

// Minecraft.Player.prototype.addTagWillRemove = function(tag) {
// this.addTag(tag);
// system.runTimeout(() => this.removeTag(tag), Config.hasAll("TagWillRemoveTick") ? Config.get("TagWillRemoveTick") : 10);
// }

Object.assign(Minecraft.Entity.prototype, {
addTagWillRemove (tag) {
system.run(() => {
this.addTag(tag);
if (!Config.get("TagWillRemoveTickEnabled")) return;
system.runTimeout(() => this.removeTag(tag), Config.hasAll("TagWillRemoveTick") ? Config.get("TagWillRemoveTick") : 10);
});
},
removeTags (tags) {tags.forEach(tag => this.removeTag(tag));},
addTags (tags) {tags.forEach(tag => this.addTag(tag));},
isPlayer () {return this.typeId === Minecraft.MinecraftEntityTypes.player.id || this instanceof Minecraft.Player;},
});

// @ts-ignore
// Minecraft.ItemStack.prototype.getTypedComponent = function(componentId) {
// return this.getComponent(componentId);
// }
Loading