arcadia-admin-panel-1.4.4
Curse Maven Snippet
What's new
## [1.4.4] - 2026-10-13 (latest)
The website release: every sanction can now be driven from the server console, on a player who
is not connected, and goes through ArcadiaBridge for everything the bridge knows.
### Added
- **Console sanctions for a website.** `mute`, `unmute`, `jail`, `unjail`, `note`, `watch`,
`unwatch` and `mail` now run from the console, and new commands fill the gaps: `ban <player>
[reason]`, `unban <player>`, `kick <player> [reason]` and `sanction <player> <template>` (the next
step of a sanction template). Each one takes a pseudo or a UUID and works on a player who is not
connected; a UUID works even for a player this server has never seen.
- **`as <name>`.** `/arcadia_adminpanel as <name> <command>` files the action under that name in
the audit log, the Discord webhook and ArcadiaBridge instead of `CONSOLE`, so a website can say
which staff member clicked. Refused to players.
- **Unban on every server.** `unban` lifts the ban here, on ArcadiaBridge, and in the record the
other servers replicate from; each server now also drops its own copy of a lifted ban within 30
seconds, where it used to keep refusing the player until someone unbanned them there too.
- **Jail across servers.** A jail issued while the player is away is applied when they next join
any server sharing the database, and a jail or a release issued on another server reaches a
player who is connected here within 30 seconds. A player jailed while away is put back where they
joined when the jail ends, instead of being left inside it.
- **ArcadiaBridge bans in the ban list.** The ban list now also shows the bans only the bridge
holds (issued from Discord, from another server or with `/arcadia_ban`), marked as such, and
unbanning one lifts it on the bridge. They are read off the server thread and appear a moment
after the screen opens.
### Fixed
- **Jails were missing from the audit log.** Jailing and releasing from the panel, the baton or a
command left no trace in the history or on the Discord webhook. They are recorded now.
- **A sanction template could not mute a player who was away.** The mute is stored by UUID (or by
ArcadiaBridge) and now applies either way.
- **An unban written in the same millisecond as the ban was ignored.** Records were ordered by
their creation time only, which kept the ban on top, so the player stayed banned on every
server. Records written in the same millisecond are now ordered by their id.
### Performance
An audit of everything the panel runs on the server thread, on a network sized like Arcadia's
(2,800+ known players, several servers on one database).
- **FTB Teams files are read in the background.** Every time the 30 s cache ran out, the next
player sheet, team list or chunk browser read and parsed every team file (one per known player)
on the server thread. The lists are now warmed up at start and refreshed by a background thread,
and an expired list is served while the fresh one is read.
- **The chunk browser builds its team footprints in the background**, from the claim files only
instead of one file lookup per team, and redraws when they are ready.
- **Whitelist and operator sync writes each file once per pass.** Each vanilla add or remove
rewrites the whole file, so a pass applying thousands of rows (the first after a start) rewrote
`whitelist.json` thousands of times on the server thread.
- **The ban list resolves names with one index** instead of a scan of every known player per ban,
and the staff tools screen counts bans without building the list.
- **The jail table loads off the server thread at start**, so a slow database no longer holds the
first tick.
- **The profiler's team view groups a profile's points once** instead of on every redraw.
- **A client's mod report is accepted once per session** and deduplicated in linear time.
### Ajouts
- **Sanctions en console pour un site web.** `mute`, `unmute`, `jail`, `unjail`, `note`, `watch`,
`unwatch` et `mail` se lancent maintenant depuis la console, et de nouvelles commandes comblent
les manques : `ban <joueur> [raison]`, `unban <joueur>`, `kick <joueur> [raison]` et
`sanction <joueur> <modèle>` (l'étape suivante d'un modèle de sanction). Chacune accepte un pseudo
ou un UUID et marche sur un joueur non connecté ; un UUID marche même pour un joueur que ce
serveur n'a jamais vu.
- **`as <nom>`.** `/arcadia_adminpanel as <nom> <commande>` enregistre l'action sous ce nom dans
l'audit, le webhook Discord et ArcadiaBridge au lieu de `CONSOLE` : un site peut dire quel membre
du staff a cliqué. Refusé aux joueurs.
- **Unban sur tous les serveurs.** `unban` lève le ban ici, sur ArcadiaBridge et dans
l'enregistrement que les autres serveurs répliquent ; chaque serveur efface maintenant aussi sa
propre copie d'un ban levé sous 30 secondes, alors qu'il refusait le joueur tant que personne ne
l'avait débanni là aussi.
- **Prison entre serveurs.** Une mise en prison faite pendant l'absence du joueur s'applique à sa
prochaine connexion sur n'importe quel serveur de la base partagée, et une mise en prison ou une
libération faite sur un autre serveur atteint un joueur connecté ici sous 30 secondes. Un joueur
emprisonné pendant son absence est ramené là où il s'est connecté à la fin de sa peine, au lieu
de rester dans la prison.
- **Les bans d'ArcadiaBridge dans la liste des bans.** La liste affiche aussi les bans que seul le
bridge connaît (posés depuis Discord, depuis un autre serveur ou avec `/arcadia_ban`), signalés
comme tels, et les débannir les lève sur le bridge. Ils sont lus hors du thread serveur et
apparaissent un instant après l'ouverture de l'écran.
### Correctifs
- **La prison manquait dans l'audit.** Emprisonner ou libérer depuis le panel, la matraque ou une
commande ne laissait aucune trace dans l'historique ni sur le webhook Discord. C'est enregistré
maintenant.
- **Un modèle de sanction ne pouvait pas rendre muet un joueur absent.** Le mute est stocké par
UUID (ou par ArcadiaBridge) et s'applique maintenant dans les deux cas.
- **Un unban écrit dans la même milliseconde que le ban était ignoré.** Les enregistrements étaient
triés sur leur seule heure de création, ce qui laissait le ban en tête : le joueur restait banni
sur tous les serveurs. Ceux écrits dans la même milliseconde sont maintenant départagés par leur
identifiant.
### Performance
Un audit de tout ce que le panel exécute sur le thread serveur, sur un réseau de la taille
d'Arcadia (plus de 2 800 joueurs connus, plusieurs serveurs sur une même base).
- **Les fichiers FTB Teams sont lus en arrière-plan.** À chaque expiration du cache de 30 s, la
fiche joueur, la liste des teams ou le navigateur de chunks suivant relisait et analysait tous les
fichiers de team (un par joueur connu) sur le thread serveur. Les listes sont maintenant chargées
au démarrage et rafraîchies par un thread dédié, et une liste expirée reste servie pendant la
lecture de la nouvelle.
- **Le navigateur de chunks calcule l'empreinte des teams en arrière-plan**, à partir des seuls
fichiers de claims au lieu d'une recherche de fichier par team, et se redessine quand c'est prêt.
- **La synchro whitelist et opérateurs écrit chaque fichier une fois par passe.** Chaque ajout ou
retrait vanilla réécrit tout le fichier : une passe de milliers de lignes (la première après un
démarrage) réécrivait `whitelist.json` des milliers de fois sur le thread serveur.
- **La liste des bans résout les noms avec un seul index** au lieu de parcourir tous les joueurs
connus pour chaque ban, et l'écran des outils du staff compte les bans sans construire la liste.
- **La table des prisons se charge hors du thread serveur au démarrage** : une base lente ne bloque
plus le premier tick.
- **La vue par team du profileur regroupe les points d'un profil une seule fois** au lieu de le
faire à chaque rafraîchissement.
- **Le rapport de mods d'un client n'est accepté qu'une fois par session** et dédoublonné en temps
linéaire.
---
## [1.4.3] - 2026-10-13
Three suggestions from the Arcadia staff.
### Added
- **Tick cost per team in the profiler.** With FTB Chunks installed, the chunk tab has a "Group by
team" switch: each FTB team shows what all the chunks it claims cost per tick, with its chunk and
object counts, and a click lists that team's chunks, heaviest first. Unclaimed chunks are grouped
on their own card. Totals are added up from every measured object, so a team spread over many
small chunks is not under-counted. In the plain chunk list, every chunk now names the team that
claims it. Claims are read from FTB Chunks' save files in the background, never on the server
thread.
- **What a client runs on top of the modpack.** The Client Mods screen compares each report with
the modpack: the mods the server runs plus a list of client-only mods. The overview shows, for
every player, how many mods they added and the first few names, and sorts the players who added
the most first. A player's screen lists the added mods first, in their own section, then the
modpack. The client-only list is taken from the screen by an admin running only the modpack
(left click on "Modpack reference"; right click clears it). New node
`arcadia.adminpanel.clientmods.reference` (Admin), new config key `clientModReference`.
- **A key for the profiler 3D overlay.** "Profiler 3D overlay" in Minecraft's controls (category
Arcadia Admin Panel) switches the overlay on and off without opening the panel. Unbound by
default; it only works for staff with the performance node.
### Changed
- **The profiler 3D overlay writes only the tick cost** (µs per tick), like Observable. Block and
entity names are gone from the world view; the profiler screen still lists them.
### Ajouts
- **Coût de tick par team dans le profileur.** Avec FTB Chunks installé, l'onglet chunks a un
bouton « Regrouper par team » : chaque team FTB affiche ce que coûtent par tick tous les chunks
qu'elle claim, avec son nombre de chunks et d'objets, et un clic liste ses chunks, du plus lourd
au plus léger. Les chunks hors claim sont regroupés sur leur propre carte. Les totaux sont
calculés sur tous les objets mesurés : une team répartie sur beaucoup de petits chunks n'est pas
sous-estimée. Dans la liste des chunks, chaque chunk indique la team qui le claim. Les claims
sont lus dans les fichiers de sauvegarde de FTB Chunks en arrière-plan, jamais sur le thread du
serveur.
- **Ce qu'un client a en plus du modpack.** L'écran Mods client compare chaque rapport au
modpack : les mods du serveur plus une liste de mods client seulement. La vue d'ensemble affiche,
pour chaque joueur, combien de mods il a ajoutés et les premiers noms, et classe en premier ceux
qui en ont ajouté le plus. L'écran d'un joueur liste d'abord les mods ajoutés, dans leur propre
section, puis le modpack. La liste client seulement se prend depuis l'écran, par un admin qui n'a
que le modpack (clic gauche sur « Référence du modpack » ; clic droit pour la vider). Nouvelle
permission `arcadia.adminpanel.clientmods.reference` (Admin), nouvelle clé de config
`clientModReference`.
- **Une touche pour l'affichage 3D du profileur.** « Affichage 3D du profileur » dans les contrôles
de Minecraft (catégorie Arcadia Admin Panel) active et coupe l'affichage sans ouvrir le panel.
Aucune touche par défaut ; elle ne marche que pour le staff qui a la permission performances.
### Modifications
- **L'affichage 3D du profileur n'écrit plus que le coût de tick** (µs par tick), comme Observable.
Les noms des blocs et des entités disparaissent de la vue dans le monde ; l'écran du profileur
les liste toujours.
---
## [1.4.2] - 2026-10-13
A maintenance release for the skin lookups that flooded Mojang at every boot.
### Fixed
- **Every boot sent one Mojang skin lookup per known player at once** (#6). On a network with
thousands of players, Mojang answered `429 Too Many Requests` to almost all of them, each failure
wrote a stack trace to the log, and the lookups ran on the worker pool shared with chunk
generation. The offline scan no longer requests any skin: a head is resolved when it is shown.
Lookups now go through one dedicated thread, one request per second, the screen being viewed
first. After a failure the queue slows down, and a failed player is retried fifteen minutes later
instead of keeping the default skin until the next restart. Online players use their own login
profile with no request, and offline-mode UUIDs are never sent to Mojang. The player list keeps
refreshing its heads for up to a minute while some are still being resolved.
### Correctifs
- **Chaque démarrage envoyait d'un coup une requête de skin à Mojang par joueur connu** (#6). Sur un
réseau de plusieurs milliers de joueurs, Mojang répondait `429 Too Many Requests` à presque
toutes, chaque échec écrivait une trace complète dans le log, et ces requêtes tournaient sur le
pool de travail partagé avec la génération des chunks. Le scan hors ligne ne demande plus aucun
skin : une tête est résolue quand elle est affichée. Les requêtes passent par un thread dédié, une
par seconde, l'écran consulté en premier. Après un échec la file ralentit, et un joueur en échec
est retenté quinze minutes plus tard au lieu de garder le skin par défaut jusqu'au prochain
redémarrage. Les joueurs en ligne utilisent leur propre profil de connexion sans requête, et les
UUID du mode hors ligne ne sont jamais envoyés à Mojang. La liste des joueurs continue de
rafraîchir ses têtes pendant une minute au plus tant que certaines sont en cours de résolution.
This mod has no additional files