mindcraft/src/utils/mcdata.js

244 lines
5.8 KiB
JavaScript
Raw Normal View History

2023-08-15 23:39:02 -07:00
import minecraftData from 'minecraft-data';
2024-05-29 21:49:45 -05:00
import settings from '../../settings.js';
import { createBot } from 'mineflayer';
import prismarine_items from 'prismarine-item';
import { pathfinder } from 'mineflayer-pathfinder';
2023-11-27 21:07:52 -06:00
import { plugin as pvp } from 'mineflayer-pvp';
import { plugin as collectblock } from 'mineflayer-collectblock';
2024-01-14 14:33:25 -06:00
import { plugin as autoEat } from 'mineflayer-auto-eat';
2024-01-16 15:52:52 -06:00
import plugin from 'mineflayer-armor-manager';
const armorManager = plugin;
2023-08-15 23:39:02 -07:00
2024-01-30 16:43:30 -06:00
const mc_version = settings.minecraft_version;
2023-11-27 21:07:52 -06:00
const mcdata = minecraftData(mc_version);
const Item = prismarine_items(mc_version);
2024-03-06 11:39:17 -08:00
export const WOOD_TYPES = ['oak', 'spruce', 'birch', 'jungle', 'acacia', 'dark_oak'];
export const MATCHING_WOOD_BLOCKS = [
'log',
'planks',
'sign',
'boat',
'fence_gate',
'door',
'fence',
'slab',
'stairs',
'button',
'pressure_plate',
'trapdoor'
]
2024-03-06 15:53:22 -08:00
export const WOOL_COLORS = [
'white',
'orange',
'magenta',
'light_blue',
'yellow',
'lime',
'pink',
'gray',
'light_gray',
'cyan',
'purple',
'blue',
'brown',
'green',
'red',
'black'
]
2024-03-06 11:39:17 -08:00
export function initBot(username) {
let bot = createBot({
username: username,
2024-01-30 16:43:30 -06:00
host: settings.host,
port: settings.port,
auth: settings.auth,
version: mc_version,
});
2023-11-27 21:07:52 -06:00
bot.loadPlugin(pathfinder);
bot.loadPlugin(pvp);
bot.loadPlugin(collectblock);
2024-01-14 14:33:25 -06:00
bot.loadPlugin(autoEat);
2024-01-16 15:52:52 -06:00
bot.loadPlugin(armorManager); // auto equip armor
2024-01-14 14:33:25 -06:00
return bot;
}
2023-08-15 23:39:02 -07:00
2024-01-25 13:25:36 -08:00
export function isHuntable(mob) {
if (!mob || !mob.name) return false;
2024-05-01 12:19:42 -07:00
const animals = ['chicken', 'cow', 'llama', 'mooshroom', 'pig', 'rabbit', 'sheep'];
2024-01-25 13:25:36 -08:00
return animals.includes(mob.name.toLowerCase()) && !mob.metadata[16]; // metadata 16 is not baby
}
export function isHostile(mob) {
if (!mob || !mob.name) return false;
return (mob.type === 'mob' || mob.type === 'hostile') && mob.name !== 'iron_golem' && mob.name !== 'snow_golem';
}
2024-02-12 16:33:28 -08:00
export function getItemId(itemName) {
let item = mcdata.itemsByName[itemName];
if (item) {
return item.id;
}
return null;
2023-08-17 00:00:57 -07:00
}
export function getItemName(itemId) {
2024-02-12 16:33:28 -08:00
let item = mcdata.items[itemId]
if (item) {
return item.name;
}
return null;
}
2023-08-17 00:00:57 -07:00
2024-03-06 15:22:34 -08:00
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;
}
2023-09-29 12:53:56 -07:00
export function getAllItems(ignore) {
if (!ignore) {
ignore = [];
}
let items = []
for (const itemId in mcdata.items) {
const item = mcdata.items[itemId];
if (!ignore.includes(item.name)) {
items.push(item);
}
}
return items;
}
export function getAllItemIds(ignore) {
const items = getAllItems(ignore);
let itemIds = [];
for (const item of items) {
itemIds.push(item.id);
}
return itemIds;
}
export function getAllBlocks(ignore) {
if (!ignore) {
ignore = [];
}
2023-08-17 00:00:57 -07:00
let blocks = []
2023-09-29 12:53:56 -07:00
for (const blockId in mcdata.blocks) {
const block = mcdata.blocks[blockId];
if (!ignore.includes(block.name)) {
blocks.push(block);
2023-08-17 00:00:57 -07:00
}
}
return blocks;
}
2023-09-29 12:53:56 -07:00
export function getAllBlockIds(ignore) {
const blocks = getAllBlocks(ignore);
let blockIds = [];
for (const block of blocks) {
blockIds.push(block.id);
}
return blockIds;
}
2024-01-30 16:43:30 -06:00
export function getAllBiomes() {
return mcdata.biomes;
2024-02-12 16:33:28 -08:00
}
export function getItemCraftingRecipes(itemName) {
let itemId = getItemId(itemName);
if (!mcdata.recipes[itemId]) {
return null;
}
let recipes = [];
for (let r of mcdata.recipes[itemId]) {
let recipe = {};
let ingredients = [];
if (r.ingredients) {
ingredients = r.ingredients;
} else if (r.inShape) {
ingredients = r.inShape.flat();
}
for (let ingredient of ingredients) {
let ingredientName = getItemName(ingredient);
if (ingredientName === null) continue;
if (!recipe[ingredientName])
recipe[ingredientName] = 0;
recipe[ingredientName]++;
}
recipes.push(recipe);
}
return recipes;
}
export function getItemSmeltingIngredient(itemName) {
return {
baked_potato: 'potato',
steak: 'raw_beef',
cooked_chicken: 'raw_chicken',
cooked_cod: 'raw_cod',
cooked_mutton: 'raw_mutton',
cooked_porkchop: 'raw_porkchop',
cooked_rabbit: 'raw_rabbit',
cooked_salmon: 'raw_salmon',
dried_kelp: 'kelp',
iron_ingot: 'raw_iron',
gold_ingot: 'raw_gold',
copper_ingot: 'raw_copper',
glass: 'sand'
}[itemName];
}
2024-03-06 14:25:15 -08:00
export function getItemBlockSources(itemName) {
2024-02-12 16:33:28 -08:00
let itemId = getItemId(itemName);
2024-03-06 14:25:15 -08:00
let sources = [];
2024-02-12 16:33:28 -08:00
for (let block of getAllBlocks()) {
if (block.drops.includes(itemId)) {
2024-03-06 14:25:15 -08:00
sources.push(block.name);
2024-02-12 16:33:28 -08:00
}
}
2024-03-06 14:25:15 -08:00
return sources;
2024-02-12 16:33:28 -08:00
}
export function getItemAnimalSource(itemName) {
return {
raw_beef: 'cow',
raw_chicken: 'chicken',
raw_cod: 'cod',
raw_mutton: 'sheep',
raw_porkchop: 'pig',
raw_rabbit: 'rabbit',
2024-02-12 22:53:26 -08:00
raw_salmon: 'salmon',
leather: 'cow',
wool: 'sheep'
2024-02-12 16:33:28 -08:00
}[itemName];
}
export function getBlockTool(blockName) {
let block = mcdata.blocksByName[blockName];
if (!block || !block.harvestTools) {
return null;
}
return getItemName(Object.keys(block.harvestTools)[0]); // Double check first tool is always simplest
}
export function makeItem(name, amount=1) {
return new Item(getItemId(name), amount);
2024-01-30 16:43:30 -06:00
}