mirror of
https://github.com/kolbytn/mindcraft.git
synced 2025-08-13 18:55:34 +02:00
better idle check, wait for done generating
This commit is contained in:
parent
cee25212aa
commit
e63b528bba
3 changed files with 19 additions and 9 deletions
|
@ -165,13 +165,13 @@ export class Agent {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
this.self_defense = true;
|
|
||||||
this.defending = false;
|
|
||||||
this._pause_defending = false;
|
|
||||||
|
|
||||||
// set interval every 300ms to update the bot's state
|
// set interval every 300ms to update the bot's state
|
||||||
this.update_interval = setInterval(async () => {
|
this.update_interval = setInterval(async () => {
|
||||||
this.bot.modes.update();
|
this.bot.modes.update();
|
||||||
}, 300);
|
}, 300);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isIdle() {
|
||||||
|
return !this.coder.executing && !this.coder.generating;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ export class Coder {
|
||||||
this.file_counter = 0;
|
this.file_counter = 0;
|
||||||
this.fp = '/bots/'+agent.name+'/action-code/';
|
this.fp = '/bots/'+agent.name+'/action-code/';
|
||||||
this.executing = false;
|
this.executing = false;
|
||||||
|
this.generating = false;
|
||||||
this.code_template = '';
|
this.code_template = '';
|
||||||
this.timedout = false;
|
this.timedout = false;
|
||||||
}
|
}
|
||||||
|
@ -87,6 +88,15 @@ export class Coder {
|
||||||
|
|
||||||
|
|
||||||
async generateCode(agent_history) {
|
async generateCode(agent_history) {
|
||||||
|
// wrapper to prevent overlapping code generation loops
|
||||||
|
await this.stop();
|
||||||
|
this.generating = true;
|
||||||
|
await this.generateCodeLoop(agent_history);
|
||||||
|
this.generating = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async generateCodeLoop(agent_history) {
|
||||||
let system_message = "You are a minecraft mineflayer bot that plays minecraft by writing javascript codeblocks. Given the conversation between you and the user, use the provided skills and world functions to write your code in a codeblock. Example response: ``` // your code here ``` You will then be given a response to your code. If you are satisfied with the response, respond without a codeblock in a conversational way. If something went wrong, write another codeblock and try to fix the problem.";
|
let system_message = "You are a minecraft mineflayer bot that plays minecraft by writing javascript codeblocks. Given the conversation between you and the user, use the provided skills and world functions to write your code in a codeblock. Example response: ``` // your code here ``` You will then be given a response to your code. If you are satisfied with the response, respond without a codeblock in a conversational way. If something went wrong, write another codeblock and try to fix the problem.";
|
||||||
system_message += getSkillDocs();
|
system_message += getSkillDocs();
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ const modes = [
|
||||||
on: true,
|
on: true,
|
||||||
active: false,
|
active: false,
|
||||||
update: function (agent) {
|
update: function (agent) {
|
||||||
if (!agent.coder.executing) {
|
if (agent.isIdle()) {
|
||||||
const huntable = world.getNearestEntityWhere(agent.bot, entity => mc.isHuntable(entity), 8);
|
const huntable = world.getNearestEntityWhere(agent.bot, entity => mc.isHuntable(entity), 8);
|
||||||
if (huntable) {
|
if (huntable) {
|
||||||
execute(this, agent, async () => {
|
execute(this, agent, async () => {
|
||||||
|
@ -51,7 +51,7 @@ const modes = [
|
||||||
on: true,
|
on: true,
|
||||||
active: false,
|
active: false,
|
||||||
update: function (agent) {
|
update: function (agent) {
|
||||||
if (!agent.coder.executing) {
|
if (agent.isIdle()) {
|
||||||
let item = world.getNearestEntityWhere(agent.bot, entity => entity.name === 'item', 8);
|
let item = world.getNearestEntityWhere(agent.bot, entity => entity.name === 'item', 8);
|
||||||
if (item) {
|
if (item) {
|
||||||
execute(this, agent, async () => {
|
execute(this, agent, async () => {
|
||||||
|
@ -70,7 +70,7 @@ const modes = [
|
||||||
active: false,
|
active: false,
|
||||||
update: function (agent) {
|
update: function (agent) {
|
||||||
if (this.active) return;
|
if (this.active) return;
|
||||||
if (!agent.coder.executing) {
|
if (agent.isIdle()) {
|
||||||
// TODO: check light level instead of nearby torches, block.light is broken
|
// TODO: check light level instead of nearby torches, block.light is broken
|
||||||
const near_torch = world.getNearestBlock(agent.bot, 'torch', 8);
|
const near_torch = world.getNearestBlock(agent.bot, 'torch', 8);
|
||||||
if (!near_torch) {
|
if (!near_torch) {
|
||||||
|
@ -96,7 +96,7 @@ const modes = [
|
||||||
last_entity: null,
|
last_entity: null,
|
||||||
next_change: 0,
|
next_change: 0,
|
||||||
update: function (agent) {
|
update: function (agent) {
|
||||||
if (!agent.coder.executing) {
|
if (agent.isIdle()) {
|
||||||
this.active = true;
|
this.active = true;
|
||||||
const entity = agent.bot.nearestEntity();
|
const entity = agent.bot.nearestEntity();
|
||||||
let entity_in_view = entity && entity.position.distanceTo(agent.bot.entity.position) < 10 && entity.name !== 'enderman';
|
let entity_in_view = entity && entity.position.distanceTo(agent.bot.entity.position) < 10 && entity.name !== 'enderman';
|
||||||
|
@ -174,7 +174,7 @@ class ModeController {
|
||||||
}
|
}
|
||||||
|
|
||||||
update() {
|
update() {
|
||||||
if (!this.agent.coder.executing) {
|
if (this.agent.isIdle()) {
|
||||||
// other actions might pause a mode to override it
|
// other actions might pause a mode to override it
|
||||||
// when idle, unpause all modes
|
// when idle, unpause all modes
|
||||||
for (let mode of this.modes_list) {
|
for (let mode of this.modes_list) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue