В первую очередь важно понимать, что данный движок работает с другими модами, загружая их из остальных скриптов лаунчера. Для использования ModAPI достаточно импортировать MineAPI и добавить в свой скрипт заголовочный объект, определяющий свойства модификации.
const __mineapi__ = {
name: "Example modification",
author: "TooMuchDeveloper",
version: "1.0",
mcpe: [14, 15, 16, 17],
api: 11
};Теперь к скрипту добавится MineAPI, если он поддерживается конечно же. Мы можем задать необходимые версии Minecraft, на которых модификация будет запускаться. Все, что идет ниже 1.0, версии до 16, все что начинается с 1.0, версии с 17, где 1.1 = 18, 1.2 = 19 и так далее. В массиве можно указать поддерживаемые версии, либо же упустить данный атрибут вообще.
Если же мы не хотим, чтобы наша модификация индексировалась вообще, мы можем добавить иную константу в скрипт.
const __mineapi_ignore__ = true;Впрочем, это действие скорее всего никогда и никому не пригодится, ибо при отсутствии константы __mineapi__ модификация просто не будет инициализироваться.
Для примера, давайте выведем "Hello, Old-flag!", создав свой первый скрипт на MineAPI. Воспользуемся Handler, позволяющим обрабатывать хуки и откладывать действия в потоке интерфейса.
Handler.addHook("ModsLoaded", function(mods) {
Interface.createToast("<html>Hello, Old-<i>flag</i>!", Interface.Toast.LENGTH_LONG);
});Как только мы загрузим лаунчер, сразу же получим сообщение хлебец на экране. В данном случае используется форматирование Spannable, создаваемое с помощью Html. Для его использования достаточно лишь добавить <html> в начало строчки создаваемого текста в виджете.
function onLaunch() {
Handler.addHook("ModsLoaded", function(mods) {});
Handler.addHook("LevelSelected", function(name) {});
Handler.addHook("LevelPreloaded", function(id) {});
Handler.addHook("LevelTicked", function() {});
Handler.addHook("LevelLoaded", function() {});
Handler.addHook("ItemUsed", function(coords, item, block) {
// coords.x, coords.y, coords.z, coords.array
// item.id, item.data, item.slot
// block.id, block.data, block.side
return true; // preventDefault();
});
Handler.addHook("RedstoneUpdated", function(coords, power, block) {
// coords.x, coords.y, coords.z, coords.array
// power.current, power.some
// block.id, block.data
});
Handler.addHook("BlockDestroyStarted", function(coords, item, block) {
// coords.x, coords.y, coords.z, coords.array
// item.id, item.data, item.slot
// block.id, block.data, block.side
return true; // preventDefault();
});
Handler.addHook("BlockDestroyContinued", function(progress, coords, item, block) {
// coords.x, coords.y, coords.z, coords.array
// item.id, item.data, item.slot
// block.id, block.data, block.side
return true; // preventDefault();
});
Handler.addHook("BlockDestroyed", function(coords, item, block) {
// coords.x, coords.y, coords.z, coords.array
// item.id, item.data, item.slot
// block.id, block.data, block.side
return true; // preventDefault();
});
Handler.addHook("BlockProjectiled", function(coords, projectile, block) {
// coords.x, coords.y, coords.z, coords.array
// block.id, block.data, block.side
});
Handler.addHook("FoodEated", function(hearts, saturationRatio) {});
Handler.addHook("EntityAttacked", function(attacker) {
return true; // preventDefault();
});
Handler.addHook("EntityHurted", function(attacker, victim, halfhearts) {
return true; // preventDefault();
});
Handler.addHook("EntityDeathed", function(attacker, victim) {
return true; // preventDefault();
});
Handler.addHook("EntityRemoved", function(entity) {});
Handler.addHook("EntityExploded", function(coords, entity, explode) {
// coords.x, coords.y, coords.z, coords.array
// explode.power, explode.onFire
return true; // preventDefault();
});
Handler.addHook("EntityProjectiled", function(coords, projectile) {
// coords.x, coords.y, coords.z, coords.array
});
Handler.addHook("PlayerExpAdded", function(player, experienceAdded) {
return true; // preventDefault();
});
Handler.addHook("PlayerLevelChanged", function(player, levelsAdded) {
return true; // preventDefault();
});
Handler.addHook("MessageSended", function(str) {
return true; // preventDefault();
});
Handler.addHook("MessageReceived", function(str) {
return true; // preventDefault();
});
Handler.addHook("ScreenChanged", function(screen) {});
Handler.addHook("LevelLeaved", function() {});
}