promotional bannermobile promotional banner

Arcadia Admin Pannel

**Arcadia Admin Panel** is a powerful server administration tool designed to simplify player management through an intuitive and modern GUI. Stop typing long commands! Manage your server efficiently with just a few clicks.
Back to Files

Arcadia Admin Pannel 1.2.6 (NeoForge 1.21.1)

File namearcadia-admin-panel-1.2.6.jar
Uploader
vyrrioxvyrriox
Uploaded
Jun 9, 2026
Downloads
124
Size
227.1 KB
Mod Loaders
NeoForge
File ID
8221598
Type
R
Release
Supported game versions
  • 1.21.1

Curse Maven Snippet

NeoForge

implementation "curse.maven:arcadia-admin-pannel-1427236:8221598"

Learn more about Curse Maven

What's new

Security

  • GUI privilege escalation via forged slot-click packets (TELEPORT) — The admin panel's two-layer permission model (hide the button if the viewer lacks the node, AND re-check the node in the click handler so a crafted packet can't trigger an unrendered action) had holes on every teleport path that didn't go through a numbered slot case. A staff member granted arcadia.adminpanel.open but not arcadia.adminpanel.teleport could craft a click packet and teleport anyway via: the player-detail homes grid (slots 9–35) and teleport-history row (slots 36–44), and the team-detail member right-click (TP to last-seen). None re-checked TELEPORT before executing. All now re-check arcadia.adminpanel.teleport in the handler, and the home/history buttons are also hidden at build time when the viewer lacks it.
  • Team browser reachable without arcadia.adminpanel.teams — The Teams button on the main menu and the team-list/team-detail menus gated only on FTB Teams being installed, never on the TEAMS node, so any panel user could browse every team's roster and members. The whole Teams chain (main button → team list → team detail) now requires arcadia.adminpanel.teams at both the visibility and action layers.
  • Warn deletion only required warn.view — The delete-on-click handler in the warn list gated on "is staff" (panel access) rather than arcadia.adminpanel.warn.edit, so a moderator with view-only warn permission could delete warns through the GUI. Deletion now re-checks WARN_EDIT, and the delete hint is hidden from view-only viewers.
  • Player info sheet had no permission node — The info book (ban/whitelist status, login history, last-seen) rendered and opened for anyone who could open the panel, with no node of its own. New node arcadia.adminpanel.info now gates both its visibility and its action.

Fixed

  • Jail auto-release could fire instantly on extreme durations — jailInternal cast durationMs / 50 straight to int; a duration above ~107 billion ms overflowed to a negative tick delay and released the player immediately. Now clamped with Math.max(1, …) and bounded to Integer.MAX_VALUE, matching the startup and unjail schedulers.
  • Command failures were swallowed to System.err — Eight command handlers caught exceptions with printStackTrace(). They now log through the mod's SLF4J logger so failures land in the server log with context instead of raw stderr spam.

Added

  • Name-tag system — hide-behind-walls + colours & effects — A full server-authoritative name-tag suite under /arcadia_adminpanel nametag …. Hide behind walls (ON by default): a player's floating name is suppressed client-side whenever a solid block sits on the line of sight between the observer's camera and that player, so you can't read who's hiding behind a wall (transparent blocks like glass/leaves don't occlude unless nameTagOccludeTransparent is enabled; per-player exempt keeps a name always visible). Name styling: color <player> <named> (16 vanilla colours), rgb <player> <#hex> (true 24-bit colour), gradient <player> <#hex> <#hex> [#hex] [#hex] (static multi-stop gradient), effect <player> <effect> with ten effects — solid, gradient, rainbow, breathing, chase, wave, blink, fade, typewriter, random — style <player> <flag> <on|off> (bold/italic/underline/strikethrough/obfuscated), speed <player> <1-10>, plus reset/show. Two new permission nodes: arcadia.adminpanel.nametag (edit) and arcadia.adminpanel.nametag.hide (global switch + exemptions). State persists to config/arcadia/arcadiaadminpanel/nametags.json and is synced to clients on join via new S2C packets; animated effects render smoothly off a client tick clock. All mutation is permission-checked server-side — there is no client→server name-tag packet, so a crafted packet can't restyle anyone.
  • /arcadia_adminpanel loginqueue [on|off] — The login-throttle queue was config-file-only and its reserved permission node arcadia.adminpanel.loginqueue was never enforced. A runtime toggle command now shows or flips loginQueueEnabled (persisted to config.json), gated on that node — the node is no longer dead.
  • Granular mute node on the command path — /arcadia_adminpanel mute / unmute now require arcadia.adminpanel.mute in addition to the MOD staff grade, matching the GUI's dual gate so one role config governs both. checkwarn is now gated on arcadia.adminpanel.open for auditability (it remains a read-only self-view).

Changed

  • Arcadia Lib 1.2.9 → 1.2.14 — Picks up the lib's fail-closed permission backend (PermissionBackend.DENY is the dedicated-server default, so a missing/uninitialized LuckPerms no longer implicitly grants every node), the UUID-based debug-mode hardening, and the safe-command allow-list. 1.2.14 adds the lazy LuckPerms backend binding fix (a late provider registration no longer pins the whole session to fail-closed DENY, which had locked every arcadia.* node — the panel's permission checks included — until restart), a synchronous user-cache fallback so a permission probe on the join tick resolves correctly, and DashboardScreen / ArcadiaHubScreen per-frame allocation cuts. No API changes affect the admin panel.

Performance

  • Player detail menu reads FTB data at most once per session — readPlayerData (a file read + NBT/JSON parse on the server thread) was re-run on every home/history/TP click and the info sheet after already being read on menu build. A per-instance cache, reset on each rebuild, collapses these to a single read.
  • Jail proximity sweep no longer allocates a dimension string per tick — The per-second anti-escape sweep called …dimension().location().toString() for every jailed player. The jail dimension is now parsed to a ResourceLocation once and compared by object, removing the per-iteration string allocation.
  • Client search no longer recompiles its regex per frame — The player-list search stripped colour codes with an inline replaceAll pattern on up to 45 heads every render frame; the pattern is now compiled once as a static field.

Sécurité

  • Élévation de privilèges via paquets de clic forgés (TELEPORT) — Le modèle de permission à deux couches du panneau (cacher le bouton si le joueur n'a pas le nœud, ET re-vérifier le nœud dans le gestionnaire de clic pour qu'un paquet forgé ne puisse pas déclencher une action non rendue) avait des trous sur toutes les téléportations passant par une grille de slots plutôt qu'un case numéroté. Un staff ayant arcadia.adminpanel.open mais pas arcadia.adminpanel.teleport pouvait quand même téléporter via : la grille homes (slots 9–35), l'historique de téléportation (slots 36–44) et le clic droit sur un membre d'équipe (TP dernière position). Aucun ne re-vérifiait TELEPORT avant d'agir. Tous re-vérifient désormais arcadia.adminpanel.teleport, et les boutons homes/historique sont aussi masqués à la construction.
  • Navigateur d'équipes accessible sans arcadia.adminpanel.teams — Le bouton Équipes et les menus liste/détail d'équipe ne dépendaient que de la présence de FTB Teams, jamais du nœud TEAMS ; n'importe quel utilisateur du panneau pouvait parcourir les rosters. Toute la chaîne Équipes exige maintenant arcadia.adminpanel.teams aux deux couches (visibilité + action).
  • La suppression d'avertissement n'exigeait que warn.view — Le gestionnaire de suppression au clic se basait sur « est staff » (accès panneau) plutôt que sur arcadia.adminpanel.warn.edit ; un modérateur en lecture seule pouvait supprimer des avertissements via le GUI. La suppression re-vérifie désormais WARN_EDIT, et l'astuce de suppression est masquée aux lecteurs sans ce nœud.
  • La fiche d'info joueur n'avait aucun nœud de permission — Le livre d'info (statut ban/whitelist, historique de connexion, dernière position) s'affichait et s'ouvrait pour quiconque pouvait ouvrir le panneau, sans nœud propre. Le nouveau nœud arcadia.adminpanel.info gère désormais sa visibilité et son action.

Correctifs

  • La libération automatique de prison pouvait se déclencher immédiatement sur des durées extrêmes — jailInternal convertissait durationMs / 50 directement en int ; une durée au-delà de ~107 milliards de ms débordait en délai de ticks négatif et libérait le joueur aussitôt. Désormais borné avec Math.max(1, …) et plafonné à Integer.MAX_VALUE, comme les planificateurs de démarrage et de libération.
  • Les échecs de commande étaient avalés vers System.err — Huit gestionnaires de commande capturaient les exceptions avec printStackTrace(). Ils passent maintenant par le logger SLF4J du mod pour que les échecs arrivent dans le log serveur avec contexte au lieu du stderr brut.

Ajouts

  • Système de pseudos — masquage derrière les murs + couleurs & effets — Une suite complète de gestion des pseudos, autoritaire côté serveur, sous /arcadia_adminpanel nametag …. Masquage derrière les murs (activé par défaut) : le pseudo flottant d'un joueur est supprimé côté client dès qu'un bloc plein se trouve sur la ligne de vue entre la caméra de l'observateur et ce joueur — impossible de lire qui se cache derrière un mur (les blocs transparents comme le verre/les feuilles ne masquent pas, sauf si nameTagOccludeTransparent est activé ; exempt rend le pseudo d'un joueur toujours visible). Stylisation : color <joueur> <nom> (16 couleurs vanilla), rgb <joueur> <#hex> (vraie couleur 24 bits), gradient <joueur> <#hex> <#hex> [#hex] [#hex] (dégradé multi-couleurs figé), effect <joueur> <effet> avec dix effets — solid, gradient, rainbow, breathing, chase, wave, blink, fade, typewriter, random — style <joueur> <option> <on|off> (gras/italique/souligné/barré/obfusqué), speed <joueur> <1-10>, plus reset/show. Deux nouveaux nœuds de permission : arcadia.adminpanel.nametag (édition) et arcadia.adminpanel.nametag.hide (interrupteur global + exemptions). L'état persiste dans config/arcadia/arcadiaadminpanel/nametags.json et est synchronisé aux clients à la connexion via de nouveaux paquets S2C ; les effets animés sont rendus de façon fluide via une horloge de tick client. Toute modification est vérifiée par permission côté serveur — il n'existe aucun paquet client→serveur de pseudo, donc un paquet forgé ne peut restyler personne.
  • /arcadia_adminpanel loginqueue [on|off] — La file d'attente de connexion n'était configurable que par fichier et son nœud réservé arcadia.adminpanel.loginqueue n'était jamais appliqué. Une commande de bascule runtime affiche ou inverse loginQueueEnabled (persisté dans config.json), gérée par ce nœud — le nœud n'est plus mort.
  • Nœud de mute granulaire côté commande — /arcadia_adminpanel mute / unmute exigent désormais arcadia.adminpanel.mute en plus du grade staff MOD, comme le double verrou du GUI, pour qu'une seule config de rôle régisse les deux. checkwarn est désormais gérée par arcadia.adminpanel.open pour l'auditabilité (elle reste une auto-consultation en lecture seule).

Modifications

  • Arcadia Lib 1.2.9 → 1.2.14 — Récupère le backend de permission fail-closed de la lib (PermissionBackend.DENY est le défaut sur serveur dédié, donc un LuckPerms manquant/non initialisé n'accorde plus implicitement tous les nœuds), le durcissement du mode debug basé UUID et la liste blanche de commandes sûres. 1.2.14 ajoute le correctif de liaison paresseuse du backend LuckPerms (un enregistrement tardif du provider ne fige plus toute la session en DENY fail-closed, ce qui verrouillait tous les nœuds arcadia.* — y compris les vérifications de permission du panneau — jusqu'au redémarrage), un repli synchrone sur le cache utilisateur pour qu'une sonde de permission au tick de connexion se résolve correctement, et des réductions d'allocations par frame dans DashboardScreen / ArcadiaHubScreen. Aucun changement d'API n'affecte le panneau.

Performance

  • Le menu détail joueur lit les données FTB une seule fois par session — readPlayerData (lecture fichier + parsing NBT/JSON sur le thread serveur) était relancé à chaque clic home/historique/TP et sur la fiche d'info, après l'avoir déjà lu à la construction. Un cache par instance, réinitialisé à chaque reconstruction, réduit cela à une seule lecture.
  • La surveillance de proximité de prison n'alloue plus de chaîne de dimension par tick — La sweep anti-évasion (chaque seconde) appelait …dimension().location().toString() pour chaque joueur emprisonné. La dimension de la prison est désormais parsée en ResourceLocation une fois et comparée par objet, supprimant l'allocation de chaîne par itération.
  • La recherche client ne recompile plus sa regex à chaque frame — La recherche de la liste de joueurs retirait les codes couleur avec un motif replaceAll inline sur jusqu'à 45 têtes à chaque frame de rendu ; le motif est désormais compilé une fois en champ statique.

This mod has no additional files