Skip to content

Instantly share code, notes, and snippets.

@lupettohf
Last active June 5, 2023 03:19
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lupettohf/79f7948f8ce2aac9c96206f12aeb8f9b to your computer and use it in GitHub Desktop.
Save lupettohf/79f7948f8ce2aac9c96206f12aeb8f9b to your computer and use it in GitHub Desktop.
var mineflayer = require('mineflayer')
const mc = require('minecraft-protocol');
var autoeat = require("mineflayer-auto-eat")
var botConfig = require('./config.json')
const cachePackets = require('./cachePacket.js');
var proxyClient; // This is the real client (java)
var bot; // This is the fake client connecting to the server
var server; // The proxy
var toggleAntiAFK = false;
let nowFishing = false
let mcData
run()
function run()
{
log("Starting Minecraft Server");
server = mc.createServer({
'online-mode': true,
encryption: true,
host: '0.0.0.0',
port: 25565,
version: "1.12.2",
'max-players': maxPlayers = 1,
'motd': "§cl§6u§eh§af§9'§bs§5 §ca§6f§ek§a §9p§br§5o§cx§6y§e §as§9e§br§5v§ce§6r"
});
log("Starting mineflayer client");
bot = mineflayer.createBot({
host: "constantiam.net",
port: 25565,
username: "",
password: "",
plugins: {
physics: false
},
hideErrors: true
})
bot.loadPlugin(autoeat);
//Loads item definition
bot.on('inject_allowed', () => {
mcData = require('minecraft-data')(bot.version)
})
cachePackets.init(bot._client, true);
bot._client.on("packet", (data, meta, rawData) => {
if(proxyClient){ filterPacketAndSend(rawData, meta, proxyClient); }
});
//Handles remote server quit
bot._client.on('end', () =>
{
if(proxyClient)
{
proxyClient.end("Hurr durr, got disconnected form server.\nAttempting to restart");
proxyClient = null;
}
//run();
});
//Handles generic errors
bot._client.on('error', (err) => {
if(proxyClient)
{
proxyClient.end("Hurr durr, we got a thing here:\n"+err.toString());
proxyClient = null;
}
});
server.on('listening', function () {
log('Server listening on port ' + server.socketServer.address().port)
});
// Here it handles packet switching to client
server.on('login', (newProxyClient) => {
let remoteAddress = newProxyClient.socket.remoteAddress
log('New incoming connection from: '+remoteAddress)
if(bot.username == undefined)
{
server.end("Wait for bot to connect.");
}
newProxyClient.on('packet', (data, meta, rawData) => {
filterPacketAndSend(rawData, meta, bot._client);
});
cachePackets.join(newProxyClient);
proxyClient = newProxyClient;
newProxyClient.on('end', function () {
log(remoteAddress + ' Closed connection');
//bot.physics.physicEnabled = true;
})
proxyClient.on('packet', (data, meta) => {
if(meta.name === "chat")
{
console.log(data.message)
switch(data.message)
{
case ",antiafk":
//bunnyTheAntiAFK(2000)
break;
case ",fishing on":
startFishing()
break;
case ",fishing off":
stopFishing()
break;
case ",ping":
sendMessage(newProxyClient, "Pong!");
break;
case ",stats":
stats();
break;
}
}
});
sendMessage(newProxyClient, "Welcome to luhf's afk proxy!")
//bot.physics.physicEnabled = false;
});
// Relay chat to terminal
bot.on('message', (msg) => {
log(msg.toString());
})
// Send playerlist to terminal and setup autoeat
bot.once('spawn', () => {
var playersList = Object.keys(bot.players).join(", ")
log(`Online players: ${playersList}`)
bot.autoEat.options = {
priority: "foodPoints",
startAt: 19,
bannedFood: [],
};
});
//Hook for autoeat
bot.on("health", () => {
if (bot.food === 20) bot.autoEat.disable()
else {
sendMessage(proxyClient, "Proxy AutoEat running...")
bot.autoEat.enable()
}
})
}
function filterPacketAndSend(data, meta, dest) {
// Do not send commands proxy commands
if(meta != undefined && data.message != undefined)
if(meta.name === "chat" && data.message.startsWith(",")) return;
if (meta.name !== "keep_alive" && meta.name !== "update_time") {
dest.writeRaw(data);
}
}
function stats()
{
sendMessage(proxyClient, `Server version: ${bot.game.serverBrand} (${bot.player.ping} ms)\nExperience: ${bot.experience.pints} (level ${bot.experience.level})\n`);
}
/*
function onCollect (player, entity) {
if (entity.kind === 'Drops' && player === bot.entity) {
bot.removeListener('playerCollect', onCollect)
setTimeout(()=>
{
startFishing()
}, 1000);
}
}
*/
async function startFishing () {
sendMessage(proxyClient, `Starting proxy fishing module.`);
try {
await bot.equip(mcData.itemsByName.fishing_rod.id, 'hand')
} catch (err) {
return bot.chat(err.message)
}
nowFishing = true
bot._client.on('sound_effect', (packet) => {
if(packet.soundId == 153)
{
setTimeout(()=>
{
bot._client.write('use_item', {hand: 0});
}, 350);
setTimeout(()=>
{
startFishing()
}, 550);
}
})
//bot.on('playerCollect', onCollect)
try {
await bot.fish()
} catch (err) {
bot.chat(err.message)
}
nowFishing = false
}
function stopFishing () {
sendMessage(proxyClient, `Stopped proxy fishing module.`);
bot.removeListener('playerCollect', onCollect)
if (nowFishing) {
bot.activateItem()
}
}
function bunnyTheAntiAFK(interval)
{
if(toggleAntiAFK){
sendMessage(proxyClient, "Anti AFK --> off");
toggleAntiAFK = false;
clearInterval(jumpTimeout);
return;
}
sendMessage(proxyClient, "Anti AFK --> on");
const jumpTimeout = setInterval(() =>
{
setTimeout(() =>
{
bot.setControlState('jump', false)
}, 200);
bot.setControlState('jump', true)
}, interval);
toggleAntiAFK = true;
}
function sendMessage(client, message)
{
if(client == undefined) return;
var msg = {
translate: 'chat.type.announcement',
"with": [
'§cS§6e§er§av§9e§br',
message
]};
client.write('chat', { message: JSON.stringify(msg), position: 0, sender: '0'});
}
function log(message)
{
console.log(message);
}
port: 25565,
username: "",
password: "",
plugins: {
physics: false
},
hideErrors: true
})
bot.loadPlugin(autoeat);
cachePackets.init(bot._client, true);
bot._client.on("packet", (data, meta, rawData) => {
if(proxyClient){ filterPacketAndSend(rawData, meta, proxyClient); }
});
//Handles remote server quit
bot._client.on('end', () =>
{
if(proxyClient)
{
proxyClient.end("Hurr durr, got disconnected form server.\nAttempting to restart");
proxyClient = null;
}
//run();
});
//Handles generic errors
bot._client.on('error', (err) => {
if(proxyClient)
{
proxyClient.end("Hurr durr, we got a thing here:\n"+err.toString());
proxyClient = null;
}
});
server.on('listening', function () {
log('Server listening on port ' + server.socketServer.address().port)
});
// Here it handles packet switching to client
server.on('login', (newProxyClient) => {
let remoteAddress = newProxyClient.socket.remoteAddress
log('New incoming connection from: '+remoteAddress)
newProxyClient.on('packet', (data, meta, rawData) => {
filterPacketAndSend(rawData, meta, bot._client);
});
cachePackets.join(newProxyClient);
proxyClient = newProxyClient;
newProxyClient.on('end', function () {
log(remoteAddress + ' Closed connection');
})
sendMessage(newProxyClient, "Welcome to luhf's afk proxy!")
});
// Relay chat to terminal
bot.on('message', (msg) => {
log(msg.toString());
})
// Send playerlist to terminal and setup autoeat
bot.once('spawn', () => {
var playersList = Object.keys(bot.players).join(", ")
log(`Online players: ${playersList}`)
bot.autoEat.options = {
priority: "foodPoints",
startAt: 19,
bannedFood: [],
};
});
//Hook for autoeat
bot.on("health", () => {
if (bot.food === 20) bot.autoEat.disable()
else {
sendMessage(proxyClient, "Proxy AutoEat running...")
bot.autoEat.enable()
}
})
}
function filterPacketAndSend(data, meta, dest) {
if (meta.name !== "keep_alive" && meta.name !== "update_time") {
dest.writeRaw(data);
}
}
function sendMessage(client, message)
{
if(client == undefined) return;
var msg = {
translate: 'chat.type.announcement',
"with": [
'§cS§6e§er§av§9e§br',
message
]};
client.write('chat', { message: JSON.stringify(msg), position: 0, sender: '0'});
}
function log(message)
{
console.log(message);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment