chomens-bot-js/plugins/tps.js

76 lines
2 KiB
JavaScript
Raw Normal View History

const clamp = require('../util/clamp')
function inject (bot, dcclient, config) {
const bossbarName = 'chomens_bot:tps'
let enabled = false
bot.tps = {
on () {
enabled = true
},
off () {
enabled = false
bot.core.run(`minecraft:bossbar remove ${bossbarName}`)
}
}
const tickRates = []
let nextIndex = 0
let timeLastTimeUpdate = -1
let timeGameJoined
const interval = setInterval(() => {
if (!enabled) return
const component = {
translate: 'TPS - %s',
color: 'gray',
bold: false,
with: [
{ text: getTickRate(), color: 'green' }
]
}
bot.core.run(`minecraft:bossbar add ${bossbarName} ""`)
bot.core.run(`minecraft:bossbar set ${bossbarName} players @a`)
bot.core.run(`minecraft:bossbar set ${bossbarName} color yellow`)
bot.core.run(`minecraft:bossbar set ${bossbarName} visible true`)
bot.core.run(`minecraft:bossbar set ${bossbarName} style progress`)
bot.core.run(`minecraft:bossbar set ${bossbarName} name ${JSON.stringify(component)}`)
bot.core.run(`minecraft:bossbar set ${bossbarName} max 20`)
bot.core.run(`minecraft:bossbar set ${bossbarName} value ${Math.floor(getTickRate())}`)
}, 50)
function getTickRate () {
if (Date.now() - timeGameJoined < 4000) return 'Calculating...'
let numTicks = 0
let sumTickRates = 0.0
for (const tickRate of tickRates) {
if (tickRate > 0) {
sumTickRates += tickRate
numTicks++
}
}
const value = (sumTickRates / numTicks).toFixed(2)
if (value > 20) return 20
else return value
}
bot.on('login', () => {
nextIndex = 0
timeGameJoined = timeLastTimeUpdate = Date.now()
})
bot._client.on('update_time', () => {
const now = Date.now()
const timeElapsed = (now - timeLastTimeUpdate) / 1000.0
tickRates[nextIndex] = clamp(20.0 / timeElapsed, 0.0, 20.0)
nextIndex = (nextIndex + 1) % tickRates.length
timeLastTimeUpdate = now
})
bot.on('end', () => clearInterval(interval))
}
module.exports = { inject }