idk
This commit is contained in:
201
nodejs/controller/craft_chests.js
Normal file
201
nodejs/controller/craft_chests.js
Normal file
@ -0,0 +1,201 @@
|
||||
'use strict';
|
||||
|
||||
const conf = require('../conf');
|
||||
const {sleep, nextTick} = require('../utils');
|
||||
|
||||
class CraftChests{
|
||||
constructor(args){
|
||||
this.bot = args.bot;
|
||||
this.interval = args.interval;
|
||||
this.target = args.target;
|
||||
this.intervalStop;
|
||||
this.isAction = true;
|
||||
}
|
||||
|
||||
init(){
|
||||
return new Promise(async (resolve, reject)=>{
|
||||
this.bot.on('onReady', async ()=>{
|
||||
try{
|
||||
await sleep(500);
|
||||
await this.bot.goTo({
|
||||
where: this.bot.findBlockBySign('bot walk 2').position,
|
||||
range: 0,
|
||||
});
|
||||
|
||||
await this.bot.goTo({
|
||||
where: this.bot.findBlockBySign('bot walk 1').position,
|
||||
range: 0,
|
||||
});
|
||||
|
||||
await this.bot.goTo({
|
||||
where: this.bot.findBlockBySign('bot walk 2').position,
|
||||
range: 0,
|
||||
});
|
||||
|
||||
let hasItems = await this.getItems();
|
||||
|
||||
// while(hasItems){
|
||||
// await this.craft();
|
||||
// hasItems = await this.getItems();
|
||||
// }
|
||||
|
||||
return resolve();
|
||||
|
||||
}catch(error){
|
||||
reject(error);
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
unload(){
|
||||
if(this.intervalStop){
|
||||
clearInterval(this.intervalStop);
|
||||
this.intervalStop = undefined;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
async getItems(){
|
||||
/*clear inventory*/
|
||||
await this.bot.goTo({
|
||||
where: this.bot.findChestBySign('bot dump'),
|
||||
range: 2,
|
||||
})
|
||||
await this.bot.dumpToChest(this.bot.findChestBySign('bot dump'));
|
||||
|
||||
|
||||
/*
|
||||
Bamboo
|
||||
*/
|
||||
let packed_bambooChest = this.bot.findChestBySign('packed bamboo');
|
||||
await this.bot.goTo({
|
||||
where: packed_bambooChest.position,
|
||||
range: 2,
|
||||
});
|
||||
|
||||
|
||||
await this.bot.getFullShulkersFromChest(packed_bambooChest, 'bamboo');
|
||||
|
||||
return;
|
||||
|
||||
|
||||
let hasShard = await this.bot.checkItemsFromContainer(
|
||||
prismarine_shardChest, 'prismarine_shard', 64*4
|
||||
);
|
||||
|
||||
/*
|
||||
crystals
|
||||
*/
|
||||
let prismarine_crystalsChest = this.bot.findChestBySign('crystals');
|
||||
await this.bot.goTo({
|
||||
where: prismarine_crystalsChest.position,
|
||||
range: 2,
|
||||
});
|
||||
|
||||
let hasCrystals = await this.bot.checkItemsFromContainer(
|
||||
prismarine_crystalsChest, 'prismarine_crystals', 64*5
|
||||
);
|
||||
|
||||
if(!hasShard || !hasCrystals) return false;
|
||||
|
||||
/*
|
||||
get
|
||||
*/
|
||||
await sleep(3000);
|
||||
|
||||
await this.bot.getItemsFromChest(
|
||||
prismarine_shardChest, 'prismarine_shard', 64*4
|
||||
);
|
||||
await sleep(1000);
|
||||
|
||||
await this.bot.getItemsFromChest(
|
||||
prismarine_crystalsChest, 'prismarine_crystals', 64*5
|
||||
);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
async craft(){
|
||||
|
||||
// Ensure the bot has enough items (4 shards and 5 crystals for 1 lantern)
|
||||
let prismarineShardsCount = this.bot.bot.inventory.count(this.bot.mcData.itemsByName.prismarine_shard.id);
|
||||
let prismarineCrystalsCount = this.bot.bot.inventory.count(this.bot.mcData.itemsByName.prismarine_crystals.id);
|
||||
|
||||
if(prismarineShardsCount < 4 || prismarineCrystalsCount < 5){
|
||||
console.log("Not enough materials to craft 64 Sea Lanterns.");
|
||||
return;
|
||||
}else{
|
||||
console.log('good to make sea_lantern!');
|
||||
}
|
||||
|
||||
// Hold onto the closest crafting table
|
||||
let craftingTable = this.bot.bot.findBlock({
|
||||
matching: this.bot.mcData.blocksByName.crafting_table.id,
|
||||
maxDistance: 64
|
||||
});
|
||||
|
||||
await this.bot.goTo({
|
||||
where: craftingTable.position,
|
||||
range: 1,
|
||||
});
|
||||
|
||||
// Hold onto the recipe
|
||||
let recipe = this.bot.bot.recipesAll(
|
||||
this.bot.mcData.itemsByName.sea_lantern.id,
|
||||
null,
|
||||
craftingTable
|
||||
)[0];
|
||||
|
||||
let window = await this.bot.openCraftingTable(craftingTable);
|
||||
|
||||
// Move these into openCrating function
|
||||
let windowOnce = (event)=> new Promise((resolve, reject)=> window.once(event, resolve));
|
||||
let inventory = ()=> window.slots.slice(window.inventoryStart, window.inventoryEnd)
|
||||
|
||||
// Move the items into the crafting grid
|
||||
let slotCount = 1;
|
||||
for(let shapeRow of recipe.inShape){
|
||||
for(let shape of shapeRow){
|
||||
this.bot.bot.moveSlotItem(
|
||||
inventory().find((element)=> element && element.type === shape.id).slot,
|
||||
slotCount
|
||||
);
|
||||
await windowOnce(`updateSlot:${slotCount}`);
|
||||
slotCount++;
|
||||
}
|
||||
}
|
||||
|
||||
// Wait for the server to catch up.
|
||||
await sleep(500);
|
||||
|
||||
// Craft each item until all are gone.
|
||||
let craftedCount = 0;
|
||||
while(window.slots[0]){
|
||||
await this.bot.bot.moveSlotItem(
|
||||
window.craftingResultSlot,
|
||||
38 // dont hard code this!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
);
|
||||
craftedCount++;
|
||||
await windowOnce(`updateSlot:0`);
|
||||
await sleep(50); // wait for the client to catchup
|
||||
}
|
||||
|
||||
await window.close();
|
||||
|
||||
/*
|
||||
Dump items to chest
|
||||
*/
|
||||
|
||||
let seaLanternChest = this.bot.findChestBySign('sea_lantern');
|
||||
await this.bot.goTo({
|
||||
where: seaLanternChest.position,
|
||||
range: 4,
|
||||
});
|
||||
|
||||
await this.bot.dumpToChest(seaLanternChest, 'sea_lantern')
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = CraftChests;
|
Reference in New Issue
Block a user