3 big changes. 1:blueprint removed from blueprint.explain() 2:construction validation no longer includes air particles 3:autodeletes blueprint before construction task.

This commit is contained in:
mmaheshwari2 2025-02-19 18:25:59 -08:00
parent 78843c9a26
commit baaab58f98
3 changed files with 40 additions and 10 deletions

View file

@ -8,7 +8,6 @@ export class ConstructionTaskValidator {
validate() { validate() {
try { try {
//todo: somehow make this more of a percentage or something //todo: somehow make this more of a percentage or something
//todo: change air validation
console.log('Validating task...'); console.log('Validating task...');
let valid = false; let valid = false;
let score = 0; let score = 0;
@ -71,12 +70,14 @@ export class Blueprint {
} }
explain() { explain() {
var explanation = ""; var explanation = "";
// todo: we need to limit this to be a certain amount of levels to not overload memory...
for (let item of this.data.levels) { for (let item of this.data.levels) {
var coordinates = item.coordinates; var coordinates = item.coordinates;
explanation += `Level ${item.level}: `; explanation += `Level ${item.level}: `;
explanation += `Start at coordinates X: ${coordinates[0]}, Y: ${coordinates[1]}, Z: ${coordinates[2]}`; explanation += `Start at coordinates X: ${coordinates[0]}, Y: ${coordinates[1]}, Z: ${coordinates[2]}`;
let placement_string = this._getPlacementString(item.placement); // let placement_string = this._getPlacementString(item.placement);
explanation += `\n${placement_string}\n`; // explanation += `\n${placement_string}\n`;
} }
return explanation; return explanation;
} }
@ -165,22 +166,29 @@ export class Blueprint {
const x = startCoords[0] + xOffset; const x = startCoords[0] + xOffset;
const y = startCoords[1]; const y = startCoords[1];
const z = startCoords[2] + zOffset; const z = startCoords[2] + zOffset;
try { try {
const blockAtLocation = bot.blockAt(new Vec3(x, y, z)); const blockAtLocation = bot.blockAt(new Vec3(x, y, z));
if (!blockAtLocation || blockAtLocation.name !== blockName) { const actualBlockName = blockAtLocation ? bot.registry.blocks[blockAtLocation.type].name : "air";
// Skip if both expected and actual block are "air"
if (blockName === "air" && actualBlockName === "air") {
continue;
}
if (actualBlockName !== blockName) {
mismatches.push({ mismatches.push({
level: levelData.level, level: levelData.level,
coordinates: [x, y, z], coordinates: [x, y, z],
expected: blockName, expected: blockName,
actual: blockAtLocation ? bot.registry.blocks[blockAtLocation.type].name : 'air' // Assuming air if no block actual: actualBlockName
}); });
} else { } else {
matches.push({ matches.push({
level: levelData.level, level: levelData.level,
coordinates: [x, y, z], coordinates: [x, y, z],
expected: blockName, expected: blockName,
actual: blockAtLocation ? bot.registry.blocks[blockAtLocation.type].name : 'air' // Assuming air if no block actual: actualBlockName
}); });
} }
} catch (err) { } catch (err) {
@ -292,7 +300,7 @@ export class Blueprint {
}; };
return { commands, nearbyPosition }; return { commands, nearbyPosition };
} }
} }

View file

@ -4,6 +4,7 @@ import { getPosition } from './library/world.js'
import settings from '../../settings.js'; import settings from '../../settings.js';
import { Vec3 } from 'vec3'; import { Vec3 } from 'vec3';
import { ConstructionTaskValidator, Blueprint } from './construction_tasks.js'; import { ConstructionTaskValidator, Blueprint } from './construction_tasks.js';
import {autoBuild, autoDelete} from "../../test/test_blueprint_layout.js";
//todo: modify validator code to return an object with valid and score -> do more testing hahah //todo: modify validator code to return an object with valid and score -> do more testing hahah
//todo: figure out how to log these things to the same place as bots/histories //todo: figure out how to log these things to the same place as bots/histories
@ -185,6 +186,7 @@ export class Task {
then set a random block to dirt and teleport the bot to stand on that block for starting the construction, then set a random block to dirt and teleport the bot to stand on that block for starting the construction,
This was done by MaxRobinson in one of the youtube videos. This was done by MaxRobinson in one of the youtube videos.
*/ */
if (this.data.type !== 'construction') { if (this.data.type !== 'construction') {
const pos = getPosition(bot); const pos = getPosition(bot);
@ -212,6 +214,23 @@ export class Task {
let other_name = available_agents.filter(n => n !== name)[0]; let other_name = available_agents.filter(n => n !== name)[0];
await executeCommand(this.agent, `!startConversation("${other_name}", "${this.conversation}")`); await executeCommand(this.agent, `!startConversation("${other_name}", "${this.conversation}")`);
} }
if (this.data.type === 'construction'){
//Ensures construction is cleaned out first. -> relies on cheats which are turned off?
if (this.blueprint){
const result = this.blueprint.autoDelete();
// const result = clearHouse(blueprint)
const commands = result.commands;
const nearbyPosition = result.nearbyPosition;
for (const command of commands) {
bot.chat(command);
}
}
else{
console.log('no construction blueprint?')
}
}
} }
} }

View file

@ -55,6 +55,7 @@ function generateConstructionTasks() {
const roomCounts = [4, 6, 8]; const roomCounts = [4, 6, 8];
const windowStyles = [0, 1, 2]; const windowStyles = [0, 1, 2];
const carpetStyles = [0, 1, 2]; const carpetStyles = [0, 1, 2];
const timeout = 600 // 10 min base?
for (let m = 0; m < materialLevels; m++) { for (let m = 0; m < materialLevels; m++) {
for (let r = 0; r < roomCounts.length; r++) { for (let r = 0; r < roomCounts.length; r++) {
@ -86,8 +87,10 @@ function generateConstructionTasks() {
goal: "Make a house with the blueprint", goal: "Make a house with the blueprint",
conversation: "Let's share materials and make a house with the blueprint", conversation: "Let's share materials and make a house with the blueprint",
agent_count: 2, agent_count: 2,
blueprint: blueprint, initial_inventory: createInitialInventory(blueprint, 2),
initial_inventory: createInitialInventory(blueprint, 2) timeout: timeout+(300*r), // 5 minute per additional level of complexity
blueprint: blueprint, //todo: make a pointer?
}; };
} }
} }