diff --git a/lib/plugins/guard.js b/lib/plugins/guard.js index c0b8576..e292dc1 100644 --- a/lib/plugins/guard.js +++ b/lib/plugins/guard.js @@ -6,10 +6,12 @@ let cfg = {} let bot = {} let guardPos -const filterallMobs = e => e.type === 'mob' -// const filterPlayers = e => e.type === 'player' && e.username !== 'Applezaus' +const filterAllMobs = e => e.type === 'mob' +const filterPlayers = e => e.type === 'player' +const filterMods = e => e.type === 'player' && [cfg.mods].includes(e.username) // const filterPassiveMobs = e => e.kind === 'Passive mobs' const filterCreeper = e => e.mobType === 'Creeper' +// const filterCreeperOrEndermen = e => ['Creeper', 'EndderMen'].includes(e.mobType) //TODO endmen hostile by default? const filterHostileMobs = e => e.kind === 'Hostile mobs' // // not needed if detecting by kind // && e.mobType !== 'Armor Stand' // Mojang classifies armor stands as mobs for some reason? @@ -60,33 +62,56 @@ function lookForMobs() { const filter = e => e.position.distanceTo(bot.entity.position) < 16 && filterHostileMobs(e) const entityEnemy = bot.nearestEntity(filter) - if (entityEnemy) { - if(filterCreeper(entityEnemy)) + if (entityEnemy && !filterCreeper(entityEnemy)) { + // if(filterCreeper(entityEnemy)) // Start attacking // bot.off('time', lookForMobs) // bot.on('physicTick', lookForMobs) + bot.pvp.movements.canDig = !!cfg.move && cfg.move.canDig bot.pvp.attack(entityEnemy) + } else if (entityEnemy) { + bot.lookAt( + // (new v.Vec3(0, 1, 0)).add( + entityEnemy.position + // ) + ) + cfg.quiet || bot.chat("AH! A creeper! They creep me out!") } } function guardSelf(entity) { if (!cfg.guard.self || entity !== bot.entity || guardPos) return // Do nothing // bot.chat("") - bot.chat(( - () => { const a = ["ouch!", "oww!", "help", "", "", ""]; return a[Math.floor(Math.random() * a.length)] } - )()) + const hurtMessages = [ + "ouch!", "oww!", "help", "monster!" + ] + const hurtMessagesPlayer = [ + "leave me alone!", "don't hurt me!", "bully!", "go away!", "stop", "no stop", "stop it", "murderer!", + "what have i ever done to you? :(", + ] + console.info(bot.nearestEntity(filterAllMobs)) + + // Only look for mobs within 5 blocks + // const filter = e => e.position.distanceTo(bot.entity.position) < 5 && filterHostileMobs(e) || filterPlayers(e) && !filterMods(e)//anarchy + const filter = e => e.position.distanceTo(bot.entity.position) < 5 && filterHostileMobs(e) + + const entityEnemy = bot.nearestEntity(filter) - console.info(bot.nearestEntity(filterallMobs)) + cfg.quiet || 0.2 < Math.random() && entityEnemy && bot.chat( + // TODO use fuzzy message function + filterPlayers(entityEnemy) ? + hurtMessagesPlayer[Math.floor(Math.random() * hurtMessagesPlayer.length)] + : + hurtMessages[Math.floor(Math.random() * hurtMessages.length)] - // Only look for mobs within 10 blocks - const filter = e => e.position.distanceTo(bot.entity.position) < 10 && filterHostileMobs(e) + ) - const entityEnemy = bot.nearestEntity(filter) if (entityEnemy && !filterCreeper(entityEnemy)) { // Start attacking // bot.off('time', lookForMobs) // bot.on('physicTick', lookForMobs) bot.pvp.attack(entityEnemy) + bot.pvp.movements.canDig = !!cfg.move && cfg.move.canDig } }