\begin{Verbatim}[commandchars=\\\{\}] \PY{c+c1}{\PYZhy{}\PYZhy{} by gera, public domain} \PY{k+kd}{local} \PY{n}{file\PYZus{}path} \PY{o}{=} \PY{n}{minetest}\PY{p}{.}\PY{n}{get\PYZus{}worldpath}\PY{p}{(}\PY{p}{)} \PY{o}{..} \PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{/online\PYZus{}players.txt}\PY{l+s+s2}{\PYZdq{}} \PY{k+kr}{function} \PY{n+nf}{erase\PYZus{}player\PYZus{}list}\PY{p}{(}\PY{p}{)} \PY{n}{minetest}\PY{p}{.}\PY{n}{safe\PYZus{}file\PYZus{}write}\PY{p}{(}\PY{n}{file\PYZus{}path} \PY{p}{,} \PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)} \PY{k+kr}{end} \PY{k+kr}{function} \PY{n+nf}{dump\PYZus{}player\PYZus{}list}\PY{p}{(}\PY{p}{)} \PY{k+kd}{local} \PY{n}{players} \PY{o}{=} \PY{n}{minetest}\PY{p}{.}\PY{n}{get\PYZus{}connected\PYZus{}players}\PY{p}{(}\PY{p}{)} \PY{k+kd}{local} \PY{n}{str} \PY{o}{=} \PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{\PYZdq{}} \PY{k+kr}{for} \PY{n}{i} \PY{o}{=} \PY{l+m+mi}{1}\PY{p}{,} \PY{o}{\PYZsh{}}\PY{n}{players} \PY{k+kr}{do} \PY{n}{str} \PY{o}{=} \PY{n}{str} \PY{o}{..} \PY{n}{players}\PY{p}{[}\PY{n}{i}\PY{p}{]}\PY{p}{:}\PY{n}{get\PYZus{}player\PYZus{}name}\PY{p}{(}\PY{p}{)} \PY{o}{..} \PY{l+s+s2}{\PYZdq{}}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+s2}{\PYZdq{}} \PY{k+kr}{end} \PY{n}{minetest}\PY{p}{.}\PY{n}{safe\PYZus{}file\PYZus{}write}\PY{p}{(}\PY{n}{file\PYZus{}path}\PY{p}{,} \PY{n}{str}\PY{p}{)} \PY{k+kr}{end} \PY{n}{minetest}\PY{p}{.}\PY{n}{register\PYZus{}on\PYZus{}mods\PYZus{}loaded}\PY{p}{(}\PY{n}{erase\PYZus{}player\PYZus{}list}\PY{p}{)} \PY{n}{minetest}\PY{p}{.}\PY{n}{register\PYZus{}on\PYZus{}joinplayer}\PY{p}{(}\PY{n}{dump\PYZus{}player\PYZus{}list}\PY{p}{)} \PY{n}{minetest}\PY{p}{.}\PY{n}{register\PYZus{}on\PYZus{}leaveplayer}\PY{p}{(}\PY{n}{dump\PYZus{}player\PYZus{}list}\PY{p}{)} \PY{n}{minetest}\PY{p}{.}\PY{n}{register\PYZus{}on\PYZus{}shutdown}\PY{p}{(}\PY{n}{erase\PYZus{}player\PYZus{}list}\PY{p}{)} \end{Verbatim}