NeoEssentials
> 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:
- EconomySystem
- ChatSystem
- ModerationSystem
- TeleportationSystem
- KitManagement
- WebDashboard
- PermissionSystem
- ItemManagement
- UtilitySystems
- APISystem
- AFKSystem
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
- Download the latest release
- Place the JAR file in your server's
modsfolder - Start your server to generate configuration files in
config/neoessentials/ - Configure permissions and features as needed
- 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:
- Clone the repository
- Open the project in IntelliJ IDEA
- Import as a Gradle project
- Wait for Gradle to sync and download dependencies
- 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 moderunServer- Test in server moderunData- 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
All Versions
+ Add Version- Minecraft 26.2 · NeoForge 26.2.0.63+**
All notable changes to this branch are documented here, starting from
- v1.0.6** — earlier history (v1.0.5.x and before, including the port's own
## [1.0.6] — 2026-08-27
### Added
- 2026-10-09** — Build 87 ([
41c8f805](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/41c8f8052939a9ae547db14a2a339e65679ea3ba)) — The NPC shop window now shows your live balance on a gold ingot (bottom-right slot), refreshed after every buy/sell — previously only in the title, which couldn't update while the window was open. - 2026-10-09** — Build 86 ([
c82a9111](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/c82a9111ecf2ad424c0eaaf2a5763cfe45f8d221)) — Fixed/npcshop additemand NPC shop listings not recognizing modded items with noworth.ymlentry (e.g.mekanism:osmium_ingot) — now falls back to the item registry. - 2026-10-09** — Build 85 ([
277ee52f](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/277ee52f4e1a2ed1d4ed7c775542a117a089c082)) — Modded ids work in/npcshop additem,addcommandandentitytype;entitytype's<ai>is optional. - 2026-10-08** — Build 84 ([
1a3920ca](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/1a3920cabba8b83a03b6c7e53ac30203b911347e)) — Easier shops:/npcshopaccepts shop names orthis, newadditemhandandeditlisting ... price, 1-based slots, shift-click stacks and balance in the NPC shop window, second-click confirmation aboveshop.confirmAbove, and fuller/chestshop infofor command signs. - 2026-10-07** — Build 83 ([
0596bf64](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/0596bf64c3e4e18725a94abf5fd270f107b04464)) — Command shops: sell commands from NPC shops (/npcshop addcommand,/npcshop editlisting) or[Command]Admin Shop signs (/chestshop command ...). Runs as console or the buyer,{player}/{uuid}placeholders, optional permission node, and the buyer is never charged for a command that can't run. - 2026-10-06** — Build 82 ([
caf1ee68](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/caf1ee689e6ed4e895d39b6806facbc52b9fd149)) — The[NE]message prefix is now configurable viageneral.messagePrefix(""removes it). - 2026-09-16** — Build 77 ([
e5758be3](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/e5758be361debd0cc7d455b2e98af94e76beee00)) — Valued permission nodes — groups can now hold a"meta"map (node -> value) for permission systems expecting a number/string instead of a plain grant, wired into NeoForge's Permission API forINTEGER/STRINGnode types. Used to give the rank ladder progressively higher FTB Chunks (ftbchunks.max_claimed/max_force_loaded) claim limits per tier — only effective if a mod queries limits through NeoForge's Permission API rather than its own separate config. - 2026-09-16** — Build 76 ([
d63a704f](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/d63a704f3b2be9b45b8f486f35ae98b55f1b07e3)) — Added aguest -> member -> vip -> vip+ -> mod -> admin -> ownerpermission group ladder with progressively higher/homelimits, plus playtime-based auto-promotion (guest -> member after 24h, configurable).permissions.jsonis no longer a one-time seed — every group it defines is now re-applied on every reload/restart, so editing the file and reloading actually takes effect. - 2026-09-16** — Build 75 ([
2d53fc9d](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/2d53fc9db193f739b0e9331c2b90a0aacb5c1f7c)) — Third-party command permission gate — map an arbitrary command path (including a specific subcommand) from another mod, or a vanilla command, to a NeoEssentials permission node viacommand_permissions.json. Deepest configured path wins; denial uses the same message NeoEssentials' own commands show; permission-node changes on already-covered commands apply live via/neoe reload, no restart needed. - 2026-09-16** — Build 74 ([
923ef4bb](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/923ef4bb02e32e7584d3bddd9f6706d4633f773f)) —/backis now a bounded in-memory undo-stack (default 10,teleportation.backSettings.maxBackHistory) instead of remembering only the single most recent death/teleport location — chaining/tpa,/spawn,/homelets/backwalk back through each hop in turn. Purely in-memory, cleared on disconnect/restart (no more disk persistence). - 2026-09-15** — Build 70 ([
bbe8d6f7](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/bbe8d6f7dac7c8a9af15e8a639b2d160d4a7d19a)) — Fixed /spawn and /home instability near chunk borders (issue #72) — teleport preloading was silently loading the wrong chunk right at a border on the negative side, causing a false "unsafe location". Also added a PvP system —/pvp on|off|toggle, server-wide switch plus mutual per-player opt-out, newbie protection, and safe-zone integration. - 2026-09-09** — Build 69 ([
d0939a1f](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/d0939a1f2655c8b0abca376fb58e9973421494ff)) — NPC shops can now use any registered entity type (vanilla or modded) with an AI on/off toggle —/npcshop entitytype <id> <type> <ai>converts an existing shop in place. AI-enabled Mobs keep their normal animations but are leashed to their spawn point; AI-disabled Mobs are frozen like the classic ArmorStand. - 2026-09-08** — Build 68 ([
0e8cbb26](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/0e8cbb268d657a4f3d217d3b4418040ac82e3a63)) — Fixed doubled rank prefixes in Discord — NeoEssentials' own Discord messages (chat/join/leave/mute/AFK/advancement/PMs, all three adapters) now resolve the prefix from the permission system directly instead of the vanilla scoreboard team, so they can never double regardless of a bridge mod's own native relay. Verified live against a real Discord server. - 2026-09-07** — Build 67 ([
66e96854](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/66e96854336f87a9b63234ebda13dece611b17e7)) — Wider Discord event coverage: Mc2Discord now relays AFK/private messages and reads its avatar URL from config instead of hardcoding it; DCIntegration now relays advancement/mute/AFK when routed to an explicit Discord channel (all additive-only, confirmed safe against DCIntegration's own native advancement relay via bytecode). - 2026-09-07** — Build 66 ([
c2d141c3](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/c2d141c374e0d8ab1825fa39325c8e88f2419bfa)) — SDLink/Mc2Discord's native-relay conflict warnings (previously console-only) are now also exposed via the dashboard's Discord status API, for admins configuring integration through it. - 2026-09-07** — Build 65 ([
b14cb394](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/b14cb394d5feec4ccd5710cb872751dd2aa4c9fe)) — Rich Discord embeds for SDLink's join/leave/mute/AFK/advancement events when routed to an explicit Discord channel — each now has its owndiscordEmbedTemplate.<event>override with sensible defaults, matching what chat messages already got. Set an event'senabledtofalseto keep plain text for just that event. - 2026-09-07** — Build 64 ([
b048521e](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/b048521e76e54a51fd0d6ea7af1368e862a35fff)) — SDLink's native-relay conflict detection now parsessimple-discord-link.tomlwith a real TOML parser instead of a best-effort text scan; long chat/PM/mute/AFK/advancement text sent to Discord is now truncated before sending across all three bridge-mod adapters. - 2026-09-07** — Build 63 ([
aaace896](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/aaace896091c1bbdeb83867b4f78392d95cbaa46)) — Discord role → permission group sync — newdiscordrolesync.jsonmaps Discord role IDs to permission groups, synced via DCIntegration (highest-priority group wins on multiple matches, re-checked on a timer and on join, only grants/upgrades, never demotes, internal permission manager only). - 2026-09-07** — Build 62 ([
7fdacaa6](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/7fdacaa66168cf6daa86edf4a644f3054deee36f)) — Mc2Discord native relay conflict detection — NeoEssentials now readsconfig/mc2discord.tomlon startup and checks whether Mc2Discord's own channel subscriptions already relay chat/join/leave/advancement events natively, suppressing its own default-route send for that event type to avoid posting it twice. Explicit per-channel overrides still always send. - 2026-09-07** — Build 61 ([
5f0ac1bb](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/5f0ac1bbf09fe1c78a36caad6571f55696cbfe8f)) — Generic Discord webhook relay — a newwebhookUrlfield alongsidechannelIdlets NeoEssentials post events straight to a Discord webhook over plain HTTPS with no bridge mod installed at all. Chat/advancement messages impersonate the sending player. Takes effect immediately on/neoe reload, no restart needed. - 2026-09-07** — Build 60 ([
8398265d](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/8398265d2c084df3d6c8fe683a179a369071e67f)) — Per-event Discord channel routing for join/leave/mute/AFK/advancement/private-message events (newdiscordEventChannelsconfig section) — previously only chat could route to a specific Discord channel. Works with SDLink, Mc2Discord, and DCIntegration (which additionally gained join/leave routing for the first time). - Sidebar scoreboard system —
/scoreboardwith config-driven boards, conditions,
- General leaderboard system —
/leaderboard(/lb), withmoney/kills/mob_kills/
playtime boards and {leaderboard_<board>:<rank>:name|value} placeholders.- Leaderboard boards are now config-driven (
leaderboard.json) — register any vanilla
"custom" point-total boards (
/leaderboard admin set|add|reset|create|delete) and aLeaderboardAPI for other mods to register their own boards./leaderboard hologram create <board> <id> [lines]— generates a ranked leaderboard
- Leaderboards can now rank non-players — a new
shop_salesboard ranks sign/chest and NPC
- Per-board
refreshIntervalinleaderboard.json(was a fixed 60s for every board). - Leaderboard styling: automatic per-rank medal/color placeholders (
:medal/:rankcolor),
entryFormat/headerFormat chat templates, and a new paginated GUI viewer(
/leaderboard <board> gui) with real player heads and per-board icons./tpr//rtpcan open a biome-select chest GUI instead of teleporting instantly — opt-in
randomTeleportSettings.mode: "gui" (default unchanged). Lists every biome thedimension can generate (modded biomes included automatically), plus a "Random — Any Biome"
button; picks a real spot in that biome or shows a clear error if it can't find one within
the server border. Icons default to that biome's sapling/dedicated block; admins can pin
biomes to fixed slots and/or override icons via
biomeMenuItems.- Votifier vote listener — its own TCP port, both V1 (RSA) and V2 (NuVotifier-compatible)
vote party, and
/vote//votes//voteparty commands.- Crates — weighted reward-pool crates with a key balance system, opened via
/crate openor
commands to define crates/rewards in-game. Votifier can grant crate keys per vote site.
/crate admin setblocknow auto-creates a hologram above the block (namedcrate_<crateId>,
/hologram subcommand.- Left-clicking a physical crate block now opens the no-cost reward-odds preview (shift+click to
/crate key giveitem <player> <crate> <amount>gives real, tradeable physical crate key
- Tablist
header/footerframes can now be written as their own JSON array of lines instead
\n inside one long string — e.g. ["Line 1", "Line 2"] as one frame.- Crate key item names now support
{animation:NAME}/gradients/rainbow, not just&-codes —
item can't be live-repainted the way a hologram can).
- Crates now support separate display names for chat and the key item —
chatDisplayName/crateKeyDisplayName (crates.json), plus /crate admin
setchatname/setkeyname, both falling back to displayName if unset. Previously an animateddisplayName flashed a different random snapshot frame in every chat message with no way toopt chat out of it specifically.
/crate keys [player]now lists every registered crate on its own line, including ones you
- Fixed the console being flooded with
PermissionManager is nullwarnings on servers using an
expected state there, not a failure, and no longer logs a warning.
- Hologram refresh/animation tick rates were hardcoded — now configurable via
hologram.refreshInterval/animationInterval in config.json, same convention as tablist/scoreboard's
refreshInterval. Applies with /neoe reload.- New per-board
refreshMultiplierinscoreboard.json(default 1) lets one board cycle its
refreshInterval for tablist/scoreboard/hologram tightened from 20 to 10 ticks (smoother outof the box) — only affects fresh installs, existing configs are untouched.
### Fixed
- 2026-10-07** — Build 83 ([
de40fe22](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/de40fe220f28dbafb98324a57b4ad2e363a43045)) — Config upgrade backups are now kept inconfig/neoessentials/backups/(newest 5 per file) instead of piling up next to the configs. - 2026-10-06** — Build 81 ([
78ae1e4d](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/78ae1e4df658f622d78f5ee7c772f27fc6ada8eb)) — Holograms no longer force-load chunks nobody is near; animated holograms in unloaded chunks were reloading their chunk and re-creating their entities every tick, causing heavy lag. - 2026-10-06** — Build 80 ([
f975babe](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/f975babed6d029efca6adfb97ca593a621879d54)) — Custom join/quit messages (customJoinMessage/customQuitMessage) now replace vanilla's "X joined/left the game" message instead of showing alongside it. Leaving them at"none"keeps the vanilla message. - 2026-10-05** — Build 78 ([
429576f9](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/429576f99616286aa057f3bfa2b47c5038ec7cf2)) — Fixed a stale [AFK] tag surviving logout/login (issue #73): AFK state resets on login, and@snames in/tellrawno longer keep a stale [AFK] tag. - 2026-09-06** — ([
04d20d5b](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/04d20d5b8d4af2c28b0f03a0d81a911f49d6b9fd), docs only) — DocumentednametagSettings.enabled: falseintablist.jsonas the fix for Discord chat-bridge mods (e.g. SimpleDiscordLink) showing the rank prefix twice. In-game chat is unaffected; no code change needed. - 2026-09-06** — Build 59 ([
7a158686](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/7a158686c370e70bd1602c0d01eb3cf4a5da400f)) — Fixed a player's name showing as literalHNAME<name>/HNAMEin chat instead of a clean clickable name when a chat-format template wrapped{neoessentials_username}in<gradient:...>/<rainbow>(the common way to give an FTB Ranks/LuckPerms rank a colored name). Fixes #70. - The startup admin-notice chat block (bug-report links, config split available, etc.) is now
neoessentials.admin.notice permission node instead of a hardcodedOP/wildcard check, and all pending notices render as one combined block. Also removed the
"LEGACY DATA FILE(S) NO LONGER READ" notice entirely.
- FTB Ranks servers can now use
"group:<rank>"chat-format keys and the
{ftbranks_prefix}/{ftbranks_suffix}/{ftbranks_rank}/{ftbranks_group} placeholders —these never actually worked on FTB Ranks before (only LuckPerms). Group now resolves from the
player's highest-power rank; prefix/suffix come from that rank's
ftbranks.name_format value.Also fixed
"group:<name>" keys being case-sensitive against the (always-lowercased) resolvedgroup name, which affected every permission backend, not just FTB Ranks.
/permissions group <group> setprefix|setsuffixno longer shows a raw "unexpected
plugin like LuckPerms is in use) — it now explains why instead.
{luckperms_group}/{luckperms_primary_group}/{ftbranks_rank}/{ftbranks_group}
active —
prefix/suffix/displayname variants were unaffected.- Nicknamed players (
/nick) now keep their permission-group prefix/suffix in the tab list —
PermissionAPI.getPrefix()/getSuffix()now fall back to the internal permission system
getGroupWeight()/getPrimaryGroup()'sexisting behavior. FTB Ranks servers previously got no prefix/suffix at all through this
mod, ever; LuckPerms groups with no
prefix/suffix meta set now fall back to an internalone too instead of showing nothing.
- Five more places had the identical internal-manager-only bug (found by auditing every
NeoEssentialsAPI group lookup, the {group} placeholder,per-group tablist column bucketing, chat badge group gating, and player tags all silently
fell back to
""/"default" under LuckPerms/FTB Ranks — now fixed the same way.- Config-version upgrades (the merge that adds new default keys/boards to an existing config
shop_sales) not reaching an already-upgraded install even after that fix./tpr//rtpcould lag or crash a server, especially without pre-generated terrain — it was
grid for RTP specifically, plus a 10-chunk burst refilling the background cache right after
every teleport). Both fixed; new
prewarmBatchSize config caps the refill burst, and lowerdefault range/attempts reduce worst-case cost on fresh servers.
/tpr also now announcesits warmup delay and that moving cancels it — that already worked, it just wasn't visible.
- Splitting your config (
/neoe config split) silently dropped web dashboard settings and your
list, so both always fell back to defaults after splitting (dashboard settings, and storage
reverting to
"json" even if you had SQLite/MySQL configured). Both fixed — webDashboardnow gets its own
dashboard.json, storage now lives in main.json. See the Split Configwiki page if you already hit this — your original values are recoverable from
config.json.backup.- Right-clicking a physical crate block ran the whole open flow twice per click (duplicated
- A crate with no rewards configured yet silently ate a key and reported the misleading "no
reward actually exists.
- Tab-completion was silently missing on ~25 command arguments across 16 files (crate/hologram/
- A crate's
&-coded display name showed up as literal text (e.g.&7Common Crate) instead of
reply built via
MessageUtil, not just crates).{server_name}is now a plain, independently-configurable name (general.serverName), no
{server_motd} placeholder covers the "show the actualconfigured MOTD" case instead.
/neoe reloadsilently did nothing for the scoreboard system (only tablist was fixed for
- Some inventory-utility client mods' "pull items from the open GUI" button could steal (and
/crate preview/the opening reveal GUI — an initial fixmissed the exact method these mods use to blank the slot; now every mutation path on the
container is locked down, closing it regardless of which mod is doing the pulling. Confirmed
(via Quark) that some mods don't even need a mutation method — they just read and copy the
item — so both crate GUIs now also mark every displayed item and sweep it out of your real
inventory if it ever ends up there, regardless of how it got there. The preview's close/prev/
next buttons and filler panes were missed by the first pass of that marking; fixed too.
- Physical crate key items were never actually giveable, and even a key item obtained some
/crate key giveitemabove).
- A malformed config file (e.g. a stray brace from a manual edit) could crash the entire server
instead of taking the server down.
- A nicknamed player still showed their real IGN in tab to anyone who joined the server after
joining player's own.
/neoe reload(and/scoreboard reload) could kick every player seeing the sidebar
- The permission system couldn't recover from a failed boot init without a full restart (kept
PermissionManager is null all session) — /neoe reload now re-initializes it fromscratch when that happens instead of failing the same way forever.
- The "config splitting available"/"legacy data files" admin notices nagged on every single
- Closing the crate GUI immediately after using a pull-mod extraction button could still win the
of just once, closing the timing window entirely.
/crate admin createdidn't say where the new crate went — now points to
config/neoessentials/crates.json./scoreboard reloadnever refreshedanimations.json— only/tablist reloaddid. Editing
{animation:...}/gradient text, unformatted) until a /tablist reload also happened to run./eco give|set|take//paynever invalidated the leaderboard "money" board (only/baltop's
to 60s — fixed.
/baltop and /leaderboard <board> also both misreported "no data" on thevery first call ever, even with real data present — fixed.
- The economy system had no way to recover if it never finished initializing at boot (silently
/neoe reload now retries it,same as the permission system's existing self-heal.
/payand/eco give|takecrashed on every use wheneversecurity.enableInputValidation
{animation:NAME}/gradient/rainbow tags never resolved in chat — every command reply used a
(reported for a crate's name showing
{animation:animation} unresolved when opened). Fixedmod-wide at the shared message-building code, not just for crates. Note: a sent chat message is
a permanent snapshot of whichever animation frame was current the instant it was sent — chat
has no live-update channel like tablist/scoreboard/holograms do, so there's no
intervalMs/refreshInterval equivalent for it.- Crate GUI titles and a crate key's lore/hover text now also resolve animation/gradient tags,
- Confirmed, not a bug: crate keys (
/crate admin setkey) already support any vanilla or modded
- An animation frame's gradient/rainbow tags were silently stripped in chat unless
chat.richText.enabled was separately turned on (off by default) — tablist/hologram alwaysrendered them regardless of that setting. Fixed — animation gradients/rainbow now always render
in chat too; the config still gates a player typing raw gradient tags themselves.
/neoe reloadnever actually reloadedleaderboard.json(only the dedicated/leaderboard
/neoe reload exceptthis one. Fixed.
{animation:NAME}froze on its first frame forever, mod-wide (holograms, scoreboard, chat,
the animation clock was tablist's own tick handler, which never ran once tablist was off. No
hologram/scoreboard interval setting could fix this since the clock itself never moved. Fixed —
animations now advance every tick regardless of whether tablist is enabled.
- Renamed
hologram.refreshInterval(config.json) tohologram.pollIntervalTicks— it was
refreshInterval(
/hologram setrefresh), which is the one that actually controls how often placeholdersrefresh. Lowering the old key below that value did nothing visible. Existing values carry over
automatically on upgrade.
- Hologram animations advanced in visible bursts ("jumpy"/slow) no matter how low the animation's
frameDuration was set, even though the same change applied instantly and smoothly intablist/scoreboard — hologram refresh and animation ticking shared one background thread, so a
slow refresh cycle delayed the next animation tick behind it. Fixed — they now run on
independent threads. Also promoted a silently-swallowed hologram render error to a visible
warning.
- Crate rewards/keys with saved item components (custom name, lore, enchantments) could silently
Fixed — crate loading now always happens after the fix that binds the registry access it needs.
- Hologram animations could still burst under load even after the thread split above — the
switching to a schedule that waits from when the previous cycle finished, so it can never
build a backlog to burst through.
- A color-only
{animation:NAME}(a gradient cycling hex stops over the same literal words —
specifically, even with the fixes above. The change-detection compared plain text, which a
color-only change never affects, so it never saw a change to react to. Fixed.
- Minecraft 26.1–26.1.2 · NeoForge 26.1.2.76+**
All notable changes to this branch are documented here, starting from
- v1.0.6** — earlier history (v1.0.5.x and before, including the port's own
## [1.0.6] — 2026-08-27
### Added
- 2026-10-09** — Build 87 ([
6c2e99cb](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/6c2e99cb13ae748c4384f55af3b225a60c3d3458)) — The NPC shop window now shows your live balance on a gold ingot (bottom-right slot), refreshed after every buy/sell — previously only in the title, which couldn't update while the window was open. - 2026-10-09** — Build 86 ([
3ffed2df](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/3ffed2df243125955bd1a0aa02d37c45ca120bc4)) — Fixed/npcshop additemand NPC shop listings not recognizing modded items with noworth.ymlentry (e.g.mekanism:osmium_ingot) — now falls back to the item registry. - 2026-10-09** — Build 85 ([
469bb962](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/469bb96239689794110effc2c694a8ce27305294)) — Modded ids work in/npcshop additem,addcommandandentitytype;entitytype's<ai>is optional. - 2026-10-08** — Build 84 ([
3424d4d0](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/3424d4d04d33a013bb8e9c6ae12b485654fb1e32)) — Easier shops:/npcshopaccepts shop names orthis, newadditemhandandeditlisting ... price, 1-based slots, shift-click stacks and balance in the NPC shop window, second-click confirmation aboveshop.confirmAbove, and fuller/chestshop infofor command signs. - 2026-10-07** — Build 83 ([
f589beda](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/f589beda8de5b630c8fcda5489aa20feb7f040c5)) — Command shops: sell commands from NPC shops (/npcshop addcommand,/npcshop editlisting) or[Command]Admin Shop signs (/chestshop command ...). Runs as console or the buyer,{player}/{uuid}placeholders, optional permission node, and the buyer is never charged for a command that can't run. - 2026-10-06** — Build 82 ([
4f55f20a](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/4f55f20a54464a7a8188a4d0b71aa4bcf573a2cc)) — The[NE]message prefix is now configurable viageneral.messagePrefix(""removes it). - 2026-09-16** — Build 77 ([
893aeb43](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/893aeb43375f06591726457eba84e36b69c4b9ec)) — Valued permission nodes — groups can now hold a"meta"map (node -> value) for permission systems expecting a number/string instead of a plain grant, wired into NeoForge's Permission API forINTEGER/STRINGnode types. Used to give the rank ladder progressively higher FTB Chunks (ftbchunks.max_claimed/max_force_loaded) claim limits per tier — only effective if a mod queries limits through NeoForge's Permission API rather than its own separate config. - 2026-09-16** — Build 76 ([
36191b2a](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/36191b2ad4227943f5a3052ca23111badbe75fc2)) — Added aguest -> member -> vip -> vip+ -> mod -> admin -> ownerpermission group ladder with progressively higher/homelimits, plus playtime-based auto-promotion (guest -> member after 24h, configurable).permissions.jsonis no longer a one-time seed — every group it defines is now re-applied on every reload/restart, so editing the file and reloading actually takes effect. - 2026-09-16** — Build 75 ([
d09f6fc8](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/d09f6fc8a920f315b8f4353892a4094ac4e041b8)) — Third-party command permission gate — map an arbitrary command path (including a specific subcommand) from another mod, or a vanilla command, to a NeoEssentials permission node viacommand_permissions.json. Deepest configured path wins; denial uses the same message NeoEssentials' own commands show; permission-node changes on already-covered commands apply live via/neoe reload, no restart needed. - 2026-09-16** — Build 74 ([
a3e107c3](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/a3e107c3ecaf7f1b0d3fe44721b0c9c125f8c522)) —/backis now a bounded in-memory undo-stack (default 10,teleportation.backSettings.maxBackHistory) instead of remembering only the single most recent death/teleport location — chaining/tpa,/spawn,/homelets/backwalk back through each hop in turn. Purely in-memory, cleared on disconnect/restart (no more disk persistence). - 2026-09-15** — Build 70 ([
41952fcf](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/41952fcf0c56f44299da685c05e0f557bb4a616b)) — Fixed /spawn and /home instability near chunk borders (issue #72) — teleport preloading was silently loading the wrong chunk right at a border on the negative side, causing a false "unsafe location". Also added a PvP system —/pvp on|off|toggle, server-wide switch plus mutual per-player opt-out, newbie protection, and safe-zone integration. - 2026-09-09** — Build 69 ([
fa2d807c](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/fa2d807ce21d235056e7664ea378d999ccc71cb5)) — NPC shops can now use any registered entity type (vanilla or modded) with an AI on/off toggle —/npcshop entitytype <id> <type> <ai>converts an existing shop in place. AI-enabled Mobs keep their normal animations but are leashed to their spawn point; AI-disabled Mobs are frozen like the classic ArmorStand. - 2026-09-08** — Build 68 ([
e0b0d45c](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/e0b0d45cf5e1700e3ca3a8d317784621e153a519)) — Fixed doubled rank prefixes in Discord — NeoEssentials' own Discord messages (chat/join/leave/mute/AFK/advancement/PMs, all three adapters) now resolve the prefix from the permission system directly instead of the vanilla scoreboard team, so they can never double regardless of a bridge mod's own native relay. Verified live against a real Discord server. - 2026-09-07** — Build 67 ([
0a19497a](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/0a19497a6941205538fafeaf27c2cd81db99e08b)) — Wider Discord event coverage: Mc2Discord now relays AFK/private messages and reads its avatar URL from config instead of hardcoding it; DCIntegration now relays advancement/mute/AFK when routed to an explicit Discord channel (all additive-only, confirmed safe against DCIntegration's own native advancement relay via bytecode). - 2026-09-07** — Build 66 ([
4464d939](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/4464d939a7b35a7ebcec8ad70e48913c4f7a5eaf)) — SDLink/Mc2Discord's native-relay conflict warnings (previously console-only) are now also exposed via the dashboard's Discord status API, for admins configuring integration through it. - 2026-09-07** — Build 65 ([
79e9c5f8](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/79e9c5f8b02c97b1fd3e9ca4cc83831168a77e7e)) — Rich Discord embeds for SDLink's join/leave/mute/AFK/advancement events when routed to an explicit Discord channel — each now has its owndiscordEmbedTemplate.<event>override with sensible defaults, matching what chat messages already got. Set an event'senabledtofalseto keep plain text for just that event. - 2026-09-07** — Build 64 ([
5e2429e3](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/5e2429e36593ca9e70b7336127d77e9a1ddf1a27)) — SDLink's native-relay conflict detection now parsessimple-discord-link.tomlwith a real TOML parser instead of a best-effort text scan; long chat/PM/mute/AFK/advancement text sent to Discord is now truncated before sending across all three bridge-mod adapters. - 2026-09-07** — Build 63 ([
e2777cad](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/e2777cada9f467d6c0fe50462dcd1fbc813f5958)) — Discord role → permission group sync — newdiscordrolesync.jsonmaps Discord role IDs to permission groups, synced via DCIntegration (highest-priority group wins on multiple matches, re-checked on a timer and on join, only grants/upgrades, never demotes, internal permission manager only). - 2026-09-07** — Build 62 ([
19bf923f](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/19bf923f736243877ae86c6339f9d56e88dd75f6)) — Mc2Discord native relay conflict detection — NeoEssentials now readsconfig/mc2discord.tomlon startup and checks whether Mc2Discord's own channel subscriptions already relay chat/join/leave/advancement events natively, suppressing its own default-route send for that event type to avoid posting it twice. Explicit per-channel overrides still always send. - 2026-09-07** — Build 61 ([
5cee258b](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/5cee258b5b63d77dfda75fd48c1812cdce1ff483)) — Generic Discord webhook relay — a newwebhookUrlfield alongsidechannelIdlets NeoEssentials post events straight to a Discord webhook over plain HTTPS with no bridge mod installed at all. Chat/advancement messages impersonate the sending player. Takes effect immediately on/neoe reload, no restart needed. - 2026-09-07** — Build 60 ([
5deb4d67](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/5deb4d67e80056055a9ed87f15dc112f691f8d67)) — Per-event Discord channel routing for join/leave/mute/AFK/advancement/private-message events (newdiscordEventChannelsconfig section) — previously only chat could route to a specific Discord channel. Works with SDLink, Mc2Discord, and DCIntegration (which additionally gained join/leave routing for the first time). - Sidebar scoreboard system —
/scoreboardwith config-driven boards, conditions,
- General leaderboard system —
/leaderboard(/lb), withmoney/kills/mob_kills/
playtime boards and {leaderboard_<board>:<rank>:name|value} placeholders.- Leaderboard boards are now config-driven (
leaderboard.json) — register any vanilla
"custom" point-total boards (
/leaderboard admin set|add|reset|create|delete) and aLeaderboardAPI for other mods to register their own boards./leaderboard hologram create <board> <id> [lines]— generates a ranked leaderboard
- Leaderboards can now rank non-players — a new
shop_salesboard ranks sign/chest and NPC
- Per-board
refreshIntervalinleaderboard.json(was a fixed 60s for every board). - Leaderboard styling: automatic per-rank medal/color placeholders (
:medal/:rankcolor),
entryFormat/headerFormat chat templates, and a new paginated GUI viewer(
/leaderboard <board> gui) with real player heads and per-board icons./tpr//rtpcan open a biome-select chest GUI instead of teleporting instantly — opt-in
randomTeleportSettings.mode: "gui" (default unchanged). Lists every biome thedimension can generate (modded biomes included automatically), plus a "Random — Any Biome"
button; picks a real spot in that biome or shows a clear error if it can't find one within
the server border. Icons default to that biome's sapling/dedicated block; admins can pin
biomes to fixed slots and/or override icons via
biomeMenuItems.- Votifier vote listener — its own TCP port, both V1 (RSA) and V2 (NuVotifier-compatible)
vote party, and
/vote//votes//voteparty commands.- Crates — weighted reward-pool crates with a key balance system, opened via
/crate openor
commands to define crates/rewards in-game. Votifier can grant crate keys per vote site.
/crate admin setblocknow auto-creates a hologram above the block (namedcrate_<crateId>,
/hologram subcommand.- Left-clicking a physical crate block now opens the no-cost reward-odds preview (shift+click to
/crate key giveitem <player> <crate> <amount>gives real, tradeable physical crate key
- Tablist
header/footerframes can now be written as their own JSON array of lines instead
\n inside one long string — e.g. ["Line 1", "Line 2"] as one frame.- Crate key item names now support
{animation:NAME}/gradients/rainbow, not just&-codes —
item can't be live-repainted the way a hologram can).
- Crates now support separate display names for chat and the key item —
chatDisplayName/crateKeyDisplayName (crates.json), plus /crate admin
setchatname/setkeyname, both falling back to displayName if unset. Previously an animateddisplayName flashed a different random snapshot frame in every chat message with no way toopt chat out of it specifically.
/crate keys [player]now lists every registered crate on its own line, including ones you
- Fixed the console being flooded with
PermissionManager is nullwarnings on servers using an
expected state there, not a failure, and no longer logs a warning.
- Hologram refresh/animation tick rates were hardcoded — now configurable via
hologram.refreshInterval/animationInterval in config.json, same convention as tablist/scoreboard's
refreshInterval. Applies with /neoe reload.- New per-board
refreshMultiplierinscoreboard.json(default 1) lets one board cycle its
refreshInterval for tablist/scoreboard/hologram tightened from 20 to 10 ticks (smoother outof the box) — only affects fresh installs, existing configs are untouched.
### Fixed
- 2026-10-07** — Build 83 ([
270760ea](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/270760eae64ade58c334a77a79eefbf4c87f150e)) — Config upgrade backups are now kept inconfig/neoessentials/backups/(newest 5 per file) instead of piling up next to the configs. - 2026-10-06** — Build 81 ([
731b1640](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/731b1640d2265d5302a4f6d141e842eeea2c432c)) — Holograms no longer force-load chunks nobody is near; animated holograms in unloaded chunks were reloading their chunk and re-creating their entities every tick, causing heavy lag. - 2026-10-06** — Build 80 ([
d5aaa260](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/d5aaa260756b799d502c5dee49096575b33b92f8)) — Custom join/quit messages (customJoinMessage/customQuitMessage) now replace vanilla's "X joined/left the game" message instead of showing alongside it. Leaving them at"none"keeps the vanilla message. - 2026-10-05** — Build 79 ([
bafc62cf](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/bafc62cfd8972dc7da12b5004bb8c9eac1c26d4b)) — Fixed a stale [AFK] tag surviving logout/login (issue #73): AFK state resets on login, and@snames in/tellrawno longer keep a stale [AFK] tag. - 2026-09-06** — ([
7e5e58fb](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/7e5e58fb6802e66df1f2d0802ef0e740a95692b8), docs only) — DocumentednametagSettings.enabled: falseintablist.jsonas the fix for Discord chat-bridge mods (e.g. SimpleDiscordLink) showing the rank prefix twice. In-game chat is unaffected; no code change needed. - 2026-09-06** — Build 59 ([
cabb98ee](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/cabb98eecc6fd73889c0329ef27e0e1036ed1eeb)) — Fixed a player's name showing as literalHNAME<name>/HNAMEin chat instead of a clean clickable name when a chat-format template wrapped{neoessentials_username}in<gradient:...>/<rainbow>(the common way to give an FTB Ranks/LuckPerms rank a colored name). Fixes #70. - The startup admin-notice chat block (bug-report links, config split available, etc.) is now
neoessentials.admin.notice permission node instead of a hardcodedOP/wildcard check, and all pending notices render as one combined block. Also removed the
"LEGACY DATA FILE(S) NO LONGER READ" notice entirely.
- FTB Ranks servers can now use
"group:<rank>"chat-format keys and the
{ftbranks_prefix}/{ftbranks_suffix}/{ftbranks_rank}/{ftbranks_group} placeholders —these never actually worked on FTB Ranks before (only LuckPerms). Group now resolves from the
player's highest-power rank; prefix/suffix come from that rank's
ftbranks.name_format value.Also fixed
"group:<name>" keys being case-sensitive against the (always-lowercased) resolvedgroup name, which affected every permission backend, not just FTB Ranks.
/permissions group <group> setprefix|setsuffixno longer shows a raw "unexpected
plugin like LuckPerms is in use) — it now explains why instead.
{luckperms_group}/{luckperms_primary_group}/{ftbranks_rank}/{ftbranks_group}
active —
prefix/suffix/displayname variants were unaffected.- Nicknamed players (
/nick) now keep their permission-group prefix/suffix in the tab list —
PermissionAPI.getPrefix()/getSuffix()now fall back to the internal permission system
getGroupWeight()/getPrimaryGroup()'sexisting behavior. FTB Ranks servers previously got no prefix/suffix at all through this
mod, ever; LuckPerms groups with no
prefix/suffix meta set now fall back to an internalone too instead of showing nothing.
- Five more places had the identical internal-manager-only bug (found by auditing every
NeoEssentialsAPI group lookup, the {group} placeholder,per-group tablist column bucketing, chat badge group gating, and player tags all silently
fell back to
""/"default" under LuckPerms/FTB Ranks — now fixed the same way.- Config-version upgrades (the merge that adds new default keys/boards to an existing config
shop_sales) not reaching an already-upgraded install even after that fix./tpr//rtpcould lag or crash a server, especially without pre-generated terrain — it was
grid for RTP specifically, plus a 10-chunk burst refilling the background cache right after
every teleport). Both fixed; new
prewarmBatchSize config caps the refill burst, and lowerdefault range/attempts reduce worst-case cost on fresh servers.
/tpr also now announcesits warmup delay and that moving cancels it — that already worked, it just wasn't visible.
- Splitting your config (
/neoe config split) silently dropped web dashboard settings and your
list, so both always fell back to defaults after splitting (dashboard settings, and storage
reverting to
"json" even if you had SQLite/MySQL configured). Both fixed — webDashboardnow gets its own
dashboard.json, storage now lives in main.json. See the Split Configwiki page if you already hit this — your original values are recoverable from
config.json.backup.- Right-clicking a physical crate block ran the whole open flow twice per click (duplicated
- A crate with no rewards configured yet silently ate a key and reported the misleading "no
reward actually exists.
- Tab-completion was silently missing on ~25 command arguments across 16 files (crate/hologram/
- A crate's
&-coded display name showed up as literal text (e.g.&7Common Crate) instead of
reply built via
MessageUtil, not just crates).{server_name}is now a plain, independently-configurable name (general.serverName), no
{server_motd} placeholder covers the "show the actualconfigured MOTD" case instead.
/neoe reloadsilently did nothing for the scoreboard system (only tablist was fixed for
- Some inventory-utility client mods' "pull items from the open GUI" button could steal (and
/crate preview/the opening reveal GUI — an initial fixmissed the exact method these mods use to blank the slot; now every mutation path on the
container is locked down, closing it regardless of which mod is doing the pulling. Confirmed
(via Quark) that some mods don't even need a mutation method — they just read and copy the
item — so both crate GUIs now also mark every displayed item and sweep it out of your real
inventory if it ever ends up there, regardless of how it got there. The preview's close/prev/
next buttons and filler panes were missed by the first pass of that marking; fixed too.
- Physical crate key items were never actually giveable, and even a key item obtained some
/crate key giveitemabove).
- A malformed config file (e.g. a stray brace from a manual edit) could crash the entire server
instead of taking the server down.
- A nicknamed player still showed their real IGN in tab to anyone who joined the server after
joining player's own.
/neoe reload(and/scoreboard reload) could kick every player seeing the sidebar
- The permission system couldn't recover from a failed boot init without a full restart (kept
PermissionManager is null all session) — /neoe reload now re-initializes it fromscratch when that happens instead of failing the same way forever.
- The "config splitting available"/"legacy data files" admin notices nagged on every single
- Closing the crate GUI immediately after using a pull-mod extraction button could still win the
of just once, closing the timing window entirely.
/crate admin createdidn't say where the new crate went — now points to
config/neoessentials/crates.json./scoreboard reloadnever refreshedanimations.json— only/tablist reloaddid. Editing
{animation:...}/gradient text, unformatted) until a /tablist reload also happened to run./eco give|set|take//paynever invalidated the leaderboard "money" board (only/baltop's
to 60s — fixed.
/baltop and /leaderboard <board> also both misreported "no data" on thevery first call ever, even with real data present — fixed.
- The economy system had no way to recover if it never finished initializing at boot (silently
/neoe reload now retries it,same as the permission system's existing self-heal.
/payand/eco give|takecrashed on every use wheneversecurity.enableInputValidation
{animation:NAME}/gradient/rainbow tags never resolved in chat — every command reply used a
(reported for a crate's name showing
{animation:animation} unresolved when opened). Fixedmod-wide at the shared message-building code, not just for crates. Note: a sent chat message is
a permanent snapshot of whichever animation frame was current the instant it was sent — chat
has no live-update channel like tablist/scoreboard/holograms do, so there's no
intervalMs/refreshInterval equivalent for it.- Crate GUI titles and a crate key's lore/hover text now also resolve animation/gradient tags,
- Confirmed, not a bug: crate keys (
/crate admin setkey) already support any vanilla or modded
- An animation frame's gradient/rainbow tags were silently stripped in chat unless
chat.richText.enabled was separately turned on (off by default) — tablist/hologram alwaysrendered them regardless of that setting. Fixed — animation gradients/rainbow now always render
in chat too; the config still gates a player typing raw gradient tags themselves.
/neoe reloadnever actually reloadedleaderboard.json(only the dedicated/leaderboard
/neoe reload exceptthis one. Fixed.
{animation:NAME}froze on its first frame forever, mod-wide (holograms, scoreboard, chat,
the animation clock was tablist's own tick handler, which never ran once tablist was off. No
hologram/scoreboard interval setting could fix this since the clock itself never moved. Fixed —
animations now advance every tick regardless of whether tablist is enabled.
- Renamed
hologram.refreshInterval(config.json) tohologram.pollIntervalTicks— it was
refreshInterval(
/hologram setrefresh), which is the one that actually controls how often placeholdersrefresh. Lowering the old key below that value did nothing visible. Existing values carry over
automatically on upgrade.
- Hologram animations advanced in visible bursts ("jumpy"/slow) no matter how low the animation's
frameDuration was set, even though the same change applied instantly and smoothly intablist/scoreboard — hologram refresh and animation ticking shared one background thread, so a
slow refresh cycle delayed the next animation tick behind it. Fixed — they now run on
independent threads. Also promoted a silently-swallowed hologram render error to a visible
warning.
- Crate rewards/keys with saved item components (custom name, lore, enchantments) could silently
Fixed — crate loading now always happens after the fix that binds the registry access it needs.
- Hologram animations could still burst under load even after the thread split above — the
switching to a schedule that waits from when the previous cycle finished, so it can never
build a backlog to burst through.
- A color-only
{animation:NAME}(a gradient cycling hex stops over the same literal words —
specifically, even with the fixes above. The change-detection compared plain text, which a
color-only change never affects, so it never saw a change to react to. Fixed.
Starting from **v1.0.6** — earlier history (v1.0.5.x and before) is not carried over.
- Minecraft 1.21.1 – 1.21.10 · NeoForge 21.1.179+**
## [1.0.6] — 2026-08-27
### Added
- 2026-10-09** — Build 87 ([
786492e9](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/786492e93cd10a24ac9d4ab0444d62b10e4d0008)) — The NPC shop window now shows your live balance on a gold ingot (bottom-right slot), refreshed after every buy/sell — previously only in the title, which couldn't update while the window was open. - 2026-10-09** — Build 86 ([
d82acad1](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/d82acad1c93bd92b9e91ea20a69a2749b19ca151)) — Fixed/npcshop additemand NPC shop listings not recognizing modded items with noworth.ymlentry (e.g.mekanism:osmium_ingot) — now falls back to the item registry. - 2026-10-09** — Build 85 ([
a7208a94](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/a7208a94fe1830740627b461d85e325c2cbaf451)) — Modded ids work in/npcshop additem,addcommandandentitytype;entitytype's<ai>is optional. - 2026-10-08** — Build 84 ([
6a3dc7be](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/6a3dc7be7e8be88a7b9e738507ff043c85f32abb)) — Easier shops:/npcshopaccepts shop names orthis, newadditemhandandeditlisting ... price, 1-based slots, shift-click stacks and balance in the NPC shop window, second-click confirmation aboveshop.confirmAbove, and fuller/chestshop infofor command signs. - 2026-10-07** — Build 83 ([
4ab8fcaa](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/4ab8fcaafb4a911f7a8e6f178e1282a333a8ffe9)) — Command shops: sell commands from NPC shops (/npcshop addcommand,/npcshop editlisting) or[Command]Admin Shop signs (/chestshop command ...). Runs as console or the buyer,{player}/{uuid}placeholders, optional permission node, and the buyer is never charged for a command that can't run. - 2026-10-06** — Build 82 ([
814b32ea](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/814b32ea6d2a3eb405b6083a84b7343c68610bce)) — The[NE]message prefix is now configurable viageneral.messagePrefix(""removes it). - 2026-09-16** — Build 77 ([
1c4cc11c](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/1c4cc11caf760ddaefb9ca2dfe3e14f4b59f440f)) — Valued permission nodes — groups can now hold a"meta"map (node -> value) for permission systems expecting a number/string instead of a plain grant, wired into NeoForge's Permission API forINTEGER/STRINGnode types. Used to give the rank ladder progressively higher FTB Chunks (ftbchunks.max_claimed/max_force_loaded) claim limits per tier — only effective if a mod queries limits through NeoForge's Permission API rather than its own separate config. - 2026-09-16** — Build 76 ([
6233db30](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/6233db30f89fabfb28f37af0ab85ce82d9ca2e18)) — Added aguest -> member -> vip -> vip+ -> mod -> admin -> ownerpermission group ladder with progressively higher/homelimits, plus playtime-based auto-promotion (guest -> member after 24h, configurable).permissions.jsonis no longer a one-time seed — every group it defines is now re-applied on every reload/restart, so editing the file and reloading actually takes effect. - 2026-09-16** — Build 75 ([
6f9a1e6e](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/6f9a1e6e1a9c7b020308fa9fd223ff49d926538f)) — Third-party command permission gate — map an arbitrary command path (including a specific subcommand) from another mod, or a vanilla command, to a NeoEssentials permission node viacommand_permissions.json. Deepest configured path wins; denial uses the same message NeoEssentials' own commands show; permission-node changes on already-covered commands apply live via/neoe reload, no restart needed. - 2026-09-16** — Build 74 ([
1b1dda8f](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/1b1dda8fdcf2764b976ba3a3674729eba0b78876)) —/backis now a bounded in-memory undo-stack (default 10,teleportation.backSettings.maxBackHistory) instead of remembering only the single most recent death/teleport location — chaining/tpa,/spawn,/homelets/backwalk back through each hop in turn. Purely in-memory, cleared on disconnect/restart (no more disk persistence). - 2026-09-15** — Build 70 ([
059dc153](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/059dc1534146b3f6a6ff12f4694164e43049064a)) — Fixed /spawn and /home instability near chunk borders (issue #72) — teleport preloading was silently loading the wrong chunk right at a border on the negative side, causing a false "unsafe location". Also added a PvP system —/pvp on|off|toggle, server-wide switch plus mutual per-player opt-out, newbie protection, and safe-zone integration. - 2026-09-09** — Build 69 ([
3d3f059a](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/3d3f059ad1bdf769b64a0938384afe19627dcfda)) — NPC shops can now use any registered entity type (vanilla or modded) with an AI on/off toggle —/npcshop entitytype <id> <type> <ai>converts an existing shop in place. AI-enabled Mobs keep their normal animations but are leashed to their spawn point; AI-disabled Mobs are frozen like the classic ArmorStand. - 2026-09-08** — Build 68 ([
9e8ec571](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/9e8ec57143651437df86479a9b812dbfa6b05b8d)) — Fixed doubled rank prefixes in Discord — NeoEssentials' own Discord messages (chat/join/leave/mute/AFK/advancement/PMs, all three adapters) now resolve the prefix from the permission system directly instead of the vanilla scoreboard team, so they can never double regardless of a bridge mod's own native relay. Verified live against a real Discord server. - 2026-09-07** — Build 67 ([
9ef44cb0](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/9ef44cb00aa1cc860dafed32712737c19917ea89)) — Wider Discord event coverage: Mc2Discord now relays AFK/private messages and reads its avatar URL from config instead of hardcoding it; DCIntegration now relays advancement/mute/AFK when routed to an explicit Discord channel (all additive-only, confirmed safe against DCIntegration's own native advancement relay via bytecode). - 2026-09-07** — Build 66 ([
4282e36a](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/4282e36a5b4860ec472387129788c688e6ee7cdb)) — SDLink/Mc2Discord's native-relay conflict warnings (previously console-only) are now also exposed via the dashboard's Discord status API, for admins configuring integration through it. - 2026-09-07** — Build 65 ([
c7cc2bd2](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/c7cc2bd22e025a3408004d565efa7d952ac8e33c)) — Rich Discord embeds for SDLink's join/leave/mute/AFK/advancement events when routed to an explicit Discord channel — each now has its owndiscordEmbedTemplate.<event>override with sensible defaults, matching what chat messages already got. Set an event'senabledtofalseto keep plain text for just that event. - 2026-09-07** — Build 64 ([
7f95b97d](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/7f95b97d710e709438b93e65913d11a451e57c8d)) — SDLink's native-relay conflict detection now parsessimple-discord-link.tomlwith a real TOML parser instead of a best-effort text scan; long chat/PM/mute/AFK/advancement text sent to Discord is now truncated before sending across all three bridge-mod adapters. - 2026-09-07** — Build 63 ([
4e920427](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/4e9204274fc358ea72ede6a3908e1f46fe5a180b)) — Discord role → permission group sync — newdiscordrolesync.jsonmaps Discord role IDs to permission groups, synced via DCIntegration (highest-priority group wins on multiple matches, re-checked on a timer and on join, only grants/upgrades, never demotes, internal permission manager only). - 2026-09-07** — Build 62 ([
d1ccffca](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/d1ccffca71a30a06d1aa95c4c14b953d387a4520)) — Mc2Discord native relay conflict detection — NeoEssentials now readsconfig/mc2discord.tomlon startup and checks whether Mc2Discord's own channel subscriptions already relay chat/join/leave/advancement events natively, suppressing its own default-route send for that event type to avoid posting it twice. Explicit per-channel overrides still always send. - 2026-09-07** — Build 61 ([
8ccf84d9](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/8ccf84d91f95ce87d97deb1414f74bfed7e5f879)) — Generic Discord webhook relay — a newwebhookUrlfield alongsidechannelIdlets NeoEssentials post events straight to a Discord webhook over plain HTTPS with no bridge mod installed at all. Chat/advancement messages impersonate the sending player. Takes effect immediately on/neoe reload, no restart needed. - 2026-09-07** — Build 60 ([
e7a908bc](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/e7a908bc77afcd69e0f9aeb2df46336b6b26a6ff)) — Per-event Discord channel routing for join/leave/mute/AFK/advancement/private-message events (newdiscordEventChannelsconfig section) — previously only chat could route to a specific Discord channel. Works with SDLink, Mc2Discord, and DCIntegration (which additionally gained join/leave routing for the first time). - Sidebar scoreboard system —
/scoreboardwith config-driven boards, conditions,
- General leaderboard system —
/leaderboard(/lb), withmoney/kills/mob_kills/
playtime boards and {leaderboard_<board>:<rank>:name|value} placeholders.- Leaderboard boards are now config-driven (
leaderboard.json) — register any vanilla
"custom" point-total boards (
/leaderboard admin set|add|reset|create|delete) and aLeaderboardAPI for other mods to register their own boards./leaderboard hologram create <board> <id> [lines]— generates a ranked leaderboard
- Leaderboards can now rank non-players — a new
shop_salesboard ranks sign/chest and NPC
- Per-board
refreshIntervalinleaderboard.json(was a fixed 60s for every board). - Leaderboard styling: automatic per-rank medal/color placeholders (
:medal/:rankcolor),
entryFormat/headerFormat chat templates, and a new paginated GUI viewer(
/leaderboard <board> gui) with real player heads and per-board icons./tpr//rtpcan open a biome-select chest GUI instead of teleporting instantly — opt-in
randomTeleportSettings.mode: "gui" (default unchanged). Lists every biome thedimension can generate (modded biomes included automatically), plus a "Random — Any Biome"
button; picks a real spot in that biome or shows a clear error if it can't find one within
the server border. Icons default to that biome's sapling/dedicated block; admins can pin
biomes to fixed slots and/or override icons via
biomeMenuItems.- Votifier vote listener — its own TCP port, both V1 (RSA) and V2 (NuVotifier-compatible)
vote party, and
/vote//votes//voteparty commands.- Crates — weighted reward-pool crates with a key balance system, opened via
/crate openor
commands to define crates/rewards in-game. Votifier can grant crate keys per vote site.
/crate admin setblocknow auto-creates a hologram above the block (namedcrate_<crateId>,
/hologram subcommand.- Left-clicking a physical crate block now opens the no-cost reward-odds preview (shift+click to
/crate key giveitem <player> <crate> <amount>gives real, tradeable physical crate key
- Tablist
header/footerframes can now be written as their own JSON array of lines instead
\n inside one long string — e.g. ["Line 1", "Line 2"] as one frame.- Crate key item names now support
{animation:NAME}/gradients/rainbow, not just&-codes —
item can't be live-repainted the way a hologram can).
- Crates now support separate display names for chat and the key item —
chatDisplayName/crateKeyDisplayName (crates.json), plus /crate admin
setchatname/setkeyname, both falling back to displayName if unset. Previously an animateddisplayName flashed a different random snapshot frame in every chat message with no way toopt chat out of it specifically.
/crate keys [player]now lists every registered crate on its own line, including ones you
- Fixed the console being flooded with
PermissionManager is nullwarnings on servers using an
expected state there, not a failure, and no longer logs a warning.
- Hologram refresh/animation tick rates were hardcoded — now configurable via
hologram.refreshInterval/animationInterval in config.json, same convention as tablist/scoreboard's
refreshInterval. Applies with /neoe reload.- New per-board
refreshMultiplierinscoreboard.json(default 1) lets one board cycle its
refreshInterval for tablist/scoreboard/hologram tightened from 20 to 10 ticks (smoother outof the box) — only affects fresh installs, existing configs are untouched.
### Fixed
- 2026-10-07** — Build 83 ([
c91589b2](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/c91589b2ba047a62201c61db50a7a53e79947465)) — Config upgrade backups are now kept inconfig/neoessentials/backups/(newest 5 per file) instead of piling up next to the configs. - 2026-10-06** — Build 80 ([
d541d052](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/d541d052a255cd1648f372ead6d6683606fb6889)) — Custom join/quit messages (customJoinMessage/customQuitMessage) now replace vanilla's "X joined/left the game" message instead of showing alongside it. Leaving them at"none"keeps the vanilla message. - 2026-10-05** — Build 78 ([
6f8a2a85](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/6f8a2a857ab7b277370a5455bb535a7a7165e1c8)) — Fixed a stale [AFK] tag surviving logout/login (issue #73): AFK state resets on login, and@snames in/tellrawno longer keep a stale [AFK] tag. - 2026-10-05** — Build 78 ([
5e8f8bf4](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/5e8f8bf458e88b4c7a182f9572993d6eaaca5d0e)) — Holograms no longer force-load chunks nobody is near; animated holograms in unloaded chunks were reloading their chunk and re-creating their entities every tick, causing heavy lag. - 2026-09-06** — ([
e0b60fb9](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/e0b60fb95f3b916a046b3925cf2d519fd35272ed), docs only) — DocumentednametagSettings.enabled: falseintablist.jsonas the fix for Discord chat-bridge mods (e.g. SimpleDiscordLink) showing the rank prefix twice. In-game chat is unaffected; no code change needed. - 2026-09-06** — Build 59 ([
ffaa874f](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/commit/ffaa874f416187d0ec7b9845bbf42d80d9fa3f09)) — Fixed a player's name showing as literalHNAME<name>/HNAMEin chat instead of a clean clickable name when a chat-format template wrapped{neoessentials_username}in<gradient:...>/<rainbow>(the common way to give an FTB Ranks/LuckPerms rank a colored name). Fixes #70. - The startup admin-notice chat block (bug-report links, config split available, etc.) is now
neoessentials.admin.notice permission node instead of a hardcodedOP/wildcard check, and all pending notices render as one combined block. Also removed the
"LEGACY DATA FILE(S) NO LONGER READ" notice entirely.
- FTB Ranks servers can now use
"group:<rank>"chat-format keys and the
{ftbranks_prefix}/{ftbranks_suffix}/{ftbranks_rank}/{ftbranks_group} placeholders —these never actually worked on FTB Ranks before (only LuckPerms). Group now resolves from the
player's highest-power rank; prefix/suffix come from that rank's
ftbranks.name_format value.Also fixed
"group:<name>" keys being case-sensitive against the (always-lowercased) resolvedgroup name, which affected every permission backend, not just FTB Ranks.
/permissions group <group> setprefix|setsuffixno longer shows a raw "unexpected
plugin like LuckPerms is in use) — it now explains why instead.
{luckperms_group}/{luckperms_primary_group}/{ftbranks_rank}/{ftbranks_group}
active —
prefix/suffix/displayname variants were unaffected.- Nicknamed players (
/nick) now keep their permission-group prefix/suffix in the tab list —
PermissionAPI.getPrefix()/getSuffix()now fall back to the internal permission system
getGroupWeight()/getPrimaryGroup()'sexisting behavior. FTB Ranks servers previously got no prefix/suffix at all through this
mod, ever; LuckPerms groups with no
prefix/suffix meta set now fall back to an internalone too instead of showing nothing.
- Five more places had the identical internal-manager-only bug (found by auditing every
NeoEssentialsAPI group lookup, the {group} placeholder,per-group tablist column bucketing, chat badge group gating, and player tags all silently
fell back to
""/"default" under LuckPerms/FTB Ranks — now fixed the same way.- Config-version upgrades (the merge that adds new default keys/boards to an existing config
shop_sales) not reaching an already-upgraded install even after that fix./tpr//rtpcould lag or crash a server, especially without pre-generated terrain — it was
grid for RTP specifically, plus a 10-chunk burst refilling the background cache right after
every teleport). Both fixed; new
prewarmBatchSize config caps the refill burst, and lowerdefault range/attempts reduce worst-case cost on fresh servers.
/tpr also now announcesits warmup delay and that moving cancels it — that already worked, it just wasn't visible.
- Splitting your config (
/neoe config split) silently dropped web dashboard settings and your
list, so both always fell back to defaults after splitting (dashboard settings, and storage
reverting to
"json" even if you had SQLite/MySQL configured). Both fixed — webDashboardnow gets its own
dashboard.json, storage now lives in main.json. See the Split Configwiki page if you already hit this — your original values are recoverable from
config.json.backup.- Right-clicking a physical crate block ran the whole open flow twice per click (duplicated
- A crate with no rewards configured yet silently ate a key and reported the misleading "no
reward actually exists.
- Tab-completion was silently missing on ~25 command arguments across 16 files (crate/hologram/
- A crate's
&-coded display name showed up as literal text (e.g.&7Common Crate) instead of
reply built via
MessageUtil, not just crates).{server_name}is now a plain, independently-configurable name (general.serverName), no
{server_motd} placeholder covers the "show the actualconfigured MOTD" case instead.
/neoe reloadsilently did nothing for the scoreboard system (only tablist was fixed for
- Some inventory-utility client mods' "pull items from the open GUI" button could steal (and
/crate preview/the opening reveal GUI — an initial fixmissed the exact method these mods use to blank the slot; now every mutation path on the
container is locked down, closing it regardless of which mod is doing the pulling. Confirmed
(via Quark) that some mods don't even need a mutation method — they just read and copy the
item — so both crate GUIs now also mark every displayed item and sweep it out of your real
inventory if it ever ends up there, regardless of how it got there. The preview's close/prev/
next buttons and filler panes were missed by the first pass of that marking; fixed too.
- Physical crate key items were never actually giveable, and even a key item obtained some
/crate key giveitemabove).
- A malformed config file (e.g. a stray brace from a manual edit) could crash the entire server
instead of taking the server down.
- A nicknamed player still showed their real IGN in tab to anyone who joined the server after
joining player's own.
/neoe reload(and/scoreboard reload) could kick every player seeing the sidebar
- The permission system couldn't recover from a failed boot init without a full restart (kept
PermissionManager is null all session) — /neoe reload now re-initializes it fromscratch when that happens instead of failing the same way forever.
- The "config splitting available"/"legacy data files" admin notices nagged on every single
- Closing the crate GUI immediately after using a pull-mod extraction button could still win the
of just once, closing the timing window entirely.
/crate admin createdidn't say where the new crate went — now points to
config/neoessentials/crates.json./scoreboard reloadnever refreshedanimations.json— only/tablist reloaddid. Editing
{animation:...}/gradient text, unformatted) until a /tablist reload also happened to run./eco give|set|take//paynever invalidated the leaderboard "money" board (only/baltop's
to 60s — fixed.
/baltop and /leaderboard <board> also both misreported "no data" on thevery first call ever, even with real data present — fixed.
- The economy system had no way to recover if it never finished initializing at boot (silently
/neoe reload now retries it,same as the permission system's existing self-heal.
/payand/eco give|takecrashed on every use wheneversecurity.enableInputValidation
{animation:NAME}/gradient/rainbow tags never resolved in chat — every command reply used a
(reported for a crate's name showing
{animation:animation} unresolved when opened). Fixedmod-wide at the shared message-building code, not just for crates. Note: a sent chat message is
a permanent snapshot of whichever animation frame was current the instant it was sent — chat
has no live-update channel like tablist/scoreboard/holograms do, so there's no
intervalMs/refreshInterval equivalent for it.- Crate GUI titles and a crate key's lore/hover text now also resolve animation/gradient tags,
- Confirmed, not a bug: crate keys (
/crate admin setkey) already support any vanilla or modded
- An animation frame's gradient/rainbow tags were silently stripped in chat unless
chat.richText.enabled was separately turned on (off by default) — tablist/hologram alwaysrendered them regardless of that setting. Fixed — animation gradients/rainbow now always render
in chat too; the config still gates a player typing raw gradient tags themselves.
/neoe reloadnever actually reloadedleaderboard.json(only the dedicated/leaderboard
/neoe reload exceptthis one. Fixed.
{animation:NAME}froze on its first frame forever, mod-wide (holograms, scoreboard, chat,
the animation clock was tablist's own tick handler, which never ran once tablist was off. No
hologram/scoreboard interval setting could fix this since the clock itself never moved. Fixed —
animations now advance every tick regardless of whether tablist is enabled.
- Renamed
hologram.refreshInterval(config.json) tohologram.pollIntervalTicks— it was
refreshInterval(
/hologram setrefresh), which is the one that actually controls how often placeholdersrefresh. Lowering the old key below that value did nothing visible. Existing values carry over
automatically on upgrade.
- Hologram animations advanced in visible bursts ("jumpy"/slow) no matter how low the animation's
frameDuration was set, even though the same change applied instantly and smoothly intablist/scoreboard — hologram refresh and animation ticking shared one background thread, so a
slow refresh cycle delayed the next animation tick behind it. Fixed — they now run on
independent threads. Also promoted a silently-swallowed hologram render error to a visible
warning.
- Crate rewards/keys with saved item components (custom name, lore, enchantments) could silently
Fixed — crate loading now always happens after the fix that binds the registry access it needs.
- Hologram animations could still burst under load even after the thread split above — the
switching to a schedule that waits from when the previous cycle finished, so it can never
build a backlog to burst through.
- A color-only
{animation:NAME}(a gradient cycling hex stops over the same literal words —
specifically, even with the fixes above. The change-detection compared plain text, which a
color-only change never affects, so it never saw a change to react to. Fixed.
- Minecraft 26.2 · NeoForge 26.2.0.63+**
All notable changes to this branch are documented here, starting from
- v1.0.5** — earlier history (v1.0.4.x and before, including the port's own
## 1.0.5+build.54 — 2026-08-25
### 🐛 Resource Pack Uploads, Login Lockout, and Warp Limits — Three Race-Condition Fixes
- Uploading a resource pack through the web dashboard could silently corrupt the file — the upload parser was decoding the raw zip bytes as text. Fixed with a proper binary-safe parser.
- The dashboard's login lockout (locking an account after repeated failed attempts) could be dodged by firing several login attempts at once — some of the failed-attempt count got lost in the race. Now correctly counted no matter how many attempts land at the same time.
- Creating warps from multiple sources at the same moment could push the total warp count past your configured limit. The limit is now enforced atomically.
## 1.0.5+build.53 — 2026-08-25
### 🐛 Kit Items With Enchantments/Custom Names Were Silently Dropped on Every Boot
- If a kit item had saved enchantments, a custom name, or any other item data, it failed to load every single time the server started (you'd see "Failed to deserialize item entry in kit" in the log) — because kits were being loaded before the game's item systems were fully ready. Kits are now re-loaded once the server has actually finished starting, so this data isn't lost anymore.
## 1.0.5+build.52 — 2026-08-25
### 🐛 /pay Could Lose Money on a Very Unlucky Double Failure
- In the rare case where
/payfailed to credit the receiver AND the automatic refund back to the sender also failed, the sender's money vanished into nowhere. The refund now guarantees it lands back in the sender's account no matter what.
## 1.0.5+build.51 — 2026-08-25
### 🐛 /tpa Timeout Wasn't Thread-Safe
- Internal fix: the background timer that expires a
/tparequest after it times out could run into the same off-main-thread issue as several dashboard fixes below. No visible behavior change — just safer under real player load.
## 1.0.5+build.50 — 2026-08-25
### 🐛 /mail sendall, Config Saves, and Three More Dashboard Endpoints Made Thread-Safe
/mail sendall/sendtempallran on a background thread that could corrupt the shared mailbox if players were sending/reading mail at the same time. It now runs safely on the main thread.- Config files and mail data could be left truncated or corrupted if the server crashed mid-save. Saves are now atomic (write-then-rename) everywhere, matching how moderation data already worked.
- The dashboard's Statistics, Permissions, and Discord integration pages were reading live server state directly from the HTTP request thread instead of the main thread — same bug class as the vanish/jail/ban fixes further down, now fixed here too.
## 1.0.5+build.49 — 2026-08-25
### 🐛 AFK Detection and Discord Role-Sync Messages Made Thread-Safe
- The AFK system's movement-detection timer, and the chat message sent to a player when their Discord roles sync on join, were both touching player state off the main server thread. Fixed — same underlying issue as the other thread-safety fixes in this update.
## 1.0.5+build.48 — 2026-08-25
### 🐛 Fake Tab-List Player Skins, Dashboard Encryption Key Made Safer
- If you use fake/decorative tab-list entries with a custom skin, the skin lookup could send its update off the main server thread. Fixed.
- The dashboard's saved encryption key for stored secrets (like a paired external dashboard's token) could be left corrupted by a crash during first-time key generation. Key writes are now atomic.
## 1.0.5+build.47 — 2026-08-25
### 🐛 Dashboard Language/Translation Reload Made Thread-Safe
- The dashboard's translation-reload endpoint could touch shared chat-translation state off the main thread. Fixed (this endpoint isn't wired up to anything yet, so no live impact — just closed the gap before it is).
## 1.0.5+build.46 — 2026-08-25
### 🐛 ChestShop Buy/Sell Could Lose Payment on a Rejected Transaction
- If a ChestShop payment got rejected mid-transaction (an economy plugin/hook cancelling it), the buyer or seller's money could vanish instead of the trade failing cleanly. Now guaranteed to settle correctly either way — same fix as the Auction House got further down.
## 1.0.5+build.45 — 2026-08-25
### 🐛 Dashboard Restart/Stop and MOTD Broadcast Made Thread-Safe
- The dashboard's server restart/stop buttons, and its MOTD broadcast action, were touching the player list off the main thread. Fixed.
## 1.0.5+build.44 — 2026-08-25
### 🐛 Dashboard Scheduled Tasks (Including Manual Restart) Made Thread-Safe
- Manually running a scheduled task from the dashboard — especially a RESTART-type task — could touch the player list off the main server thread. Its execution history could also get corrupted under concurrent use. Both fixed.
## 1.0.5+build.43 — 2026-08-19
### 🐛 Dashboard Ban/IP-Ban Actions Made Thread-Safe
- Banning or IP-banning a player from the dashboard was mutating live player state directly from the HTTP request thread instead of the main server thread — risking corrupted state under concurrent use. Ban/mute history tracking had the same issue. Both fixed.
## 1.0.5+build.42 — 2026-08-19
### 🐛 Permission Conditions Failing Open, Auction House Payment Loss
- If a permission condition errored while being evaluated, it was granting access instead of denying it — same bug class as the FTB Ranks fix below. Fixed to fail closed.
- Auction house sellers could lose their payment if the economy credit was rejected mid-transaction. Now guaranteed to settle instead of silently dropping the money.
## 1.0.5+build.36 — 2026-08-18
### 🐛 Dashboard Vanish/Jail/Balance Actions Made Thread-Safe
- Toggling vanish, jailing a player, or adjusting a balance from the dashboard was mutating live player/entity state directly from the HTTP request thread instead of the main server thread, risking corrupted entity state under concurrent use. Fixed — the first of several dashboard thread-safety fixes in this update cycle.
## 1.0.5+build.34 — 2026-08-18
### 🐛 Chat Marker Injection, Shop Price Race, Jail Respawn Bug
- Player chat could inject internal rich-text formatting markers to spoof clickable items, links, or mentions — now stripped from all player-submitted chat.
- Web dashboard shop price changes could race a concurrent buy/sell, applying a stale price.
- A player released from jail on respawn could be re-teleported back into the jail cell even after disconnecting mid-respawn.
## 1.0.5+build.33 — 2026-08-18
### 🐛 Home/Warp Cooldown Consumed Even on a Failed Request
- Setting a home or warp that failed validation (bad name, over your limit, etc.) still consumed your cooldown for nothing. Fixed — same fix as
/tpa//paygot.
## 1.0.5+build.32 — 2026-08-18
### 🐛 FTB Ranks Failing Open, /tpa Cooldown Bug
- FTB Ranks permission integration was granting access instead of denying it when a permission lookup errored — a real privilege-escalation risk if you use FTB Ranks.
/tpahad the same cooldown-consumed-on-failure bug as home/warp above.
## 1.0.5+build.31 — 2026-08-18
### 🐛 Discord Mention Sanitization Extended to Mc2Discord and DCIntegration
- The
@everyone/@here/role-ping sanitization on chat relayed to Discord only covered the primary bridge integration. Now also covers Mc2Discord and DCIntegration.
## 1.0.5+build.30 — 2026-08-18
### 🐛 Non-Atomic Storage Writes, Discord Mention Griefing (SDLink)
- The moderation data storage backend (bans, mutes, kicks, warns, notes, jails) wrote directly to its files with no crash protection — a crash mid-write could corrupt or truncate that data. Saves are now atomic, and a corrupted file found on load gets backed up aside instead of silently treated as empty.
- If you use Simple Discord Link, a player could ping
@everyone/@hereor paste a raw Discord mention in bridged chat and have it actually go through to Discord. Fixed with the same sanitization the primary integration already had. - Added an inline note directly on
storage.typeinconfig.jsonexplaining that changing it requires a restart, not just/neoe reload.
## 1.0.5+build.28 — 2026-08-18
### ✨ IP Address Validation on /ipban and /ipmute
/ipban//ipmute(and the dashboard forms for the same) accepted any text as an IP address with zero validation — a typo silently became a junk ban/mute entry. Both now validate the address format before accepting it.
## 1.0.5+build.26 — 2026-08-18
### 🐛 Path Traversal in File Restore, Orphaned Hologram Entity
- Security:** the dashboard's file-restore tool didn't properly check that the requested path stayed inside the intended directory, letting an authenticated admin session potentially read files elsewhere on disk. Fixed.
- Overwriting a hologram by reusing an existing hologram's ID left the old entity orphaned in the world (still visible, no longer manageable) instead of removing it first. Fixed.
## 1.0.5+build.25 — 2026-08-18
### 🐛 Path Traversal in Backup Restore/Delete/Download
- Security:** the server backup system's restore, delete, and download actions didn't validate the backup name the same way creating a backup already did, letting an authenticated admin session potentially read or overwrite arbitrary files on the server. Fixed.
## 1.0.5+build.24 — 2026-08-18
### 🐛 /pay Cooldown-on-Failure, New shop.pricing Config
/payhad the same cooldown-consumed-on-a-failed-request bug as home/warp/tpa above — fixed here specifically for payments (mistyped name, over your transfer limit, etc. no longer cost you a cooldown).- Added a
shopsection toconfig.jsonwith apricingblock — the dynamic shop-pricing engine (supply/demand, time-based discounts, bulk-purchase tiers) was fully built but had no way to actually turn it on or configure it until now.
## 1.0.5+build.23 — 2026-08-18
### ✨ Admin Notice for Unmigrated Legacy Kit/Permission Data
- If you still have real, unmigrated data sitting in
kits.jsonorpermissions.jsonafter your storage backend already imported once, admins now get a one-time in-game notice explaining that editing those files no longer does anything.
## 1.0.5+build.22 — 2026-08-18
### 🐛 kits.json/permissions.json Instructions Were Misleading
- Both files' in-file headers implied you could still hand-edit them after the first server boot. In reality both are one-time import files once your storage backend has data — updated the headers to explain that and point you at the real live-editing path (
/createkit,/permissions, or the dashboard).
## 1.0.5+build.20 — 2026-08-18
### 🐛 Split-Config Mode Could Crash the Server, Misplaced Localization Section
- If you use split-config mode (
config.jsonbroken into per-module files), the server could crash with a stack overflow shortly after being enabled. Fixed. - The
/languagecommand's setting was stored under the wrong config path and silently had no effect no matter what you set it to. Moved to the correct location —/languagenow actually works.
## 1.0.5+build.19 — 2026-08-18
### 🧹 Removed a Dead economy.json Key
autoSaveIntervalineconomy.jsonwas never actually read by anything — removed. If you had it set to something, it was never doing anything.
## 1.0.5+build.18 — 2026-08-18
### 🧹 Removed Several Dead Chat Config Keys
- A handful of chat-notification config keys (sleep/AFK-related settings, some death/join-message toggles) had no effect on server behavior despite being present in
config.json— removed. If you had customized any of these, they were never actually doing anything.
## 1.0.5+build.17 — 2026-08-18
### 🛡️ IP Ban/Mute List Was Leaking Real Addresses to Non-Admins
- Security:** the dashboard's IP ban/mute list-viewing routes were missing an admin check, letting any authenticated dashboard account read real IP addresses, ban reasons, and staff attribution — not just admins. Fixed.
## 1.0.5+build.15 — 2026-08-18
### ✨ Jail Cells Can Now Be Created From the Dashboard
- Previously the only way to set up a jail cell was in-game (
/setjail/jail wand). Now you can create one directly from the dashboard by typing in coordinates — no need to be in-game at all.
## 1.0.5+build.12 — 2026-08-18
### ✨ Active IP Bans/Mutes Now on the Public Lookup Page
- The no-login public moderation lookup page now shows active IP bans/mutes alongside regular bans/mutes, with the address partially redacted for privacy.
## 1.0.5+build.10 — 2026-08-17
### ✨ Report Filing Opened to Everyone
- Filing a moderation report from the dashboard was accidentally admin-gated, same as reviewing reports — but filing a report in-game (
/report) has always been open to every player by default. Fixed to match: filing is open to any dashboard user, reviewing the queue stays staff-only.
## 1.0.5+build.6 — 2026-08-17
### 🐛 Fixed Dashboard Crash on Permanent Bans/Mutes/Jails
- Banning, muting, or jailing a player from the web dashboard *without* specifying a duration (i.e. a permanent action, the most common case) crashed with an error instead of actually applying the punishment. Fixed.
### ✨ File a Moderation Report From the Dashboard
- The dashboard could already view and review reports, but had no way to create one — you had to go in-game and use
/report. Now there's a dashboard route (and internal-dashboard page) for filing one directly.
## 1.0.5+build.1–5 — 2026-08-17
### 🔁 The v1.0.5 Reset
This is the first build of the
1.0.5 release series — earlier v1.0.4.x history is not carried over (see the old 1.0.4.x changelog if you need it). Carried over from the v1.0.4 series and folded into this baseline:- Chat marker injection, shop price race, and jail respawn logout fixes
- FTB Ranks fail-open fix and
/tpa/home/warp cooldown-before-validation fix - Discord mention sanitization extended to the Mc2Discord and DCIntegration bridge adapters
- Web dashboard vanish/jail/balance actions synchronized onto the main server thread
- A narrow disconnect race in the vanish system's player-join handling
### 📋 Per-Category Logging (Re-established for 1.0.5)
- Independent per-category logging (
logging.categoriesinconfig.json) — chat, economy, permissions, teleportation, moderation, auction house, kits, web dashboard, Discord, config, commands, and general subsystems can each be switched on/off separately for normal and debug output, instead of one all-or-nothing flag. - Dozens of previously-silent error paths now log real diagnostic detail when their category's debug logging is enabled.
### 🧩 Platform
- This branch now targets Minecraft 26.2 (up from 26.1.2) — see the
26.1.xbranch if you need to stay on Minecraft 26.1–26.1.2.
- Minecraft 26.1–26.1.2 · NeoForge 26.1.2.76+**
All notable changes to this branch are documented here, starting from
- v1.0.5** — earlier history (v1.0.4.x and before, including the port's own
## 1.0.5+build.54 — 2026-08-25
### 🐛 Resource Pack Uploads, Login Lockout, and Warp Limits — Three Race-Condition Fixes
- Uploading a resource pack through the web dashboard could silently corrupt the file — the upload parser was decoding the raw zip bytes as text. Fixed with a proper binary-safe parser.
- The dashboard's login lockout (locking an account after repeated failed attempts) could be dodged by firing several login attempts at once — some of the failed-attempt count got lost in the race. Now correctly counted no matter how many attempts land at the same time.
- Creating warps from multiple sources at the same moment could push the total warp count past your configured limit. The limit is now enforced atomically.
## 1.0.5+build.53 — 2026-08-25
### 🐛 Kit Items With Enchantments/Custom Names Were Silently Dropped on Every Boot
- If a kit item had saved enchantments, a custom name, or any other item data, it failed to load every single time the server started (you'd see "Failed to deserialize item entry in kit" in the log) — because kits were being loaded before the game's item systems were fully ready. Kits are now re-loaded once the server has actually finished starting, so this data isn't lost anymore.
## 1.0.5+build.52 — 2026-08-25
### 🐛 /pay Could Lose Money on a Very Unlucky Double Failure
- In the rare case where
/payfailed to credit the receiver AND the automatic refund back to the sender also failed, the sender's money vanished into nowhere. The refund now guarantees it lands back in the sender's account no matter what.
## 1.0.5+build.51 — 2026-08-25
### 🐛 /tpa Timeout Wasn't Thread-Safe
- Internal fix: the background timer that expires a
/tparequest after it times out could run into the same off-main-thread issue as several dashboard fixes below. No visible behavior change — just safer under real player load.
## 1.0.5+build.50 — 2026-08-25
### 🐛 /mail sendall, Config Saves, and Three More Dashboard Endpoints Made Thread-Safe
/mail sendall/sendtempallran on a background thread that could corrupt the shared mailbox if players were sending/reading mail at the same time. It now runs safely on the main thread.- Config files and mail data could be left truncated or corrupted if the server crashed mid-save. Saves are now atomic (write-then-rename) everywhere, matching how moderation data already worked.
- The dashboard's Statistics, Permissions, and Discord integration pages were reading live server state directly from the HTTP request thread instead of the main thread — same bug class as the vanish/jail/ban fixes further down, now fixed here too.
## 1.0.5+build.49 — 2026-08-25
### 🐛 AFK Detection and Discord Role-Sync Messages Made Thread-Safe
- The AFK system's movement-detection timer, and the chat message sent to a player when their Discord roles sync on join, were both touching player state off the main server thread. Fixed — same underlying issue as the other thread-safety fixes in this update.
## 1.0.5+build.48 — 2026-08-25
### 🐛 Fake Tab-List Player Skins, Dashboard Encryption Key Made Safer
- If you use fake/decorative tab-list entries with a custom skin, the skin lookup could send its update off the main server thread. Fixed.
- The dashboard's saved encryption key for stored secrets (like a paired external dashboard's token) could be left corrupted by a crash during first-time key generation. Key writes are now atomic.
## 1.0.5+build.47 — 2026-08-25
### 🐛 Dashboard Language/Translation Reload Made Thread-Safe
- The dashboard's translation-reload endpoint could touch shared chat-translation state off the main thread. Fixed (this endpoint isn't wired up to anything yet, so no live impact — just closed the gap before it is).
## 1.0.5+build.46 — 2026-08-25
### 🐛 ChestShop Buy/Sell Could Lose Payment on a Rejected Transaction
- If a ChestShop payment got rejected mid-transaction (an economy plugin/hook cancelling it), the buyer or seller's money could vanish instead of the trade failing cleanly. Now guaranteed to settle correctly either way — same fix as the Auction House got further down.
## 1.0.5+build.45 — 2026-08-25
### 🐛 Dashboard Restart/Stop and MOTD Broadcast Made Thread-Safe
- The dashboard's server restart/stop buttons, and its MOTD broadcast action, were touching the player list off the main thread. Fixed.
## 1.0.5+build.44 — 2026-08-25
### 🐛 Dashboard Scheduled Tasks (Including Manual Restart) Made Thread-Safe
- Manually running a scheduled task from the dashboard — especially a RESTART-type task — could touch the player list off the main server thread. Its execution history could also get corrupted under concurrent use. Both fixed.
## 1.0.5+build.43 — 2026-08-19
### 🐛 Dashboard Ban/IP-Ban Actions Made Thread-Safe
- Banning or IP-banning a player from the dashboard was mutating live player state directly from the HTTP request thread instead of the main server thread — risking corrupted state under concurrent use. Ban/mute history tracking had the same issue. Both fixed.
## 1.0.5+build.42 — 2026-08-19
### 🐛 Permission Conditions Failing Open, Auction House Payment Loss
- If a permission condition errored while being evaluated, it was granting access instead of denying it — same bug class as the FTB Ranks fix below. Fixed to fail closed.
- Auction house sellers could lose their payment if the economy credit was rejected mid-transaction. Now guaranteed to settle instead of silently dropping the money.
## 1.0.5+build.36 — 2026-08-18
### 🐛 Dashboard Vanish/Jail/Balance Actions Made Thread-Safe
- Toggling vanish, jailing a player, or adjusting a balance from the dashboard was mutating live player/entity state directly from the HTTP request thread instead of the main server thread, risking corrupted entity state under concurrent use. Fixed — the first of several dashboard thread-safety fixes in this update cycle.
## 1.0.5+build.34 — 2026-08-18
### 🐛 Chat Marker Injection, Shop Price Race, Jail Respawn Bug
- Player chat could inject internal rich-text formatting markers to spoof clickable items, links, or mentions — now stripped from all player-submitted chat.
- Web dashboard shop price changes could race a concurrent buy/sell, applying a stale price.
- A player released from jail on respawn could be re-teleported back into the jail cell even after disconnecting mid-respawn.
## 1.0.5+build.33 — 2026-08-18
### 🐛 Home/Warp Cooldown Consumed Even on a Failed Request
- Setting a home or warp that failed validation (bad name, over your limit, etc.) still consumed your cooldown for nothing. Fixed — same fix as
/tpa//paygot.
## 1.0.5+build.32 — 2026-08-18
### 🐛 FTB Ranks Failing Open, /tpa Cooldown Bug
- FTB Ranks permission integration was granting access instead of denying it when a permission lookup errored — a real privilege-escalation risk if you use FTB Ranks.
/tpahad the same cooldown-consumed-on-failure bug as home/warp above.
## 1.0.5+build.31 — 2026-08-18
### 🐛 Discord Mention Sanitization Extended to Mc2Discord and DCIntegration
- The
@everyone/@here/role-ping sanitization on chat relayed to Discord only covered the primary bridge integration. Now also covers Mc2Discord and DCIntegration.
## 1.0.5+build.30 — 2026-08-18
### 🐛 Non-Atomic Storage Writes, Discord Mention Griefing (SDLink)
- The moderation data storage backend (bans, mutes, kicks, warns, notes, jails) wrote directly to its files with no crash protection — a crash mid-write could corrupt or truncate that data. Saves are now atomic, and a corrupted file found on load gets backed up aside instead of silently treated as empty.
- If you use Simple Discord Link, a player could ping
@everyone/@hereor paste a raw Discord mention in bridged chat and have it actually go through to Discord. Fixed with the same sanitization the primary integration already had. - Added an inline note directly on
storage.typeinconfig.jsonexplaining that changing it requires a restart, not just/neoe reload.
## 1.0.5+build.28 — 2026-08-18
### ✨ IP Address Validation on /ipban and /ipmute
/ipban//ipmute(and the dashboard forms for the same) accepted any text as an IP address with zero validation — a typo silently became a junk ban/mute entry. Both now validate the address format before accepting it.
## 1.0.5+build.26 — 2026-08-18
### 🐛 Path Traversal in File Restore, Orphaned Hologram Entity
- Security:** the dashboard's file-restore tool didn't properly check that the requested path stayed inside the intended directory, letting an authenticated admin session potentially read files elsewhere on disk. Fixed.
- Overwriting a hologram by reusing an existing hologram's ID left the old entity orphaned in the world (still visible, no longer manageable) instead of removing it first. Fixed.
## 1.0.5+build.25 — 2026-08-18
### 🐛 Path Traversal in Backup Restore/Delete/Download
- Security:** the server backup system's restore, delete, and download actions didn't validate the backup name the same way creating a backup already did, letting an authenticated admin session potentially read or overwrite arbitrary files on the server. Fixed.
## 1.0.5+build.24 — 2026-08-18
### 🐛 /pay Cooldown-on-Failure, New shop.pricing Config
/payhad the same cooldown-consumed-on-a-failed-request bug as home/warp/tpa above — fixed here specifically for payments (mistyped name, over your transfer limit, etc. no longer cost you a cooldown).- Added a
shopsection toconfig.jsonwith apricingblock — the dynamic shop-pricing engine (supply/demand, time-based discounts, bulk-purchase tiers) was fully built but had no way to actually turn it on or configure it until now.
## 1.0.5+build.23 — 2026-08-18
### ✨ Admin Notice for Unmigrated Legacy Kit/Permission Data
- If you still have real, unmigrated data sitting in
kits.jsonorpermissions.jsonafter your storage backend already imported once, admins now get a one-time in-game notice explaining that editing those files no longer does anything.
## 1.0.5+build.22 — 2026-08-18
### 🐛 kits.json/permissions.json Instructions Were Misleading
- Both files' in-file headers implied you could still hand-edit them after the first server boot. In reality both are one-time import files once your storage backend has data — updated the headers to explain that and point you at the real live-editing path (
/createkit,/permissions, or the dashboard).
## 1.0.5+build.20 — 2026-08-18
### 🐛 Split-Config Mode Could Crash the Server, Misplaced Localization Section
- If you use split-config mode (
config.jsonbroken into per-module files), the server could crash with a stack overflow shortly after being enabled. Fixed. - The
/languagecommand's setting was stored under the wrong config path and silently had no effect no matter what you set it to. Moved to the correct location —/languagenow actually works.
## 1.0.5+build.19 — 2026-08-18
### 🧹 Removed a Dead economy.json Key
autoSaveIntervalineconomy.jsonwas never actually read by anything — removed. If you had it set to something, it was never doing anything.
## 1.0.5+build.18 — 2026-08-18
### 🧹 Removed Several Dead Chat Config Keys
- A handful of chat-notification config keys (sleep/AFK-related settings, some death/join-message toggles) had no effect on server behavior despite being present in
config.json— removed. If you had customized any of these, they were never actually doing anything.
## 1.0.5+build.17 — 2026-08-18
### 🛡️ IP Ban/Mute List Was Leaking Real Addresses to Non-Admins
- Security:** the dashboard's IP ban/mute list-viewing routes were missing an admin check, letting any authenticated dashboard account read real IP addresses, ban reasons, and staff attribution — not just admins. Fixed.
## 1.0.5+build.15 — 2026-08-18
### ✨ Jail Cells Can Now Be Created From the Dashboard
- Previously the only way to set up a jail cell was in-game (
/setjail/jail wand). Now you can create one directly from the dashboard by typing in coordinates — no need to be in-game at all.
## 1.0.5+build.12 — 2026-08-18
### ✨ Active IP Bans/Mutes Now on the Public Lookup Page
- The no-login public moderation lookup page now shows active IP bans/mutes alongside regular bans/mutes, with the address partially redacted for privacy.
## 1.0.5+build.10 — 2026-08-17
### ✨ Report Filing Opened to Everyone
- Filing a moderation report from the dashboard was accidentally admin-gated, same as reviewing reports — but filing a report in-game (
/report) has always been open to every player by default. Fixed to match: filing is open to any dashboard user, reviewing the queue stays staff-only.
## 1.0.5+build.6 — 2026-08-17
### 🐛 Fixed Dashboard Crash on Permanent Bans/Mutes/Jails
- Banning, muting, or jailing a player from the web dashboard *without* specifying a duration (i.e. a permanent action, the most common case) crashed with an error instead of actually applying the punishment. Fixed.
### ✨ File a Moderation Report From the Dashboard
- The dashboard could already view and review reports, but had no way to create one — you had to go in-game and use
/report. Now there's a dashboard route (and internal-dashboard page) for filing one directly.
## 1.0.5+build.1–5 — 2026-08-17
### 🔁 The v1.0.5 Reset
This is the first build of the
1.0.5 release series — earlier v1.0.4.x history is not carried over (see the old 1.0.4.x changelog if you need it). Carried over from the v1.0.4 series and folded into this baseline:- Chat marker injection, shop price race, and jail respawn logout fixes
- FTB Ranks fail-open fix and
/tpa/home/warp cooldown-before-validation fix - Discord mention sanitization extended to the Mc2Discord and DCIntegration bridge adapters
- Web dashboard vanish/jail/balance actions synchronized onto the main server thread
- A narrow disconnect race in the vanish system's player-join handling
### 📋 Per-Category Logging (Re-established for 1.0.5)
- Independent per-category logging (
logging.categoriesinconfig.json) — chat, economy, permissions, teleportation, moderation, auction house, kits, web dashboard, Discord, config, commands, and general subsystems can each be switched on/off separately for normal and debug output, instead of one all-or-nothing flag. - Dozens of previously-silent error paths now log real diagnostic detail when their category's debug logging is enabled.
### 🧩 Platform
- A separate
26.2.xbranch now provides a Minecraft 26.2 build for servers that have updated past 26.1.2 — this branch remains pinned to Minecraft 26.1–26.1.2.
Starting from **v1.0.5** — earlier history (v1.0.4.x and before) is not carried over.
- Minecraft 1.21.1 – 1.21.11 · NeoForge 21.1.179+**
## 1.0.5+build.54 — 2026-08-25
### 🐛 Resource Pack Uploads, Login Lockout, and Warp Limits — Three Race-Condition Fixes
- Uploading a resource pack through the web dashboard could silently corrupt the file — the upload parser was decoding the raw zip bytes as text. Fixed with a proper binary-safe parser.
- The dashboard's login lockout (locking an account after repeated failed attempts) could be dodged by firing several login attempts at once — some of the failed-attempt count got lost in the race. Now correctly counted no matter how many attempts land at the same time.
- Creating warps from multiple sources at the same moment could push the total warp count past your configured limit. The limit is now enforced atomically.
## 1.0.5+build.53 — 2026-08-25
### 🐛 Kit Items With Enchantments/Custom Names Were Silently Dropped on Every Boot
- If a kit item had saved enchantments, a custom name, or any other item data, it failed to load every single time the server started (you'd see "Failed to deserialize item entry in kit" in the log) — because kits were being loaded before the game's item systems were fully ready. Kits are now re-loaded once the server has actually finished starting, so this data isn't lost anymore.
## 1.0.5+build.52 — 2026-08-25
### 🐛 /pay Could Lose Money on a Very Unlucky Double Failure
- In the rare case where
/payfailed to credit the receiver AND the automatic refund back to the sender also failed, the sender's money vanished into nowhere. The refund now guarantees it lands back in the sender's account no matter what.
## 1.0.5+build.51 — 2026-08-25
### 🐛 /tpa Timeout Wasn't Thread-Safe
- Internal fix: the background timer that expires a
/tparequest after it times out could run into the same off-main-thread issue as several dashboard fixes below. No visible behavior change — just safer under real player load.
## 1.0.5+build.50 — 2026-08-25
### 🐛 /mail sendall, Config Saves, and Three More Dashboard Endpoints Made Thread-Safe
/mail sendall/sendtempallran on a background thread that could corrupt the shared mailbox if players were sending/reading mail at the same time. It now runs safely on the main thread.- Config files and mail data could be left truncated or corrupted if the server crashed mid-save. Saves are now atomic (write-then-rename) everywhere, matching how moderation data already worked.
- The dashboard's Statistics, Permissions, and Discord integration pages were reading live server state directly from the HTTP request thread instead of the main thread — same bug class as the vanish/jail/ban fixes further down, now fixed here too.
## 1.0.5+build.49 — 2026-08-25
### 🐛 AFK Detection and Discord Role-Sync Messages Made Thread-Safe
- The AFK system's movement-detection timer, and the chat message sent to a player when their Discord roles sync on join, were both touching player state off the main server thread. Fixed — same underlying issue as the other thread-safety fixes in this update.
## 1.0.5+build.48 — 2026-08-25
### 🐛 Fake Tab-List Player Skins, Dashboard Encryption Key Made Safer
- If you use fake/decorative tab-list entries with a custom skin, the skin lookup could send its update off the main server thread. Fixed.
- The dashboard's saved encryption key for stored secrets (like a paired external dashboard's token) could be left corrupted by a crash during first-time key generation. Key writes are now atomic.
## 1.0.5+build.47 — 2026-08-25
### 🐛 Dashboard Language/Translation Reload Made Thread-Safe
- The dashboard's translation-reload endpoint could touch shared chat-translation state off the main thread. Fixed (this endpoint isn't wired up to anything yet, so no live impact — just closed the gap before it is).
## 1.0.5+build.46 — 2026-08-25
### 🐛 ChestShop Buy/Sell Could Lose Payment on a Rejected Transaction
- If a ChestShop payment got rejected mid-transaction (an economy plugin/hook cancelling it), the buyer or seller's money could vanish instead of the trade failing cleanly. Now guaranteed to settle correctly either way — same fix as the Auction House got further down.
## 1.0.5+build.45 — 2026-08-25
### 🐛 Dashboard Restart/Stop and MOTD Broadcast Made Thread-Safe
- The dashboard's server restart/stop buttons, and its MOTD broadcast action, were touching the player list off the main thread. Fixed.
## 1.0.5+build.44 — 2026-08-25
### 🐛 Dashboard Scheduled Tasks (Including Manual Restart) Made Thread-Safe
- Manually running a scheduled task from the dashboard — especially a RESTART-type task — could touch the player list off the main server thread. Its execution history could also get corrupted under concurrent use. Both fixed.
## 1.0.5+build.43 — 2026-08-19
### 🐛 Dashboard Ban/IP-Ban Actions Made Thread-Safe
- Banning or IP-banning a player from the dashboard was mutating live player state directly from the HTTP request thread instead of the main server thread — risking corrupted state under concurrent use. Ban/mute history tracking had the same issue. Both fixed.
## 1.0.5+build.42 — 2026-08-19
### 🐛 Permission Conditions Failing Open, Auction House Payment Loss
- If a permission condition errored while being evaluated, it was granting access instead of denying it — same bug class as the FTB Ranks fix below. Fixed to fail closed.
- Auction house sellers could lose their payment if the economy credit was rejected mid-transaction. Now guaranteed to settle instead of silently dropping the money.
## 1.0.5+build.36 — 2026-08-18
### 🐛 Dashboard Vanish/Jail/Balance Actions Made Thread-Safe
- Toggling vanish, jailing a player, or adjusting a balance from the dashboard was mutating live player/entity state directly from the HTTP request thread instead of the main server thread, risking corrupted entity state under concurrent use. Fixed — the first of several dashboard thread-safety fixes in this update cycle.
## 1.0.5+build.34 — 2026-08-18
### 🐛 Chat Marker Injection, Shop Price Race, Jail Respawn Bug
- Player chat could inject internal rich-text formatting markers to spoof clickable items, links, or mentions — now stripped from all player-submitted chat.
- Web dashboard shop price changes could race a concurrent buy/sell, applying a stale price.
- A player released from jail on respawn could be re-teleported back into the jail cell even after disconnecting mid-respawn.
## 1.0.5+build.33 — 2026-08-18
### 🐛 Home/Warp Cooldown Consumed Even on a Failed Request
- Setting a home or warp that failed validation (bad name, over your limit, etc.) still consumed your cooldown for nothing. Fixed — same fix as
/tpa//paygot.
## 1.0.5+build.32 — 2026-08-18
### 🐛 FTB Ranks Failing Open, /tpa Cooldown Bug
- FTB Ranks permission integration was granting access instead of denying it when a permission lookup errored — a real privilege-escalation risk if you use FTB Ranks.
/tpahad the same cooldown-consumed-on-failure bug as home/warp above.
## 1.0.5+build.31 — 2026-08-18
### 🐛 Discord Mention Sanitization Extended to Mc2Discord and DCIntegration
- The
@everyone/@here/role-ping sanitization on chat relayed to Discord only covered the primary bridge integration. Now also covers Mc2Discord and DCIntegration.
## 1.0.5+build.30 — 2026-08-18
### 🐛 Non-Atomic Storage Writes, Discord Mention Griefing (SDLink)
- The moderation data storage backend (bans, mutes, kicks, warns, notes, jails) wrote directly to its files with no crash protection — a crash mid-write could corrupt or truncate that data. Saves are now atomic, and a corrupted file found on load gets backed up aside instead of silently treated as empty.
- If you use Simple Discord Link, a player could ping
@everyone/@hereor paste a raw Discord mention in bridged chat and have it actually go through to Discord. Fixed with the same sanitization the primary integration already had. - Added an inline note directly on
storage.typeinconfig.jsonexplaining that changing it requires a restart, not just/neoe reload.
## 1.0.5+build.28 — 2026-08-18
### ✨ IP Address Validation on /ipban and /ipmute
/ipban//ipmute(and the dashboard forms for the same) accepted any text as an IP address with zero validation — a typo silently became a junk ban/mute entry. Both now validate the address format before accepting it.
## 1.0.5+build.26 — 2026-08-18
### 🐛 Path Traversal in File Restore, Orphaned Hologram Entity
- Security:** the dashboard's file-restore tool didn't properly check that the requested path stayed inside the intended directory, letting an authenticated admin session potentially read files elsewhere on disk. Fixed.
- Overwriting a hologram by reusing an existing hologram's ID left the old entity orphaned in the world (still visible, no longer manageable) instead of removing it first. Fixed.
## 1.0.5+build.25 — 2026-08-18
### 🐛 Path Traversal in Backup Restore/Delete/Download
- Security:** the server backup system's restore, delete, and download actions didn't validate the backup name the same way creating a backup already did, letting an authenticated admin session potentially read or overwrite arbitrary files on the server. Fixed.
## 1.0.5+build.24 — 2026-08-18
### 🐛 /pay Cooldown-on-Failure, New shop.pricing Config
/payhad the same cooldown-consumed-on-a-failed-request bug as home/warp/tpa above — fixed here specifically for payments (mistyped name, over your transfer limit, etc. no longer cost you a cooldown).- Added a
shopsection toconfig.jsonwith apricingblock — the dynamic shop-pricing engine (supply/demand, time-based discounts, bulk-purchase tiers) was fully built but had no way to actually turn it on or configure it until now.
## 1.0.5+build.23 — 2026-08-18
### ✨ Admin Notice for Unmigrated Legacy Kit/Permission Data
- If you still have real, unmigrated data sitting in
kits.jsonorpermissions.jsonafter your storage backend already imported once, admins now get a one-time in-game notice explaining that editing those files no longer does anything.
## 1.0.5+build.22 — 2026-08-18
### 🐛 kits.json/permissions.json Instructions Were Misleading
- Both files' in-file headers implied you could still hand-edit them after the first server boot. In reality both are one-time import files once your storage backend has data — updated the headers to explain that and point you at the real live-editing path (
/createkit,/permissions, or the dashboard).
## 1.0.5+build.20 — 2026-08-18
### 🐛 Split-Config Mode Could Crash the Server, Misplaced Localization Section
- If you use split-config mode (
config.jsonbroken into per-module files), the server could crash with a stack overflow shortly after being enabled. Fixed. - The
/languagecommand's setting was stored under the wrong config path and silently had no effect no matter what you set it to. Moved to the correct location —/languagenow actually works.
## 1.0.5+build.19 — 2026-08-18
### 🧹 Removed a Dead economy.json Key
autoSaveIntervalineconomy.jsonwas never actually read by anything — removed. If you had it set to something, it was never doing anything.
## 1.0.5+build.18 — 2026-08-18
### 🧹 Removed Several Dead Chat Config Keys
- A handful of chat-notification config keys (sleep/AFK-related settings, some death/join-message toggles) had no effect on server behavior despite being present in
config.json— removed. If you had customized any of these, they were never actually doing anything.
## 1.0.5+build.17 — 2026-08-18
### 🛡️ IP Ban/Mute List Was Leaking Real Addresses to Non-Admins
- Security:** the dashboard's IP ban/mute list-viewing routes were missing an admin check, letting any authenticated dashboard account read real IP addresses, ban reasons, and staff attribution — not just admins. Fixed.
## 1.0.5+build.15 — 2026-08-18
### ✨ Jail Cells Can Now Be Created From the Dashboard
- Previously the only way to set up a jail cell was in-game (
/setjail/jail wand). Now you can create one directly from the dashboard by typing in coordinates — no need to be in-game at all.
## 1.0.5+build.12 — 2026-08-18
### ✨ Active IP Bans/Mutes Now on the Public Lookup Page
- The no-login public moderation lookup page now shows active IP bans/mutes alongside regular bans/mutes, with the address partially redacted for privacy.
## 1.0.5+build.10 — 2026-08-17
### ✨ Report Filing Opened to Everyone
- Filing a moderation report from the dashboard was accidentally admin-gated, same as reviewing reports — but filing a report in-game (
/report) has always been open to every player by default. Fixed to match: filing is open to any dashboard user, reviewing the queue stays staff-only.
## 1.0.5+build.6 — 2026-08-17
### 🐛 Fixed Dashboard Crash on Permanent Bans/Mutes/Jails
- Banning, muting, or jailing a player from the web dashboard *without* specifying a duration (i.e. a permanent action, the most common case) crashed with an error instead of actually applying the punishment. Fixed.
### ✨ File a Moderation Report From the Dashboard
- The dashboard could already view and review reports, but had no way to create one — you had to go in-game and use
/report. Now there's a dashboard route (and internal-dashboard page) for filing one directly.
## 1.0.5+build.1–5 — 2026-08-17
### 🔁 The v1.0.5 Reset
This is the first build of the
1.0.5 release series — earlier v1.0.4.x history is not carried over (see the old 1.0.4.x changelog if you need it). Carried over from the v1.0.4 series and folded into this baseline:- Chat marker injection, shop price race, and jail respawn logout fixes
- FTB Ranks fail-open fix and
/tpa/home/warp cooldown-before-validation fix - Discord mention sanitization extended to the Mc2Discord and DCIntegration bridge adapters
- Web dashboard vanish/jail/balance actions synchronized onto the main server thread
- A narrow disconnect race in the vanish system's player-join handling
### 📋 Per-Category Logging (Re-established for 1.0.5)
- Independent per-category logging (
logging.categoriesinconfig.json) — chat, economy, permissions, teleportation, moderation, auction house, kits, web dashboard, Discord, config, commands, and general subsystems can each be switched on/off separately for normal and debug output, instead of one all-or-nothing flag. - Dozens of previously-silent error paths now log real diagnostic detail when their category's debug logging is enabled.
### 🧩 Platform
- Added a Minecraft 26.2 build (
26.2.xbranch, NeoForge 26.2.0.63+), alongside the existing pinned Minecraft 26.1–26.1.2 build (26.1.x).
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:
Controlled by
logging.categories.commands.normal (on by default) — turn it off there if you'drather not see it.
## 1.0.4+build.60 — 2026-08-17
### 🐛 Clickable Player Names Were Ignoring Your Chat Colors
- If you had
chat.clickablePlayerNamesenabled (the default) and put a color code before
{neoessentials_username}/{neoessentials_displayname} in your chat format, the name itselfstill 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
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 inparticular) 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
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
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
- Lots of new detailed logging added across the whole mod so problems are much easier to
debug switch and checklogs/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 configstoo (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
## 1.0.4+build.42 — 2026-08-04
### 🐛 Nicknames Now Show Up in Chat by Default
- Fixed the default chat format so
/nickand/setnicknicknames actually show up in your
/setnick was working the whole time — the defaultchat 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
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
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
teamchat channel wasn't working for you even with FTB Teams installed, this update
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
## 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
## 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,
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
webDashboard.customProfileUrlTemplate tosomething 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
teamchat channel — if you're playing a modpack with FTB Teams, chatting in it only
- If FTB Teams isn't installed, or you're not on a team yet, you'll get a clear message telling
## 1.0.4+build.32 — 2026-07-28
### ✨ Give a Chat Channel a Styled Name, Plus a Reliability Fix
- New
displayNameoption per chat channel — lets you show a colored/custom name (e.g.
- Fixed a bug where a broken chat channel setting could silently stop OTHER channels' commands
## 1.0.4+build.30 — 2026-07-28
### ✨ Customize the Discord Chat Embed Yourself
- New
discordEmbedTemplateconfig option lets you customize the look of the Discord embed for
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/
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
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
- DCIntegration now also supports sending a specific NeoEssentials chat channel (like staff) to
- Neither of these was tested against a live Mc2Discord/DCIntegration setup (unlike the earlier
## 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
- Fixed: a private staff Discord channel you configured could still leak messages to your
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
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
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
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.publicUrlconfig to your
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
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
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
## 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
## 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
## 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
/pwarp warps (and clean one up if needed) instead of only the shared serverwarps.
## 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)
and chat specifically never reset it at all. Both are now fixed.
- Small
/helpfix:/tpcancelnow 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
/apikey actually needsneoessentials.dashboard.apikeys, most moderation/teleport/economy/itemcommands use a namespaced node). Fixed —
/help now shows and checks thereal 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,
- Any dashboard account can now link a Minecraft account itself via a short
/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
page, and browser tab favicon.
## 1.0.4+build.13 — 2026-07-22
### ✨ Dashboard Security: Copyable Keys, Encrypted Tokens, Permission-Driven Role Sync
/apikey createtokens 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 migrateautomatically, no action needed).
- New opt-in setting
webDashboard.roleSync: automatically grants/revokes a
node or group — no more manually running
/apikey create every time anadmin'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,
- Adjusting a balance now shows a live lookup preview (avatar, online
- Fixed: the distribution chart's data was silently failing to compute for
## 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
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
## 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
(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,
- Fixed a bug where several player-info API endpoints didn't work for offline
## 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-Dashboardapp? Nothing changes
"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.modeto
"internal" (or "both") in config.json and the mod now serves a real, workingdashboard straight from its own port — no separate app to install.
- This first update covers logging in, the server overview, and the players page
- If you're already using the separate
NeoEssentials-Dashboardapp, nothing changes
## 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
- If something actually goes wrong during startup (a system fails to load, or the permission
clickable in-game message pointing to those same three places.
- 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
## 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:
Controlled by
logging.categories.commands.normal (on by default) — turn it off there if you'drather 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.clickablePlayerNamesenabled (the default) and put a color code before
{neoessentials_username}/{neoessentials_displayname} in your chat format, the name itselfstill 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
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 inparticular) 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
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
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
- Lots of new detailed logging added across the whole mod so problems are much easier to
debug switch and checklogs/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 configstoo (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
## 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
/nickand/setnicknicknames actually show up in your
/setnick was working the whole time — the defaultchat 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
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
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
teamchat channel wasn't working for you even with FTB Teams installed, this update
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
## 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
## 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,
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
webDashboard.customProfileUrlTemplate tosomething 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
teamchat channel — if you're playing a modpack with FTB Teams, chatting in it only
- If FTB Teams isn't installed, or you're not on a team yet, you'll get a clear message telling
## 1.0.4-mc26.1.2+build.32 — 2026-07-28
### ✨ Give a Chat Channel a Styled Name, Plus a Reliability Fix
- New
displayNameoption per chat channel — lets you show a colored/custom name (e.g.
- Fixed a bug where a broken chat channel setting could silently stop OTHER channels' commands
## 1.0.4-mc26.1.2+build.30 — 2026-07-28
### ✨ Customize the Discord Chat Embed Yourself
- New
discordEmbedTemplateconfig option lets you customize the look of the Discord embed for
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/
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
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
- DCIntegration now also supports sending a specific NeoEssentials chat channel (like staff) to
- Neither of these was tested against a live Mc2Discord/DCIntegration setup (unlike the earlier
## 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
- Fixed: a private staff Discord channel you configured could still leak messages to your
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
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
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
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.publicUrlconfig to your
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
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
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
## 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
## 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
## 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
/pwarp warps (and clean one up if needed) instead of only the shared serverwarps.
## 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)
and chat specifically never reset it at all. Both are now fixed.
- Small
/helpfix:/tpcancelnow 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
/apikey actually needsneoessentials.dashboard.apikeys, most moderation/teleport/economy/itemcommands use a namespaced node). Fixed —
/help now shows and checks thereal 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,
- Any dashboard account can now link a Minecraft account itself via a short
/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
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 createtokens 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 migrateautomatically, no action needed).
- New opt-in setting
webDashboard.roleSync: automatically grants/revokes a
node or group — no more manually running
/apikey create every time anadmin'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,
- Adjusting a balance now shows a live lookup preview (avatar, online
- Fixed: the distribution chart's data was silently failing to compute for
## 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
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
## 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
(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,
- Fixed a bug where several player-info API endpoints didn't work for offline
## 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-Dashboardapp? Nothing changes
"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.modeto
"internal" (or "both") in config.json and the mod now serves a real, workingdashboard straight from its own port — no separate app to install.
- This first update covers logging in, the server overview, and the players page
- If you're already using the separate
NeoEssentials-Dashboardapp, nothing changes
## 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
- If something actually goes wrong during startup (a system fails to load, or the permission
clickable in-game message pointing to those same three places.
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
- Fixed hostile mobs still targeting and attacking vanished players — they're now ignored
- Vanished players can no longer hurt other players, interact with anything, or break/place
(
neoessentials.vanish.hurt/.interact/.build, or the neoessentials.vanish.* wildcardfor 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 eachother 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 handsometimes showing "minecraft:air" in the sale message and overcharging
- Server admins (OPs) and permission groups with a broad wildcard permission no longer
those now have to be granted on purpose. (Configurable if you actually want the old
behavior back.)
- Typing
/sellwith 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
- Fixed:** the
commandslist on a kit (run when it's claimed, e.g. a welcome message)
- 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](https://www.curseforge.com/minecraft/mc-mods/sg-economy-api)
economy.useExternalEconomy: true in config.json if you'd rather players' balances livein that mod instead. Off by default.
- The mod's internal economy/permission interop system (used for advanced mod-to-mod
developers.
## 1.0.3+build.22 — 2026-07-18
### 🧹 Dashboard Command Cleanup
- Fixed
/dashboard pairnot being able to accept a server URL at all — it now works
/dashboard pair "http://host:port" <code>).- Removed
/dashboard update/check/force— leftovers from an old bundled dashboard UI
## 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 setuppage). Both sides connect to each other automatically — no more manually copying keys
between two config files.
/dashboard unpairdisconnects 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
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
/apikey create <label>.- Security fix:** MOTD, rules, shops, holograms, and warps could previously be edited by
requires an admin-level account; viewing them still doesn't.
- Dashboard user accounts can now sync automatically between the mod and an external
## 1.0.3+build.18 — 2026-07-17
### 🐛 Bans and Kicks Weren't Actually Being Tracked
- Fixed:**
/banand/kick(and related commands) were silently being intercepted by
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
- Fixed the dashboard's Discord "send test message" button, which previously always
- 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:
/baltopoccasionally showing stale balances,/setworthrejecting some
/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
/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
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
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'smodules/commandssections
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
- Fixed:**
/dashboardand/dashboardregisterwere completely non-functional commands
- Added a public, no-login player moderation lookup page/API for transparency, similar to
## 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
/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
- All existing data imports automatically and losslessly the first time you switch
- Fixed a bug where
/warp's per-player warps were read/written from a hard-coded
## 1.0.3+build.9 — 2026-07-12
### ✨ Pluggable Storage Backends (JSON / YAML / SQLite / MySQL)
- New
storagesection inconfig.jsonlets you pick JSON (default), YAML,
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,
and losslessly the first time you switch backends.
- Economy, homes, warps, kits, permissions, and the rest of the mod's data
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
/ban enforced one, the dashboard wrote to the other, andthey 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
- 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 staffare 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
## 1.0.3+build.7 — 2026-07-11
### 🐛 Bug Fixes
- Dashboard account login history reset on every restart:** last-login time,
in memory but never actually saved to
dashboard_users.json — a serverrestart silently wiped all of it. Now persisted and restored correctly.
- Locale-dependent number formatting corrupted dashboard API data:** TPS,
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
whenever the caller sent an empty JSON array
[] instead of an empty object{} for a parameterless action (which is how PHP/Laravel serializes an emptyparameter 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
playerFormatspacing had no effect:** editingplayerFormatin
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, whichthey 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
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
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,
recognizable and easier on the eyes.
- NPC Shops:** Selling now actually works (previously configuring a sell price did
(
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. voiddamage) 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.- 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
## 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
- Fixed hostile mobs still targeting and attacking vanished players — they're now ignored
- Vanished players can no longer hurt other players, interact with anything, or break/place
(
neoessentials.vanish.hurt/.interact/.build, or the neoessentials.vanish.* wildcardfor 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 eachother 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 handsometimes showing "minecraft:air" in the sale message and overcharging
- Server admins (OPs) and permission groups with a broad wildcard permission no longer
those now have to be granted on purpose. (Configurable if you actually want the old
behavior back.)
- Typing
/sellwith 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
- Fixed:** the
commandslist on a kit (run when it's claimed, e.g. a welcome message)
- 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](https://www.curseforge.com/minecraft/mc-mods/sg-economy-api)
economy.useExternalEconomy: true in config.json if you'd rather players' balances livein that mod instead. Off by default.
- The mod's internal economy/permission interop system (used for advanced mod-to-mod
developers.
## 1.0.3-mc26.1.2+build.22 — 2026-07-18
### 🧹 Dashboard Command Cleanup
- Fixed
/dashboard pairnot being able to accept a server URL at all — it now works
/dashboard pair "http://host:port" <code>).- Removed
/dashboard update/check/force— leftovers from an old bundled dashboard UI
## 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 setuppage). Both sides connect to each other automatically — no more manually copying keys
between two config files.
/dashboard unpairdisconnects 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
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
/apikey create <label>.- Security fix:** MOTD, rules, shops, holograms, and warps could previously be edited by
requires an admin-level account; viewing them still doesn't.
- Dashboard user accounts can now sync automatically between the mod and an external
## 1.0.3-mc26.1.2+build.18 — 2026-07-17
### 🐛 Bans and Kicks Weren't Actually Being Tracked
- Fixed:**
/banand/kick(and related commands) were silently being intercepted by
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
- Fixed the dashboard's Discord "send test message" button, which previously always
- 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:
/baltopoccasionally showing stale balances,/setworthrejecting some
/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
/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
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
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'smodules/commandssections
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
- Fixed:**
/dashboardand/dashboardregisterwere completely non-functional commands
- Added a public, no-login player moderation lookup page/API for transparency, similar to
## 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
/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
- All existing data imports automatically and losslessly the first time you switch
- Fixed a bug where
/warp's per-player warps were read/written from a hard-coded
## 1.0.3-mc26.1.2+build.9 — 2026-07-12
### ✨ Pluggable Storage Backends (JSON / YAML / SQLite / MySQL)
- New
storagesection inconfig.jsonlets you pick JSON (default), YAML,
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,
and losslessly the first time you switch backends.
- Economy, homes, warps, kits, permissions, and the rest of the mod's data
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
/ban enforced one, the dashboard wrote to the other, andthey 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
- 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 staffare 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
## 1.0.3-mc26.1.2+build.7 — 2026-07-11
### 🐛 Bug Fixes
- Tablist
playerFormatspacing had no effect:** editingplayerFormatin
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, whichthey 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
inventory.
- ChestShop admin shop holograms:**
/chestshop hologram enable|disable|move
neoessentials.shop.create.admin.### ✨ Improvements
- Command feedback messages** now show a small
[NE]tag and use softer,
- NPC Shops:** Selling now actually works (previously only buying was
/npcshop respawn <shopId> to re-summon a lost shop NPC without losing itslistings.
- 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
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
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,
recognizable and easier on the eyes.
- NPC Shops:** Selling now actually works (previously configuring a sell price did
(
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. voiddamage) 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
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.
<player>$ to 1000.0" instead of "Paid 1000.00$ to <player>"), plus adecimal-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
/eco take also never notified the target player that moneywas 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 fixedswapped/missing arguments in several moderation messages, and a duplicate-broadcast
bug where staff saw every moderation action twice.
/jailwas completely broken** — every attempt threw an internal error before
null being passed where it wasn't allowed. Fixed.- Tablist:** fixed prefix/suffix silently reverting to blank after the first
### ✨ Features
- Added cuboid/sphere jail regions via a configurable jail wand or WorldEdit
- 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
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
- Fixed a kit permanent-lockout bug, a double-claim race condition, and item data
- 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
- Replaced unsalted password hashing with salted PBKDF2 (120k iterations); the
one.
## 1.0.2.6+build.~330 — 2026-07-04
### ✨ Features
- Added tablist short-tokens/animations usable directly in chat, and
#-prefixed
- ChestShop items now preserve full item data (enchantments, custom names, modded
- Permission group prefix/suffix now render as rich text instead of raw color codes.
### 🐛 Bug Fixes
- Fixed
/flyspeednot 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
## 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
## 1.0.2.6+build.~225 — 2026-07-01
### ✨ Features
- Added
localization.preserveCustomTranslationsconfig option to protect
- 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
ChestMenu, which allowed items to befreely dragged out — duplicating them while the originals stayed in the target's
inventory. Fixed by switching to a custom menu with **locked slots** (
mayPickup →false, mayPlace → false) so the snapshot is purely display-only.- Edit mode (
/invseeedit,/ecedit):** The editable inventory menu now also
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.jsonare
ShopHologramManager.cleanOrphanedShopHolograms() routine, whichruns 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,&#RRGGBBhex,<gradient:…>,<rainbow>, etc.frameDuration— milliseconds per frame (minimum 50 ms)
- Example** — the
Rainbowanimation from the bundled default config:
json
{ "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.asList → List.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.ProxyIntegration** — Collections.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.
PermissionScanner** — List.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 source → ignoredSource; @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.TaskManager** — addFirst() / 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 thread** — server.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 path** — balances_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 removed** — sendTpaRequest() 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 bans** —
cleanupExpiredTempBans() 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 removedResponsive 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 dashboardDashboard 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, backgroundColorArgbFrame 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-pasteNew DiscordEndpoint routes: auth/start, auth/callback, link, unlink, linkedNew **Discord dashboard page** ( discord.html) for managing linked accountsdiscord_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 flowDashboardRegistrationManager — 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, centerOptional 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: `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 updated** —
neoessentials.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 used** —
FTBRanksAPI.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 text** — java.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 column** — updatePlayerTeam() 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 fix** — applyPlaceholders() 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 codesAnimated header/footer** — header/footer in tablist.json accept arrays; each refresh tick advances one frame for smooth animationsPer-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 overridesPer-group runtime commands** — /tablist group <group> header|footer|resetExtended 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 headersVanish + AFK integration** — vanished players excluded from {online} for non-staff; configurable AFK suffix appended to player rowstablist.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 messagesHuman-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 line** — ChatHandler 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 ComponentsAdded username_hover / displayname_hover as plain-text fallback aliases in DefaultPlaceholderExpansionRemoved 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 placeholdersNeoEssentialsAPI.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 registeredAPISystem.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 applied** — ChatHandler 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 Aliases** —
config/neoessentials/permission_aliases.json maps legacy or short node names to canonical NeoEssentials nodes. Resolved transparently in every permission check.
- Mod Interop API** —
NeoEssentialsAPI.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).Permissions** — priority 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.Docs** — PermissionSystem.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-clickVault API (Economy, Chat, Permission providers) Dedicated tablist.json config file with group colours, placeholders, and animation support50+ 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 exclusionsTimed 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- 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 toMinecraft 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):
ResourceLocation→Identifier renames, permission-level API changes,GameProfileCache replacement, teleportTo signature changes, ClickType→ContainerInput, the new WorldClock time API, inventoryarmor/offhand restructuring, registry/
CompoundTag Optional-wrappingchanges, 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
inventory.
- ChestShop admin shop holograms:**
/chestshop hologram enable|disable|move
neoessentials.shop.create.admin.### ✨ Improvements
- Command feedback messages** now show a small
[NE]tag and use softer,
- NPC Shops:** Selling now actually works (previously only buying was
/npcshop respawn <shopId> to re-summon a lost shop NPC without losing itslistings.
- 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)
/powertooltogglenow actually works** — was checking a dead legacy class instead of the real per-player toggle- Dead
PowertoolToggleCommandclass 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.jsontablist sections - New
groupColors— colour player names by permission group in the header/footer &colour codes work everywhere in the file- New
/tablist configcommand shows a live settings summary /tablist infonow 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.jsonremoved /tablist reloadresets 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 inAdmin Shops** — Admin Shop on line 1 = unlimited stock, no chest requiredShops persist across restarts in neoessentials/shops.jsonFull 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 fixedVault 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](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.
## 🚨 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:**
json
"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 workPrefix 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 valuesCreates 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.* permissionOnly shown once per server start Beautiful formatted message with benefits
- Manual migration:**
- Command:
/neoessentials config splitAutomatic 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: messageDetailed:** [world] <[Admin] Steve> messageCustom:** 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**:
`json
{
"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**
`json
{
"group:vip": "<gradient:FFD700-FF1493>{prefix}</gradient> {name}: {MESSAGE}"
}
`
### **Time-Based Greeting**
`json
{
"default": "<if:time=morning>☀️ </if>{prefix}{name}: {MESSAGE}"
}
`
### **Health Warning**
`json
{
"default": "{prefix}{name} <if:health<50>❤️ </if>: {MESSAGE}"
}
`
### **Complex Multi-Feature**
`json
{
"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
- Discord:** https://discord.gg/dUGAQF2Mga
- GitHub:** https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials
- Wiki:** https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/wiki
- 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 someoneBold yellow highlight Plays notification sound Click to message
- 💎 Item Links**
- Use
[item] to show held itemHover for full details Clickable and stylish
- 🎨 Full Color Support**
- Basic colors (
&c for red)Hex colors ( &#FF5500)Format codes (bold, italic, etc.)
#### **Config:**
`json
{
"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` folder3. Restart server
4. Enjoy!
## Support
- 🐛 Found a bug? Report it on our [issue tracker](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/issues)
- 💬 Need help? Join our [Discord](https://discord.gg/dUGAQF2Mga)
- 📖 Read the [wiki](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/wiki) for detailed documentation
## Links
- [GitHub](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials)
- [Discord](https://discord.gg/dUGAQF2Mga)
- [CurseForge](https://www.curseforge.com/minecraft/mc-mods/neoessentials)
## Previous Versions
Check Modrinth version history for older changelogs.
- Build #698+** | January 6, 2026 | Minecraft 1.21.1 - 1.21.11 | NeoForge 21.1.179+ / 21.11.24-beta
## 🎯 Build #698 - Documentation & Final Polish
### 🛠️ Perfect Code Quality! ✨
- Achievement: ZERO Warnings! 🏆**
- Final fixes:**
- ✅ Performance: StringBuffer → StringBuilder
- ✅ Modern Java: .length() > 0 → !isEmpty()
- ✅ Clean code: Removed redundant suppressions
- ✅ Type safety: Fixed @Nullable annotations
- ✅ Simplification: Cleaner if statements
- Result:**
- 100% clean compilation
- Professional code standards
- Production-ready quality
### 🔇 Clean Logs Verified
Debug logging properly controlled by config - clean logs in production!
## 🎯 Build #680+ - LuckPerms & Quality Improvements
### 🏷️ LuckPerms Placeholders - Now Working! 🎉
All LuckPerms placeholders fixed and working perfectly:
- Available Placeholders:**
{luckperms_prefix}- Player's prefix{luckperms_suffix}- Player's suffix{luckperms_group}- Primary group name{luckperms_displayname}- Full formatted name
- Example Usage:**
json
{
"chat-format": "{luckperms_prefix}{neoessentials_name}: {MESSAGE}"
}
`
- Result:**
[Admin] PlayerName: Hello!
- What was fixed:**
- Placeholders now properly query LuckPerms API
- Enhanced debug logging for troubleshooting
- Full support for weighted prefixes/suffixes
### 🔇 Clean Logs - No More Console Spam! 🧹
- Removed 70+ lines of debug output per chat message!**
- New config option:**
`json
{
"logging": {
"enableDebugLogging": false
}
}
`
Set to true only when debugging issues, otherwise enjoy clean logs!
- What was cleaned:**
- Chat formatting debug (40+ lines → 0)
- Placeholder resolution (6 lines → 0)
- Permission queries (7 lines → 0)
- LuckPerms integration (20+ lines → 0)
### 🛠️ Code Quality - 31+ Fixes! ✨
- Professional, production-ready code:**
- ✅ 8 critical errors fixed
- ✅ 23+ warnings resolved
- ✅ Zero compilation errors
- ✅ Clean, maintainable codebase
- Major fixes:**
- Constructor issues
- File corruption repairs
- NPE protection
- Duplicate methods removed
- Resource handling improved
## 🎯 Build #627 - Critical Shutdown Fix
### 🔧 Server Shutdown Hang RESOLVED 🎉
- The Problem:**
Server would freeze forever when stopping/restarting:
`
[INFO] ThreadedAnvilChunkStorage: All dimensions are saved
[HANGS HERE - Never exits, requires force-kill]
`
- The Solution:**
Complete thread pool shutdown - server now exits cleanly in 10-30 seconds!
- What Was Fixed:**
- ✅ Economy system executors (balances, transactions, toggles)
- ✅ AFK detection schedulers (manager + movement detector)
- ✅ Ban cleanup scheduler
- ✅ Teleport request timeouts
- ✅ Dashboard HTTP server (5-second graceful shutdown)
- Result:**
- Server exits cleanly every time
- No more hanging on
/stopAll resources properly released Detailed shutdown logging
### 🛠️ New: Thread Diagnostics
- Automatic monitoring:**
`
[INFO] Running thread diagnostics...
[INFO] No NeoEssentials threads detected ✓
[INFO] No non-daemon user threads detected ✓
`
If problems occur, you'll see exactly which threads are blocking shutdown!
### 📊 Better Visibility
- Detailed shutdown logs:**
`bash
[INFO] Shutting down Economy Manager...
[INFO] EconomyManager shutdown complete.
[INFO] Shutting down AFK Manager...
[INFO] AFK Manager shutdown complete
[INFO] NeoEssentials shutdown complete
`
### 🎨 Code Quality
- Fixed all code analysis warnings
- Optimized lambda expressions
- Improved JavaDoc formatting
- Better error handling
## 🎯 Build #599 Highlights
- Major quality update** with critical fixes and LuckPerms integration!
## 🆕 New Features
### 🔐 LuckPerms Auto-Sync
Your NeoEssentials permissions now automatically appear in LuckPerms!
- What you get:**
- ✨ Autocomplete in
/lp commands✨ Permissions visible in web editor ✨ 85+ permissions auto-registered ✨ Export to YAML format
- Try it:**
`bash
/lp user PlayerName permission set neoessentials.<TAB>
# All permissions now autocomplete! 🎉
`
### 📡 /tpo Command
Teleport to offline player's last location!
`bash
/tpo OfflinePlayerName
`
Perfect for:
- Finding player bases
- Investigating grief
- Admin duties
## 🐛 Major Fixes
### Build #575 - Kit System Crash
❌ **Error:** NoSuchMethodError on Minecraft 1.21.4
✅ **Fixed:** Updated to new Registry API
🎯 **Result:** Server starts successfully with kits
### Build #580 - Log Spam Eliminated
❌ **Problem:** Thousands of WARN logs per minute
✅ **Fixed:** Removed duplicate event handlers
🎯 **Result:** 50% less event processing, clean logs
### Build #585 - Permission Nodes
❌ **Missing:** 15 utility command permissions
✅ **Added:** All portable workstations + utilities
🎯 **Result:** Full LuckPerms integration
### Build #590 - TPA System
❌ **Crash:** /tpahere NullPointerException
✅ **Fixed:** ConcurrentHashMap null handling
🎯 **Result:** All teleport requests working
### Build #595 - Debug Logging
❌ **Duplicate:** Two debug config options
✅ **Merged:** Single logging.enableDebugLogging
🎯 **Result:** Consistent debug control
## 📋 Complete Changes
### Added ✨
/tpo command for offline teleportsLuckPerms automatic permission sync 15 missing permission nodes: neoessentials.anvilneoessentials.craftingneoessentials.stonecuttingneoessentials.smithingneoessentials.fletchingneoessentials.realnameneoessentials.whoisneoessentials.seenneoessentials.signneoessentials.rulesneoessentials.suicideneoessentials.pingAnd more!
### Fixed 🔧
- Kit system crash (MC 1.21.4 Registry API)
/tpahere NullPointerExceptionDashboard port config ignored Duplicate event handlers (log spam) Ops bypassing LuckPerms 40 code analysis warnings (27 + 13) Debug logging consolidation Visibility scope issues Potential NPE in teleport commands
### Improved 📈
- 50% event processing reduction
- Modern Java features (switch expressions, pattern matching, method references)
- Zero compilation warnings
- Enhanced error handling
- Thread-safe field declarations
- Cleaner lambda usage
## 🎮 Quick Start
### Using New Features
- LuckPerms Integration:**
`bash
# Autocomplete now works!
/lp user Steve permission set neoessentials.<TAB>
# Grant portable workstations
/lp group default permission set neoessentials.stonecutting
/lp group default permission set neoessentials.anvil
# Use web editor - NeoEssentials permissions now visible!
/lp editor
`
- Offline Teleport:**
`bash
# Teleport to where an offline player last was
/tpo BuilderBob
`
- Clean Logs:**
`json
// config.json
{
"logging": {
"enableDebugLogging": false // Clean production logs
}
}
`
## ⚙️ Technical
- Performance:**
- 50% reduction in AFK event processing
- Eliminated duplicate handler registration
- Optimized permission checking order
- Code Quality:**
- 0 compilation warnings (fixed 40 total)
- 1000+ lines improved
- 18+ files updated
- Modern Java 16+ features
- Build #599
- Compatibility:**
- Minecraft 1.21.1 ✅
- Minecraft 1.21.4 ✅
- NeoForge 21.1.179+ ✅
- NeoForge 21.4.156+ ✅
- LuckPerms (optional) ✅
## 📦 Installation
1. Download latest version
2. Stop server
3. Replace old jar
4. Start server
5. **Done!** Auto-migrates config
No breaking changes - fully backward compatible!
## 📚 Documentation
- New Guides Created:**
- Debug Logging Consolidation
- Enhanced Handler Fix
- Teleportation System Guide
- TPA/TPAHERE Implementation
- LuckPerms Integration
- Permission Registry Guide
- Missing Permissions Fix
All available in GitHub repository!
## 🔗 Useful Links
- Issues:** Report bugs on GitHub
- Wiki:** Full command reference
- Discord:** Community support
- Source:** Available on GitHub
## 🎉 What's Next?
- Planned for v1.0.2.4:**
- Additional performance optimizations
- More system audits
- Enhanced features
## ⭐ Support the Project
Enjoying NeoEssentials? Consider:
- ⭐ Starring on GitHub
- 📝 Writing a review
- 🐛 Reporting bugs
- 💡 Suggesting features
## 📊 Stats
- Build:** #599
- Date:** January 4, 2026
- Changes:** 1000+ lines
- Fixes:** 40 warnings + 8 bugs
- New Features:** 3 major
# NeoEssentials v1.0.2.2 - Major Update
- Build #524** | November 10, 2025 | Minecraft 1.21.1 | NeoForge 21.1.179+
## 🎯 Highlights
- 38 commits** with major features since v1.0.2.1 (Sept 7, 2025):
### 🌐 Web Dashboard System
- Space-themed real-time monitoring interface
- Player stats, server metrics, live logs
- Discord login integration
- Mobile-responsive design
- Commands:
/dashboard start/stop/status/reload
### 📦 Kit Management
- Create custom kits from inventory
- Cooldown system & usage tracking
- Commands:
/createkit, /kit, /delkit, /listkits
### 💬 Discord Integration
- DiscordSRV & SDLink adapters
- Role-to-permission sync
- Web dashboard Discord auth
### 💰 Economy Integrations
- FTB Money, Lightman's Currency, Magic Coins
- Transaction history tracking
/paytoggle command
## 🐛 Critical Fixes
### Build #520 - Config Loading
✅ Fixed: config.json not found error
🔧 Solution: Absolute paths with ResourceUtil.getConfigFile()
### Build #521 - Color Codes
✅ Fixed: &7 saved as \u00267
🔧 Solution: Added .disableHtmlEscaping() to Gson
### Build #523 - AFK Placeholders
🆕 Added 3 new placeholders:
{neoessentials_afk} - Status ("AFK" or empty){neoessentials_afk_time} - Duration ("5m 30s"){neoessentials_afk_reason} - Custom message
## ✨ New Features
### Commands
/dashboard - Web dashboard control/createkit <name> - Create kits/kit [name] - Use/list kits/delkit <name> - Delete kits/listkits - Admin kit management/paytoggle - Toggle payments/unmute <player> - Unmute players/repair [all] - Repair items/powertool [cmd] - Item command bindingGamemode shortcuts (survival, creative, etc.)
### Systems
- Permission System:** Enhanced with admin validation, reload, list commands
- Shop System:** Item tag support, dynamic linking, better validation
- Chat System:** Custom formatting, clickable components, debug utilities
- AFK System:** Activity tracking, custom messages, admin controls
## 🔧 Improvements
- ManagerRegistry** - Centralized manager system
- SLF4J Logging** - Better error tracking
- Dynamic Commands** - Config-based registration
- Message Localization** - 100+ new translation keys
- Atomic File Operations** - Better data integrity
- Command Validation** - Permission checks across board
## 📦 New Config Files
`
config/neoessentials/
├── discord_auth.json # Discord mappings
├── dashboard.json # Dashboard settings
├── kits.json # Kit definitions
└── economy_integrations.json
`
## 🚀 Upgrade
1. Backup config/neoessentials/
2. Stop server
3. Replace JAR: neoessentials-1.0.2.3+build.536.jar
4. Start server (auto-generates new configs)
5. Optional: Fix color codes in permissions.json (\u0026 → &)
## ✅ Verification
`bash
# Check logs
[ChatManager] Loaded chat-format (object): default=[...]
# Test features
/dashboard start
/createkit starter 3600
/afk Testing
``## 📊 Stats
- 38 commits
- 15+ new commands
- 100+ translation keys
- 28 total placeholders
- 3 economy integrations
## Contributors
- @WillxRv [Pull Request #13 ](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/pull/13)
- @L8-Alphine [#11](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials/issues/11)
## 🔗 Required Dependancy mod
- [Modrinth Forge Config API Port](https://modrinth.com/mod/forge-config-api-port/versions?g=1.21.1&l=neoforge)
- [Curseforge Forge Config API Port](https://www.curseforge.com/minecraft/mc-mods/forge-config-api-port)
## 🔗 Links
- [GitHub](https://github.com/ZeroG-Network-PTY-LTD/NeoEssentials)
- [Discord](https://discord.gg/dUGAQF2Mga)
- [CurseForge](https://www.curseforge.com/minecraft/mc-mods/neoessentials)
- [Modrinth](https://modrinth.com/mod/neoessentials)
- Full compatibility** with v1.0.2.1 | **No breaking changes** | Minecraft 1.21.1-1.21.8
- Build #524** | November 10, 2025 | Minecraft 1.21.1 | NeoForge 21.1.179+
## 🎯 Highlights
- 38 commits** with major features since v1.0.2.1 (Sept 7, 2025):
### 🌐 Web Dashboard System
- Space-themed real-time monitoring interface
- Player stats, server metrics, live logs
- Discord login integration
- Mobile-responsive design
- Commands:
/dashboard start/stop/status/reload
### 📦 Kit Management
- Create custom kits from inventory
- Cooldown system & usage tracking
- Commands:
/createkit,/kit,/delkit,/listkits
### 💬 Discord Integration
- DiscordSRV & SDLink adapters
- Role-to-permission sync
- Web dashboard Discord auth
### 💰 Economy Integrations
- FTB Money, Lightman's Currency, Magic Coins
- Transaction history tracking
/paytogglecommand
## 🐛 Critical Fixes
### Build #520 - Config Loading
✅ Fixed:
config.json not found error 🔧 Solution: Absolute paths with
ResourceUtil.getConfigFile()### Build #521 - Color Codes
✅ Fixed:
&7 saved as \u00267 🔧 Solution: Added
.disableHtmlEscaping() to Gson### Build #523 - AFK Placeholders
🆕 Added 3 new placeholders:
{neoessentials_afk}- Status ("AFK" or empty){neoessentials_afk_time}- Duration ("5m 30s"){neoessentials_afk_reason}- Custom message
## ✨ New Features
### Commands
/dashboard- Web dashboard control/createkit <name>- Create kits/kit [name]- Use/list kits/delkit <name>- Delete kits/listkits- Admin kit management/paytoggle- Toggle payments/unmute <player>- Unmute players/repair [all]- Repair items/powertool [cmd]- Item command binding- Gamemode shortcuts (survival, creative, etc.)
### Systems
- Permission System:** Enhanced with admin validation, reload, list commands
- Shop System:** Item tag support, dynamic linking, better validation
- Chat System:** Custom formatting, clickable components, debug utilities
- AFK System:** Activity tracking, custom messages, admin controls
## 🔧 Improvements
- ManagerRegistry** - Centralized manager system
- SLF4J Logging** - Better error tracking
- Dynamic Commands** - Config-based registration
- Message Localization** - 100+ new translation keys
- Atomic File Operations** - Better data integrity
- Command Validation** - Permission checks across board
## 📦 New Config Files
``
config/neoessentials/
├── discord_auth.json # Discord mappings
├── dashboard.json # Dashboard settings
├── kits.json # Kit definitions
└── economy_integrations.json
`
## 🚀 Upgrade
1. Backup config/neoessentials/
2. Stop server
3. Replace JAR: neoessentials-1.0.2.2-HotFix+build.524.jar
4. Start server (auto-generates new configs)
5. Optional: Fix color codes in permissions.json (\u0026 → &)
## ✅ Verification
`bash
# Check logs
[ChatManager] Loaded chat-format (object): default=[...]
# Test features
/dashboard start
/createkit starter 3600
/afk Testing
``## 📊 Stats
- 38 commits
- 15+ new commands
- 100+ translation keys
- 28 total placeholders
- 3 economy integrations
## 🔗 Links
- [GitHub](https://github.com/ZeroG-Network-Org/NeoEssentials)
- [Discord](https://discord.gg/dUGAQF2Mga)
- [CurseForge](https://www.curseforge.com/minecraft/mc-mods/neoessentials)
- [Modrinth](https://modrinth.com/mod/neoessentials)
- Full compatibility** with v1.0.2.1 | **No breaking changes** | Minecraft 1.21.1-1.21.8
## Critical Fixes & Stability Improvements
### 🛠️ Major System Updates
- Translation System Rebuilt**: Complete overhaul of the language management system with proper server-side localization
- Data Persistence Fixed**: Resolved critical issues where player homes, economy data, and settings were not saving correctly
- Permission System Enhanced**: Fixed permission group assignments and individual permissions not persisting across server restarts
### 🐛 Bug Fixes
- Fixed compilation errors in PermissionEventListener causing server startup failures
- Resolved type safety conflicts between Player and ServerPlayer throughout the codebase
- Fixed memory leaks in the translation system affecting server performance
- Corrected import conflicts and missing dependencies preventing successful builds
- Fixed data loading synchronization issues during player join events
### 🔧 Technical Improvements
- Rebuilt PlayerDataManager integration with enhanced permission storage
- Implemented proper fallback systems for non-server player contexts
- Added comprehensive error handling and debug logging
- Optimized permission cache management for better performance
- Enhanced CustomPermissionsManager with proper data persistence
### 📁 Codebase Cleanup
- Removed 14 unnecessary development files and artifacts
- Streamlined project structure for production readiness
- Cleaned documentation and removed temporary development files
- Optimized build configuration for stable releases
### ⚠️ Important Information
- Backup Recommended**: While this update includes automatic data migration, backing up your world is always recommended before major updates.
- What's Fixed**: This hotfix specifically addresses the persistent data loss issues where player homes would disappear, economy balances would reset, and permission groups wouldn't save properly.
- Compatibility**: Fully compatible with existing worlds and configurations. No manual intervention required.
### 🎯 For Server Owners
This hotfix resolves the critical stability issues that were causing data loss and server crashes. Your players' homes, money, and permissions will now persist correctly across server restarts.
- Minecraft Version**: 1.21.1
- NeoForge Version**: 21.1.179+
- Mod Version**: 1.0.2.1_HOTFIX
- Configuration system overhaul and shop cross-linking fixes with clean migration required**
- Released: August 8, 2025*
## Overview
Version 1.0.2 introduces a completely redesigned configuration system for NeoEssentials that provides better organization, enhanced validation, and improved performance. Additionally, this release includes a complete shop system overhaul that fixes critical cross-linking bugs using ChestShop-inspired methodology. This update requires a clean migration from previous versions to ensure compatibility with the new system.
## ⚠️ **CRITICAL: Clean Migration Required**
- Before updating, you must delete your existing NeoEssentials configuration files:**
### Windows Users:
``
1. Stop your server completely
2. Delete: config\neoessentials\
3. Delete: neoessentials\ (if it exists)
4. Update the mod JAR
5. Start server (new config auto-generates)
`
### Linux/Mac Users:
`bash
# Stop your server first
rm -rf config/neoessentials/
rm -rf neoessentials/
# Update mod JAR and restart server
`
- Why is this necessary?**
- Complete configuration architecture redesign
- New file structure and validation system
- Enhanced security and backup features
- Incompatible configuration formats
## New Features
### Enhanced Configuration System
- Completely rebuilt configuration management**
### 🗂️ New File Structure
- Clean JSON-based configuration system**
`
config/neoessentials/
├── main.json # Core mod settings
├── economy.json # Economy system
├── homes.json # Home system
├── kits.json # Kit system
├── warps.json # Warp system
├── moderation.json # Moderation tools
├── messaging.json # Chat and messaging
├── chat.json # Chat system
├── tablist.json # Tab list customization
├── spawn.json # Spawn system
├── README.md # Configuration guide
├── templates/ # Default templates
├── backup/ # Automatic backups
└── languages/ # Language files
neoessentials/
├── [player data] # Player-specific data
├── [economy data] # Economy system data
└── [runtime data] # Generated runtime data
`
#### Clean JSON Configuration
The new system uses simple, readable JSON files:
- Single-file approach**: Each feature has its own JSON configuration
- Easy editing**: Human-readable format with clear structure
- Template system**: Default templates automatically generated
- Backup protection**: Automatic backups of all configuration changes
#### Advanced Validation
`json
{
"_metadata": {
"schema_version": "2.0",
"validation_level": "strict",
"auto_repair": true,
"backup_on_error": true
}
}
`
#### Hot-Reload System
- Configuration changes apply without server restart
- Real-time validation and error reporting
- Automatic backup before applying changes
- Rollback capability for invalid configurations
### Improved Storage Backend
- JSON-based storage system for simplicity and reliability**
#### Storage Features
- JSON Format**: Human-readable, easy to edit manually
- Hot-reload**: Configuration changes apply automatically
- Validation**: Real-time error checking and prevention
- Backup System**: Automatic backups protect your settings
`json
{
"storage": {
"backend": "json",
"compression": true,
"backup_interval": "6h"
},
"backup": {
"enabled": true,
"retention_days": 30,
"location": "config/neoessentials/backup/"
}
}
`
- JSON**: Human-readable, easy to edit
- YAML**: Configuration-friendly format
- SQLite**: Local database for better performance
- MySQL/PostgreSQL**: Enterprise database support
#### Backup System
`json
{
"backup": {
"enabled": true,
"interval": "6h",
"retention_days": 30,
"compression": true,
"location": "config/neoessentials/backup/"
}
}
`
### Security Enhancements
- Improved security throughout the system**
#### Rate Limiting
`json
{
"rate_limiting": {
"commands_per_minute": 60,
"teleport_cooldown": 5,
"economy_cooldown": 3
}
}
`
#### Audit Logging
`json
{
"audit": {
"log_commands": true,
"log_economy": true,
"log_teleports": true,
"log_admin_actions": true
}
}
`
## Technical Improvements
### Performance Optimizations
- Significant performance improvements across the board**
#### Configuration System
- 60% faster** configuration parsing
- 40% reduction** in disk I/O overhead
- Lazy loading** for optional configuration sections
- Batch operations** for multiple changes
#### Memory Management
- Smart caching** system reduces memory usage
- Automatic cleanup** of unused resources
- Object pooling** for frequently used objects
- Memory leak detection** and prevention
### Enhanced Validation
- Comprehensive validation system with detailed error reporting**
#### Validation Features
- Schema-based validation** for all configuration files
- Cross-field validation** for related settings
- Type checking** and range validation
- Detailed error messages** with suggestions for fixes
#### Error Recovery
- Automatic repair** for common configuration issues
- Backup restoration** when configuration is corrupted
- Graceful degradation** when optional features fail
- Validation reports** for troubleshooting
## Migration Guide
### Step-by-Step Migration
#### 1. Backup Current Configuration (Optional)
`bash
# Create backup of current config
mkdir neoessentials-backup
cp -r config/neoessentials/ neoessentials-backup/
`
#### 2. Clean Removal
`bash
# Remove old configuration completely
rm -rf config/neoessentials/
rm -rf neoessentials/
`
#### 3. Update and Generate New Config
1. Stop your server
2. Replace mod JAR with v1.0.2
3. Start server (new config files auto-generate)
4. Stop server
5. Customize configuration files
6. Start server again
### Post-Migration Configuration
#### Essential Settings
`json
// config/neoessentials/main.json
{
"general": {
"enabled": true,
"language": "en_US",
"update_interval": 1000
},
"features": {
"economy": true,
"teleportation": true,
"moderation": true,
"gui_system": true
}
}
`
#### Economy Setup
`json
// config/neoessentials/economy.json
{
"economy": {
"enabled": true,
"starting_balance": 1000.0,
"currency_name": "Coins",
"currency_symbol": "$"
}
}
`
#### Chat System
`json
// config/neoessentials/chat.json
{
"chat": {
"enabled": true,
"format_enabled": true,
"prefix_enabled": true
}
}
`
webhook_url = ""
send_join_leave = true
send_chat = false
`
## API Changes
### New Configuration API
- Enhanced programmatic configuration access**
#### Configuration Manager
`java
// Access new configuration system
ConfigurationManager config = NeoEssentials.getConfigurationManager();
boolean economyEnabled = config.getFeatureConfig().isEconomyEnabled();
config.reloadConfiguration("economy");
`
#### Validation API
`java
// Validate configuration programmatically
ValidationResult result = config.validateConfiguration();
if (!result.isValid()) {
result.getErrors().forEach(error ->
LOGGER.error("Config error: {}", error.getMessage())
);
}
`
### Event System Updates
- New events for configuration management**
`java
// Configuration events
@EventHandler
public void onConfigReload(ConfigurationReloadEvent event) {
// Handle configuration reload
}
@EventHandler
public void onConfigValidation(ConfigurationValidationEvent event) {
// Handle validation results
}
`
## Bug Fixes
### Critical Fixes
- Fixed**: Sign shop duplication exploit when buying from player shops with no stock
- Fixed**: Shop cross-linking issue where shops with same items shared inventory between different owners
- Fixed**: Imprecise chest detection causing multiple shops to link to the same chest
- Fixed**: Shops with same items but different prices incorrectly affecting each other's inventory
- Fixed**: Configuration corruption during server crashes
- Fixed**: Memory leaks in configuration file watchers
- Fixed**: Race conditions during configuration loading
- Fixed**: Incomplete validation in certain edge cases
### Shop System Improvements (ChestShop-Inspired)
- Enhanced**: Precise chest detection system for sign shops
- Wall signs now correctly detect the exact attached chest
- Prioritized adjacency checking prevents chest conflicts
- Reduced search area from 3x3x3 to more precise 2x2x2 for better accuracy
- Improved**: Shop identification and isolation
- Each shop now has unique chest assignment preventing cross-contamination
- Direct shop lookup replaces inefficient stream filtering
- Better debugging and logging for shop-to-chest relationships
- Added**: Comprehensive shop transaction logging
- Track which player interacts with which shop
- Log chest positions for each shop operation
- Monitor stock checks, item removal, and item addition per shop
- Detailed debugging for shop isolation verification
### Performance Fixes
- Optimized**: Configuration parsing algorithms
- Optimized**: Shop lookup performance with direct map access (O(1) vs O(n))
- Improved**: File I/O operations with buffering
- Enhanced**: Memory management in configuration system
- Reduced**: CPU overhead for configuration monitoring
- Eliminated**: Inefficient shop searching in transaction processing
## Compatibility
### Backward Compatibility
- ✅ **Commands**: All existing commands work unchanged
- ✅ **Permissions**: Permission nodes remain the same
- ✅ **Player Data**: Existing player data is preserved
- ✅ **Economy Data**: Balance and transaction history maintained
### System Requirements
- Minecraft**: 1.21.1+
- NeoForge**: 21.1.1+ (recommended: 21.1.1-52.1.15+)
- Java**: 17+ (recommended: 17.0.8+)
- Memory**: Minimum 2GB RAM allocated to server
## Implementation Status
### ✅ Fully Implemented & Production Ready
- 🏠 Teleportation System**: Homes, warps, TPA requests, spawn management
- 💰 Economy System**: Complete balance management, sign shops, admin shops, banking
- 📧 Messaging System**: Private messages, announcements, social spy
- 🛡️ Moderation System**: Bans, kicks, mutes, punishment history
- 🔧 Essential Commands**: 50+ commands for server administration
- 🔔 Notification System**: Multi-channel notifications with event tracking
- 🎨 Animation System**: Animated placeholders for tablist/scoreboard/bossbar
- 🔐 Permission System**: Role-based permissions with inheritance
- ⚡ Performance Monitoring**: Real-time server performance tracking
- 🗃️ Storage System**: JSON-based data storage with async operations
- 🔧 Configuration System**: JSON-based system with hot-reload
### 🚧 Partially Implemented
- 🎮 GUI System**: Framework exists, basic shop GUI works, extensive documentation
- 🌐 Web Dashboard**: Basic implementation with server status and authentication
### ❌ Planned for Future
- 📦 Kit System**: Currently minimal implementation
- 💾 Database Integration**: Currently file-based only (MySQL/PostgreSQL planned)
- Current Implementation Status**: ~85% of documented features are fully implemented and production-ready.
### Mod Compatibility
- ✅ **LuckPerms**: Enhanced permission integration
- ✅ **FTB Ranks**: Improved rank system support
- ✅ **Placeholder Mods**: Better placeholder processing
- ✅ **Economy Mods**: Vault compatibility maintained
## Installation
### New Installation
1. Download NeoEssentials v1.0.2 JAR
2. Place in server mods/ directory
3. Start server (configuration auto-generates)
4. Stop server and customize configuration
5. Restart server
### Upgrade from Previous Version
1. **Stop server completely**
2. **Delete existing config directories**:
config/neoessentials/neoessentials/` (if exists)3. **Replace JAR** with v1.0.24. **Start server** (new config generates)
5. **Customize configuration** as needed
6. **Restart server**
## Performance Improvements
### Benchmarks
- Configuration Loading**: 60% faster than v1.0.1
- Memory Usage**: 25% reduction in config-related memory
- File I/O**: 40% fewer disk operations
- Validation**: 50% faster validation processing
### Scalability
- Large Servers**: Better performance with 200+ players
- Many Configs**: Improved handling of complex configurations
- Real-time Updates**: Minimal impact on server TPS
- Background Tasks**: Non-blocking configuration operations
## Known Issues
### Minor Issues
- Configuration editor GUI may need stability improvements on some systems
- Complex validation rules might show false warnings in rare cases
- Hot-reload may occasionally require manual restart for complex changes
### Workarounds
- Use external text editors for complex configuration editing
- Restart server if hot-reload doesn't apply changes properly
- Check validation logs if experiencing configuration issues
## Documentation
### Updated Guides
- Configuration Reference**: Complete guide to new configuration system
- Migration Tutorial**: Step-by-step migration instructions
- Validation Guide**: Understanding configuration validation
- Performance Tuning**: Optimization recommendations
### API Documentation
- JavaDoc**: Complete API documentation for developers
- Integration Examples**: Code examples for mod integration
- Configuration API**: Programmatic configuration management
## Support
### Getting Help
- Documentation**: [GitHub Wiki](https://github.com/ZeroG-Network-Org/NeoEssentials/wiki)
- Discord**: [Community Server](https://discord.gg/dUGAQF2Mga)
- Issues**: [GitHub Issues](https://github.com/ZeroG-Network-Org/NeoEssentials/issues)
### Community Resources
- Configuration Examples**: [Examples Repository](https://github.com/ZeroG-Network-Org/NeoEssentials-Examples)
- Video Tutorials**: Migration and setup guides
- Community Discord**: Real-time help and discussion
## Thank You
A huge thank you to our community for testing the migration process and providing valuable feedback! The new configuration system provides a much better foundation for future development.
- Ready to upgrade?** Download v1.0.2 now and experience the improved configuration system!
- Remember**: Clean migration required - delete old config before updating!
- NeoEssentials v1.0.2 - Building a better foundation for server management*
- Major tablist system overhaul with YAML templates and animation support**
- Released: June 28, 2025*
## Overview
Version 1.0.1 introduces a completely rewritten tablist system with YAML-based templates, advanced animation support, and significant performance improvements. This update maintains full backward compatibility while adding powerful new customization options.
## New Features
### Enhanced Tablist System
- YAML Template Engine**: Flexible template system with YAML configuration files
- Advanced Animation Support**: Custom animation definitions with configurable timing
- Boss Bar Integration**: Dynamic boss bars with real-time content updates
- Group-Based Templates**: Different tablist content for different player groups
- Performance Optimization**: Improved update algorithms with reduced overhead
### Configuration Improvements
- Hybrid Configuration**: TOML for settings, YAML for content templates
- Automatic Migration**: Seamless upgrade from v1.0.0 configuration format
- Live Reloading**: Template changes apply without server restart
- Enhanced Validation**: Comprehensive configuration validation with detailed error messages
### Developer Features
- Template API**: Programmatic template creation and management
- Animation API**: Custom animation effects through mod integration
- Enhanced Events**: New event system for tablist updates and changes
- Configuration API**: Runtime configuration management capabilities
## Technical Changes
### Architecture Updates
- Modular Design**: Tablist system redesigned with pluggable components
- Improved Caching**: Smart caching system reduces memory usage and improves performance
- Async Processing**: Non-blocking operations for template rendering and updates
- Event Optimization**: Reduced event listener overhead for better TPS
### Configuration Migration
``
toml
# Old format (v1.0.0) - automatically migrated
[tablist]
header = "&6Welcome to MyServer"
footer = "&7Visit our website"
# New format (v1.0.1)
[tablist]
template_file = "neoessentials/tablist.yml"
update_interval = 1000
animation_interval = 200
`
### New File Structure
`
config/neoessentials/
├── general.toml # Core mod settings
├── economy.toml # Economy system settings
├── homes.toml # Home system settings
├── warps.toml # Warp system settings
├── kits.toml # Kit system settings
└── database.toml # Storage backend settings
neoessentials/
├── tablist.yml # Tablist templates and content
├── animations.yml # Animation definitions
└── README.md # Configuration documentation
`
## API Changes
### New Classes
TablistTemplateManager - Manages YAML template loading and parsingAnimationEngine - Handles animation processing and frame updatesBossBarManager - Controls dynamic boss bar displayTemplateRenderer - Renders templates with placeholder replacement
### Events
TablistUpdateEvent - Fired when tablist content changesTemplateLoadEvent - Fired when templates are loaded or reloadedAnimationFrameEvent - Fired for each animation frame update
### Configuration API
`java
// Access template system programmatically
TablistManager manager = NeoEssentials.getTablistManager();
Template template = manager.getTemplate("vip");
template.setHeader(Arrays.asList("&6VIP Server", "&aWelcome %player%"));
manager.reloadTemplates();
`
## Migration Guide
### Automatic Migration
1. **Backup Creation**: Original v1.0.0 configs saved to backup/ directory
2. **TOML Conversion**: Settings automatically converted to new format
3. **Template Generation**: Basic YAML templates created from existing configuration
4. **Validation**: New configuration validated with error reporting
### Manual Customization
After automatic migration, enhance your setup:
`yaml
settings:
update_interval: 3000
enable_animations: true
enable_headers: true
enable_footers: true
templates:
headers:
- "&6&lMyServer Network"
- "&aOnline: &e%player_count%&7/&e%max_players%"
- "<anim:rainbow>Welcome %player%"
footers:
- "&7Discord: &b&ndiscord.gg/myserver"
- "&7Website: &b&nmyserver.com"
bossbars:
global:
- "{color:green}{style:progress}{progress:1.0}Server TPS: %server_tps%"
`
## Performance Improvements
### Benchmarks
- Update Speed**: 40% faster tablist processing
- Memory Usage**: 25% reduction in memory footprint
- CPU Usage**: 30% reduction in tablist-related CPU overhead
- Network Traffic**: 20% reduction in packet overhead
### Optimizations
- Smart Caching**: Template compilation cached until modification
- Batch Updates**: Multiple changes processed together
- Lazy Loading**: Templates loaded only when needed
- Memory Pooling**: Object reuse reduces garbage collection
## Compatibility
### Backward Compatibility
- ✅ **Configuration**: v1.0.0 configs automatically migrated
- ✅ **Commands**: All existing commands work unchanged
- ✅ **Permissions**: No permission changes required
- ✅ **Storage**: Existing data fully compatible
### Mod Compatibility
- ✅ **LuckPerms**: Enhanced integration with group-based templates
- ✅ **FTB Ranks**: Improved rank display in tablist templates
- ✅ **Placeholder Mods**: Better placeholder processing and caching
## Installation
### New Installation
1. Download v1.0.1 JAR file
2. Place in server mods/ directory
3. Start server (new configs auto-generate)
4. Customize templates in neoessentials/tablist.yml
### Upgrade from v1.0.0
1. Stop server
2. Replace mod JAR with v1.0.1
3. Start server (automatic migration occurs)
4. Verify configuration in config/neoessentials/`5. Customize new templates as desired
## Known Issues
### Minor Issues
- Template Editor**: In-game template editor needs stability improvements
- Animation Performance**: Complex animations may impact performance on low-end hardware
- Boss Bar Positioning**: Limited control over boss bar positioning
### Workarounds
- Use external text editor for complex template modifications
- Limit animation complexity on servers with performance constraints
- Boss bar customization through configuration only
## Documentation
### Updated Guides
- Template System**: Complete guide to YAML template creation
- Animation Creation**: Tutorial for custom animation effects
- Migration Guide**: Step-by-step upgrade instructions
- Performance Tuning**: Optimization recommendations
### API Documentation
- JavaDoc**: Complete API documentation for developers
- Examples**: Code examples for common use cases
- Integration Guide**: How to integrate with other mods
## Links
- Documentation**: [GitHub Wiki](https://github.com/ZeroG-Network/NeoEssentials/wiki)
- API Reference**: [JavaDoc](https://zerog-network.github.io/NeoEssentials/javadoc/)
- Source Code**: [GitHub Repository](https://github.com/ZeroG-Network/NeoEssentials)
- Issue Tracker**: [GitHub Issues](https://github.com/ZeroG-Network/NeoEssentials/issues)
- Discord**: [Community Server](https://discord.gg/neoessentials)
- Enhanced for the NeoForge modding ecosystem*
## Version 1.0.0 (June 22, 2025)
### Initial Release for Minecraft NeoForge 1.21.1
#### Major Features
- Complete Teleportation System**
- Home system with multi-home support and permissions
- Server warps with permission-based access
- TPA request system for player-to-player teleportation
- Tracking of previous locations with
/backcommand
- Economy System**
- Balance tracking and management
- Player-to-player payments
- Admin economy commands for server management
- Support for shop integration
- Admin Tools**
- Comprehensive admin panel for server management
- Professional moderation tools (ban, kick, mute)
- Server performance monitoring utilities
- Maintenance mode with permission-based bypass
- Player Utilities**
- Kit system with cooldowns and permission controls
- Offline mail messaging system
- Jail system for rule enforcement
- Vanish functionality for staff
- PowerTools for binding commands to items
- General Features**
- AFK detection and notification system
- Chat formatting and management
- Time and weather control commands
- Tab completion with smart suggestions
- Integration with permission systems
#### Technical Improvements
- True Server-Side Implementation**
- Zero client-side requirements
- Compatible with vanilla and modded clients
- No client disconnects in modded environments
- Only uses vanilla-compatible command argument types
- Performance Optimizations**
- Efficient data storage and retrieval
- Optimized command processing
- Minimal impact on server resources
- Bug Fixes**
- Fixed command argument registry synchronization
- Resolved client-server connection issues
- Enhanced compatibility with other mods
- Improved error handling and feedback
#### Storage System
- Implemented three storage backend options:
- JSON file-based storage (default)
- SQLite database support
- MySQL integration for multi-server setups
#### Documentation
- In-game command help and suggestions
- Detailed configuration file comments
- Wiki documentation for all features
## Known Issues
- None reported yet. Please submit any issues to our [GitHub Issue Tracker](https://github.com/ZeroG-Network/NeoEssentials/issues).
## Future Plans
- Additional economy features
- More administrative tools
- Extended customization options
- Expanded API for mod integration