Перейти к содержимому
Mineforgian

NeoEssentials

A comprehensive server-side essentials mod for Minecraft NeoForge servers, inspired by EssentialsX for Bukkit/Spigot.

Загрузки
11K
Подписчики
17
Обновлён
17 августа 2026 г.
Лицензия
MIT

Опубликован 22 июня 2025 г.

NeoEssentials

Minecraft NeoForge License Version Discord Ko-fi

NeoEssentials is a comprehensive, config-driven essentials mod for Minecraft NeoForge 1.21.1 - 1.21.11 servers. It provides 50+ commands, GUI tools, advanced administration, and a real-time web dashboard—all managed by modular JSON config files and standardized documentation.

🌟 Overview

NeoEssentials brings essential server management, player utilities, and advanced admin features to NeoForge servers. All features are strictly documented and driven by config files for reliability and transparency.

Server-Side Only: No client install required—works with vanilla clients. 50+ Commands: Covers all major server functions, utilities, and moderation. Modern UI: GUI commands, color code support, and web dashboard.

✨ Core Systems & Features

  • Economy System: Player balances, payments, kits, and shop support.
  • Chat & Messaging: Private messages, mail, ignore/socialspy, AFK system.
  • Moderation: Ban, kick, mute, jail, vanish, freeze, sudo, player data.
  • Teleportation: Homes, warps, spawn, teleport requests, back system.
  • Kit Management: Configurable item kits with cooldowns and preview.
  • Web Dashboard: Real-time server monitoring, config editing, API endpoints.
  • Permission System: LuckPerms, FTB Ranks, and built-in support.
  • Item Management: Item spawning, repair, enchant, clearinventory, powertool.
  • Utility Systems: Nicknames, MOTD, near, ping, depth, helpop, rules, suicide, etc.
  • API & Placeholder System: PlaceholderAPI integration, custom placeholders, REST API endpoints.

📖 Documentation

Start at Home for a complete, config-driven documentation hub. All major systems are documented and standardized to match the codebase and config files:

See APISystem for API & Placeholder System details, including:

  • PlaceholderAPI integration for dynamic text
  • Custom and expansion placeholders
  • Web Dashboard REST API endpoints for server status, player info, logs, config, events, and statistics
  • Permissions and config options for API features

🚀 Quick Start

Installation

  1. Download the latest release Version
  2. Place the JAR file in your server's mods folder
  3. Start your server to generate configuration files in config/neoessentials/
  4. Configure permissions and features as needed
  5. Restart the server to apply changes

Essential Configuration Files

config/neoessentials/
├── config.json           # Main configuration settings
├── permissions.json      # Permission system setup
├── language/            # Language files directory
├── shops.json           # Shop system configuration
└── settings.json        # Additional mod settings

Quick Permission Setup

For LuckPerms users:

/lp group admin permission set neoessentials.admin true
/lp group moderator permission set neoessentials.moderator true
/lp group default permission set neoessentials.player true

🎮 Command Reference

See Home and individual system docs above for full command lists and config options.

🔧 Configuration Examples

All features are managed by modular JSON config files. See Home and system docs above for details.

🔗 API Integration for Modders

See APISystem for full API and PlaceholderAPI documentation, including:

  • Registering custom placeholders
  • Using REST API endpoints for server data
  • Economy API for mod integration

🔗 Integration & Compatibility

  • LuckPerms and FTB Ranks supported
  • Server-Side Only (no client mods required)
  • Vanilla Client Support
  • Performance Optimized

🛠️ Development

IDE Setup

This project uses IntelliJ IDEA Community Edition with Gradle.

Setup Instructions:

  1. Clone the repository
  2. Open the project in IntelliJ IDEA
  3. Import as a Gradle project
  4. Wait for Gradle to sync and download dependencies
  5. The IDE is configured to automatically download sources and javadocs

Running the Mod:

  • Use Gradle run configurations provided by NeoForge ModDev
  • runClient - Test in client mode
  • runServer - Test in server mode
  • runData - Generate data resources

Building:

./gradlew build

Output JAR: build/libs/neoessentials-VERSION+build.XXX.jar

Project Structure

  • Java 21 - Target JDK version
  • Gradle - Build system with auto-incrementing build numbers
  • NeoForge ModDev 2.0.107 - Modern mod development plugin
  • Parchment Mappings - Better parameter names and javadocs

🤝 Support & Community

  • Discord: Join our Discord server for support and community discussion
  • Bug Reports: Report issues and bugs through GitHub or Discord
  • Feature Requests: Suggest new features and improvements
  • Documentation: See Home and system docs above

📄 License

NeoEssentials is licensed under the MIT License. See the LICENSE file for details.


🌟 Ready to enhance your server? Download NeoEssentials and give your players the essential tools they need!

Made with ❤️ for the Minecraft community

Ченджлог

1.0.4Релиз1.21.8, 1.21.9, 1.21.10 · 17 августа 2026 г.

NeoEssentials — Changelog

Starting from v1.0.4 — earlier history (v1.0.3.x and before) is not carried over.

Minecraft 1.21.1 – 1.21.11 · NeoForge 21.1.179+


1.0.4+build.61 — 2026-08-17

🐛 Commands Now Logged to Console

  • Every player command now gets logged to console/latest.log (e.g. "PlayerName issued command: /home") — this wasn't happening in general before, only for a handful of specific commands. Controlled by logging.categories.commands.normal (on by default) — turn it off there if you'd rather not see it.

1.0.4+build.60 — 2026-08-17

🐛 Clickable Player Names Were Ignoring Your Chat Colors

  • If you had chat.clickablePlayerNames enabled (the default) and put a color code before {neoessentials_username}/{neoessentials_displayname} in your chat format, the name itself still rendered white — the color simply wasn't being applied to it. Fixed; the name now picks up whatever color comes before it in your template, same as any other part of the line.

1.0.4+build.59 — 2026-08-17

🐛 SDLink Discord Duplicates Actually Fixed Now

  • Last update only warned you about SDLink's own native join/leave/chat/advancement messages conflicting with NeoEssentials — you still had to manually edit SDLink's config to stop the duplicates. Now NeoEssentials detects it automatically and stays quiet on its side, so a normal SDLink install just works with no duplicate posts and no config editing needed.
  • This only affects Discord messages — in-game chat is unaffected.

1.0.4+build.45 — 2026-08-17

🐛 Doubled Rank Prefix in Chat, Duplicate SDLink Join/Leave Messages

  • Fixed a bug where players' rank prefix could show up twice in chat, e.g. <[Owner] [Owner] PlayerName>. This happened when your permissions plugin (LuckPerms in particular) formats names using Minecraft's own team system — the display name already had the prefix in it, and the chat template added it again on top. No config changes needed.
  • Fixed duplicate join/leave (and advancement) messages showing up in Discord for servers using Simple Discord Link (SDLink) — SDLink has its own built-in join/leave announcer that runs independently of NeoEssentials, and both were firing at once. You'll now get a clear warning in your server log telling you exactly which SDLink setting to turn off if this affects you.

1.0.4+build.44 — 2026-08-13

✨ Per-Category Logging Configuration

  • You can now control logging per-subsystem instead of all-or-nothing. New logging.categories section in config.json — 12 categories (chat, economy, permissions, teleportation, moderation, auction house, kits, web dashboard, Discord, config, commands, general), each with its own normal (routine messages) and debug (verbose troubleshooting output) switch. debug output goes to logs/debug.log, keeping your normal console/log clean.
  • If you had the old debug toggle on, it carries over automatically — every category's debug switch turns on for you during the upgrade.
  • Lots of new detailed logging added across the whole mod so problems are much easier to diagnose when they happen — just flip on the relevant category's debug switch and check logs/debug.log.

1.0.4+build.43 — 2026-08-13

🐛 Nickname Fix Now Actually Reaches Existing Configs, LuckPerms Context Fix

  • The build.42 nickname fix only applied to brand-new configs — if you already had a config.json, it kept the old broken default forever. This update patches existing configs too (only if you never customized that setting yourself), so the nickname fix now reaches everyone.
  • Fixed LuckPerms prefix/suffix lookups ignoring per-world/per-server contexts for online players in a couple of spots.

1.0.4+build.42 — 2026-08-04

🐛 Nicknames Now Show Up in Chat by Default

  • Fixed the default chat format so /nick and /setnick nicknames actually show up in your chat messages, not just the tab list. /setnick was working the whole time — the default chat line just wasn't set up to display it.
  • If you already edited your config before, just swap {neoessentials_username} for {neoessentials_displayname} in your chat format setting, then reload.

1.0.4+build.41 — 2026-07-31

🐛 Team Chat: Found the Real Bug (FTB Teams Versions)

  • Found the actual cause of team chat not resolving on some FTB Teams versions: NeoEssentials was checking the wrong internal class for the right method. Should be properly fixed now for FTB Teams 2101.1.10 — if it's still not working after this update, please report it again.

1.0.4+build.40 — 2026-07-31

🐛 Team Chat: Still Investigating on Some FTB Teams Versions

  • The previous attempt to fix team chat still isn't resolving on FTB Teams 2101.1.10. This update logs a lot more detail at startup to help pin down the exact fix — team chat isn't expected to work yet on that version, but the next update should have it.

1.0.4+build.39 — 2026-07-29

🐛 Attempted Fix: Team Chat Not Working on Some FTB Teams Versions

  • If the team chat channel wasn't working for you even with FTB Teams installed, this update makes NeoEssentials try harder to find the right FTB Teams hook automatically instead of only checking two fixed possibilities. If it still doesn't work after updating, check your server log at startup for an "FTB TEAMS API NOT RESOLVED" message and report it — it now also logs extra detail that'll help pin down the exact fix.

1.0.4+build.38 — 2026-07-29

✨ More Player Info Available to Dashboard Integrations

  • Player lookups (both from the dashboard and its API) now also report total playtime, when the player first joined, and their current gamemode.

1.0.4+build.37 — 2026-07-29

🐛 Fix: Channel Prefix Messages Showing the Wrong Channel Name

  • Using a channel prefix (like ! or @) to send a single message to a different channel now correctly shows that channel's name in the message, instead of showing your normal channel.

1.0.4+build.36 — 2026-07-28

✨ Internal Dashboard: Player Tools Moved to the Lookup Page

  • The full player-management panel (heal, kick, ban, mute, teleport, permissions, inventory, notes, and more) used to be its own page. It's now shown right on the Player Lookup page for signed-in staff, so there's one less click to get there.

1.0.4+build.35 — 2026-07-28

✨ Point the "View Profile" Chat Link at Your Own Website

  • The small clickable icon next to player names in chat (added build.24) can now point at your own website instead of the built-in dashboard — set webDashboard.customProfileUrlTemplate to something like "https://myserver.com/players/{player}" and it'll use that instead.

1.0.4+build.33 — 2026-07-28

✨ New: Team Chat Channel (FTB Teams)

  • Added a team chat channel — if you're playing a modpack with FTB Teams, chatting in it only reaches your own teammates, no radius or permission setup needed.
  • If FTB Teams isn't installed, or you're not on a team yet, you'll get a clear message telling you why instead of the message just silently vanishing.

1.0.4+build.32 — 2026-07-28

✨ Give a Chat Channel a Styled Name, Plus a Reliability Fix

  • New displayName option per chat channel — lets you show a colored/custom name (e.g. "&d⚙ Staff") for a channel in chat, without touching its actual internal name.
  • Fixed a bug where a broken chat channel setting could silently stop OTHER channels' commands from working too. Each channel is now handled independently.

1.0.4+build.30 — 2026-07-28

✨ Customize the Discord Chat Embed Yourself

  • New discordEmbedTemplate config option lets you customize the look of the Discord embed for channel-routed chat messages (Simple Discord Link only, for now) — author name, avatar, message text, side-bar color, footer, and timestamp are all configurable, with placeholders for player name, message, and channel.
  • If you use split config files, this new setting lives in its own file under a new templates/ folder instead of cluttering chat.json.

1.0.4+build.29 — 2026-07-28

🐛 SDLink Channel-Routed Chat Now Looks Right Again

  • If you set a specific Discord channel for one of your chat channels, messages were showing up as plain text instead of Simple Discord Link's usual nicely-styled message with your avatar. Fixed — it now looks the same as before.
  • Also fixed a hidden crash risk in the same area, found while working on this.

1.0.4+build.28 — 2026-07-28

🐛 Critical Fix: build.27 Could Crash Your Whole Server on Startup

  • If you updated to build.27, some server setups would crash immediately on startup with a NoClassDefFoundError. This was caused by the Mc2Discord/DCIntegration fixes in that update. Fully fixed now — please update immediately if you're on build.27.

1.0.4+build.27 — 2026-07-27

🐛 Same Discord Fix Extended to Mc2Discord and DCIntegration

  • If you use Mc2Discord instead of Simple Discord Link, it had the same channel-privacy bug fixed last update — a configured private channel ID was being ignored. Fixed the same way.
  • DCIntegration now also supports sending a specific NeoEssentials chat channel (like staff) to its own dedicated Discord channel, which wasn't possible before at all.
  • Neither of these was tested against a live Mc2Discord/DCIntegration setup (unlike the earlier Simple Discord Link fix) — please report anything unexpected.

1.0.4+build.26 — 2026-07-27

✨ New Chat Channel Placeholder, Plus Discord Relay Fixes

  • New {channel} placeholder — shows which chat channel (local/global/staff/etc.) a message was sent in.
  • Fixed: a private staff Discord channel you configured could still leak messages to your server's default Discord channel, because the Simple Discord Link integration was silently ignoring the specific channel ID you set. It now actually goes to the right channel.
  • If you're seeing Discord messages posted twice, that's a separate issue caused by Simple Discord Link having its own built-in "relay every chat message" feature running at the same time as NeoEssentials' own relay — NeoEssentials now warns you about this on startup and tells you exactly which setting to turn off in Simple Discord Link's own config.

1.0.4+build.25 — 2026-07-27

🐛 Fix: Chat Status Icons (AFK/Vanished/Muted) Weren't Showing

  • If you set an icon for AFK/vanished/muted players in chat.badges.statusIcons, it silently never appeared in chat with the default settings. Fixed — set your icon text and it'll show up now. Rank badges weren't affected by this.

1.0.4+build.24 — 2026-07-27

✨ Click a Player's Name in Chat to Open Their Dashboard Profile

  • Player names in chat now show a small clickable link icon that opens that player's public profile (bans/mutes/kicks/warnings) on your dashboard, right in a browser. Works whether you use the external (Laravel) dashboard or the mod's own built-in one.
  • If you use the built-in dashboard, set the new webDashboard.publicUrl config to your server's public address so the link actually works for players (e.g. http://your.server.ip:8090). If you use the external dashboard, nothing extra to set up — it already knows its own address.

1.0.4+build.23 — 2026-07-27

🐛 Fix: Logging In Could Change Everyone Else's Tab Suffix

  • If two players in the same rank ever ended up with slightly different tab-list suffixes (an AFK tag, a per-player override, etc.), a new player logging in could make everyone else's suffix suddenly switch to match the new player's. Fixed — everyone's own suffix now displays correctly no matter who else logs in.

1.0.4+build.22 — 2026-07-27

✨ You Can Now Back Up to Microsoft OneDrive Too

  • Added OneDrive as a third backup destination, alongside Dropbox and Google Drive. If you've got a lot of free space sitting on a personal OneDrive, you can now send your server backups there straight from the dashboard.

1.0.4+build.21 — 2026-07-23

✨ Internal Dashboard: 3D Player Renders

  • Player Profile, Settings, and Public Lookup now show a full 3D character render with a glowing color-matched background instead of a flat face icon.

1.0.4+build.20 — 2026-07-23

🐛 Fix: Visiting the Warps Page Could Show "API Unreachable"

  • The Player Warps tab could hang under real player load instead of loading, which made the dashboard think the whole connection was down. Fixed.

1.0.4+build.19 — 2026-07-23

✨ Internal Dashboard Permissions Page Redesign

  • Groups and online users now collapse to a compact row by default — click to expand for the full editor. Permission nodes are grouped by category instead of one long list.

1.0.4+build.18 — 2026-07-23

✨ See Player-Created Warps on Both Dashboards

  • Both dashboards' Warps page now has a "Player Warps" tab, so admins can finally see every player's own /pwarp warps (and clean one up if needed) instead of only the shared server warps.

1.0.4+build.17 — 2026-07-23

🐛 AFK Now Actually Respects Its Own Settings

  • The AFK config options for what counts as activity (movement, chat, commands, interactions) weren't being enforced — everything always reset your AFK timer no matter how you had them set, and chat specifically never reset it at all. Both are now fixed.
  • Small /help fix: /tpcancel now shows up correctly (it was previously mislabeled).
  • Cleaned up a few leftover admin permission nodes that looked like they did something but didn't.

1.0.4+build.16 — 2026-07-23

🐛 /help Now Shows the Real Permission for Every Command

  • /help <command> used to guess every command's permission node from its name, which was wrong for ~160 commands (e.g. /apikey actually needs neoessentials.dashboard.apikeys, most moderation/teleport/economy/item commands use a namespaced node). Fixed — /help now shows and checks the real permission for every command, so it's actually reliable for figuring out what to grant someone.

1.0.4+build.15 — 2026-07-22

✨ Account Settings Page + Minecraft Account Linking (Both Dashboards)

  • Sidebar now shows your real Minecraft avatar once linked, on both dashboards.
  • New Settings/Profile page on the internal dashboard (password change, Minecraft account linking, Discord status).
  • Any dashboard account can now link a Minecraft account itself via a short in-game code (/linkaccount <code>) — no Discord required.

1.0.4+build.14 — 2026-07-22

✨ New Brand Logo on the Internal Dashboard

  • The internal dashboard now shows the real NeoEssentials shield logo instead of a generic placeholder icon, everywhere: sidebar, login, public lookup page, and browser tab favicon.

1.0.4+build.13 — 2026-07-22

✨ Dashboard Security: Copyable Keys, Encrypted Tokens, Permission-Driven Role Sync

  • /apikey create tokens are now click-to-copy in chat instead of plain text.
  • The paired external dashboard's auth token is now encrypted at rest in config.json instead of stored in plaintext (existing values migrate automatically, no action needed).
  • New opt-in setting webDashboard.roleSync: automatically grants/revokes a linked player's dashboard admin role based on their real in-game permission node or group — no more manually running /apikey create every time an admin's status changes. Off by default.

1.0.4+build.12 — 2026-07-22

✨ Economy Tab: Overview Stats + Distribution Chart, Plus a Real Bug Fix

  • Both dashboards' Economy tab now shows total wealth, account count, average/starting balance, and a balance-distribution chart at a glance.
  • Adjusting a balance now shows a live lookup preview (avatar, online status, current balance) before you commit — no more adjusting blind.
  • Fixed: the distribution chart's data was silently failing to compute for any balance with cents (i.e. almost all of them) — now works correctly.

1.0.4+build.13-pre-fix — 2026-07-22

Shipped as build.13 at the time — after a cross-branch build-number-drift fix reset the counter, that number now belongs to a later, different entry above.

✨ Per-Player Control Page: Now Feature-Complete

  • The built-in dashboard's per-player control page now covers just about every admin action you'd otherwise type as a command: heal/kick/ban/mute, game mode, permission group and overrides, economy, freeze/vanish/jail, give item/potion effects/spawn mob/burn/lightning/kill, sudo, per-player time and weather, and clear inventory — plus full moderation history in one place.
  • Not included: live inventory/ender-chest editing (those are in-game GUI menus with no browser equivalent).

1.0.4+build.9 — 2026-07-22

✨ Built-In Dashboard: Full Per-Player Control Page

  • The built-in dashboard's Players page now has a full control page for each player — game mode, permission group and individual permissions, economy (give/take/set balance), inventory, and full moderation history (bans, mutes, kicks, warnings, staff notes) all in one place.
  • Player lookups now show balance and permission group for offline players too, not just online ones.
  • Fixed a bug where several player-info API endpoints didn't work for offline players even though they were supposed to.

1.0.4+build.8 — 2026-07-22

✨ Built-In Dashboard: Now Feature-Complete

  • The built-in dashboard (webDashboard.mode: "internal"/"both" in config.json) now covers everything: server overview, players, economy, warps, kits, holograms, Discord, dashboard accounts, backups, console commands, activity logs, permissions, and a no-login-required public player-lookup page.
  • Already using the separate NeoEssentials-Dashboard app? Nothing changes for you — the default stays "external".

1.0.4+build.4 — 2026-07-22

✨ A Real Built-In Dashboard Option

  • Prefer not to run a separate app for your web dashboard? Set webDashboard.mode to "internal" (or "both") in config.json and the mod now serves a real, working dashboard straight from its own port — no separate app to install.
  • This first update covers logging in, the server overview, and the players page (heal/kick/ban/mute, lookup, homes). More pages are coming in future updates.
  • If you're already using the separate NeoEssentials-Dashboard app, nothing changes for you — the default stays the same.

1.0.4+build.1 — 2026-07-21

✨ Support/Discord/GitHub Links on Startup

  • The server console now prints a quick link to our support site, Discord, and GitHub once every restart, so admins always know where to get help.
  • If something actually goes wrong during startup (a system fails to load, or the permission system has to fall back to a safe mode), the first admin to join the server now sees a clickable in-game message pointing to those same three places.

1.0.4Релиз26.1, 26.1.1, 26.1.2 · 17 августа 2026 г.

NeoEssentials — Changelog (mc-26.1-port branch)

Minecraft 26.1.2 · NeoForge 26.1.2.76+

All notable changes to this branch are documented here, starting from v1.0.4 — earlier history (v1.0.3.x and before, including the port's own migration history) is not carried over.


1.0.4-mc26.1.2+build.61 — 2026-08-17

🐛 Commands Now Logged to Console

  • Every player command now gets logged to console/latest.log (e.g. "PlayerName issued command: /home") — this wasn't happening in general before, only for a handful of specific commands. Controlled by logging.categories.commands.normal (on by default) — turn it off there if you'd rather not see it.

1.0.4-mc26.1.2+build.60 — 2026-08-17

🐛 Clickable Player Names Were Ignoring Your Chat Colors

  • If you had chat.clickablePlayerNames enabled (the default) and put a color code before {neoessentials_username}/{neoessentials_displayname} in your chat format, the name itself still rendered white — the color simply wasn't being applied to it. Fixed; the name now picks up whatever color comes before it in your template, same as any other part of the line.

1.0.4-mc26.1.2+build.59 — 2026-08-17

🐛 SDLink Discord Duplicates Actually Fixed Now

  • Last update only warned you about SDLink's own native join/leave/chat/advancement messages conflicting with NeoEssentials — you still had to manually edit SDLink's config to stop the duplicates. Now NeoEssentials detects it automatically and stays quiet on its side, so a normal SDLink install just works with no duplicate posts and no config editing needed.
  • This only affects Discord messages — in-game chat is unaffected.

1.0.4-mc26.1.2+build.46 — 2026-08-17

🐛 Doubled Rank Prefix in Chat, Duplicate SDLink Join/Leave Messages

  • Fixed a bug where players' rank prefix could show up twice in chat, e.g. <[Owner] [Owner] PlayerName>. This happened when your permissions plugin (LuckPerms in particular) formats names using Minecraft's own team system — the display name already had the prefix in it, and the chat template added it again on top. No config changes needed.
  • Fixed duplicate join/leave (and advancement) messages showing up in Discord for servers using Simple Discord Link (SDLink) — SDLink has its own built-in join/leave announcer that runs independently of NeoEssentials, and both were firing at once. You'll now get a clear warning in your server log telling you exactly which SDLink setting to turn off if this affects you.

1.0.4-mc26.1.2+build.45 — 2026-08-13

✨ Per-Category Logging Configuration

  • You can now control logging per-subsystem instead of all-or-nothing. New logging.categories section in config.json — 12 categories (chat, economy, permissions, teleportation, moderation, auction house, kits, web dashboard, Discord, config, commands, general), each with its own normal (routine messages) and debug (verbose troubleshooting output) switch. debug output goes to logs/debug.log, keeping your normal console/log clean.
  • If you had the old debug toggle on, it carries over automatically — every category's debug switch turns on for you during the upgrade.
  • Lots of new detailed logging added across the whole mod so problems are much easier to diagnose when they happen — just flip on the relevant category's debug switch and check logs/debug.log.

1.0.4-mc26.1.2+build.44 — 2026-08-13

🐛 Nickname Fix Now Actually Reaches Existing Configs, LuckPerms Context Fix

  • The build.43 nickname fix only applied to brand-new configs — if you already had a config.json, it kept the old broken default forever. This update patches existing configs too (only if you never customized that setting yourself), so the nickname fix now reaches everyone.
  • Fixed LuckPerms prefix/suffix lookups ignoring per-world/per-server contexts for online players in a couple of spots.

1.0.4-mc26.1.2+build.43 — 2026-08-04

🐛 Nicknames Now Show Up in Chat by Default

  • Fixed the default chat format so /nick and /setnick nicknames actually show up in your chat messages, not just the tab list. /setnick was working the whole time — the default chat line just wasn't set up to display it.
  • If you already edited your config before, just swap {neoessentials_username} for {neoessentials_displayname} in your chat format setting, then reload.

1.0.4-mc26.1.2+build.42 — 2026-07-31

🐛 Team Chat: Found the Real Bug (FTB Teams Versions)

  • Found the actual cause of team chat not resolving on some FTB Teams versions: NeoEssentials was checking the wrong internal class for the right method. Should be properly fixed now for FTB Teams 2101.1.10 — if it's still not working after this update, please report it again.

1.0.4-mc26.1.2+build.41 — 2026-07-31

🐛 Team Chat: Still Investigating on Some FTB Teams Versions

  • The previous attempt to fix team chat still isn't resolving on FTB Teams 2101.1.10. This update logs a lot more detail at startup to help pin down the exact fix — team chat isn't expected to work yet on that version, but the next update should have it.

1.0.4-mc26.1.2+build.40 — 2026-07-29

🐛 Attempted Fix: Team Chat Not Working on Some FTB Teams Versions

  • If the team chat channel wasn't working for you even with FTB Teams installed, this update makes NeoEssentials try harder to find the right FTB Teams hook automatically instead of only checking two fixed possibilities. If it still doesn't work after updating, check your server log at startup for an "FTB TEAMS API NOT RESOLVED" message and report it — it now also logs extra detail that'll help pin down the exact fix.

1.0.4-mc26.1.2+build.39 — 2026-07-29

✨ More Player Info Available to Dashboard Integrations

  • Player lookups (both from the dashboard and its API) now also report total playtime, when the player first joined, and their current gamemode.

1.0.4-mc26.1.2+build.38 — 2026-07-29

🐛 Fix: Channel Prefix Messages Showing the Wrong Channel Name

  • Using a channel prefix (like ! or @) to send a single message to a different channel now correctly shows that channel's name in the message, instead of showing your normal channel.

1.0.4-mc26.1.2+build.37 — 2026-07-28

✨ Internal Dashboard: Player Tools Moved to the Lookup Page

  • The full player-management panel (heal, kick, ban, mute, teleport, permissions, inventory, notes, and more) used to be its own page. It's now shown right on the Player Lookup page for signed-in staff, so there's one less click to get there.

1.0.4-mc26.1.2+build.36 — 2026-07-28

✨ Point the "View Profile" Chat Link at Your Own Website

  • The small clickable icon next to player names in chat (added build.24) can now point at your own website instead of the built-in dashboard — set webDashboard.customProfileUrlTemplate to something like "https://myserver.com/players/{player}" and it'll use that instead.

1.0.4-mc26.1.2+build.33 — 2026-07-28

✨ New: Team Chat Channel (FTB Teams)

  • Added a team chat channel — if you're playing a modpack with FTB Teams, chatting in it only reaches your own teammates, no radius or permission setup needed.
  • If FTB Teams isn't installed, or you're not on a team yet, you'll get a clear message telling you why instead of the message just silently vanishing.

1.0.4-mc26.1.2+build.32 — 2026-07-28

✨ Give a Chat Channel a Styled Name, Plus a Reliability Fix

  • New displayName option per chat channel — lets you show a colored/custom name (e.g. "&d⚙ Staff") for a channel in chat, without touching its actual internal name.
  • Fixed a bug where a broken chat channel setting could silently stop OTHER channels' commands from working too. Each channel is now handled independently.

1.0.4-mc26.1.2+build.30 — 2026-07-28

✨ Customize the Discord Chat Embed Yourself

  • New discordEmbedTemplate config option lets you customize the look of the Discord embed for channel-routed chat messages (Simple Discord Link only, for now) — author name, avatar, message text, side-bar color, footer, and timestamp are all configurable, with placeholders for player name, message, and channel.
  • If you use split config files, this new setting lives in its own file under a new templates/ folder instead of cluttering chat.json.

1.0.4-mc26.1.2+build.29 — 2026-07-28

🐛 SDLink Channel-Routed Chat Now Looks Right Again

  • If you set a specific Discord channel for one of your chat channels, messages were showing up as plain text instead of Simple Discord Link's usual nicely-styled message with your avatar. Fixed — it now looks the same as before.
  • Also fixed a hidden crash risk in the same area, found while working on this.

1.0.4-mc26.1.2+build.28 — 2026-07-28

🐛 Critical Fix: build.27 Could Crash Your Whole Server on Startup

  • If you updated to build.27, some server setups would crash immediately on startup with a NoClassDefFoundError. This was caused by the Mc2Discord/DCIntegration fixes in that update. Fully fixed now — please update immediately if you're on build.27.

1.0.4-mc26.1.2+build.27 — 2026-07-27

🐛 Same Discord Fix Extended to Mc2Discord and DCIntegration

  • If you use Mc2Discord instead of Simple Discord Link, it had the same channel-privacy bug fixed last update — a configured private channel ID was being ignored. Fixed the same way.
  • DCIntegration now also supports sending a specific NeoEssentials chat channel (like staff) to its own dedicated Discord channel, which wasn't possible before at all.
  • Neither of these was tested against a live Mc2Discord/DCIntegration setup (unlike the earlier Simple Discord Link fix) — please report anything unexpected.

1.0.4-mc26.1.2+build.26 — 2026-07-27

✨ New Chat Channel Placeholder, Plus Discord Relay Fixes

  • New {channel} placeholder — shows which chat channel (local/global/staff/etc.) a message was sent in.
  • Fixed: a private staff Discord channel you configured could still leak messages to your server's default Discord channel, because the Simple Discord Link integration was silently ignoring the specific channel ID you set. It now actually goes to the right channel.
  • If you're seeing Discord messages posted twice, that's a separate issue caused by Simple Discord Link having its own built-in "relay every chat message" feature running at the same time as NeoEssentials' own relay — NeoEssentials now warns you about this on startup and tells you exactly which setting to turn off in Simple Discord Link's own config.

1.0.4-mc26.1.2+build.25 — 2026-07-27

🐛 Fix: Chat Status Icons (AFK/Vanished/Muted) Weren't Showing

  • If you set an icon for AFK/vanished/muted players in chat.badges.statusIcons, it silently never appeared in chat with the default settings. Fixed — set your icon text and it'll show up now. Rank badges weren't affected by this.

1.0.4-mc26.1.2+build.24 — 2026-07-27

✨ Click a Player's Name in Chat to Open Their Dashboard Profile

  • Player names in chat now show a small clickable link icon that opens that player's public profile (bans/mutes/kicks/warnings) on your dashboard, right in a browser. Works whether you use the external (Laravel) dashboard or the mod's own built-in one.
  • If you use the built-in dashboard, set the new webDashboard.publicUrl config to your server's public address so the link actually works for players (e.g. http://your.server.ip:8090). If you use the external dashboard, nothing extra to set up — it already knows its own address.

1.0.4-mc26.1.2+build.23 — 2026-07-27

🐛 Fix: Logging In Could Change Everyone Else's Tab Suffix

  • If two players in the same rank ever ended up with slightly different tab-list suffixes (an AFK tag, a per-player override, etc.), a new player logging in could make everyone else's suffix suddenly switch to match the new player's. Fixed — everyone's own suffix now displays correctly no matter who else logs in.

1.0.4-mc26.1.2+build.22 — 2026-07-27

✨ You Can Now Back Up to Microsoft OneDrive Too

  • Added OneDrive as a third backup destination, alongside Dropbox and Google Drive. If you've got a lot of free space sitting on a personal OneDrive, you can now send your server backups there straight from the dashboard.

1.0.4-mc26.1.2+build.21 — 2026-07-23

✨ Internal Dashboard: 3D Player Renders

  • Player Profile, Settings, and Public Lookup now show a full 3D character render with a glowing color-matched background instead of a flat face icon.

1.0.4-mc26.1.2+build.20 — 2026-07-23

🐛 Fix: Visiting the Warps Page Could Show "API Unreachable"

  • The Player Warps tab could hang under real player load instead of loading, which made the dashboard think the whole connection was down. Fixed.

1.0.4-mc26.1.2+build.19 — 2026-07-23

✨ Internal Dashboard Permissions Page Redesign

  • Groups and online users now collapse to a compact row by default — click to expand for the full editor. Permission nodes are grouped by category instead of one long list.

1.0.4-mc26.1.2+build.18 — 2026-07-23

✨ See Player-Created Warps on Both Dashboards

  • Both dashboards' Warps page now has a "Player Warps" tab, so admins can finally see every player's own /pwarp warps (and clean one up if needed) instead of only the shared server warps.

1.0.4-mc26.1.2+build.17 — 2026-07-23

🐛 AFK Now Actually Respects Its Own Settings

  • The AFK config options for what counts as activity (movement, chat, commands, interactions) weren't being enforced — everything always reset your AFK timer no matter how you had them set, and chat specifically never reset it at all. Both are now fixed.
  • Small /help fix: /tpcancel now shows up correctly (it was previously mislabeled).
  • Cleaned up a few leftover admin permission nodes that looked like they did something but didn't.

1.0.4-mc26.1.2+build.16 — 2026-07-23

🐛 /help Now Shows the Real Permission for Every Command

  • /help <command> used to guess every command's permission node from its name, which was wrong for ~160 commands (e.g. /apikey actually needs neoessentials.dashboard.apikeys, most moderation/teleport/economy/item commands use a namespaced node). Fixed — /help now shows and checks the real permission for every command, so it's actually reliable for figuring out what to grant someone.

1.0.4-mc26.1.2+build.15 — 2026-07-22

✨ Account Settings Page + Minecraft Account Linking (Both Dashboards)

  • Sidebar now shows your real Minecraft avatar once linked, on both dashboards.
  • New Settings/Profile page on the internal dashboard (password change, Minecraft account linking, Discord status).
  • Any dashboard account can now link a Minecraft account itself via a short in-game code (/linkaccount <code>) — no Discord required.

1.0.4-mc26.1.2+build.14 — 2026-07-22

✨ New Brand Logo on the Internal Dashboard

  • The internal dashboard now shows the real NeoEssentials shield logo instead of a generic placeholder icon, everywhere: sidebar, login, public lookup page, and browser tab favicon.

1.0.4-mc26.1.2+build.13 — 2026-07-22

✨ Dashboard Security: Copyable Keys, Encrypted Tokens, Permission-Driven Role Sync

  • /apikey create tokens are now click-to-copy in chat instead of plain text.
  • The paired external dashboard's auth token is now encrypted at rest in config.json instead of stored in plaintext (existing values migrate automatically, no action needed).
  • New opt-in setting webDashboard.roleSync: automatically grants/revokes a linked player's dashboard admin role based on their real in-game permission node or group — no more manually running /apikey create every time an admin's status changes. Off by default.

1.0.4-mc26.1.2+build.12 — 2026-07-22

✨ Economy Tab: Overview Stats + Distribution Chart, Plus a Real Bug Fix

  • Both dashboards' Economy tab now shows total wealth, account count, average/starting balance, and a balance-distribution chart at a glance.
  • Adjusting a balance now shows a live lookup preview (avatar, online status, current balance) before you commit — no more adjusting blind.
  • Fixed: the distribution chart's data was silently failing to compute for any balance with cents (i.e. almost all of them) — now works correctly.

1.0.4-mc26.1.2+build.13-pre-fix — 2026-07-22

Shipped as build.13 at the time — after a cross-branch build-number-drift fix reset the counter, that number now belongs to a later, different entry above.

✨ Per-Player Control Page: Now Feature-Complete

  • The built-in dashboard's per-player control page now covers just about every admin action you'd otherwise type as a command: heal/kick/ban/mute, game mode, permission group and overrides, economy, freeze/vanish/jail, give item/potion effects/spawn mob/burn/lightning/kill, sudo, per-player time and weather, and clear inventory — plus full moderation history in one place.
  • Not included: live inventory/ender-chest editing (those are in-game GUI menus with no browser equivalent).

1.0.4-mc26.1.2+build.9 — 2026-07-22

✨ Built-In Dashboard: Full Per-Player Control Page

  • The built-in dashboard's Players page now has a full control page for each player — game mode, permission group and individual permissions, economy (give/take/set balance), inventory, and full moderation history (bans, mutes, kicks, warnings, staff notes) all in one place.
  • Player lookups now show balance and permission group for offline players too, not just online ones.
  • Fixed a bug where several player-info API endpoints didn't work for offline players even though they were supposed to.

1.0.4-mc26.1.2+build.8 — 2026-07-22

✨ Built-In Dashboard: Now Feature-Complete

  • The built-in dashboard (webDashboard.mode: "internal"/"both" in config.json) now covers everything: server overview, players, economy, warps, kits, holograms, Discord, dashboard accounts, backups, console commands, activity logs, permissions, and a no-login-required public player-lookup page.
  • Already using the separate NeoEssentials-Dashboard app? Nothing changes for you — the default stays "external".

1.0.4-mc26.1.2+build.5 — 2026-07-22

✨ A Real Built-In Dashboard Option

  • Prefer not to run a separate app for your web dashboard? Set webDashboard.mode to "internal" (or "both") in config.json and the mod now serves a real, working dashboard straight from its own port — no separate app to install.
  • This first update covers logging in, the server overview, and the players page (heal/kick/ban/mute, lookup, homes). More pages are coming in future updates.
  • If you're already using the separate NeoEssentials-Dashboard app, nothing changes for you — the default stays the same.

1.0.4-mc26.1.2+build.1 — 2026-07-21

✨ Support/Discord/GitHub Links on Startup

  • The server console now prints a quick link to our support site, Discord, and GitHub once every restart, so admins always know where to get help.
  • If something actually goes wrong during startup (a system fails to load, or the permission system has to fall back to a safe mode), the first admin to join the server now sees a clickable in-game message pointing to those same three places.

1.0.3Релиз1.21.8, 1.21.9, 1.21.10 · 21 июля 2026 г.

NeoEssentials — Changelog

Starting from v1.0.3 — earlier history (v1.0.2.x and before) is not carried over.

Minecraft 1.21.1 – 1.21.11 · NeoForge 21.1.179+


1.0.3+build.78 — 2026-07-21

🐛 Vanish No Longer Makes Noise or Gets Noticed by Mobs

  • Fixed vanished players still being audible — footsteps, splashes, etc. no longer play for other players while you're vanished.
  • Fixed hostile mobs still targeting and attacking vanished players — they're now ignored by mob AI too, not just invisible to other players.
  • Vanished players can no longer hurt other players, interact with anything, or break/place blocks by default — these each now need a specific permission (neoessentials.vanish.hurt/.interact/.build, or the neoessentials.vanish.* wildcard for all three) rather than being tied to the "can see vanished players" permission.
  • The "who can see who" rank system for vanish now uses proper permission nodes (neoessentials.vanish.priority.<number> — higher number wins, equal numbers can see each other too) instead of a fixed list of group names, so it works with any permission setup, not just the specific group names the mod used to expect.

1.0.3+build.77 — 2026-07-21

🐛 Fixed /sell Selling the Wrong Item at the Wrong Price

  • Fixed /sell hand sometimes showing "minecraft:air" in the sale message and overcharging up to 3x the price you set for the item.
  • Server admins (OPs) and permission groups with a broad wildcard permission no longer automatically get the highest sell-price bonus, free tax exemption, or no pay cooldown — those now have to be granted on purpose. (Configurable if you actually want the old behavior back.)
  • Typing /sell with no arguments now sells whatever's in your hand, same as /sell hand.
  • Fixed a config file typo that could break Discord-login syncing on server start.

1.0.3+build.24 — 2026-07-18

🧹 Config Cleanup — Kit Commands Now Actually Run

  • Removed a handful of dead/duplicate config settings that either did nothing or were always overridden by another file, so the config files are less confusing to edit.
  • Fixed: the commands list on a kit (run when it's claimed, e.g. a welcome message) was silently ignored — it now actually runs.
  • The service-account login option for external dashboards has been removed — use /dashboard pair or /apikey create instead (see below).

1.0.3+build.23 — 2026-07-18

✨ Economy Now Supports Third-Party Economy Mods

  • Added support for SG Economy API as an optional alternative to NeoEssentials' own economy — enable with economy.useExternalEconomy: true in config.json if you'd rather players' balances live in that mod instead. Off by default.
  • The mod's internal economy/permission interop system (used for advanced mod-to-mod integrations) was also split into its own publicly-installable component for other mod developers.

1.0.3+build.22 — 2026-07-18

🧹 Dashboard Command Cleanup

  • Fixed /dashboard pair not being able to accept a server URL at all — it now works correctly (the URL needs quotes: /dashboard pair "http://host:port" <code>).
  • Removed /dashboard update/check/force — leftovers from an old bundled dashboard UI that no longer ships with the mod, so these commands never actually did anything useful.

1.0.3+build.21 — 2026-07-17

✨ One-Command External Dashboard Pairing

  • Connecting an external dashboard app to your server is now a single command: /dashboard pair "<dashboardUrl>" <code> (get the code from the dashboard's own setup page). Both sides connect to each other automatically — no more manually copying keys between two config files.
  • /dashboard unpair disconnects cleanly.

1.0.3+build.20 — 2026-07-17

🐛 Bug Fix — LuckPerms Group Now Affects Chat & Tablist

  • Fixed: a player's LuckPerms group wasn't being used for group:<name> chat formats or per-group tablist styling — both always fell back to the default, even though permission nodes from LuckPerms worked fine. Now the player's real LuckPerms primary group is used correctly for both.

1.0.3+build.19 — 2026-07-17

✨ API Keys, Locked-Down Admin Settings, and Dashboard Account Sync

  • New: API keys for external dashboard apps — a proper, revocable login credential separate from human dashboard accounts. Create one with /apikey create <label>.
  • Security fix: MOTD, rules, shops, holograms, and warps could previously be edited by any logged-in dashboard account, including read-only ones. Editing these now correctly requires an admin-level account; viewing them still doesn't.
  • Dashboard user accounts can now sync automatically between the mod and an external dashboard app in both directions.

1.0.3+build.18 — 2026-07-17

🐛 Bans and Kicks Weren't Actually Being Tracked

  • Fixed: /ban and /kick (and related commands) were silently being intercepted by vanilla Minecraft's own built-in versions instead of NeoEssentials' — meaning bans and kicks never showed up in the mod's own history or the dashboard, even though the ban/kick itself still worked. Now correctly tracked.
  • Fixed /ban's reason text sometimes getting merged into the player name field.
  • Added /modhistory <player> (alias /history) to view a player's full moderation record in-game.
  • Fixed the dashboard's Discord "send test message" button, which previously always reported success without actually sending anything.
  • Fixed deleting a permission group silently doing nothing.

1.0.3+build.17 — 2026-07-16

🐛 Storage Fix + 9 Bugs From a Full Command Audit

  • Fixed: the SQLite storage option could silently fail to save/load data in some setups.
  • Also fixed: /baltop occasionally showing stale balances, /setworth rejecting some item IDs, /invseeedit crashing, jail auto-ban thresholds never actually triggering, /chatformat not being a registered command, /mute commands failing from console/RCON, and a couple of command-name conflicts (/gc, /me).

1.0.3+build.16 — 2026-07-16

/sudo Improvements

  • /sudo <player> c:<message> makes a player say something in real chat (going through normal chat formatting/filters), instead of just running a command as them.
  • /sudo * runs a command as every online player at once; /sudo ** includes yourself too.

1.0.3+build.15 — 2026-07-15

✨ Discord Integration Rewrite

  • Rebuilt the Discord chat-relay integrations for Simple Discord Link, Mc2Discord, and DCIntegration against their real, official APIs (previously used guesswork that could break on updates). Dropped DiscordSRV support — it doesn't run on NeoForge servers.
  • Dashboard's "Login with Discord" now only works by reading an account link you've already set up in-game via one of the above mods — the mod itself never talks to Discord directly.

1.0.3+build.14 — 2026-07-14

✨ Module Toggles Fixed, Public Moderation Lookup, Dashboard Commands Fixed

  • Fixed: many of the on/off switches in config.json's modules/commands sections didn't actually do anything for a lot of commands. They all work correctly now — note that toggling any of these still needs a server restart, not just /neoe reload.
  • Added new toggles for holograms, shops, the auction house, and a few other systems that previously couldn't be disabled at all.
  • Fixed: /dashboard and /dashboardregister were completely non-functional commands — typing them did nothing. Both now work.
  • Added a public, no-login player moderation lookup page/API for transparency, similar to other ban-management plugins.

1.0.3+build.10 — 2026-07-12

✨ Storage Backends Now Cover the Whole Mod

  • Extended the pluggable JSON/YAML/SQLite/MySQL storage system to every remaining manager: economy, kits, homes, /back, warps, spawn, jail, freeze, vanish, AFK, ignore lists, chat formats, holograms, chest/NPC shops, permissions (groups, users, aliases), dashboard accounts, custom-language overrides, resource-pack metadata, and the Auction House.
  • The Auction House no longer uses its own separate SQLite database — it now shares the same backend as everything else, including MySQL for cross-server listings.
  • All existing data imports automatically and losslessly the first time you switch backends, same as the moderation system did in the previous release.
  • Fixed a bug where /warp's per-player warps were read/written from a hard-coded path instead of the configured data directory.

1.0.3+build.9 — 2026-07-12

✨ Pluggable Storage Backends (JSON / YAML / SQLite / MySQL)

  • New storage section in config.json lets you pick JSON (default), YAML, SQLite, or MySQL as the backend for supported data. MySQL enables true multi-server shared data — point every server in your network at the same database and they share bans/mutes/etc. in real time.
  • This release migrates the moderation system (bans, mutes, kicks, warns, notes, reports) onto the new system. Existing data is imported automatically and losslessly the first time you switch backends.
  • Economy, homes, warps, kits, permissions, and the rest of the mod's data are unaffected for now — still plain JSON, with the same treatment planned for a future update.

1.0.3+build.8 — 2026-07-12

✨ Moderation System Overhaul

  • Fixed: dashboard bans didn't actually ban anyone. Two disconnected ban stores existed — /ban enforced one, the dashboard wrote to the other, and they never talked to each other. Consolidated onto one canonical, UUID+IP-aware store with ban IDs, full history, and an unban audit trail (who/when).
  • Mutes now track reason, staff attribution, full history, and an unmute audit trail (previously just a bare name→expiry map), plus new IP-mute support.
  • Kicks are now recorded with a queryable history (previously fire-and-forget).
  • New: staff notes (/note, /notes) and player reports (/report, /reports, /reviewreport) — players can report others even while staff are offline, and staff can leave freeform notes on a player's record.
  • The dashboard's moderation API now exposes all of the above, including new IP-ban/IP-mute/kick/note/report routes that didn't exist before.

1.0.3+build.7 — 2026-07-11

🐛 Bug Fixes

  • Dashboard account login history reset on every restart: last-login time, last-login IP, failed-attempt count, and lockout state were tracked correctly in memory but never actually saved to dashboard_users.json — a server restart silently wiped all of it. Now persisted and restored correctly.
  • Locale-dependent number formatting corrupted dashboard API data: TPS, tick time, memory/CPU percentages, and backup size fields used the server's default locale for decimal formatting, producing "19,5" instead of "19.5" on comma-decimal locales — external dashboard clients parsing these as numbers would silently get truncated/wrong values. Now always formatted with a fixed locale regardless of server language settings.
  • Dashboard API 500'd on empty POST bodies from non-PHP clients: routes like reload permissions, backup create/restore, and cloud-storage config crashed whenever the caller sent an empty JSON array [] instead of an empty object {} for a parameterless action (which is how PHP/Laravel serializes an empty parameter list) — a real issue for the standalone dashboard app. These now treat an empty array the same as no parameters at all instead of erroring.

1.0.3+build.6 — 2026-07-11

🐛 Bug Fixes

  • Tablist playerFormat spacing had no effect: editing playerFormat in tablist.json — including adding spaces between {prefix}/{player}/{suffix} — never actually changed anything, since the setting was loaded but never applied. Now the literal text around each token is correctly folded into the prefix/suffix sent to the client, so spacing (and other literal text in the template) actually renders. Note: the default template's &f/&r color codes now also apply, which they never did before — a visible change for servers that never touched this setting.

1.0.3+build.480 — 2026-07-10

🐛 Bug Fixes

  • ChestShop double chests: Buy/sell, stock checks, and dynamic pricing only read one half of a double chest, so filling/emptying one side could block transactions even with space/stock free on the other side. Now reads the full combined 54-slot inventory.
  • ChestShop admin shop holograms: /chestshop hologram enable|disable|move could never be used on admin shops (the ownership check required a player-owner UUID that admin shops don't have). Now authorized via neoessentials.shop.create.admin.

✨ Improvements

  • Command feedback messages now show a small [NE] tag and use softer, vanilla-matching colors instead of harsh neon ones, so they're both more recognizable and easier on the eyes.
  • NPC Shops: Selling now actually works (previously configuring a sell price did nothing — only buying was implemented). Added a permission check (neoessentials.shop.use) before opening the shop menu. Added /npcshop respawn <shopId> to re-summon a shop's NPC if it's ever lost (e.g. void damage) without losing its configured listings.

🔧 Maintenance

  • Build version string now includes the target Minecraft version (1.0.2.6-mc1.21.1+build.N), matching the 26.1.x port branch.
1.0.3Релиз26.1, 26.1.1, 26.1.2 · 21 июля 2026 г.

NeoEssentials — Changelog (mc-26.1-port branch)

Minecraft 26.1.2 · NeoForge 26.1.2.76+

All notable changes to this branch are documented here, starting from v1.0.3 — earlier history (v1.0.2.x and before, including the port's own migration history) is not carried over.


1.0.3-mc26.1.2+build.78 — 2026-07-21

🐛 Vanish No Longer Makes Noise or Gets Noticed by Mobs

  • Fixed vanished players still being audible — footsteps, splashes, etc. no longer play for other players while you're vanished.
  • Fixed hostile mobs still targeting and attacking vanished players — they're now ignored by mob AI too, not just invisible to other players.
  • Vanished players can no longer hurt other players, interact with anything, or break/place blocks by default — these each now need a specific permission (neoessentials.vanish.hurt/.interact/.build, or the neoessentials.vanish.* wildcard for all three) rather than being tied to the "can see vanished players" permission.
  • The "who can see who" rank system for vanish now uses proper permission nodes (neoessentials.vanish.priority.<number> — higher number wins, equal numbers can see each other too) instead of a fixed list of group names, so it works with any permission setup, not just the specific group names the mod used to expect.

1.0.3-mc26.1.2+build.77 — 2026-07-21

🐛 Fixed /sell Selling the Wrong Item at the Wrong Price

  • Fixed /sell hand sometimes showing "minecraft:air" in the sale message and overcharging up to 3x the price you set for the item.
  • Server admins (OPs) and permission groups with a broad wildcard permission no longer automatically get the highest sell-price bonus, free tax exemption, or no pay cooldown — those now have to be granted on purpose. (Configurable if you actually want the old behavior back.)
  • Typing /sell with no arguments now sells whatever's in your hand, same as /sell hand.
  • Fixed a config file typo that could break Discord-login syncing on server start.

1.0.3-mc26.1.2+build.24 — 2026-07-18

🧹 Config Cleanup — Kit Commands Now Actually Run

  • Removed a handful of dead/duplicate config settings that either did nothing or were always overridden by another file, so the config files are less confusing to edit.
  • Fixed: the commands list on a kit (run when it's claimed, e.g. a welcome message) was silently ignored — it now actually runs.
  • The service-account login option for external dashboards has been removed — use /dashboard pair or /apikey create instead (see below).

1.0.3-mc26.1.2+build.23 — 2026-07-18

✨ Economy Now Supports Third-Party Economy Mods

  • Added support for SG Economy API as an optional alternative to NeoEssentials' own economy — enable with economy.useExternalEconomy: true in config.json if you'd rather players' balances live in that mod instead. Off by default.
  • The mod's internal economy/permission interop system (used for advanced mod-to-mod integrations) was also split into its own publicly-installable component for other mod developers.

1.0.3-mc26.1.2+build.22 — 2026-07-18

🧹 Dashboard Command Cleanup

  • Fixed /dashboard pair not being able to accept a server URL at all — it now works correctly (the URL needs quotes: /dashboard pair "http://host:port" <code>).
  • Removed /dashboard update/check/force — leftovers from an old bundled dashboard UI that no longer ships with the mod, so these commands never actually did anything useful.

1.0.3-mc26.1.2+build.21 — 2026-07-17

✨ One-Command External Dashboard Pairing

  • Connecting an external dashboard app to your server is now a single command: /dashboard pair "<dashboardUrl>" <code> (get the code from the dashboard's own setup page). Both sides connect to each other automatically — no more manually copying keys between two config files.
  • /dashboard unpair disconnects cleanly.

1.0.3-mc26.1.2+build.20 — 2026-07-17

🐛 Bug Fix — LuckPerms Group Now Affects Chat & Tablist

  • Fixed: a player's LuckPerms group wasn't being used for group:<name> chat formats or per-group tablist styling — both always fell back to the default, even though permission nodes from LuckPerms worked fine. Now the player's real LuckPerms primary group is used correctly for both.

1.0.3-mc26.1.2+build.19 — 2026-07-17

✨ API Keys, Locked-Down Admin Settings, and Dashboard Account Sync

  • New: API keys for external dashboard apps — a proper, revocable login credential separate from human dashboard accounts. Create one with /apikey create <label>.
  • Security fix: MOTD, rules, shops, holograms, and warps could previously be edited by any logged-in dashboard account, including read-only ones. Editing these now correctly requires an admin-level account; viewing them still doesn't.
  • Dashboard user accounts can now sync automatically between the mod and an external dashboard app in both directions.

1.0.3-mc26.1.2+build.18 — 2026-07-17

🐛 Bans and Kicks Weren't Actually Being Tracked

  • Fixed: /ban and /kick (and related commands) were silently being intercepted by vanilla Minecraft's own built-in versions instead of NeoEssentials' — meaning bans and kicks never showed up in the mod's own history or the dashboard, even though the ban/kick itself still worked. Now correctly tracked.
  • Fixed /ban's reason text sometimes getting merged into the player name field.
  • Added /modhistory <player> (alias /history) to view a player's full moderation record in-game.
  • Fixed the dashboard's Discord "send test message" button, which previously always reported success without actually sending anything.
  • Fixed deleting a permission group silently doing nothing.

1.0.3-mc26.1.2+build.17 — 2026-07-16

🐛 Storage Fix + 9 Bugs From a Full Command Audit

  • Fixed: the SQLite storage option could silently fail to save/load data in some setups.
  • Also fixed: /baltop occasionally showing stale balances, /setworth rejecting some item IDs, /invseeedit crashing, jail auto-ban thresholds never actually triggering, /chatformat not being a registered command, /mute commands failing from console/RCON, and a couple of command-name conflicts (/gc, /me).

1.0.3-mc26.1.2+build.16 — 2026-07-16

/sudo Improvements

  • /sudo <player> c:<message> makes a player say something in real chat (going through normal chat formatting/filters), instead of just running a command as them.
  • /sudo * runs a command as every online player at once; /sudo ** includes yourself too.

1.0.3-mc26.1.2+build.15 — 2026-07-15

✨ Discord Integration Rewrite

  • Rebuilt the Discord chat-relay integrations for Simple Discord Link, Mc2Discord, and DCIntegration against their real, official APIs (previously used guesswork that could break on updates). Dropped DiscordSRV support — it doesn't run on NeoForge servers.
  • Dashboard's "Login with Discord" now only works by reading an account link you've already set up in-game via one of the above mods — the mod itself never talks to Discord directly.

1.0.3-mc26.1.2+build.14 — 2026-07-14

✨ Module Toggles Fixed, Public Moderation Lookup, Dashboard Commands Fixed

  • Fixed: many of the on/off switches in config.json's modules/commands sections didn't actually do anything for a lot of commands. They all work correctly now — note that toggling any of these still needs a server restart, not just /neoe reload.
  • Added new toggles for holograms, shops, the auction house, and a few other systems that previously couldn't be disabled at all.
  • Fixed: /dashboard and /dashboardregister were completely non-functional commands — typing them did nothing. Both now work.
  • Added a public, no-login player moderation lookup page/API for transparency, similar to other ban-management plugins.

1.0.3-mc26.1.2+build.10 — 2026-07-12

✨ Storage Backends Now Cover the Whole Mod

  • Extended the pluggable JSON/YAML/SQLite/MySQL storage system to every remaining manager: economy, kits, homes, /back, warps, spawn, jail, freeze, vanish, AFK, ignore lists, chat formats, holograms, chest/NPC shops, permissions (groups, users, aliases), dashboard accounts, custom-language overrides, resource-pack metadata, and the Auction House.
  • The Auction House no longer uses its own separate SQLite database — it now shares the same backend as everything else, including MySQL for cross-server listings.
  • All existing data imports automatically and losslessly the first time you switch backends, same as the moderation system did in the previous release.
  • Fixed a bug where /warp's per-player warps were read/written from a hard-coded path instead of the configured data directory.

1.0.3-mc26.1.2+build.9 — 2026-07-12

✨ Pluggable Storage Backends (JSON / YAML / SQLite / MySQL)

  • New storage section in config.json lets you pick JSON (default), YAML, SQLite, or MySQL as the backend for supported data. MySQL enables true multi-server shared data — point every server in your network at the same database and they share bans/mutes/etc. in real time.
  • This release migrates the moderation system (bans, mutes, kicks, warns, notes, reports) onto the new system. Existing data is imported automatically and losslessly the first time you switch backends.
  • Economy, homes, warps, kits, permissions, and the rest of the mod's data are unaffected for now — still plain JSON, with the same treatment planned for a future update.

1.0.3-mc26.1.2+build.8 — 2026-07-12

✨ Moderation System Overhaul

  • Fixed: dashboard bans didn't actually ban anyone. Two disconnected ban stores existed — /ban enforced one, the dashboard wrote to the other, and they never talked to each other. Consolidated onto one canonical, UUID+IP-aware store with ban IDs, full history, and an unban audit trail (who/when).
  • Mutes now track reason, staff attribution, full history, and an unmute audit trail (previously just a bare name→expiry map), plus new IP-mute support.
  • Kicks are now recorded with a queryable history (previously fire-and-forget).
  • New: staff notes (/note, /notes) and player reports (/report, /reports, /reviewreport) — players can report others even while staff are offline, and staff can leave freeform notes on a player's record.
  • The dashboard's moderation API now exposes all of the above, including new IP-ban/IP-mute/kick/note/report routes that didn't exist before.

1.0.3-mc26.1.2+build.7 — 2026-07-11

🐛 Bug Fixes

  • Tablist playerFormat spacing had no effect: editing playerFormat in tablist.json — including adding spaces between {prefix}/{player}/{suffix} — never actually changed anything, since the setting was loaded but never applied. Now the literal text around each token is correctly folded into the prefix/suffix sent to the client, so spacing (and other literal text in the template) actually renders. Note: the default template's &f/&r color codes now also apply, which they never did before — a visible change for servers that never touched this setting.

1.0.3-mc26.1.2+build.482 — 2026-07-10

🐛 Bug Fixes

  • ChestShop double chests: Buy/sell, stock checks, and dynamic pricing only read one half of a double chest. Now reads the full combined 54-slot inventory.
  • ChestShop admin shop holograms: /chestshop hologram enable|disable|move could never be used on admin shops. Now authorized via neoessentials.shop.create.admin.

✨ Improvements

  • Command feedback messages now show a small [NE] tag and use softer, vanilla-matching colors.
  • NPC Shops: Selling now actually works (previously only buying was implemented). Added a permission check before opening the shop menu. Added /npcshop respawn <shopId> to re-summon a lost shop NPC without losing its listings.
1.0.2.6Релиз1.21.6, 1.21.7, 1.21.8 · 11 июля 2026 г.

NeoEssentials — Changelog

Minecraft 1.21.1 – 1.21.11 · NeoForge 21.1.179+


1.0.2.6+build.480 — 2026-07-10

🐛 Bug Fixes

  • ChestShop double chests: Buy/sell, stock checks, and dynamic pricing only read one half of a double chest, so filling/emptying one side could block transactions even with space/stock free on the other side. Now reads the full combined 54-slot inventory.
  • ChestShop admin shop holograms: /chestshop hologram enable|disable|move could never be used on admin shops (the ownership check required a player-owner UUID that admin shops don't have). Now authorized via neoessentials.shop.create.admin.

✨ Improvements

  • Command feedback messages now show a small [NE] tag and use softer, vanilla-matching colors instead of harsh neon ones, so they're both more recognizable and easier on the eyes.
  • NPC Shops: Selling now actually works (previously configuring a sell price did nothing — only buying was implemented). Added a permission check (neoessentials.shop.use) before opening the shop menu. Added /npcshop respawn <shopId> to re-summon a shop's NPC if it's ever lost (e.g. void damage) without losing its configured listings.

🔧 Maintenance

  • Build version string now includes the target Minecraft version (1.0.2.6-mc1.21.1+build.N), matching the 26.1.x port branch.

The entries below (build.~225 – build.~460) reconstruct work done between build.214 and build.480 that was never logged at the time. Build numbers are approximate — dates and content are accurate to the commit history.

1.0.2.6+build.~460 — 2026-07-08

🐛 Bug Fixes

  • /invseeedit, /ecedit: Fixed the edit lock never releasing — the first use against any target permanently locked it out for every future editor (including yourself) until a server restart. Now releases on GUI close or disconnect.
  • /pay: Fixed the amount and player name showing in swapped positions (e.g. "Paid <player>$ to 1000.0" instead of "Paid 1000.00$ to <player>"), plus a decimal-formatting mismatch between the amount and fee/net values in the same message.
  • /eco give|take|set|reset: The admin's own confirmation message was missing the currency symbol. /eco take also never notified the target player that money was taken — now it does, matching give/set/reset.
  • Localization: fixed a localize() overload ambiguity that silently shifted {n} message placeholders across jail/ban/freeze/etc. messages. Also fixed swapped/missing arguments in several moderation messages, and a duplicate-broadcast bug where staff saw every moderation action twice.
  • /jail was completely broken — every attempt threw an internal error before jailing the player, due to a null being passed where it wasn't allowed. Fixed.
  • Tablist: fixed prefix/suffix silently reverting to blank after the first refresh cycle following a reload.

✨ Features

  • Added cuboid/sphere jail regions via a configurable jail wand or WorldEdit soft-integration, with region-wide block protection.
  • Added an above-head nametag prefix/suffix system for the tablist.

🧪 Attempted (Reverted)

  • Briefly tried widening Minecraft version compatibility to include 26.1.x, but reverted after confirming it crashes on load — a real port needs more work and is tracked separately on its own branch.

1.0.2.6+build.~400 — 2026-07-06

🐛 Bug Fixes

  • Fixed group permission precedence and a permission-lookup race condition.
  • Closed freeze/jail/vanish/mute enforcement gaps across chat, teleportation, and combat.
  • Fixed a kit permanent-lockout bug, a double-claim race condition, and item data loss on reload.
  • Fixed an Auction House item-duplication exploit and a named-item price bypass on /sell.
  • Fixed jail bounds checking ignoring dimension.

🔒 Security

  • Required an admin role on web dashboard endpoints that were previously reachable by any non-admin account.
  • Replaced unsalted password hashing with salted PBKDF2 (120k iterations); the default admin account now gets a random temporary password instead of a hardcoded one.

1.0.2.6+build.~330 — 2026-07-04

✨ Features

  • Added tablist short-tokens/animations usable directly in chat, and #-prefixed hex gradient stops.
  • ChestShop items now preserve full item data (enchantments, custom names, modded NBT) instead of just a bare item ID.
  • Permission group prefix/suffix now render as rich text instead of raw color codes.

🐛 Bug Fixes

  • Fixed /flyspeed not actually applying to player flight.
  • Fixed a pending-shop autofill ordering bug.

1.0.2.6+build.~300 — 2026-07-03

🐛 Bug Fixes

  • Fixed unclosed <gradient> chat tags corrupting trailing legacy color codes.
  • Fixed ChestShop click-spam and NBT-sensitive item stock matching.

✨ Features

  • Added custom skins for fake tablist entries, plus a BTLP-style column-grid tablist layout.

1.0.2.6+build.~260 — 2026-07-02

✨ Features

  • Added a configurable movement-distance threshold for AFK detection.
  • Landed the initial web dashboard implementation.

🐛 Bug Fixes

  • Hardened enchantment-compatibility checks to tolerate cross-version differences instead of crashing.

1.0.2.6+build.~225 — 2026-07-01

✨ Features

  • Added localization.preserveCustomTranslations config option to protect hand-edited translations from the automatic merge system.
  • Added web dashboard configuration groundwork.

1.0.2.6+build.214 — 2026-07-01

🐛 Bug Fixes

Inventory / Ender Chest Duplication Exploit Closed

  • /invsee, /inv, /ec, /enderchest (read-only): Opening a read-only view used a snapshot container via a standard ChestMenu, which allowed items to be freely dragged out — duplicating them while the originals stayed in the target's inventory. Fixed by switching to a custom menu with locked slots (mayPickupfalse, mayPlacefalse) so the snapshot is purely display-only.
  • Edit mode (/invseeedit, /ecedit): The editable inventory menu now also registers the viewer's own inventory and hotbar as proper slots, eliminating a server-client desync that could occur when transferring items between the target's and viewer's inventory.

Shop Hologram Orphan / Stale Entity Fixes

  • Breaking a shop sign now removes the shop and its hologram atomically (new BlockEvent.BreakEvent handler in ShopSignHandler).
  • Shop holograms left over after manually removing entries from shops.json are purged by the new ShopHologramManager.cleanOrphanedShopHolograms() routine, which runs on server start and on /chestshop reload.

✨ Feature — Named Animation System ({animation:NAME})

Define text animations in config/neoessentials/animations.json and use them anywhere in the tablist (header/footer) via {animation:NAME}.

Each animation has:

  • name — identifier for the placeholder (case-insensitive)
  • frames — list of text frames supporting &-codes, &#RRGGBB hex, <gradient:…>, <rainbow>, etc.
  • frameDuration — milliseconds per frame (minimum 50 ms)

Example — the Rainbow animation from the bundled default config:

{ "name": "Rainbow", "frames": ["&cR&6a&eo&6b&cn&6w", "..."], "frameDuration": 500 }

Use in tablist: "&7Server: {animation:Rainbow} &8| &e{online}&8/&e{max}"

Bundled animations: Rainbow, PulseStar, StatusDot, LoadingDots, GoldBanner, Spinner, HeartBeat

Timing: frames advance on wall-clock time (accurate to ~50 ms) independent of the tablist refreshInterval. Reload with /tablist reload.

New command: /tablist animations list — shows all loaded animations with frame count and duration.

Files changed: AnimationManager.java (new), animations.json (new resource), TablistManager.java, TablistCommand.java, ConfigManager.java, tablist.json


1.0.2.6+build.157 — 2026-05-25

🐛 Bug Fix — TPA Request Confirmation Message Shows "to you" Instead of Seconds

/tpa displayed "Teleport request sent to Xtron. Expires in to you second(s)." — the direction phrase "to you" was mistakenly passed as the timeout-seconds argument to the sender's confirmation message. Fixed: the sender now sees the correct expiry countdown (e.g. "Expires in 30 second(s)."), and the target-side message receives the direction phrase as intended.

Files changed: TeleportRequestManager.java


1.0.2.6+build.156 — 2026-05-25

🧹 Code Quality — Warning Audit Pass (Part 3)

Continued IDE-warning audit: Arrays.asListList.of / Set.of, .get(0).getFirst(), and handler cleanup.

  • 13 files — Global Arrays.asList(...)List.of(...) / Set.of(...) sweep: all static final immutable lists now use List.of or Set.of; removed now-unused Arrays imports where applicable.
  • 7 files — Global .get(0).getFirst() modernisation (Java 21) in WarnManager, JailCommand, NpcShopCommand, RealnameCommand, DiscordPermissionSync, ProxyIntegration, TaskScheduler.
  • ProxyIntegrationCollections.addAll for runtime array-to-collection copy; @SuppressWarnings("unused") on API constants, onPluginMessage(), and isShowNetworkPlayers().
  • CommandExecutionHandler@SuppressWarnings("unused") on class; @SuppressWarnings("MismatchedQueryAndUpdateOfCollection") on commandOutputs; removeFirst() modernisation.
  • FileManagementHandler//noinspection resource on p.serverLevel() (lifecycle managed by server).

Files changed: 19 Java files


1.0.2.6+build.155 — 2026-05-25

🧹 Code Quality — Warning Audit Pass (Part 2)

Continued IDE-warning audit across inventory/, items/, integrations/, api/, core/, shop/ sub-packages, vault/, and webdashboard/ packages.

  • PermissionScannerList.of() for static final pattern lists; removed dead null-check (Paths.get() never returns null); removed throws IOException (caught internally); fixed peek().count() optimization warning (collect + forEach); renamed unused param sourceignoredSource; @SuppressWarnings("unused") on three public API methods.
  • ExternalPermissionProvider@SuppressWarnings("unused") on getPermissionsStartingWith() and exportForPermissionsEX().
  • PermissionValidator / BaltopCommand — Removed unused Collectors import.
  • PermissionManager — Inline collect(Collectors.toList()).toList().
  • 22 files — Global collect(Collectors.toList()).toList() modernisation (Java 21) across moderation, economy, kits, shop, util, and webdashboard packages; removed now-unused Collectors imports where applicable.

Files changed: 23 Java files


1.0.2.6+build.154 — 2026-05-20

🧹 Code Quality — Warning & Bug Fix Pass

  • IgnoreManager / MuteManager — Removed always-false IGNORE_FILE/MUTE_FILE null checks; log mkdirs() failures; removed unused sender-parameter overloads from MuteManager (mute(ServerPlayer, String) / unmute(ServerPlayer, String)).
  • MessageUtil — Replaced e.printStackTrace() with LOGGER.error(); merged duplicate catch branches; fixed File.delete() result ignored; removed dead private methods (getLanguageVersion, escapeNamedPlaceholders); added @SuppressWarnings("unused") to intentional API-surface public methods.
  • PlayerChatFormatManager / ShopManager — Log mkdirs() failures; modernised collect(Collectors.toList()).toList().
  • PlayerJoinQuitHandler — Removed always-true if (config != null) guard; guarded player.getServer().getPlayerList() with null checks.
  • LocalizationManager — Wrapped Files.list() in try-with-resources (resource leak fix); added isLanguageUnsupported() inverse method; updated TranslationHandler callers.
  • TaskManageraddFirst() / removeLast() modernisation; simplified time-range if-block to a single boolean expression.
  • BanManager — Used Optional.orElse(null) instead of .get() (NPE risk); removed always-true null checks on entry.getReason() / entry.getSource().
  • Web dashboard (HTML accessibility) — Added for / aria-label to all form inputs missing label associations across index.html, shop.html, permissions.html, kits.html, moderation.html, users.html, cloud.html, discord.html, holograms.html; fixed unresolvable #players / #performance / #worlds / #events nav anchors.

Files changed: 12 Java files, 9 HTML files


1.0.2.6+build.153 — 2026-05-19

🐛 Bug Fix — ResourcePackManager main-thread sleep

  • ResourcePackManager Thread.sleep on server tick threadserver.execute() + Thread.sleep(1000) blocked the server main thread for 1 second on every player login, causing rubber-banding and Can't keep up! warnings. Fixed: sleep moved to a background daemon thread.

Files changed: ResourcePackManager.java


1.0.2.6+build.152 — 2026-05-19

🐛 Bug Fix — Runtime Data in Wrong Directory

  • ShopManager / PlayerChatFormatManager wrong storage dir — Player-created shops (shops.json) and per-player chat format overrides (player_chat_formats.json) were stored in config/neoessentials/ instead of neoessentials/. A config reset would silently wipe all shops and chat format assignments. Fixed to use ResourceUtil.getDataPath().

Files changed: ShopManager.java, PlayerChatFormatManager.java


1.0.2.6+build.151 — 2026-05-19

🐛 Bug Fix — i18n/Language System Raw Paths

  • LocalizationManager / LanguageCommand / MessageUtil raw paths — Three i18n/language files used hardcoded Paths.get("neoessentials", ...) / new File("neoessentials/...") instead of ResourceUtil, causing all language/translation files to be mislocated on some hosting environments. Fixed to use ResourceUtil.getDataPath() / ResourceUtil.getDataFile().

Files changed: LocalizationManager.java, LanguageCommand.java, MessageUtil.java


1.0.2.6+build.150 — 2026-05-19

🐛 Bug Fix — Scheduler Path Consistency

  • TaskManager raw paths — Scheduler data files (tasks.json, execution_history.json) were resolved via raw Paths.get("neoessentials", "scheduler") instead of ResourceUtil.getDataPath(). Fixed.

Files changed: TaskManager.java


1.0.2.6+build.149 — 2026-05-19

🐛 Bug Fix — Economy & Teleport System

  • EconomyManager lastActivityFile raw pathbalances_activity.json was resolved from the JVM working directory instead of the server root, causing the inactive-account cleanup scheduler to misread activity data and potentially purge live balances on some hosts. Fixed to use ResourceUtil.getDataFile().
  • TeleportRequestManager dead code removedsendTpaRequest() was an unreachable duplicate of sendTeleportRequest() that silently omitted the request cooldown, allowMultipleRequests, and tptoggle checks. Removed.

Files changed: EconomyManager.java, TeleportRequestManager.java


1.0.2.6+build.148 — 2026-05-19

🐛 Bug Fix — BanManager: Temp IP Ban Cleanup & Expiry Checks

  • Scheduler never swept IP banscleanupExpiredTempBans() only cleaned player bans. Expired temp IP bans accumulated in memory and on disk, remaining visible in /ipbanlist until a manual unban. Fixed by adding an ipBans sweep that mirrors the existing player-ban loop.
  • isIPBanned() ignored expiry — returned true for any stored IP ban entry, including expired ones. Expired temp IP bans acted as permanent until the next server restart. Fixed to call IPBanEntry.isExpired() and auto-remove on lookup.

Files changed: BanManager.java


1.0.2.6+build.147 — 2026-05-18

🎨 Dashboard — Hologram Icon Visual Consistency

Updated hologram-related navigation icons across all admin dashboard pages for visual consistency. No behaviour changes.


1.0.2.6+build.135 — 2026-05-18

🔧 Dashboard — Navigation & UI Cleanup

  • Navigation sidebar links are now hidden for non-operator sessions
  • Active-link highlighting fixed on all sub-pages
  • dashboard.js authentication guard simplified; dead-code paths removed
  • Responsive layout tweaks in styles.css

1.0.2.6+build.133 — 2026-05-18

✨ Feature — WebSocket Real-Time Dashboard Updates

  • WebSocketEventBroadcaster pushes live events to all connected dashboard sessions (player_join/leave, server_stats, chat_message, shop_transaction, hologram_update)
  • POST /api/admin/broadcast — send server announcements directly from the dashboard
  • Dashboard stat cards and player list update live without page refresh
  • New Shop Management dashboard page (shop.html / shop.js) — view shops, edit prices, view transactions, manage holograms

Files changed: WebSocketEventBroadcaster.java, AdminEndpoint.java, PlayerEndpoint.java, DashboardAPI.java, dashboard.js, index.html, shop.html, shop.js


1.0.2.6+build.131 — 2026-05-18

✨ Feature — Shop Hologram Management Commands

New /shop hologram subcommands:

  • /shop hologram enable <shopId> — spawn/re-enable the shop hologram
  • /shop hologram disable <shopId> — hide the hologram without deleting the shop
  • /shop hologram move <shopId> — snap hologram to the sign's current position

Hologram is automatically created/destroyed with the shop. Fixed right-click-hologram purchase detection.

Files changed: ShopHologramManager.java, ShopManager.java, ShopCommand.java, ShopInteractHandler.java, ShopSignHandler.java, ShopData.java


1.0.2.6+build.129 — 2026-05-18

🎨 Improvement — Hologram & Discord Dashboard UI Rework

Hologram dashboard:

  • Responsive card-based redesign with live preview panel
  • Inline editors for scale, lineSpacing, textShadow, textOpacity, backgroundColorArgb
  • Frame animation editor per line; billboard/spin/hover controls exposed

Hologram renderer fixes:

  • Background panel colour applied correctly; scale/spacing applied at spawn; reduced animation flicker

Discord dashboard:

  • Redesigned account-link table with live status badges and one-click unlink

Files changed: HologramRenderer.java, HologramCommand.java, holograms.html, holograms.js, discord.html


1.0.2.6+build.127 — 2026-05-13

✨ Feature — In-Game Discord OAuth2 Registration

Complete in-game Discord OAuth2 integration:

  • /dashboard register discord opens an OAuth2 authorization flow — no manual token copy-paste
  • New DiscordEndpoint routes: auth/start, auth/callback, link, unlink, linked
  • New Discord dashboard page (discord.html) for managing linked accounts
  • discord_auth.json config format updated

Files changed: DashboardRegisterCommand.java, AuthenticationHandler.java, DiscordEndpoint.java, discord.html, discord_auth.json


1.0.2.6+build.125 — 2026-05-13

✨ Feature — Discord-Linked Dashboard Registration

  • /dashboard register discord — starts a Discord OAuth2 link flow
  • DashboardRegistrationManager — manages one-time Discord registration tokens and associates Discord user IDs with Minecraft UUIDs

Files changed: DashboardRegisterCommand.java, DashboardRegistrationManager.java


1.0.2.6+build.124 — 2026-05-13

✨ Feature — /dashboard update Smart File Comparison

/dashboard update now does per-file MD5 checksum comparison instead of overwriting everything.

New subcommands:

  • /dashboard update — smart update (only changed files)
  • /dashboard update check — dry-run preview
  • /dashboard update force — unconditional overwrite (old behaviour)

/dashboard status now shows installed vs. bundled dashboard version.

Files changed: DashboardFileManager.java, DashboardCommand.java


1.0.2.6+build.122 — 2026-05-11

🐛 Bug Fix — LuckPerms Default Permissions Not Applied When Adapter Is Unhealthy

Two root causes fixed in PermissionAPI.hasPermission():

  1. Registry-default block was skipped when adapter unhealthy — the registry-default fallback was inside if (externalAvailable). When LuckPerms reached ≥ 5 consecutive failures, non-OP players in the default group lost all NeoEssentials registered default permissions. Fixed by removing the guard — registry defaults now always apply.
  2. queryTristate called twice per check, doubling failure count — doubled consecutiveFailures on every cache-miss, flipping to unhealthy at half the intended threshold. Fixed by caching isExplicitlyDenied() after the first call.

Files changed: PermissionAPI.java


🐛 Bug Fix — AFK Kick Not Respecting Exempt Permission

Players holding neoessentials.afk.kickexempt were being kicked by the AFK system. Fixed by adding a permission check before the kick. Also improved AfkManager config reading and MessageUtil placeholder resolution.

Files changed: AfkManager.java, MiscTeleportManager.java, MessageUtil.java, ConfigManager.java


1.0.2.6+build.123 — 2026-05-13

✨ Added — Hologram System Improvements

New visual properties: scale, lineSpacing, textShadow, textOpacity, backgroundColorArgb

New commands:

  • /hologram copy <id> <newid> — clone a hologram
  • /hologram movehere <id> — move hologram to your position
  • /hologram near [radius] — list nearby holograms
  • /hologram insertline <id> <index> <text> — insert a line at any position
  • /hologram addframes <id> <lineIndex> <intervalTicks> <frame1|frame2|...> — frame animation
  • /hologram removeframes <id> <lineIndex> — clear frame animation
  • /hologram scale <id> <scale> | linespacing | shadow | opacity | background — visual tweaks

Dashboard REST API now returns all billboard/animation/visual fields for holograms. New wiki page: HologramSystem.md


1.0.2.6+build.120 — 2026-05-11

Fixed

  • /help 2 and higher pages now resolve correctly.
  • Fixed Brigadier command shadowing where vanilla /help <command> intercepted numeric input before NeoEssentials pagination.
  • NeoEssentials now takes ownership of /help and /? command registration so page parsing is reliable for players and console.

Touched file: HelpCommand.java


1.0.2.6+build.119 — 2026-05-08

🐛 Bug Fix — /tpa Nether Roof / Underwater Cave Landings

Fixed two player-reported /tpa landing regressions:

  • Nether teleports could resolve to the bedrock roof.
  • Ocean/boat teleports could resolve to caves under the seafloor.

Fixes:

  • TeleportLocation.scanColumnTopDown() now starts at min(maxBuildHeight-2, logicalHeight-1) to avoid scanning above logical dimension space (notably Nether roof space).
  • /tpa now teleports to the target player's live location (findSafe=false) instead of remapping to distant "safe" spots.
  • findSafeLocation() now prefers a ±16 Y local search around the destination before full column fallback.

Files changed: TeleportLocation.java, TeleportRequestManager.java


1.0.2.6+build.115 — 2026-05-08

✨ Feature — Interactive Shop Holograms

Players can now click the hologram above a sign shop directly:

  • Right-click hologram → buy
  • Left-click hologram → sell
  • Owner click → show shop info

This uses the same permission and transaction pipeline as sign interaction for consistent behavior.

Files changed: ShopHologramManager.java


1.0.2.6+build.113 — 2026-05-08

✨ Feature — Hologram Billboard, Spin & Hover

Added per-hologram orientation and animation controls:

  • Billboard modes: fixed, vertical, horizontal, center
  • Optional spin animation (speed + axis)
  • Optional hover/bob animation (amplitude + speed)

New commands:

  • /hologram billboard <id> <fixed|vertical|horizontal|center>
  • /hologram spin <id> on [speed] [axis]
  • /hologram spin <id> off
  • /hologram hover <id> on [amplitude] [speed]
  • /hologram hover <id> off

/hologram info <id> now includes billboard/spin/hover settings.

Files changed: HologramData.java, HologramRenderer.java, HologramScheduler.java, HologramCommand.java


1.0.2.6+build.112 — 2026-05-04

🐛 Bug Fix — /back Returns "No Previous Location" After Death

After dying, /back consistently reported "No previous location to return to" even though the player's death location should have been captured.

Root causes fixed:

  • MiscTeleportManager's @EventBusSubscriber now explicitly declares bus = Bus.GAME, matching the project-wide pattern and eliminating any bus-selection ambiguity.
  • The death handler is now @SubscribeEvent(receiveCanceled = true). Previously, if any mod cancelled LivingDeathEvent at a higher priority (keep-inventory plugins, god-mode, etc.), our handler was never called and the death position was silently dropped. Now the location is always captured when a ServerPlayer is the dying entity.
  • PlayerDataStore.flush() now creates the data directory if it doesn't exist before writing, preventing silent I/O failures that would leave death positions un-persisted across server restarts.
  • Added teleportation.backSettings to config.json with explicit enableDeathBack, enableTeleportBack, teleportDelay, backCooldown keys.

Diagnostic: The server log now shows an INFO line every time a player death is captured (coordinates + cancellation flag), so you can confirm the event is being received.


🐛 Bug Fix — Chat Format Strings Corrupted on Save (HTML Escaping)

Gson was converting <, >, and & to Unicode escapes (\u003c etc.) every time a JSON file was written to disk. This silently corrupted chat format strings — e.g. <{prefix} {name}> {MESSAGE} would become \u003c{prefix} {name}\u003e {MESSAGE} and display as literal escape codes in chat.

Fix: .disableHtmlEscaping() added to every GsonBuilder instance across the mod (30+ files) — config files, player data, moderation records, language files, web-dashboard writers, and more.


1.0.2.6+build.107 — 2026-05-04

🐛 Bug Fix — chat.json Not Being Loaded (Chat Format Reverts to Default)

Reported error: Failed to read config file chat: config/neoessentials/chat (No such file or directory)

Even with chat.json present in config/neoessentials/, the chat format would fall back to {neoessentials_displayname}: {MESSAGE} instead of the configured value.

Root cause: The config cache could hold a stale merged view of the main config that was built before chat.json existed (e.g. right after running /neoe config split without reloading). The section-extraction path returned an empty object without ever trying the file directly.

What's fixed:

  • ConfigManager.getConfig("chat") now falls back to reading chat.json directly and correctly unwraps the "chat" sub-object before returning it to callers.
  • ConfigSplitter.migrateToSplitConfigs() now clears the config cache immediately after migration — no manual /neoe reload needed for the new split files to take effect.

Files changed: ConfigManager.java, ConfigSplitter.java


1.0.2.6+build.102 — 2026-05-04

🐛 Bug Fix — Shop NPC Kicks All Players on Join

Error: The server sent registries with unknown keys: ResourceKey[minecraft:entity_type / neoessentials:shop_npc]

NeoForge syncs entity-type registries to clients at login. Because the shop_npc type only existed server-side, every player was disconnected the moment they tried to join.

Fix: Shop NPCs now use vanilla ArmorStand entities with a hidden NBT tag (NeoEssentials_ShopId). The interaction is caught by PlayerInteractEvent.EntityInteract on the server — zero changes on the client, no custom entity registration.

Files changed: ShopEntityRegistry.java, ShopNpcEntity.java, NpcShopCommand.java, NeoEssentials.java

🐛 Bug Fix — Hologram Source Files Failing to Compile (BOM Characters)

Six hologram files were saved with a UTF-8 BOM, causing error: illegal character: '\ufeff' on the very first character of each file. BOM removed from all six files.

Files: HologramEventHandler.java, HologramScheduler.java, HologramTextProcessor.java, HologramCommand.java, ShopHologramManager.java, HologramEndpoint.java

🐛 Bug Fix — Permission Validator Warns About Other Mods' Permissions

Any permission node not starting with neoessentials. (WorldEdit, FTB Ranks, LuckPerms groups, etc.) was incorrectly logged as an "unknown NeoEssentials permission". The validator now silently skips external nodes and counts them separately.

🐛 Bug Fix — Missing Permission Nodes Causing Validator Warnings

neoessentials.compass, neoessentials.compass.others, and neoessentials.chat.msgtoggle.bypass were used in command checks but absent from PermissionRegistry. All three are now registered with the correct default values.


1.0.2.6+build.91 — 2026-04-27

✨ Web Dashboard — Backup & Restore

First piece of the Web-Dashboard improvements track:

  • Create named ZIP snapshots of configs, mod data, and player data
  • Browse all snapshots with size, date, and target info
  • One-click restore with automatic pre-restore safety backup
  • Download ZIP archives from the browser
  • Delete snapshots with confirmation
  • Auto-prune when limit exceeded (max 20)
  • New 💾 Backup & Restore dashboard page with stat cards and confirm modals

1.0.2.6+build.86 — 2026-04-27

🐛 Bug Fix — /nick Nickname Not Working (Tab List, Chat, Placeholders)

Players were getting "Nickname set" confirmation but their nickname was invisible everywhere — the tab list showed the real username and chat showed the real name.

What was wrong: The code was calling player.setCustomName(), the entity cosmetic API used for mob name tags. On player entities this adds a second floating label above the head; it has no effect on the tab list or chat.

What's fixed:

  • Tab list entry — nickname now shown in the player list for all viewers immediately on /nick, and restored on every relog.
  • Chat display{neoessentials_displayname} placeholder now returns the nickname. Works in all chat format strings and SocialSpy.
  • Hover/click names — nickname shown in the hover popup when chat.clickablePlayerNames is enabled.
  • Tab header/footer{displayname} in tablist layouts now reflects the nickname.

Files changed: NickCommand.java, DefaultPlaceholderExpansion.java, ChatFormatter.java, TablistManager.java, TablistEventHandler.java


🐛 Bug Fix — NPC Shop Compile Errors

Fixed 11 compile errors in the entity shop layer that prevented the mod from building:

  • NpcShopMenu: clicked() return type corrected to void (MC 1.21.1); quickMoveStack() abstract override added.
  • ShopNpcEntity: removed damageSources() override with incompatible return type.
  • ShopTransaction: resolveItem(), giveItems(), hasSpaceInContainer() made public.

1.0.2.6+build.77 — 2026-04-27

✨ Feature — BungeeTabListPlus-Inspired Tablist

Completely reimagined tablist system taking direct inspiration from BungeeTabListPlus.

Highlights:

  • Independent mode (default) — NeoEssentials manages the entire tab overlay on its own. No proxy plugin needed.
  • 20+ placeholder tokens — including proxy-aware tokens: {network_online}, {server_online:NAME}, {current_server}, {rank_weight}, {session_minutes}, {health}, {afk}, and more.
  • Fake player entries (BTLP fakePlayers) — decorative separator rows, section headers, and padding in the player list.
  • Group-weight sorting — admins shown first, then by group weight, then alphabetically. Uses scoreboard teams as client-side sort keys.
  • Configurable layout — columns (1–4), groupSections, playersByServer, excludeServers, hiddenServers.
  • Optional proxy integration — BungeeCord channel bridge for {network_online} / {server_online:X} data. Off by default; enable with proxy.enabled=true in tablist.json.
  • New /tablist commands: proxy status, fakeplayer list/add/remove/refresh, layout info, independent on/off.
  • tablist.json config version 2→3.

Bug fixes: Resolved duplicate class compile error in TablistCommand; fixed ClientboundPlayerInfoUpdatePacket API incompatibility in FakePlayerManager; fixed CustomPacketPayload override error in ProxyIntegration.


1.0.2.6+build.73 — 2026-04-27

✨ Feature — Messaging & SocialSpy Improvements

Full enhancement pass on /msg, /reply, and SocialSpy formatting.

What's new:

  • MessageUtil.resolveTemplate() — new centralized resolution helper used by /msg, /reply, and SocialSpy. Applies named vars first (case-insensitive), then runs PlaceholderAPI, then logs any still-unresolved {TOKEN} tokens in debug mode.
  • Named placeholders in all message templates{message} / {MESSAGE}, {sender}, {receiver}, {sender_displayname}, {receiver_displayname}, and all {neoessentials_*} tokens are now supported universally.
  • Safe fallback — if PlaceholderAPI throws, the un-resolved template is returned instead of an error.
  • Debug logging — enable logging.enableDebugLogging to see per-template unresolved token warnings and SocialSpy format resolution trace.
  • Config-based format overrides — new chat.messaging section in config.json:
    "socialspyFormat":  "&8[&eSocialSpy&8] &b{sender} &7→ &b{receiver}&7: &f{message}"
    "msgFormatTo":      "&7[&aTo &f{neoessentials_displayname}&7] &f{message}"
    "msgFormatFrom":    "&7[&bFrom &f{neoessentials_displayname}&7] &f{message}"
    "replyFormatTo":    "" (uses lang default)
    "replyFormatFrom":  "" (uses lang default)
    
    Leave blank to use language-file defaults. Config takes priority when set.
  • SocialSpy lang key updatedneoessentials.socialspy.format moved from positional {0}/{1}/{2} to named {sender}/{receiver}/{message} vars. _langVersion → 15, auto-merges on next start.
  • SocialSpy display-name lookup now runs once per broadcast not once per spy player.

1.0.2.6+build.72 — 2026-04-27

🐛 Bug Fix — FTB Ranks Adapter: Permission Checks Failing

FTB Ranks permissions were silently returning false for every check because the adapter was calling methods that do not exist in ftb-ranks-neoforge-2101.1.3, resulting in NoSuchMethodException at runtime.

What's fixed:

  • Correct API method now usedFTBRanksAPI.getPermissionValue(ServerPlayer, String) is the actual static method exposed by FTB Ranks 2101.1.x. The adapter now resolves this as Strategy 1 and interprets the returned PermissionValue with asBooleanOrFalse().
  • Improved fallback chain — five strategies now cover 2101.1.x (confirmed), RankManager path, two legacy naming variants, and the oldest UUID-based builds.
  • "MISSING" added to the boolean deny-list for PermissionValue.MISSING edge case.

1.0.2.6+build.70 — 2026-04-27

🐛 Bug Fix — /msg & /reply Formatting + Missing SocialSpy Key

What's fixed:

  • /msg and /reply showed raw template textjava.text.MessageFormat was applied to templates containing {placeholder} tokens, throwing IllegalArgumentException on every message send. Non-numeric placeholders are now escaped before format processing.
  • neoessentials.socialspy.format key missing — SocialSpy intercept threw a missing-key error; key added to en_us.json.
  • _langVersion → 14.

1.0.2.6+build.69 — 2026-04-24

✨ Feature — Custom Player Tablist: Refinements

Follow-up pass on the tablist system from build.67.

What's new:

  • RichTextFormatter.processTablistText() — dedicated tablist text processor that strips hover/click events (which tab-list packets cannot display) while running the full gradient → rainbow → named-color → format-tag → hex-color pipeline. Enabled unconditionally regardless of the enableChatEnhancements flag.
  • Hex colors and gradients in player prefix/suffix columnupdatePlayerTeam() now routes prefix/suffix through processTablistText() so group prefixes like &#FF5500[Admin] or <gradient:FF0000-FF8C00>[Mod] </gradient> render as actual colored text in the player list column.
  • Color deferral fixapplyPlaceholders() no longer pre-converts &§; the full color pass is deferred to processTablistText() so &#RRGGBB tokens and <gradient:…> tags survive placeholder substitution intact.

1.0.2.6+build.67 — 2026-04-24

✨ Feature — Custom Player Tablist

Complete rewrite of the tablist with full rich-text support, per-group/per-player customisation, animated frames, and extended placeholders. Inspired by: TAB, BungeeTabListPlus, Simple TabList.

What's new:

  • Hex colors & gradients — header, footer, and player prefix/suffix support &#RRGGBB, <gradient:FF0000-0000FF>text</gradient>, <rainbow>text</rainbow>, named color/format tags, and legacy &X codes
  • Animated header/footerheader/footer in tablist.json accept arrays; each refresh tick advances one frame for smooth animations
  • Per-group header/footer"groups" section in tablist.json lets you give each permission group its own header/footer frames (e.g. an admin-only panel)
  • Per-player header/footer"players" UUID section in tablist.json + new runtime commands:
    • /tablist player <name> header <text> — set custom header
    • /tablist player <name> footer <text> — set custom footer
    • /tablist player <name> reset — clear overrides
  • Per-group runtime commands/tablist group <group> header|footer|reset
  • Extended placeholders{displayname}, {server_name}, {x}/{y}/{z}, {balance}, {time}, {bar} added alongside existing {player}, {online}, {max}, {ping}, {world}, {tps}, {prefix}, {suffix}, {group}, {newline}
  • groupColors map — per-group color override applied to {displayname} in headers
  • Vanish + AFK integration — vanished players excluded from {online} for non-staff; configurable AFK suffix appended to player rows
  • tablist.json template updated with gradient example, group/player sections, and syntax reference

1.0.2.6+build.66 — 2026-04-24

🐛 Bug Fix — Tablist prefix, Warn console logging, WarnManager compile error

What's fixed:

  • Tablist prefix not showing — Group prefix/suffix was silently returning "" for players whose user entry had not yet been explicitly loaded in the permission manager. getPermissionPrefix/Suffix/Group now use the null-safe PermissionAPI.getManager() and fall back to the configured default group so freshly-joined players also show the correct prefix in the tab list.
  • Warn command not logging to console/warn <player> <reason> lacked an explicit LOGGER.info() call; on some server setups the op-broadcast feedback wasn't routed to the log file. Warn actions now always appear in the server console.
  • Compile error: duplicate getInstance() in WarnManager — Two identical getInstance() declarations were present, causing a build failure. Duplicate removed.

1.0.2.6+build.64 — 2026-04-24

🌐 Improvement — Localization Audit & Admin Tooling

Full audit of all in-game translation key usage, 54 missing keys added, and a new /language tooling suite for server admins.

What's new / fixed:

  • 54 missing translation keys added to en_us.json — TPA/teleport-request flow (request.sent, request.received, request.denied, request.expired, request.failed, etc.), misc teleport (/jumpto, /back info), spawn/warp coordinate errors, moderation (unfrozen_message, reason_too_long), and several general/utility messages
  • Human-readable fallbacks — if a translation key is missing at runtime, players now see a readable English phrase (e.g. Home not found) instead of the raw key string (commands.neoessentials.home.not_found)
  • /language validate <code> — compare any language file against en_us.json, get coverage % and lists of missing/extra keys
  • /language regenerate <code> — refresh a language file from the bundled JAR copy, merge user translations, auto-backup to .bak
  • /language override — override individual message keys in-game; persisted to overrides.json and take priority over all language files (set, get, remove, list, clear, reload sub-commands)
  • _langVersion bumped 12 → 13 — new keys auto-merged into existing deployments at next server start

1.0.2.6+build.59 — 2026-04-24

🐛 Bug Fix — Chat: Unresolved {neoessentials_username_hover} & duplicate server log

Two related chat-formatting bugs fixed:

  1. {neoessentials_username_hover} appearing literally — When "clickable player names" was enabled, ChatFormatter substituted {neoessentials_username} with {neoessentials_username_hover}, which was never registered as a placeholder. The token was never resolved and appeared as raw text in chat.

  2. Duplicate vanilla log lineChatHandler called server.sendSystemMessage(formattedMessage) after already logging via its own logger. This caused vanilla's MinecraftServer logger to emit a second line: <{neoessentials_username_hover}> message.

Fixes:

  • Replaced placeholder-swap with §HNAME§name§/HNAME§ internal markup tokens resolved in buildComponentFromMarkup() to real hover+click Components
  • Added username_hover / displayname_hover as plain-text fallback aliases in DefaultPlaceholderExpansion
  • Removed the redundant server.sendSystemMessage() call

1.0.2.6+build.58 — 2026-04-24

🔌 Feature — API & Placeholder System

Exposes the NeoEssentials placeholder system as a fully public Java API for external mods, adds in-game admin tooling, REST endpoints, and rewrites developer documentation.

What's new:

  • PlaceholderProvider and PlaceholderExpansion are now public top-level types — external mods can implement/extend them to register custom placeholders
  • NeoEssentialsAPI.getPlaceholderManager() — new entry-point to the thread-safe PlaceholderManager (API version bumped to 1.2.0)
  • /api/placeholders/list, /api/placeholders/resolve, /api/placeholders/stats — new authenticated REST endpoints
  • /api/docs now serves the built-in documentation system (was implemented but never wired)
  • /placeholder in-game command — list, info <id>, test <text>, stats sub-commands (permission: neoessentials.admin.placeholders)
  • neoessentials.admin.placeholders permission node registered
  • APISystem.md completely rewritten with full placeholder table, code examples for PlaceholderProvider/PlaceholderExpansion, REST endpoint reference, versioning contract

1.0.2.6+build.57 — 2026-04-24

✨ Feature — Chat Formatting: Per-Player Overrides Now Applied

Per-player format overrides set via /chatformat set <player> <format> were stored correctly but never actually appliedChatHandler always resolved the chat format from the group/world lookup, silently ignoring any stored per-player override. PlayerChatFormatManager.getFormat() is now called first, making it the highest-priority step in the chain (per-player → group+world → group → world → default).

All rich-text features were already implemented (RichTextFormatter, ChatFormatter) and remain unchanged: hex colors (&#RRGGBB), gradients (<gradient:FF0000-0000FF>), rainbow, hover tooltips, click events, bold/italic, and legacy & codes. ChatSystem.md has been fully rewritten with a format priority diagram, /chatformat command table, complete tag reference with examples, placeholder list, and config key reference.


1.0.2.6+build.56 — 2026-04-24

✨ Feature — Inventory Management & Security Improvements

Config flags for /invsee, /inv, /invseeedit, /enderchest, /ec, /enderchestedit, /ecedit existed in config.json but were never read — the commands were always available regardless of the flag. All requires() predicates now check the corresponding isCommandEnabled() flag.

Added a concurrent-edit lock: only one staff member can hold an editable view of a player's inventory or ender chest at a time (second attempt is blocked with an informational message; lock releases on viewer disconnect). Added InventoryAuditLogger writing every view/edit open to neoessentials/inventory_audit.log (7 action types, controlled by new items.inventoryAuditLog config key). Added 4 new language keys for disabled and concurrent-edit error messages.


1.0.2.6+build.55 — 2026-04-24

🔧 Improvement — Per-Command Teleport Bypass Perms & Chunk Loading Docs

8 per-command bypass permission nodes (neoessentials.teleport.home.bypass.cooldown/warmup, warp.*, spawn.*, back.*) were already checked in code but absent from PermissionRegistry, so the dashboard and permission tools couldn't discover them. All 8 are now registered. Added a "Chunk Loading & Safety Interaction" section to TeleportationSystem.md explaining the 3×3 chunk preload and safety-scan order of operations.


1.0.2.6+build.50 — 2026-04-24

✨ Teleportation Improvements — Dashboard Settings Page, Language Keys & Permission Docs

Added a live teleport settings page to the web dashboard, fixed missing /back language keys, and documented all bypass permission nodes.

  • New Teleport Settings page in the dashboard — edit cooldowns, warmup delays, safety flags, and home/warp limits without restarting. Saves instantly reload all teleport managers.
  • Fixed /back warmup and cooldown messages that showed raw key names instead of text (keys were used in Java but not defined in the language file).
  • Documented 10 cooldown/warmup bypass permission nodes in permissions_nodes.txt.
  • Added MiscTeleportManager.reload() for dashboard live-reload support.

1.0.2.6+build.46 — 2026-04-24

🐛 Bug Fix — Web Dashboard Admin Controls & Permissions Page Blank

Admin Controls and Permissions pages showed a blank screen after login. F5 briefly revealed the content before it disappeared.

Three root causes: (1) showLoginScreen() hid dashboardWrapper without redirecting — on these pages there is no login form, so the result was a blank page with no way forward. Fixed to redirect to index.html. (2) permissions.js never called initPermissionSystem() because its init guard checked window.location.hash / [data-page="permissions"].active, which never match on the standalone permissions.html page. Fixed with a reliable element check. (3) Nine fetchWithAuth() calls in permissions.js were missing .json(), so all modal actions (group edit, permission add/remove, etc.) silently failed by checking .success on a raw Response object. All fixed. Also fixed username not showing in the sub-page topbars.


1.0.2.6+build.44 — 2026-04-24

🐛 Bug Fix — Home Confirmation Buttons Append "confirm" to Name

Clicking [Confirm] on a /sethome overwrite or /delhome deletion prompt failed with "Invalid home name: Colony confirm". Each subsequent click appended another " confirm", making it impossible to confirm the action.

Root cause: confirm/deny literals were Brigadier children of the <name> word-argument. In Minecraft 1.21+, RUN_COMMAND click events re-validate against the client-side command tree; the nested literal structure was not preserved, so "Colony confirm" was consumed as the full name value.

Fixed by promoting confirm and deny to top-level literal siblings of <name> (Brigadier literals always take priority over argument nodes). Confirm/deny handlers now read the pending home name from the server-side pending map — no name is embedded in the button command. Also fixed {HOME}/{home} placeholders in message keys (were never substituted) to {0} and added missing message keys. Lang version 11 → 12.


1.0.2.6+build.42 — 2026-04-24

🐛 Bug Fix — /back Fails in Unloaded Chunks

/back failed with "No safe teleport location found" whenever the death point or previous location was in an unloaded chunk — even though the destination was perfectly safe.

Root causes: (1) TeleportUtil only force-loaded the single target chunk, but findSafeLocation() scans up to ±16 blocks in X/Z, which can cross chunk boundaries. Neighbouring unloaded chunks caused every candidate to fail isSafe()'s level.isLoaded() check. (2) MiscTeleportManager.teleportDelay was hardcoded to 3 — the field was never populated from config, so the configured warm-up delay was silently ignored.

Fixed by adding preloadChunksForTeleport() (3×3 chunk grid loaded with PORTAL tickets before any safety check) and a new loadConfig() method in MiscTeleportManager that reads teleportDelay, enableDeathBack, and enableTeleportBack from ConfigManager.


1.0.2.6+build.41 — 2026-04-24

🐛 Bug Fix — Vanish Module Cannot Be Disabled

Setting moderation.vanishSettings.enableVanishSystem: false in config had no effect. Commands remained registered and players who were already vanished couldn't break/place blocks or interact, because the config flag was silently ignored.

Root causes: (1) isVanishSystemEnabled() read from the wrong JSON path — always returned true; (2) interaction-prevention guards never checked isVanishSystemEnabled(); (3) VanishManager.onPlayerJoin() was defined but never called, breaking vanish-state restoration on reconnect. All three issues fixed.


🔒 Security Fix — /inv and /ec Permission Bypass

/inv and /ec were registered as Brigadier redirect() nodes with no requires() predicate. Since Brigadier only evaluates the alias node's own predicate (not the target's), every player bypassed permission checks and could open any other player's inventory or ender chest.

Fixed by replacing redirect-based aliases with full command registrations that each carry their own requires() predicate. Also fixed a typo that prevented /ecedit from working, added neoessentials.invsee + neoessentials.enderchest to the moderator group, and added missing translation keys.


1.0.2.6+build.38 — 2026-04-24

🐛 Fix — Teleportation Messages & Cooldown/Warmup System

Missing localisation keys — All commands.neoessentials.teleport.spawn.* message keys were missing from en_us.json, causing raw key strings (e.g. commands.neoessentials.teleport.spawn.fallback_success) to appear in chat. Added all spawn, warmup, cooldown, and warp/home warmup keys. Lang version bumped to 11 — auto-merges into existing server language files on next startup.

Cooldowns not enforced — Multiple root causes fixed:

  • HomeManager now reads teleportDelay from config and enforces homeTeleportCooldown on each /home use.
  • WarpManager now reads and enforces warpCooldown (use cooldown) before each /warp use.
  • SpawnManager now reads and enforces spawnCooldown before each /spawn use; teleportDelay moved from spawn.json override to generalSettings.teleportDelay in config.json.
  • All TP managers now display a warmup countdown message to players when teleportDelay > 0 and enableTeleportWarmup=true.

✨ Feature — Permissions GUI, External Systems & Fine-Grained Control

Web Dashboard REST API (extended)/api/permissions now handles context overrides, temp permissions, and aliases via REST. New endpoints: POST /reload, GET|POST|DELETE /group/{name}/context, GET|POST /group/{name}/temp, DELETE /group/{name}/temp/{node}, same for users, plus GET|POST|DELETE /aliases. Enhanced /system/status includes emergency mode, adapter health, failures, and alias count.

External System Integration — Documented the full 5-step fallback chain, adapter health tracking (5 failures → UNHEALTHY → auto-fallback), LuckPerms context via QueryOptions, FTB Ranks 4-API probe, startup compatibility report, and a compatibility table covering all major permission mods.

Fine-Grained Command Control — Every subcommand has its own node (/home set vs /home delete, /warp vs /setwarp, etc.). Documented comprehensive tables for Home, Warp, Kit, Economy, Moderation, and Permission system commands. Negative permission deny patterns documented.


1.0.2.6+build.28 — 2026-04-01

✨ Feature — Permissions System Improvements

Contextual Permissions — Permissions can now be world-specific, time-of-day specific, or gamemode-specific. New /permissions group <group> context and /permissions user <player> context subcommands let admins add/remove/list contextual overrides with tab-completion for all supported context keys.

Permission Conditions — Optional condition expressions (e.g. gamemode:survival AND time:day, health:above:10, op:true) can be attached to permission nodes. The permission is only granted when the condition passes.

Permission Aliasesconfig/neoessentials/permission_aliases.json maps legacy or short node names to canonical NeoEssentials nodes. Resolved transparently in every permission check.

Mod Interop APINeoEssentialsAPI.getPermissionsService() returns a PermissionsService interface that other mods can use to check permissions (with context), register their own nodes and aliases, and query group info without importing NeoEssentials internals.

Storage & Audit — Contextual permissions and conditions persist across restarts. New audit log entries: *_CONTEXT_PERM_ADDED/REMOVED, *_CONDITION_SET/REMOVED.


1.0.2.6+build.26 — 2026-04-01

🔧 Improvement — Utility Systems Audit & Polish

  • /nick / /nickname — Data file path uses centralised ResourceUtil.getConfigPath(). /nickname alias now registered as a proper Brigadier redirect (was a metadata-only entry with no actual command).
  • /seen — Data file path uses ResourceUtil.getConfigPath().
  • Duplicate registrations removed — Stale duplicate registerCommand() metadata in NeoEssentials.java cleaned up; every player-info command is now registered exactly once.
  • Permission registry de-duped — Multiple permission nodes were registered twice with conflicting values; notably neoessentials.whois (was ADMIN/false, silently overridden to MISC/true) and neoessentials.ping.others (was PLAYER/true, overridden to MISC/false). Correct values now authoritative; unique sub-nodes (whois.detailed, rules.admin, motd.*) preserved.
  • All core utility commands verified functional: /nick /nickname /setnick /near /nearby /ping /depth /helpop /motd /rules /suicide /seen /whois /realname /msgtoggle.

1.0.2.6+build.25 — 2026-04-01

⏳ New — Temporary Permissions

  • Permissions — Time-limited permissions for players and groups that expire automatically. Supports durations like 30m, 12h, 1d, 7d, 1d12h30m. New commands: addtemp, removetemp, listtemp for both /permissions user and /permissions group. Expiry runs every 30 s server-side; online players are notified when a temp perm expires. Temp perms survive restarts (stored in playerdata.json / permissions.json, expired entries stripped on load). Six new audit events: USER_TEMP_PERM_ADDED/REMOVED/EXPIRED and GROUP_TEMP_PERM_ADDED/REMOVED/EXPIRED. Two new permission nodes: neoessentials.permissions.user.temp, neoessentials.permissions.group.temp.

1.0.2.6+build.23 — 2026-04-01

📋 New — Permission Audit Logging

  • Permissions — New PermissionAuditLogger writes every permission change to neoessentials/permissions_audit.log (append-only, timestamped UTC). 17 action types tracked: user group/perm changes, group create/delete/rename/clone/perm/inherit/prefix/suffix/priority changes, and reload events. Executor name logged for player commands, "CONSOLE" for server-side.
  • Config — New permissions.auditLogging key (default true). Set false to disable.

1.0.2.6+build.22 — 2026-04-01

⚖️ Improvement — Group Priorities + Permission Suggestions

  • Permissions — New priority field on permission groups (default 0). Higher priority parents are consulted first in the inheritance walk — deterministic grant/deny ordering when multiple parents conflict. Set with /permissions group <name> setpriority <value> (−999 to 999).
  • Permissionspriority persisted in permissions.json (backwards-compatible).
  • Permissions — Denial messages now show the node's registered description: §8(e.g. "Ban a player from the server") — staff know immediately what capability they need without checking the wiki.
  • Docs — New "Group Priorities" section in PermissionSystem.md; example groups.json updated with priority values; CommandsReference.md updated.

1.0.2.6+build.21 — 2026-04-01

🔍 New — Permission Debugging Tools

  • Permissions — New /permissions debug <player> command (requires neoessentials.permissions.debug). Shows system mode, adapter health/version, config flags, OP status, direct user permissions, group chain with inheritance, and a numbered resolution summary — diagnose permission issues in-game without touching logs.
  • Permissions — New neoessentials.permissions.debug permission node registered.
  • Fixed/permissions user check now uses the full 5-step resolution chain (was bypassing external adapter, opsBypassPermissions, and vanillaOpFallback by calling the internal manager directly).

1.0.2.6+build.19 — 2026-04-01

📖 Documentation — allowUnsafeCommands & Security Config

  • Docs — Fixed wrong allowUnsafeCommands description in SplitConfigs.md (previously said "enchantments/item operations" — that's items.unsafe-enchantments).
  • Docs — Full security.json reference added: all six keys, blocked-pattern list, character allowlist, tables of commands that work vs. those needing allowUnsafeCommands: true.
  • Docs — Key insight documented: tilde ~ (relative coordinates) is blocked by default — the most common source of the "dangerous operations" error in powertools.
  • Docs — "Command Safety Filter" section added to ItemManagement.md under Powertool; warning note added to CommandsReference.md /powertool row; security.json added to Home.md getting-started list.

1.0.2.6+build.18 — 2026-04-01

🛡️ New — Fallback to Vanilla OP Permissions

  • Permissions — New permissions.vanillaOpFallback (default true): OPs get access as a last resort after all permission systems return false. Prevents admin lockouts from corrupted configs or crashing external perm mods.
  • Permissions — Permission system init failure no longer crashes the server — activates emergency OP-only mode with a clear console error. /neoe reload exits emergency mode without a restart.
  • DocsPermissionSystem.md updated with new config option, bypass-vs-fallback comparison, and updated permission-check flow.

1.0.2.6+build.17 — 2026-04-01

🔌 Improved — External Permissions Integration

  • Permissions — FTB Ranks and LuckPerms adapters now detect mod version at startup and log it; a boxed WARN fires when the installed FTB Ranks version is newer than last tested.
  • Permissions — New AdapterCompatibilityChecker prints a formatted compatibility table at startup listing every detected permission mod, its version, and ✓/⚠ status.
  • Permissions — FTB Ranks adapter probes four API signatures so it survives version bumps without breaking.
  • Permissions — Both adapters track consecutive failures; after 5 failures they are marked unhealthy and PermissionAPI falls back to the internal permissions.json manager and then OP-bypass — no player lockouts from a broken external perm mod.

1.0.2.6+build.16 — 2026-04-01

✨ New Features — Rules Command

  • Rules — Console now logs a detailed boxed error with file path and fix steps when rules_data.json is corrupt or missing. Auto-generated defaults are logged with their exact path and edit instructions.
  • Rules/neoe reload now reloads server rules.
  • Rules — Dashboard API /api/rules for full CRUD on server rules (list, add, edit, delete, replace all, reload from disk).
  • Docs — Full /rules section added to UtilitySystems.md; fixed stray /rules, /helpop, /suicide rows in the MOTD API table.

1.0.2.6+build.15 — 2026-04-01

🐛 Bug Fixes

  • Split Configs — Fixed split files never being created on fresh installs (JAR source was wrong).
  • Split Configs — Fixed main.json being overwritten with only one section.
  • Split Configs — Added missing economy section to main.json.

✨ New Features

  • /neoe config validate — validate all split config files.
  • /neoe config repair — auto-fix missing or incomplete split config files.
  • /neoe config status — visual overview of config file health.
  • Clear boxed startup errors when split files are missing with /neoe config repair hint.
  • New SplitConfigs.md wiki documentation.

1.0.2.6+build.12 — 2026-04-01

✨ New Features

  • MOTD – Multi-Profile Support — Multiple named MOTD profiles with /motd profile list|create|delete|switch|info. Each profile persists independently in config/neoessentials/motd_data.json.
  • MOTD – Auto-Rotation — Cycle profiles automatically: /motd rotation enable <minutes>|disable|next.
  • MOTD – Dashboard API — REST endpoint /api/motd for full profile & rotation management from the web dashboard.
  • MOTD – Error Feedback — In-game error messages on save/load failures; /motd reload shows the exact problem.

🔒 New Permissions

  • neoessentials.motd.profile (default: off)
  • neoessentials.motd.rotation (default: off)

1.0.2.6+build.5 — 2026-04-01

🐛 Bug Fixes

  • Config – Fixed ClassCastException crash in all kit commands when split configs are enabled. Also fixed getConfig("chat") throwing FileNotFoundException, which broke chat formatting across the mod.
  • Permissions – Fixed OPs being denied commands when an external permission mod (FTB Ranks, LuckPerms) is installed. OP bypass is now checked before any external adapter.
  • Permissions – Fixed FTB Ranks adapter NoSuchMethodException on FTB Ranks 2101.1.x (new API getPermission(ServerPlayer, String, boolean) now probed automatically).
  • ChestShop – Fixed Admin Shops with ? item — any admin with neoessentials.shop.create.admin can now right-click to assign the item.
  • Help – Fixed /help 2 and other page numbers showing "No command found" (conflict with vanilla /help resolved).
  • Moderation – Fixed /unban not detecting vanilla-issued bans; NeoEssentials now syncs with banned-players.json in both directions.
  • Rules – Fixed /rules ignoring existing rules.json from older builds; auto-migrates to rules_data.json.
  • MOTD – Fixed MOTD resetting on restart due to an inconsistent save path.

1.0.2.6+build.1 — 2026-03-06

🔁 Starting fresh from 1.0.2.6

This is the first build of the 1.0.2.6 release series. Build number reset to 1.

Included from 1.0.2.5 series:

  • Sign-based ChestShop system with admin shops, auto-fill item (?), and buy/sell via right/left-click
  • Vault API (Economy, Chat, Permission providers)
  • Dedicated tablist.json config file with group colours, placeholders, and animation support
  • 50+ new commands across Player Info, World/Fun, Teleport, Item/Misc, Utility, Admin, and Player State systems
  • Random teleport (/tpr) — even distribution, nether-aware, async cache, named zones, biome exclusions
  • Timed jails with auto-release, full event enforcement (respawn, teleport, interact, attack)
  • Offline pay, async baltop with pagination and total wealth, percent eco amounts
  • 8 new languages (FR, DE, ES, PT-BR, ZH-CN, NL, PL, RU) — auto-deployed and merged on start
  • 50+ permission nodes registered, new MODERATION category, denial messages show required node
  • Teleportation safe-location detection fully rewritten (slabs, stairs, glass, etc. now safe)
  • AFK system fully wired to config, score thresholds fixed, broadcasts and personal feedback working
  • Chat messages now appear in server console
  • PowerTool fixes — fires on block right-clicks, /powertooltoggle now works correctly
  • Rich text (gradients/rainbow) rendering fixed
  • Dashboard offline login, register command, and file auto-update fixed
  • ~120 missing translation keys added and auto-merged on load
1.0.2.6Релиз26.1, 26.1.1, 26.1.2 · 11 июля 2026 г.

NeoEssentials — Changelog (mc-26.1-port branch)

Minecraft 26.1.2 · NeoForge 26.1.2.76+

All notable changes to this branch are documented here, starting from where it forked off Dev-Builds to begin the Minecraft 26.1.2 port.

Build numbers below are approximate except build.482 (the real build counter isn't tracked in git for historical commits).

Known gap: this branch hasn't yet merged several Dev-Builds fixes from 07-06/07-08 (after this branch had already forked) — including a /jail-breaking NPE, permission precedence, kit and Auction House duplication fixes, dashboard security hardening, and /invseeedit//pay/ /eco fixes. These need porting over separately.


1.0.2.6+build.~330 — 2026-07-04

🎉 Port Started: Minecraft 26.1.2 / NeoForge 26.1.2.76

This branch forks from Dev-Builds here to begin porting NeoEssentials to Minecraft 26.1.2. Mojang introduced a new versioning scheme with 26.1.2 and NeoForge 26.1.2.76 carries substantial breaking API changes over 1.21.1 — this is not a drop-in recompile.

🔀 Initial API Migration

Five commits mechanically migrating the codebase toward NeoForge 26.1.2.76 / Minecraft 26.1.2 compatibility (reduced compile errors from 645 to 103): ResourceLocationIdentifier renames, permission-level API changes, GameProfileCache replacement, teleportTo signature changes, ClickTypeContainerInput, the new WorldClock time API, inventory armor/offhand restructuring, registry/CompoundTag Optional-wrapping changes, and several other mechanical renames.


1.0.2.6-mc26.1.2+build.~460 — 2026-07-09

🚀 Milestone

The full Minecraft/NeoForge 26.1 API migration is complete — the mod compiles and boots to "Done" with no exceptions on Minecraft 26.1.2 / NeoForge 26.1.2.76.

🔧 Maintenance

  • Build version string now tags the target Minecraft version (1.0.2.6-mc26.1.2+build.N).

1.0.2.6-mc26.1.2+build.482 — 2026-07-10

🐛 Bug Fixes

  • ChestShop double chests: Buy/sell, stock checks, and dynamic pricing only read one half of a double chest. Now reads the full combined 54-slot inventory.
  • ChestShop admin shop holograms: /chestshop hologram enable|disable|move could never be used on admin shops. Now authorized via neoessentials.shop.create.admin.

✨ Improvements

  • Command feedback messages now show a small [NE] tag and use softer, vanilla-matching colors.
  • NPC Shops: Selling now actually works (previously only buying was implemented). Added a permission check before opening the shop menu. Added /npcshop respawn <shopId> to re-summon a lost shop NPC without losing its listings.
1.0.2.5Бета1.21.6, 1.21.7, 1.21.8 · 6 марта 2026 г.

NeoEssentials — Changelog

Minecraft 1.21.1 – 1.21.11 · NeoForge 21.1.179+


1.0.2.5+build.1072 — 2026-03-06

🐛 Fixed: PowerTool System

  • Powertools now fire on block right-clicks — previously only worked when clicking in empty air; now fires on any right-click (air, block, mob)
  • /powertooltoggle now actually works — was checking a dead legacy class instead of the real per-player toggle
  • Dead PowertoolToggleCommand class replaced with a compatibility shim to prevent double command registration

1.0.2.5+build.1065 — 2026-03-05

📋 Tablist Config File

Tablist settings moved to config/neoessentials/tablist.json — a dedicated, fully-documented file separate from the main config.

  • Auto-deployed on first start, backwards compatible with existing config.json tablist sections
  • New groupColors — colour player names by permission group in the header/footer
  • & colour codes work everywhere in the file
  • New /tablist config command shows a live settings summary
  • /tablist info now shows the full file path
  • Reload anytime with /tablist reload

🌍 Lang File Key Audit

  • ~120 missing translation keys added covering Whois, Helpop, List, ChestShop, Vault, and moderation systems
  • Server lang files now auto-merge new keys on startup — admin edits are never overwritten

🐛 Fixes

  • Duplicate translation keys in en_us.json removed
  • /tablist reload resets animation frames immediately

1.0.2.5+build.1057 — 2026-03-05

✨ ChestShop System

Sign-based shops — the classic essentials shop experience, natively in NeoForge.

Sign format (all 4 lines):

[blank or name]   ← auto-assigns your name if left blank
[quantity]        ← e.g. 5
[B buy:S sell]    ← e.g. B 10:S 5  /  B FREE  /  S 2.50
[item or ?]       ← e.g. diamond  — or ? to right-click-assign
  • Right-click sign = BUY, left-click sign = SELL
  • Blank line 1 auto-assigns the creating player's name
  • Write ? on line 4, then right-click the sign holding an item to fill it in
  • Admin ShopsAdmin Shop on line 1 = unlimited stock, no chest required
  • Shops persist across restarts in neoessentials/shops.json
  • Full economy integration — uses EconomyManager with rollback safety
  • Permission-gated creation and usage
  • /chestshop command suite: list, info, convert, remove, reload

✨ Vault API

  • Economy, Chat, and Permission Vault providers
  • Chat prefix/suffix now uses LuckPerms or FTB Ranks when installed
  • Deposit/withdraw events fire for all Vault-originated transactions

🐛 Fixes

  • NeoForge 1.21.1 API compatibility fixes across multiple commands
  • config.json duplicate keys and JSON syntax error fixed
  • Vault economy currency format now reads live from config
  • Vault chat prefix/suffix now correctly uses external permission adapters

1.0.2.5+build.908 — 2026-03-03

✨ 50+ New Commands

Player info, world interaction, teleportation, item customisation, admin tools, economy enhancements, and more. Full command list: CHANGELOG_GITHUB.md

🌍 9 Languages

English + French, German, Spanish, Portuguese (BR), Chinese, Dutch, Polish, Russian. Auto-deployed on server start, safe to edit.

🛒 Worth & Sell System

/worth, /sell hand|inventory|all, /setworth — sell multiplier, named item protection.

🎲 Random Teleport

/tpr — even distribution, nether-aware, biome exclusions, async cache, named zones.

🔐 Permissions

50+ missing nodes registered, MODERATION category added, denial messages show required node.

🐛 Key Fixes

  • Safe teleport detection rewritten (slabs/stairs/glass now safe)
  • AFK system fully functional
  • Chat appears in server console
  • PowerTools follow the item not the slot
  • Dashboard offline login, auto-update, rich text fixed
  • Timed jails with full enforcement

1.0.2.3 — initial release

Core economy, chat, moderation, teleportation, kits, warps, web dashboard, permissions, item management.

1.0.2.4Бета1.21.6, 1.21.7, 1.21.8 · 13 января 2026 г.

NeoEssentials v1.0.2.4

🚨 CRITICAL UPDATE - Module Conflict Resolution + Teleportation Fix

Build #750 | January 13, 2026 | MC 1.21.1 - 1.21.11 | NeoForge 21.1.179+ / 21.11.24-beta

This release fixes critical compatibility issues AND teleportation safety bugs!


🐛 Critical Fixes

Unsafe Teleportation System - FIXED ✅

The Problem:

  • Safety config options (enableHomeTeleportSafety: false) didn't work
  • Mod blocked teleportation to "unsafe" locations even when safety was disabled
  • Couldn't teleport to Nether ceiling, lava bases, intentional unsafe builds
  • All teleportation types affected (homes, warps, spawn, TPA)

The Solution:

  • ✅ Fixed safety check logic in HomeManager, WarpManager, SpawnManager
  • ✅ When safety true: Finds safe alternatives or blocks if none exist
  • ✅ When safety false: Allows teleportation ANYWHERE (even dangerous spots)
  • ✅ Updated all config comments to clearly explain behavior
  • ✅ Tested with Nether ceiling, void platforms, lava builds

The Result:

  • 🎉 Full control over teleportation safety!
  • 🎉 Advanced players can disable safety for legitimate use cases!
  • 🎉 Nether ceiling farms work when safety is disabled!
  • 🎉 Default behavior unchanged (safe by default for casual players)!

Affected Config Options:

"enableHomeTeleportSafety": false  // Now works! Allows homes in lava, void, etc.
"enableWarpSafety": false          // Now works! Allows warps at dangerous locations
"enableSpawnSafety": false         // Now works! Allows spawn anywhere
"enableTeleportSafety": false      // Now works! Allows TPA to unsafe locations

Module Export Conflicts - RESOLVED ✅

The Problem:

  • Server crashes with "Module neoessentials exports package..." errors
  • Conflicts with: JadeAddons, SmoothChunk, SDLink, LetMeDespawn, and others
  • Incompatible with Arclight/hybrid server platforms
  • "Module neoforge reads more than one module named com.google.gson"

The Solution:

  • ✅ Migrated from Shadow plugin to NeoForge's native JarJar system
  • ✅ Removed Gson dependency (NeoForge already provides it)
  • ✅ Properly isolated Java-WebSocket library
  • ✅ Eliminated module-info.class conflicts
  • ✅ No longer exports Minecraft/NeoForge packages

The Result:

  • 🎉 Works with ALL tested mod combinations!
  • 🎉 Compatible with Arclight & hybrid platforms!
  • 🎉 Clean server startup every time!
  • 🎉 No more module resolution errors!

Technical Changes:

  • Build system: Shadow → JarJar
  • Dependencies: Gson removed, Java-WebSocket isolated
  • JAR structure: Optimized for NeoForge module system
  • Module metadata: Cleaned up, no package exports

🎉 Previous Updates (v1.0.2.4)

Chat Channels System

FIXED: Channels were configured but commands didn't exist!

  • /l, /g, /staff commands now work
  • Prefix support: !message (global), @message (staff)
  • Local = proximity chat, Global = server-wide, Staff = permission-based
  • Fully functional and documented

Config Auto-Update System

FIXED: Configs now automatically update when you upgrade the mod!

  • Detects old _configVersion values
  • Creates timestamped backups before updating
  • Replaces old configs with new versions
  • No more manual config deletion!
  • All new features work immediately after update

✨ New Features

Config File Splitting (IMPROVED!)

SMART AUTO-DETECTION - New servers get optimized configs automatically!

How it works:

  • Fresh installs: Auto-creates 9 split config files (no manual steps!)
  • Existing servers: In-game notification to OPs/admins
  • Deleted configs: Auto-recovery with split structure

In-game notification shown to admins:

  • OPs (level 4)
  • Players with * or neoessentials.* permission
  • Only shown once per server start
  • Beautiful formatted message with benefits

Manual migration:

  • Command: /neoessentials config split
  • Automatic backup creation
  • Splits config.json into 9 focused files
  • Easy rollback support
  • 100% backward compatible

Files created: main.json, commands.json, chat.json, teleportation.json, moderation.json, webdashboard.json, items.json, afk.json, security.json

Benefits:

  • Easier to find settings
  • Less syntax errors
  • Better organization
  • Per-file version control

✨ New Features (Continued)

💬 Phase 2: Interactive Chat

  • Clickable URLs - Auto-detect and link http/https URLs
  • @Mentions - Highlight players with sound notifications
  • [item] Links - Show held items with hover details

🎨 Phase 3: Advanced Features

  • Badge System - Rank badges (👑⭐💎) + status icons (💤👻🔇)
  • Custom Images - Drop PNG files in folder for custom badges
  • Anti-Spam - Caps, repeat, link, and rate limiting filters
  • Templates - 7 pre-built chat formats (RPG, Modern, Minimal, etc.)

🌈 Phase 4: Rich Text

  • Gradients - <gradient:FF0000-0000FF>text</gradient>
  • Rainbow - <rainbow>text</rainbow>
  • Conditionals - Time/stat/state-based formatting
    • <if:time=morning>Good morning!</if>
    • <if:health<50>❤️</if>
    • <if:afk>💤</if>

🆕 What's Included

Interactive Elements

  • URLs auto-convert to clickable links (blue, underlined)
  • @PlayerName mentions with sound notifications
  • [item] shows held item with enchantments on hover

Badge & Icon System

  • Emoji badges per rank: 👑 Owner, ⭐ Admin, 💎 VIP, 🛡️ Moderator
  • Custom badge images: Place PNG files in config/neoessentials/badges/
  • Status icons: 💤 AFK, 👻 Vanished, 🔇 Muted
  • Flexible positioning options

Anti-Spam Protection

  • Caps Filter - Converts SHOUTING to lowercase or blocks
  • Repeat Filter - Blocks duplicate messages (5s cooldown)
  • Link Filter - Whitelist/blacklist URLs
  • Rate Limit - Prevents flooding (5 msgs per 10s)
  • Bypass permissions for staff

Format Templates

Choose from pre-built styles:

  • RPG: [Lv.30] [Admin] Steve: Hello!
  • Modern: ● [VIP] Alex › Hey!
  • Minimal: Steve: message
  • Detailed: [world] <[Admin] Steve> message
  • Custom: Your own format

Rich Text Effects

  • Gradient Text: Smooth color transitions
    • Example: <gradient:FFD700-FF1493>VIP</gradient> (gold→pink)
  • Rainbow Text: 7-color spectrum
    • Example: <rainbow>Rainbow Road!</rainbow>

Conditional Formatting

Dynamic chat based on:

  • Time: morning, afternoon, evening, night, weekday, weekend
  • Stats: health, level, food, armor, xp
  • State: afk, flying, creative, survival, vanished, op
  • Dimension: nether, end, overworld
  • Actions: sneaking, sprinting, swimming, onfire, wet, underground

🆕 New Permissions

# Phase 2
neoessentials.chat.color
neoessentials.chat.color.hex
neoessentials.chat.format
neoessentials.chat.mention
neoessentials.chat.itemlink

# Phase 3
neoessentials.chat.caps.bypass
neoessentials.chat.repeat.bypass
neoessentials.chat.links.bypass
neoessentials.chat.spam.bypass

# Phase 4
neoessentials.chat.richtext
neoessentials.chat.gradient
neoessentials.chat.rainbow

⚙️ Configuration

All features are highly configurable:

{
  "chat": {
    "enableChatEnhancements": true,
    "autoLinkUrls": true,
    "allowItemLinks": true,
    "mentions": { "enabled": true, "playSound": true },
    "badges": {
      "enabled": true,
      "useCustomImages": false,
      "rankBadges": { "admin": "⭐", "vip": "💎" }
    },
    "antiSpam": {
      "capsFilter": { "enabled": true },
      "repeatFilter": { "enabled": true },
      "spamFilter": { "enabled": true }
    },
    "formatTemplates": { "enabled": false },
    "richText": { "enabled": false },
    "conditionalFormatting": { "enabled": false }
  }
}

🎯 Example Usage

Gradient VIP Prefix

{
  "group:vip": "<gradient:FFD700-FF1493>{prefix}</gradient> {name}: {MESSAGE}"
}

Time-Based Greeting

{
  "default": "<if:time=morning>☀️ </if>{prefix}{name}: {MESSAGE}"
}

Health Warning

{
  "default": "{prefix}{name} <if:health<50>❤️ </if>: {MESSAGE}"
}

Complex Multi-Feature

{
  "group:admin": "<gradient:FF0000-00FF00>{prefix}</gradient> <if:flying>✈️ </if>{name}: {MESSAGE}"
}

🐛 Bug Fixes

  • Fixed LuckPerms prefix/suffix integration
  • Fixed Stream resource leaks
  • Fixed null pointer warnings
  • Improved error handling and logging
  • Removed unused imports and redundant code
  • Fixed color code restriction logic
  • Debug logging now config-controlled

📚 Documentation

Complete documentation included:

  • Phase 2-4 implementation guides
  • Custom badge setup guide
  • Placeholder reference
  • Permission documentation
  • Configuration examples
  • Testing checklists

📊 Performance

  • Minimal overhead (~10-15ms with all features)
  • Optimized concurrent data structures
  • Cached badge lookups
  • Pre-compiled regex patterns
  • No database queries for chat

🎮 Getting Started

  1. Update the mod to v1.0.2.4
  2. Check config at config/neoessentials/config.json
  3. Enable features you want (all disabled by default)
  4. Set permissions for your ranks
  5. Customize badges, templates, and formats
  6. Test in-game and enjoy!

⚠️ Notes

  • Custom badge images require client resource pack (auto-generation included)
  • Resource pack auto-send pending NeoForge API update (use server.properties)
  • All Phase 4 features disabled by default (opt-in)

🔗 Links


This is the most comprehensive chat update ever! 🎉

4 phases, 50+ new features, 11 new permissions, complete documentation!

Enjoy! 🚀 - Changelog

Build #TBD | January 7, 2026 | Minecraft 1.21.1 - 1.21.11 | NeoForge 21.1.179+ / 21.11.24-beta


🎯 What's New

💬 Interactive Chat Revolution!

Modern chat features that make communication fun and intuitive!

Features:

🔗 Clickable URLs

  • Auto-detects and links URLs
  • Click to open in browser
  • Blue and underlined

📢 @Mentions

  • Type @PlayerName to ping someone
  • Bold yellow highlight
  • Plays notification sound
  • Click to message

💎 Item Links

  • Use [item] to show held item
  • Hover for full details
  • Clickable and stylish

🎨 Full Color Support

  • Basic colors (&c for red)
  • Hex colors (&#FF5500)
  • Format codes (bold, italic, etc.)

Config:

{
  "enableChatEnhancements": true,
  "autoLinkUrls": true,
  "allowItemLinks": true,
  "mentions": {
    "enabled": true,
    "playSound": true,
    "highlightColor": "&e"
  }
}

Permissions:

neoessentials.chat.color       - Colors
neoessentials.chat.color.hex   - Hex colors
neoessentials.chat.format      - Formatting
neoessentials.chat.mention     - @mentions
neoessentials.chat.itemlink    - [item] links

Example:

Input:  @Steve check my [item] at https://example.com
Output: @Steve check my [Diamond Sword] at https://example.com
        ^^^^^^          ^^^^^^^^^^^^^^^^    ^^^^^^^^^^^^^^^^^^^
        mention         item link            URL link
        (yellow,        (aqua, hover         (blue,
         sound)         shows stats)         clickable)

Installation

  1. Download the .jar file
  2. Place in mods folder
  3. Restart server
  4. Enjoy!

Support

  • 🐛 Found a bug? Report it on our issue tracker
  • 💬 Need help? Join our Discord
  • 📖 Read the wiki for detailed documentation

Links


Previous Versions

Check Modrinth version history for older changelogs.

Комментарии

Загружаем…