Tags
Creators
Details
1.0.6
Compatibility
Changes
NeoEssentials โ Changelog (26.2.x branch)
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 migration history) is not carried over.
[1.0.6] โ 2026-08-27
Added
- 2026-10-09 โ Build 87 (
41c8f805) โ 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) โ 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) โ Modded ids work in/npcshop additem,addcommandandentitytype;entitytype's<ai>is optional. - 2026-10-08 โ Build 84 (
1a3920ca) โ 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) โ 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) โ The[NE]message prefix is now configurable viageneral.messagePrefix(""removes it). - 2026-09-16 โ Build 77 (
e5758be3) โ 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) โ 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) โ 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) โ/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) โ 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) โ 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) โ 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) โ 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) โ 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) โ 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) โ 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) โ 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) โ 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) โ 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) โ 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, animation, group/player overrides, a toggle command, and a dashboard endpoint. - General leaderboard system โ
/leaderboard(/lb), withmoney/kills/mob_kills/playtimeboards and{leaderboard_<board>:<rank>:name|value}placeholders. - Leaderboard boards are now config-driven (
leaderboard.json) โ register any vanilla per-player stat (blocks mined, mobs killed, distance, etc.) as a board via config, plus "custom" point-total boards (/leaderboard admin set|add|reset|create|delete) and aLeaderboardAPIfor other mods to register their own boards. /leaderboard hologram create <board> <id> [lines]โ generates a ranked leaderboard hologram in one command; the lines keep updating live on their own.- Leaderboards can now rank non-players โ a new
shop_salesboard ranks sign/chest and NPC shops by total revenue, shown by shop name instead of a player name. - Per-board
refreshIntervalinleaderboard.json(was a fixed 60s for every board). - Leaderboard styling: automatic per-rank medal/color placeholders (
:medal/:rankcolor), per-boardentryFormat/headerFormatchat 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 viarandomTeleportSettings.mode: "gui"(default unchanged). Lists every biome the dimension 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 viabiomeMenuItems.- Votifier vote listener โ its own TCP port, both V1 (RSA) and V2 (NuVotifier-compatible)
protocols auto-detected, per-site reward config (commands/crate keys), offline vote queueing,
vote party, and
/vote//votes//votepartycommands. - Crates โ weighted reward-pool crates with a key balance system, opened via
/crate openor a physical block, three opening animations (roulette/sequential/instant), and full admin 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>, findable in tab-completion), fully customizable via any/hologramsubcommand.- Left-clicking a physical crate block now opens the no-cost reward-odds preview (shift+click to still break it).
/crate key giveitem <player> <crate> <amount>gives real, tradeable physical crate key items โ no virtual balance required to redeem one.- Tablist
header/footerframes can now be written as their own JSON array of lines instead of hand-escaping\ninside 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 โ matching what already worked in the crate's hologram text (a snapshot per-item, since a held 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 todisplayNameif unset. Previously an animateddisplayNameflashed a different random snapshot frame in every chat message with no way to opt chat out of it specifically. /crate keys [player]now lists every registered crate on its own line, including ones you have zero keys for, instead of only comma-joining the crates you actually held keys for.- Fixed the console being flooded with
PermissionManager is nullwarnings on servers using an external permission adapter with no prefix/suffix support (e.g. FTB Ranks) โ that's the expected state there, not a failure, and no longer logs a warning. - Hologram refresh/animation tick rates were hardcoded โ now configurable via
hologram.refreshInterval/animationIntervalinconfig.json, same convention as tablist/ scoreboard'srefreshInterval. Applies with/neoe reload. - New per-board
refreshMultiplierinscoreboard.json(default 1) lets one board cycle its animation frames slower than the rest without touching the global refresh rate. DefaultrefreshIntervalfor tablist/scoreboard/hologram tightened from 20 to 10 ticks (smoother out of the box) โ only affects fresh installs, existing configs are untouched.
Fixed
- 2026-10-07 โ Build 83 (
de40fe22) โ 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) โ 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) โ 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) โ 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, 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) โ 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
gated by a dedicated
neoessentials.admin.noticepermission node instead of a hardcoded OP/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'sftbranks.name_formatvalue. Also fixed"group:<name>"keys being case-sensitive against the (always-lowercased) resolved group name, which affected every permission backend, not just FTB Ranks. /permissions group <group> setprefix|setsuffixno longer shows a raw "unexpected error" when the internal permission manager isn't active (e.g. an external permissions plugin like LuckPerms is in use) โ it now explains why instead.{luckperms_group}/{luckperms_primary_group}/{ftbranks_rank}/{ftbranks_group}placeholders no longer resolve to an empty string when LuckPerms/FTB Ranks is actually active โprefix/suffix/displaynamevariants were unaffected.- Nicknamed players (
/nick) now keep their permission-group prefix/suffix in the tab list โ a nickname used to silently drop it the instant it was set, on any group. PermissionAPI.getPrefix()/getSuffix()now fall back to the internal permission system when LuckPerms/FTB Ranks has no opinion, matchinggetGroupWeight()/getPrimaryGroup()'s existing behavior. FTB Ranks servers previously got no prefix/suffix at all through this mod, ever; LuckPerms groups with noprefix/suffixmeta set now fall back to an internal one too instead of showing nothing.- Five more places had the identical internal-manager-only bug (found by auditing every
remaining call site): the public
NeoEssentialsAPIgroup 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
on update) were silently failing on Windows โ fixed. Also fixed new default boards (like
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 force-generating far more chunks per teleport than necessary (an unneeded 9-chunk safety grid for RTP specifically, plus a 10-chunk burst refilling the background cache right after every teleport). Both fixed; newprewarmBatchSizeconfig caps the refill burst, and lower default range/attempts reduce worst-case cost on fresh servers./tpralso now announces its 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 storage backend choice entirely โ neither was ever registered in the split-config section 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 owndashboard.json,storagenow lives inmain.json. See the Split Config wiki page if you already hit this โ your original values are recoverable fromconfig.json.backup. - Right-clicking a physical crate block ran the whole open flow twice per click (duplicated "no keys" message, could double-consume keys) โ fixed.
- A crate with no rewards configured yet silently ate a key and reported the misleading "no keys" error instead of "no rewards configured" โ fixed; the key is no longer spent unless a reward actually exists.
- Tab-completion was silently missing on ~25 command arguments across 16 files (crate/hologram/ home/board/group names, item ids, player targets, etc.) โ full audit, all fixed.
- A crate's
&-coded display name showed up as literal text (e.g.&7Common Crate) instead of being colored, in chat, GUI titles, and the key item's name โ fixed mod-wide (every command reply built viaMessageUtil, not just crates). {server_name}is now a plain, independently-configurable name (general.serverName), no longer tied to any MOTD โ a new{server_motd}placeholder covers the "show the actual configured MOTD" case instead./neoe reloadsilently did nothing for the scoreboard system (only tablist was fixed for this before) โ scoreboard.json edits now actually take effect on reload.- Some inventory-utility client mods' "pull items from the open GUI" button could steal (and
duplicate) items straight out of
/crate preview/the opening reveal GUI โ an initial fix missed 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
other way still required virtual balance to redeem โ both fixed (see
/crate key giveitemabove). - A malformed config file (e.g. a stray brace from a manual edit) could crash the entire server repeatedly โ a JSON parse error now falls back to defaults for whatever that file drives instead of taking the server down.
- A nicknamed player still showed their real IGN in tab to anyone who joined the server after the nickname was set โ every join now re-syncs everyone's nickname overrides, not just the joining player's own.
/neoe reload(and/scoreboard reload) could kick every player seeing the sidebar scoreboard with a fatal "Network Protocol Error" โ fixed.- The permission system couldn't recover from a failed boot init without a full restart (kept
logging
PermissionManager is nullall session) โ/neoe reloadnow re-initializes it from scratch when that happens instead of failing the same way forever. - The "config splitting available"/"legacy data files" admin notices nagged on every single restart forever โ each now shows once per install instead of once per session.
- Closing the crate GUI immediately after using a pull-mod extraction button could still win the race and keep the item โ closing now sweeps a few more times over the next ~4 seconds instead of just once, closing the timing window entirely.
/crate admin createdidn't say where the new crate went โ now points toconfig/neoessentials/crates.json./scoreboard reloadnever refreshedanimations.jsonโ only/tablist reloaddid. Editing an animation and reloading via the scoreboard command left the old frames showing (raw{animation:...}/gradient text, unformatted) until a/tablist reloadalso happened to run./eco give|set|take//paynever invalidated the leaderboard "money" board (only/baltop's own cache), so a balance change could leave a scoreboard "richest player" line stale for up to 60s โ fixed./baltopand/leaderboard <board>also both misreported "no data" on the very 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
stopped persisting balances for the rest of that session) โ
/neoe reloadnow retries it, same as the permission system's existing self-heal. /payand/eco give|takecrashed on every use wheneversecurity.enableInputValidationwas turned off โ a validator returned the wrong type in that bypass path โ fixed.{animation:NAME}/gradient/rainbow tags never resolved in chat โ every command reply used a color-code-only parser that didn't know those tags existed, so they showed as raw literal text (reported for a crate's name showing{animation:animation}unresolved when opened). Fixed mod-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 nointervalMs/refreshIntervalequivalent for it.- Crate GUI titles and a crate key's lore/hover text now also resolve animation/gradient tags, matching the key's name (fixed earlier) โ same one-time-snapshot behavior.
- Confirmed, not a bug: crate keys (
/crate admin setkey) already support any vanilla or modded item, full NBT/data included โ no fixed item list. - An animation frame's gradient/rainbow tags were silently stripped in chat unless
chat.richText.enabledwas separately turned on (off by default) โ tablist/hologram always rendered 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 reloaddid) โ every sibling system's refresh interval already worked via/neoe reloadexcept this one. Fixed.{animation:NAME}froze on its first frame forever, mod-wide (holograms, scoreboard, chat, crate keys), on any server with the tablist module disabled โ the only thing that ever advanced 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 easy to confuse with each hologram's own, separate, seconds-basedrefreshInterval(/hologram setrefresh), which is the one that actually controls how often placeholders refresh. 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
own
frameDurationwas set, even though the same change applied instantly and smoothly in tablist/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 lose that data on server start due to a startup ordering race between two separate listeners. 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 scheduler caught up on a delayed cycle by firing back-to-back instead of skipping. Fixed by 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 โ the most common animation shape) could freeze on its first frame forever in holograms 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.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:yiaK4SZh:PSjHO4Cz"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:yiaK4SZh:PSjHO4Cz"
}

