mirror of
https://github.com/kolbytn/mindcraft.git
synced 2025-04-22 06:02:07 +02:00
house and door fixes
This commit is contained in:
parent
83b5f56acc
commit
0d31185704
5 changed files with 111 additions and 51 deletions
38
src/agent/npc/construction/hole.json
Normal file
38
src/agent/npc/construction/hole.json
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
{
|
||||||
|
"name": "hole",
|
||||||
|
"offset": -2,
|
||||||
|
"blocks": [
|
||||||
|
[
|
||||||
|
["", "", "", "", ""],
|
||||||
|
["", "dirt", "dirt", "dirt", ""],
|
||||||
|
["", "dirt", "dirt", "dirt", ""],
|
||||||
|
["", "dirt", "dirt", "dirt", ""],
|
||||||
|
["", "", "dirt", "", ""],
|
||||||
|
["", "", "dirt", "", ""]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
["dirt", "dirt", "dirt", "dirt", "dirt"],
|
||||||
|
["dirt", "chest", "bed", "air", "dirt"],
|
||||||
|
["dirt", "air", "bed", "air", "dirt"],
|
||||||
|
["dirt", "air", "air", "air", "dirt"],
|
||||||
|
["dirt", "dirt", "door", "dirt", "dirt"],
|
||||||
|
["dirt", "dirt", "air", "dirt", "dirt"]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
["dirt", "dirt", "dirt", "dirt", "dirt"],
|
||||||
|
["dirt", "air", "air", "air", "dirt"],
|
||||||
|
["dirt", "torch", "air", "air", "dirt"],
|
||||||
|
["dirt", "air", "air", "air", "dirt"],
|
||||||
|
["dirt", "dirt", "door", "dirt", "dirt"],
|
||||||
|
["air", "air", "air", "air", "air"]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
["air", "air", "air", "air", "air"],
|
||||||
|
["dirt", "dirt", "dirt", "dirt", "dirt"],
|
||||||
|
["dirt", "dirt", "dirt", "dirt", "dirt"],
|
||||||
|
["dirt", "dirt", "dirt", "dirt", "dirt"],
|
||||||
|
["air", "air", "air", "air", "air"],
|
||||||
|
["air", "air", "air", "air", "air"]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
42
src/agent/npc/construction/house.json
Normal file
42
src/agent/npc/construction/house.json
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
{
|
||||||
|
"name": "shelter",
|
||||||
|
"offset": -1,
|
||||||
|
"blocks": [
|
||||||
|
[
|
||||||
|
["", "", "", "", ""],
|
||||||
|
["", "planks", "planks", "planks", ""],
|
||||||
|
["", "planks", "planks", "planks", ""],
|
||||||
|
["", "planks", "planks", "planks", ""],
|
||||||
|
["", "planks", "planks", "planks", ""],
|
||||||
|
["", "", "planks", "", ""],
|
||||||
|
["", "", "", "", ""]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
["log", "planks", "planks", "planks", "log"],
|
||||||
|
["planks", "chest", "bed", "air", "planks"],
|
||||||
|
["planks", "air", "bed", "air", "planks"],
|
||||||
|
["planks", "air", "air", "air", "planks"],
|
||||||
|
["planks", "air", "air", "air", "planks"],
|
||||||
|
["log", "planks", "door", "planks", "log"],
|
||||||
|
["", "air", "air", "air", ""]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
["log", "planks", "planks", "planks", "log"],
|
||||||
|
["planks", "torch", "air", "torch", "planks"],
|
||||||
|
["planks", "air", "air", "air", "planks"],
|
||||||
|
["planks", "air", "air", "air", "planks"],
|
||||||
|
["planks", "torch", "air", "torch", "planks"],
|
||||||
|
["log", "planks", "door", "planks", "log"],
|
||||||
|
["", "air", "air", "air", ""]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
["air", "air", "air", "air", "air"],
|
||||||
|
["air", "planks", "planks", "planks", "air"],
|
||||||
|
["planks", "planks", "planks", "planks", "planks"],
|
||||||
|
["planks", "planks", "planks", "planks", "planks"],
|
||||||
|
["air", "planks", "planks", "planks", "air"],
|
||||||
|
["air", "air", "air", "air", "air"],
|
||||||
|
["", "air", "air", "air", ""]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
|
@ -1,43 +0,0 @@
|
||||||
{
|
|
||||||
"name": "shelter",
|
|
||||||
"offset": -1,
|
|
||||||
"placement": [
|
|
||||||
[1, 1, 1],
|
|
||||||
[1, 2, 1],
|
|
||||||
[1, 3, 1],
|
|
||||||
[2, 3, 1],
|
|
||||||
[3, 1, 1],
|
|
||||||
[3, 2, 1],
|
|
||||||
[3, 3, 1]
|
|
||||||
],
|
|
||||||
"blocks": [
|
|
||||||
[
|
|
||||||
["dirt", "dirt", "dirt", "dirt", "dirt"],
|
|
||||||
["dirt", "dirt", "dirt", "dirt", "dirt"],
|
|
||||||
["dirt", "dirt", "dirt", "dirt", "dirt"],
|
|
||||||
["dirt", "dirt", "dirt", "dirt", "dirt"],
|
|
||||||
["dirt", "dirt", "dirt", "dirt", "dirt"]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
["dirt", "dirt", "dirt", "dirt", "dirt"],
|
|
||||||
["dirt", "chest", "air", "bed", "dirt"],
|
|
||||||
["dirt", "air", "air", "bed", "dirt"],
|
|
||||||
["dirt", "air", "air", "air", "dirt"],
|
|
||||||
["dirt", "dirt", "door", "dirt", "dirt"]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
["dirt", "dirt", "dirt", "dirt", "dirt"],
|
|
||||||
["dirt", "air", "air", "air", "dirt"],
|
|
||||||
["dirt", "air", "air", "air", "dirt"],
|
|
||||||
["dirt", "air", "air", "air", "dirt"],
|
|
||||||
["dirt", "dirt", "door", "dirt", "dirt"]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
["air", "air", "air", "air", "air"],
|
|
||||||
["dirt", "dirt", "dirt", "dirt", "dirt"],
|
|
||||||
["dirt", "dirt", "dirt", "dirt", "dirt"],
|
|
||||||
["dirt", "dirt", "dirt", "dirt", "dirt"],
|
|
||||||
["air", "air", "air", "air", "air"]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -50,9 +50,25 @@ export class NPCContoller {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (let name in this.constructions) {
|
||||||
|
let sizez = this.constructions[name].blocks[0].length;
|
||||||
|
let sizex = this.constructions[name].blocks[0][0].length;
|
||||||
|
let max_size = Math.max(sizex, sizez);
|
||||||
|
for (let y = 0; y < this.constructions[name].blocks.length; y++) {
|
||||||
|
for (let z = 0; z < max_size; z++) {
|
||||||
|
if (z >= this.constructions[name].blocks[y].length)
|
||||||
|
this.constructions[name].blocks[y].push([]);
|
||||||
|
for (let x = 0; x < max_size; x++) {
|
||||||
|
if (x >= this.constructions[name].blocks[y][z].length)
|
||||||
|
this.constructions[name].blocks[y][z].push('');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.agent.bot.on('idle', async () => {
|
this.agent.bot.on('idle', async () => {
|
||||||
// Wait a while for inputs before acting independently
|
// Wait a while for inputs before acting independently
|
||||||
await new Promise((resolve) => setTimeout(resolve, 2000));
|
await new Promise((resolve) => setTimeout(resolve, 5000));
|
||||||
if (!this.agent.isIdle()) return;
|
if (!this.agent.isIdle()) return;
|
||||||
|
|
||||||
// Persue goal
|
// Persue goal
|
||||||
|
@ -65,15 +81,19 @@ export class NPCContoller {
|
||||||
|
|
||||||
async executeNext() {
|
async executeNext() {
|
||||||
if (!this.agent.isIdle()) return;
|
if (!this.agent.isIdle()) return;
|
||||||
|
await this.agent.coder.execute(async () => {
|
||||||
|
await skills.moveAway(this.agent.bot, 2);
|
||||||
|
});
|
||||||
|
|
||||||
if (this.agent.bot.time.timeOfDay < 12000) {
|
if (this.agent.bot.time.timeOfDay < 13000) {
|
||||||
// Exit any buildings
|
// Exit any buildings
|
||||||
let building = this.currentBuilding();
|
let building = this.currentBuilding();
|
||||||
if (building) {
|
if (building == this.data.home) {
|
||||||
let door_pos = this.getBuildingDoor(building);
|
let door_pos = this.getBuildingDoor(building);
|
||||||
if (door_pos) {
|
if (door_pos) {
|
||||||
await this.agent.coder.execute(async () => {
|
await this.agent.coder.execute(async () => {
|
||||||
await skills.useDoor(this.agent.bot, door_pos);
|
await skills.useDoor(this.agent.bot, door_pos);
|
||||||
|
await skills.moveAway(this.agent.bot, 2); // If the bot is too close to the building it will try to enter again
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -96,6 +116,9 @@ export class NPCContoller {
|
||||||
await skills.goToBed(this.agent.bot);
|
await skills.goToBed(this.agent.bot);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.agent.isIdle())
|
||||||
|
this.agent.bot.emit('idle');
|
||||||
}
|
}
|
||||||
|
|
||||||
async executeGoal() {
|
async executeGoal() {
|
||||||
|
@ -142,9 +165,6 @@ export class NPCContoller {
|
||||||
if (res.acted) break;
|
if (res.acted) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.agent.isIdle())
|
|
||||||
this.agent.bot.emit('idle');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
currentBuilding() {
|
currentBuilding() {
|
||||||
|
@ -186,10 +206,11 @@ export class NPCContoller {
|
||||||
if (door_x !== null) break;
|
if (door_x !== null) break;
|
||||||
}
|
}
|
||||||
if (door_x === null) return null;
|
if (door_x === null) return null;
|
||||||
|
|
||||||
let sizex = this.constructions[name].blocks[0][0].length;
|
let sizex = this.constructions[name].blocks[0][0].length;
|
||||||
let sizez = this.constructions[name].blocks[0].length;
|
let sizez = this.constructions[name].blocks[0].length;
|
||||||
let orientation = this.data.built[name].orientation;
|
let orientation = 4 - this.data.built[name].orientation; // this conversion is opposite
|
||||||
|
if (orientation == 4) orientation = 0;
|
||||||
[door_x, door_z] = rotateXZ(door_x, door_z, orientation, sizex, sizez);
|
[door_x, door_z] = rotateXZ(door_x, door_z, orientation, sizex, sizez);
|
||||||
door_y += this.constructions[name].offset;
|
door_y += this.constructions[name].offset;
|
||||||
|
|
||||||
|
|
|
@ -77,6 +77,8 @@ export function blockSatisfied(target_name, block) {
|
||||||
return block.name.endsWith(target_name);
|
return block.name.endsWith(target_name);
|
||||||
} else if (target_name == 'bed') {
|
} else if (target_name == 'bed') {
|
||||||
return block.name.endsWith('bed');
|
return block.name.endsWith('bed');
|
||||||
|
} else if (target_name == 'torch') {
|
||||||
|
return block.name.includes('torch');
|
||||||
}
|
}
|
||||||
return block.name == target_name;
|
return block.name == target_name;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue