pages235/src/react/ScoreboardProvider.tsx
Vitaly Turovsky a30106342e feat: add a way to disable some of the UI parts in settings (for testing and other use cases)
feat: re-add bossbars, but it's still disabled by default
2024-09-07 18:37:57 +03:00

42 lines
1.3 KiB
TypeScript

import { useMemo, useState } from 'react'
import Scoreboard from './Scoreboard'
import type { ScoreboardItems } from './Scoreboard'
export default function ScoreboardProvider () {
const [title, setTitle] = useState('Scoreboard')
const [items, setItems] = useState<ScoreboardItems>([])
const [open, setOpen] = useState(false)
useMemo(() => { // useMemo instead of useEffect to register them asap and not after the initial dom render
const updateSidebarScoreboard = () => {
addStatPerSec('scoreboard')
if (bot.scoreboard.sidebar) {
setTitle(bot.scoreboard.sidebar.title)
setItems([...bot.scoreboard.sidebar.items])
setOpen(true)
} else {
setOpen(false)
}
}
bot.on('scoreboardCreated', updateSidebarScoreboard) // not used atm but still good to have
bot.on('scoreboardTitleChanged', updateSidebarScoreboard)
bot.on('scoreUpdated', updateSidebarScoreboard)
bot.on('scoreRemoved', updateSidebarScoreboard)
bot.on('scoreboardDeleted', updateSidebarScoreboard)
bot.on('scoreboardPosition', () => {
void Promise.resolve().then(() => {
updateSidebarScoreboard()
}) // mineflayer bug: wait for the next tick to get the correct scoreboard position
})
}, [])
return (
<Scoreboard
title={title}
items={items}
open={open}
/>
)
}