myncraftjs
Version:
Simple minecraft bot package extends from mineflayer
124 lines (123 loc) • 4.09 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Client = void 0;
const events_1 = __importDefault(require("events"));
const mineflayer_1 = require("mineflayer");
const logger_1 = require("@myncraftjs/logger");
const colorchat_1 = __importDefault(require("@myncraftjs/colorchat"));
const spawncommands_1 = __importDefault(require("@myncraftjs/spawncommands"));
const defaultEventsSetup_1 = __importDefault(require("../utils/defaultEventsSetup"));
class Client extends events_1.default {
_client;
bot;
logger;
options;
plugins = [];
_persistentListeners = [];
constructor(opt) {
super();
opt.hideErrors ??= true;
opt.logEvent ??= true;
this.options = opt;
this.bot = (0, mineflayer_1.createBot)(opt);
this._client = this.bot._client;
this.loadPlugins([colorchat_1.default, spawncommands_1.default]);
this.logger = new logger_1.Logger({ header: opt.username || "Bot" });
if (!(opt.logger) && typeof opt.logger === "boolean") {
this.logger.error = () => { };
this.logger.log = () => { };
this.logger.warn = () => { };
}
if (opt.logEvent) {
const error = this.logger.error;
const log = this.logger.log;
const warn = this.logger.warn;
this.logger.error = (...texts) => {
this.emit("logger:error", texts);
error(texts);
};
this.logger.log = (...texts) => {
this.emit("logger:log", texts);
log(texts);
};
this.logger.error = (...texts) => {
this.emit("logger:error", texts);
warn(texts);
};
}
console.clear();
(0, defaultEventsSetup_1.default)(this);
this.bot.on("resourcePack", () => {
this.bot.acceptResourcePack();
});
}
restart() {
this.bot.end();
this._client.end();
this.bot = (0, mineflayer_1.createBot)(this.options);
this._client = this.bot._client;
this.loadPlugins(this.plugins);
console.clear();
this.bot.on("resourcePack", () => {
this.bot.acceptResourcePack();
});
this._bindPersistentListeners();
}
getBot() {
return this.bot;
}
_bindPersistentListeners() {
for (const { type, event, listener } of this._persistentListeners) {
if (type === "on") {
this.bot.on(event, listener);
}
else {
this.bot.once(event, listener);
}
}
}
on(event, listener) {
this._persistentListeners.push({ type: "on", event, listener });
super.on(event, listener);
this.bot.on(event, listener);
return this;
}
once(event, listener) {
this._persistentListeners.push({ type: "once", event, listener });
super.once(event, listener);
this.bot.once(event, listener);
return this;
}
loadPlugin(plugin) {
if (!this.plugins.includes(plugin))
this.plugins.push(plugin);
this.bot.loadPlugin(plugin);
}
loadPlugins(plugins) {
plugins.forEach(plugin => this.bot.loadPlugin(plugin));
}
chat(message) {
if (message.startsWith('/')) {
this.bot.chat(message);
}
else {
if (message.includes("\n"))
message.split("\n").forEach(m => {
console.log("Chat message:", m);
this.bot.chat(m);
});
else
this.bot.chat(message);
}
}
lookAt(username) {
const player = this.bot.players[username];
if (player && player.entity) {
this.bot.lookAt(player.entity.position);
}
}
}
exports.Client = Client;