finding blocks bug

This commit is contained in:
Kolby Nottingham 2024-03-06 15:25:18 -08:00
parent 977ce1e767
commit 2452dcf7b7
3 changed files with 47 additions and 35 deletions

View file

@ -57,7 +57,7 @@ export async function craftRecipe(bot, itemName, num=1) {
if (!recipes || recipes.length === 0) { if (!recipes || recipes.length === 0) {
// Look for crafting table // Look for crafting table
craftingTable = world.getNearestBlock(bot, 'crafting_table', 6); craftingTable = world.getNearestBlock(bot, 'crafting_table', 8);
if (craftingTable === null){ if (craftingTable === null){
// Try to place crafting table // Try to place crafting table
@ -65,7 +65,7 @@ export async function craftRecipe(bot, itemName, num=1) {
if (hasTable) { if (hasTable) {
let pos = world.getNearestFreeSpace(bot, 1, 6); let pos = world.getNearestFreeSpace(bot, 1, 6);
await placeBlock(bot, 'crafting_table', pos.x, pos.y, pos.z); await placeBlock(bot, 'crafting_table', pos.x, pos.y, pos.z);
craftingTable = world.getNearestBlock(bot, 'crafting_table', 6); craftingTable = world.getNearestBlock(bot, 'crafting_table', 8);
if (craftingTable) { if (craftingTable) {
recipes = bot.recipesFor(mc.getItemId(itemName), null, 1, craftingTable); recipes = bot.recipesFor(mc.getItemId(itemName), null, 1, craftingTable);
placedTable = true; placedTable = true;

View file

@ -1,5 +1,5 @@
import pf from 'mineflayer-pathfinder'; import pf from 'mineflayer-pathfinder';
import { getAllBlockIds, getAllBiomes } from '../../utils/mcdata.js'; import * as mc from '../../utils/mcdata.js';
export function getNearestFreeSpace(bot, size=1, distance=8) { export function getNearestFreeSpace(bot, size=1, distance=8) {
@ -39,26 +39,7 @@ export function getNearestFreeSpace(bot, size=1, distance=8) {
} }
export function getNearbyBlocks(bot, maxDistance, count=null) { export function getNearestBlocks(bot, block_types=null, distance=16, count=10000) {
if (maxDistance == null) maxDistance = 16;
if (count == null) count = 10000;
let positions = bot.findBlocks({matching: getAllBlockIds(['air']), maxDistance: maxDistance, count: count});
let blocks = [];
for (let i = 0; i < positions.length; i++) {
let block = bot.blockAt(positions[i]);
let distance = positions[i].distanceTo(bot.entity.position);
blocks.push({ block: block, distance: distance });
}
blocks.sort((a, b) => a.distance - b.distance);
let res = [];
for (let i = 0; i < blocks.length; i++) {
res.push(blocks[i].block);
}
return res;
}
export function getNearestBlocks(bot, block_types, distance=16, count=null) {
/** /**
* Get a list of the nearest blocks of the given types. * Get a list of the nearest blocks of the given types.
* @param {Bot} bot - The bot to get the nearest block for. * @param {Bot} bot - The bot to get the nearest block for.
@ -70,17 +51,32 @@ export function getNearestBlocks(bot, block_types, distance=16, count=null) {
* let woodBlocks = world.getNearestBlocks(bot, ['oak_log', 'birch_log'], 16, 1); * let woodBlocks = world.getNearestBlocks(bot, ['oak_log', 'birch_log'], 16, 1);
**/ **/
// if blocktypes is not a list, make it a list // if blocktypes is not a list, make it a list
if (!Array.isArray(block_types)) let block_ids = [];
block_types = [block_types]; if (block_types === null) {
let blocks = []; block_ids = mc.getAllBlockIds(['air']);
for (let block of getNearbyBlocks(bot, distance, count)) { }
if (block_types.includes(block.name)) { else {
blocks.push(block); if (!Array.isArray(block_types))
if (count !== null && blocks.length >= count) block_types = [block_types];
break; for(let block_type of block_types) {
block_ids.push(mc.getBlockId(block_type));
} }
} }
return blocks;
let positions = bot.findBlocks({matching: block_ids, maxDistance: distance, count: count});
let blocks = [];
for (let i = 0; i < positions.length; i++) {
let block = bot.blockAt(positions[i]);
let distance = positions[i].distanceTo(bot.entity.position);
blocks.push({ block: block, distance: distance });
}
blocks.sort((a, b) => a.distance - b.distance);
let res = [];
for (let i = 0; i < blocks.length; i++) {
res.push(blocks[i].block);
}
return res;
} }
@ -235,7 +231,7 @@ export function getNearbyBlockTypes(bot, distance=16) {
* @example * @example
* let blocks = world.getNearbyBlockTypes(bot); * let blocks = world.getNearbyBlockTypes(bot);
**/ **/
let blocks = getNearbyBlocks(bot, distance); let blocks = getNearestBlocks(bot, null, distance);
let found = []; let found = [];
for (let i = 0; i < blocks.length; i++) { for (let i = 0; i < blocks.length; i++) {
if (!found.includes(blocks[i].name)) { if (!found.includes(blocks[i].name)) {
@ -269,5 +265,5 @@ export function getBiomeName(bot) {
* let biome = world.getBiomeName(bot); * let biome = world.getBiomeName(bot);
**/ **/
const biomeId = bot.world.getBiome(bot.entity.position); const biomeId = bot.world.getBiome(bot.entity.position);
return getAllBiomes()[biomeId].name; return mc.getAllBiomes()[biomeId].name;
} }

View file

@ -58,6 +58,22 @@ export function getItemName(itemId) {
return null; return null;
} }
export function getBlockId(blockName) {
let block = mcdata.blocksByName[blockName];
if (block) {
return block.id;
}
return null;
}
export function getBlockName(blockId) {
let block = mcdata.blocks[blockId]
if (block) {
return block.name;
}
return null;
}
export function getAllItems(ignore) { export function getAllItems(ignore) {
if (!ignore) { if (!ignore) {
ignore = []; ignore = [];