Notice Board
↓ Download on CurseForgeA community notice board that replaces wall-of-signs setups with one organized place for posts. Players write announcements, trades, rules, and events directly from an in-game menu, with categories, expiration timers, comments, search, saved posts, archiving, and per-board local mode.
Overview
I built Notice Board because every survival world I joined eventually ended up with a wall of signs at spawn, half of them outdated and the rest impossible to read. This addon replaces all of that with one organized place where players can write announcements, trades, rules, and event notes directly from an in-game menu.
It's designed for survival servers, realms, and shared worlds. Posts live in the world's dynamic properties so they survive restarts. Everything runs through the Script API with no experimental features required, and the addon is fully achievement-safe.
Key features:
- One central board for community notices, with multi-block standing and wall variants
- Player-created posts with title, body, category, expiration, and optional location stamp
- 5 built-in categories plus unlimited custom categories with 21 icons to pick from
- Pin up to 4 posts to the top of any scope
- Per-post comments with cooldowns and length limits
- Personal Saved Posts list, kept across sessions
- Multi-keyword search across every visible post
- Optional admin approval queue for player posts
- Archive system with optional 14-day auto-delete
- Per-board "Local mode": each board can carry its own posts, categories, pins, and templates
Notice Board uses only the stable Script API and dynamic properties. No experiments, no cheats, no achievements disabled.
Installation
New here? See the Installation & Updating
guide for the basics on importing .mcaddon files and
applying packs to a world.
Both the Behavior Pack and the Resource Pack must be enabled on the
world. The wall and floor block models live in the RP, so the board
will look broken if only the BP is applied. Both packs ship in the
single .mcaddon import.
Notice Board requires Minecraft Bedrock 1.21.100 or newer. No experimental toggles are required, and posts persist in world dynamic properties so they survive restarts and pack updates.
↑ Back to topGetting the Board
Crafting Recipe
The Notice Board item is crafted at any Crafting Table using the shaped pattern below:
S S S S = Cobblestone
L P L P = Plank (any type)
L L L L = Log (any type)
Total ingredients: 3 cobblestone, 1 plank, and 5 logs. The recipe outputs 1 Notice Board item, found in the creative inventory under the Items tab. The item stacks to 16.
Placing the Board
The Notice Board is a multi-block structure that auto-builds when you place it. Where you click decides which variant you get:
| Variant | Trigger | Footprint | Total blocks |
|---|---|---|---|
| Standing board | Right-click the top of a block | 3 wide × 3 tall × 1 thick | 9 |
| Wall board | Right-click the side of a block facing N/S/E/W | 3 wide × 2 tall × 1 thick | 6 |
Standing boards auto-orient to face the player. Wall boards face out from whichever wall they were placed against. The full footprint must be clear. If any of the 6 or 9 destination blocks are obstructed, placement fails silently and the item is not consumed. Wall boards can only attach to vertical block faces (north, south, east, or west) — you can't hang one from a ceiling or place one on the floor.
Breaking the Board
Breaking any block of a notice board removes the entire structure and drops one Notice Board item. All posts, categories, pins, archive, templates, and the activity log for that board are preserved, since the data is keyed to dimension, position, and board type rather than to the blocks themselves. Placing a new board at the same coordinates will restore the same dataset.
Use the in-menu Reset Board option (under Board Controls) to wipe a board's data without breaking it.
If you place a Local-mode board, then break it and place a Global-mode board at the same spot, you'll see the Global feed, but the Local data is still stored in case you want it back later.
Opening the Menu
Right-click (or long-press on touch) any block of a notice board to open the Main Menu UI. The board UI uses Script API forms, so closing a form has no effect on the world and you can browse freely without committing changes.
The title bar of every menu shows the current scope:
Notice Board (Global) or Notice Board (<your local label>)
(default Local).
Several players can use the same board at once. Writes are protected by a world-level lock. If two players try to post at the exact same instant, one gets a "Busy" prompt and can retry. The lock auto-clears in under 3 seconds.
Main Menu
The main menu has two parts: categories at the top, and
actions below. Non-admins only see categories where
visibility is on. Admins see every category, with hidden ones marked
(Not visible to non-admins).
After the category buttons, the actions appear in this order:
| # | Button | Available to | What it does |
|---|---|---|---|
| 1 | Search | Everyone | Keyword search across all visible active posts |
| 2 | Saved | Everyone | Open your personal saved-posts list |
| 3 | Addon Info | Everyone | In-game help, recipe, and admin reference |
| 4 | Add Notice | Players (if allowed) + admins | Create a new player post |
| 5 | Add Admin Notice | Admins only | Create an admin-tagged post |
| 6 | Board Controls | Admins only | Settings, moderation, and management pages |
If Allow player posts is OFF in settings, the
Add Notice button only appears for admins. Category
buttons show an unread badge [N Unread] when new posts
have been added since you last viewed that category.
Categories
Tapping a category opens a paged list (15 posts per page). Pinned
posts always appear first. Each post button shows the post title, or
the first ~44 characters of the body if no title was set. Pinned
entries display [Pinned] underneath, and pagination
appears only when there is more than one page.
The category page also shows an Add Notice / Add Admin Notice button at the top, scoped to that category.
Search
A modal text field accepts multi-keyword input. The search is an AND match across post title, body, author name, and category name, with results sorted by most recently posted or edited. Tap any result to read it, and use Search Again on the results page to run another query.
Saved
Your personal bookmarks list. You can save up to 200 posts per player; older entries are dropped FIFO when the cap is hit. Saved entries are looked up in both the active post list and the archive, so anything you've bookmarked stays accessible after it expires (until it's permanently deleted).
Addon Info
The in-game info screen has three sub-pages:
- How To: quick guide for posting, formatting, saving, editing, and expirations
- Recipes: visual recipe for the board item
- Admin Control Info: full admin reference (the same notes I'd type in chat to an OP)
Add Notice
Opens the post composer for the current scope. Admins also see
Add Admin Notice, which tags the resulting post as
admin and skips the approval queue. See
Creating a Post for the full form.
Creating a Post
Post Fields
| Field | Type | Required | Notes |
|---|---|---|---|
| Category | Dropdown | Yes | Hidden and admin-only categories are filtered out for non-admins |
| Title (Button Name) | Text | Yes | Used as the button label in category lists |
| Line 1 – Line 5 | 5 text fields | At least one non-empty | Joined with newlines in the order entered, regardless of which box you typed in |
| Expiration | Dropdown | Yes | Default: 7d |
| Include Location | Toggle | Default ON | Stamps current dimension and coordinates onto the post |
Each line field accepts the literal sequence \n to insert
a manual line break inside that line. The full message body is
normalized and capped at 1000 characters on save.
Expiration durations
The composer offers 8 expiration choices. Time is real-time, so posts expire even when no players are online.
| Option | Length |
|---|---|
| 12hr | 12 hours |
| 24hr | 1 day |
| 48hr | 2 days |
| 72hr | 3 days |
| 7d | 7 days (default) |
| 14d | 14 days |
| 30d | 30 days |
| Infinite | Never expires |
If admins disable infinite posts via the
Allow infinite posts setting, the Infinite option is
rejected at submit time with an error message.
Templates
Admins create templates under
Board Controls → Post Templates. When at least one
template exists for the current scope, the post composer first shows
a "Choose a template or start blank" picker. Picking a template
pre-fills the title, category, and body. Players only see templates
whose category they're allowed to post in.
Approval queue
When the admin setting Require approval queue is ON,
every player post is sent to the Pending Queue instead of going live.
Admins review it via Board Controls → Pending Queue and
choose Approve or Deny. Admin posts
always go live immediately and skip the queue.
Reading a Post
Tapping any post button opens its detail view. The body shows the
title in bold, an info line of <category> · <age> · <author>,
the full message text, the location (if attached), an
Edited: Xh Xm ago stamp if the post was edited, and an
Expires in: Xd Xh line if the post has an expiration set.
Action buttons vary by permission and post state:
| Button | Who sees it | Notes |
|---|---|---|
| Comments | Everyone (if comments enabled) | Disabled label Comments (Locked) if the post is locked |
| Save / Unsave | Everyone | Toggles the post in your personal saved list |
| Edit | Player posts: author or any admin. Admin posts: admins only. | Cannot edit locked posts unless you are an admin |
| Delete | Player posts: author or any admin. Admin posts: admins only. | Removes the post from the active list |
| Lock / Unlock | Admins only | Locked posts can't be edited; comments are also locked |
| Pin / Unpin | Admins only | 4 pin slots per scope |
| Approve / Deny | Admins, on pending posts | Only shows when viewing a pending post |
| Back / Main Menu | Everyone | Returns to where you came from |
Comments
- Each comment is up to 30 characters
- Each post can hold up to 20 comments total
- Each player has a 60-second cooldown between comments
- Comments display as
<author>: <text> - <age> - You can delete your own comments; admins can delete any comment
- If a post is locked, or comments are disabled at the category or global level, the comment screen explains why
Saved Posts
Saved entries are stored per-player in the world database (not on the player's account). The list caps at 200 entries per player, with the oldest dropped first when the cap is hit. Saved posts are looked up in both the active and archive lists, and the list is personal: only you see your own saved items.
↑ Back to topCategories
Default categories
The board ships with 5 built-in categories:
| ID | Name | Icon | Visible by default |
|---|---|---|---|
news | News | News | Yes |
trade | Trade | Trade | Yes |
rules | Rules | Book and Quill | Yes |
misc | Miscellaneous | Bundle | Yes |
admin_notices | Admin Notices | Command Block | No (hidden) |
The Admin Notices category always sorts to the bottom of the list. To
make it visible to players, an admin can toggle it on under
Manage Categories → Toggle visibility.
Each category supports the following per-category flags:
- Visible: controls whether non-admins see it
- Admin-only posting: only admins can post here (great for "Rules")
- Comments off: disables comments on every post in the category
- Custom icon: pick from 21 built-in icons (see Reference Tables)
- Description: optional text shown at the top of the category page
New / unread badges
The board tracks per-player "last seen" timestamps for each
scope+category pair. When new posts are added after you last viewed
the category, the category button shows a green
[N Unread] badge. The seen list caps at 250 entries per
player and drops the oldest entries when full.
Admin Guide
Admin access
A player is treated as a board admin if any of these are true:
- They are an Operator (
/op <name>) - recommended - Their command permission level is
GameDirectorsor higher - They have the
admintag - backup
To grant admin access via tag (useful when OP detection isn't available):
/tag <player> add admin
To revoke:
/tag <player> remove admin
All OPs are admins automatically. The admin tag is
only a fallback for situations where OP detection isn't returning
the expected result (older Bedrock builds, etc).
Admin Notices
- Posted via Add Admin Notice on the main menu, or from inside any category
- Tagged as
adminin the database, so they get the admin icon and can only be edited or deleted by admins - Admin posts always skip the approval queue, even when it's enabled
- Use the hidden Admin Notices category for staff-only messages
Pinning posts
Each scope (the global feed and each local board) has 4 pin slots. From a post, tap Pin and choose Slot 1–4. Pinned posts are listed first in their category. Pinning a post in slot N replaces whatever was in that slot. Tapping Unpin (slot N) clears the slot.
Pins are scope-wide, not per-category. A pinned post still only appears inside its own category. Pinning doesn't push it everywhere, it just sticks it to the top of its category.
Locking posts
Locking a post prevents anyone (including the author) from editing
it. Comments on a locked post are also locked. Admins can still edit
or delete a locked post. The post detail view shows the lock icon
and the Comments (Locked) label.
Editing & deleting any post
Admins can edit or delete any player post and any admin post. Players
can only edit or delete their own posts. Editing a post stamps it
with editedAt and shows "Edited: Xh ago" in the body.
Board Controls
Menu path: Notice Board → Board Controls. The Board
Controls hub is admin-only and shows these buttons in order:
- Settings (Global/Local)
- Pending Queue (only when
Require approval queueis ON) - Manage Categories
- Post Templates
- Activity Log
- Archive (only when
Enable post archivingis ON) - Reset Board (Defaults)
- Main Menu
Each button shows the current board mode label in parens, e.g.
Manage Categories (Global).
Settings (Global/Local)
A single ModalForm with all toggles, in this exact order. Note the Scope column: most toggles affect every board in the world.
| Setting | Scope | Default | What it does |
|---|---|---|---|
| Allow player posts | Global | ON | When OFF, only admins can post |
| Allow infinite posts | Global | ON | When OFF, the Infinite expiration option is rejected |
| Require approval queue | Global | OFF | When ON, player posts go to the Pending Queue first |
| Allow comments | Global | ON | Master toggle for the comment system |
| Enable post archiving | Global | ON | When OFF, expired posts are deleted instead of archived |
| Auto-delete archived notices after 14 days | Global | ON | Removes archived posts older than 14 days |
| Board mode | Local | Global | Switches this board between Global and Local |
| Local label | Local | Local | Custom name shown on this board's title (max 20 chars) |
Six of the eight settings apply globally to every board in the world. Only Board mode and Local label change just the board you're standing at. Plan your global toggles before your players start filling boards with posts.
Pending Queue
- Lists all pending posts for the current scope, newest first
- Tap any post to open the standard detail view
- Inside, admins see Approve (publishes the post) and Deny (discards it)
- The activity log records who approved or denied what
Manage Categories
This menu has 8 actions, in order:
| Action | Notes |
|---|---|
| Add category | Name + icon picker + visibility toggle |
| Rename category | Pick a category, type a new name |
| Set category icon | Two-step flow: pick category, then pick from 21 icons |
| Set category description | Optional text shown at the top of the category page |
| Toggle visibility | Hide a category from non-admins |
| Lock posting (admin-only) | Restrict the category to admin posts only (perfect for Rules) |
| Toggle comments | Disable comments for posts in this category |
| Remove category | Posts get reassigned to Misc (or the first remaining category). At least 1 category must remain. |
Categories you add on a Local-mode board only exist on that board, and they don't appear on other boards. Categories created on a Global-mode board appear on every Global board.
Post Templates
Admin-only screen with 3 actions: Add template, Edit template, and Remove template. Each template has a name, default category, and body text. When templates exist, the post composer shows a "Choose a template or start blank" picker before the post form. Players only see templates whose category they're allowed to post in.
Common uses: pre-formatted Trade Listings, Event templates, Rule announcements.
Activity Log
- Shows the last 20 entries for this scope, newest first
- Tracks posts, edits, deletes, approvals/denials, pins/unpins, locks, comment activity, category changes, template changes, and archive deletions
- Capped at 50 stored entries internally (oldest dropped)
- A Clear log button sits at the bottom of the screen
Archive
- Lists expired posts for the current scope, sorted by most recently expired
- Only available when
Enable post archivingis ON - Tap any archived post to view it (read-only)
- Inside an archived post, admins can permanently Delete it
- Delete all at the bottom clears the entire archive
- If
Auto-delete archived notices after 14 daysis ON, the sweep runs whenever any player opens any notice board, as long as at least one player is online. Expired posts older than 14 days are removed scope-by-scope — opening a Global board sweeps the global archive, and opening a Local board sweeps that Local board's archive. - Archive caps at 250 entries per scope (oldest dropped beyond that)
Reset Board (Defaults)
Reset has no undo and no backup. Read which behavior applies to your board's current mode before confirming.
- Local-mode reset: Clears this board's local posts, pins, pending queue, archive, templates, and any local category overrides. The board returns to Global mode.
- Global-mode reset: Wipes the entire global feed (every board using Global mode), resets settings to defaults, and resets the category list to defaults.
Global vs Local Mode
This is the most important conceptual feature in the addon, so it's worth a careful read.
Global mode (default):
- All Global-mode boards share the same posts, pins, categories, archive, and templates
- Posting on one Global board makes the post visible on every other Global board in the world
- Use this for a single server-wide notice feed
Local mode:
- Each Local-mode board has its own independent posts, pins, archive, pending queue, templates, and category overrides
- Use this for per-region notice boards: a town board, a market board, a spawn board, etc.
- Each Local board can have a custom title (e.g.
Notice Board (Town)) via the Local label setting
Important behaviors:
- Mode is set per-board under
Board Controls → Settings → Board mode - Switching from Global to Local does not copy global posts; the new local board starts empty
- Switching back from Local to Global hides the local data but does not delete it; switching to Local again restores the same data
- Local categories start as a copy of the current global categories the first time you switch a board to Local mode; after that, edits on a local board only affect that board
Keep one Global board at spawn for server-wide announcements, and place Local boards in each town for community-specific posts. Same item, same recipe, just toggle the mode after placing it.
Limits & Caps
| Item | Cap | Behavior when exceeded |
|---|---|---|
| Active posts per scope | 80 | Oldest dropped |
| Pending posts per scope | 80 | Oldest dropped |
| Archived posts per scope | 250 | Oldest dropped |
| Activity log entries (stored) | 50 | Oldest dropped |
| Activity log entries (displayed) | 20 newest | - |
| Saved posts per player | 200 | Oldest dropped |
| Per-category posts per page | 15 | Pagination |
| Pin slots per scope | 4 | Manual replace |
| Comment length | 30 chars | Truncated |
| Comments per post | 20 | New comments rejected |
| Comment cooldown | 60 seconds | Per player |
| Post body length | 1000 chars | Truncated on save |
| Local label length | 20 chars | Truncated |
| Per-player "seen" entries | 250 | Oldest dropped |
| Available category icons | 21 | (See reference) |
DB storage notes:
- The full board database is stored in world dynamic properties
- Single-key cap is 32,767 chars; when exceeded, data spills into 4 chunked keys
- A world-level lock prevents two players from writing simultaneously (TTL ~2.5s)
- If the DB grows too large to fit even in chunks, the oldest archived/pending/active posts are aggressively trimmed to make room
Troubleshooting & FAQ
"The board looks broken / blocks are missing textures"
The most common cause of any problem with this addon is that only one of the two packs is enabled. Notice Board needs both the Behavior Pack and the Resource Pack applied to the world, and both should be at v1.0.4. Check the world's pack list before anything else.
"I can't see Add Notice"
An admin has turned off Allow player posts in Settings.
Either ask an admin to enable it, or be added as an admin yourself.
"I can't see Board Controls"
You aren't an admin. Either get OP'd (/op <name>)
or have an admin run /tag <name> add admin.
"My post didn't appear, it says 'Submitted'"
The board has Require approval queue turned on. An
admin needs to open Board Controls → Pending Queue
and approve your post.
"I can't pin, lock, or approve a post"
These actions are admin-only. See Admin access for how to get admin status.
"Categories on this board don't match another board"
You're looking at a Local-mode board. Each Local board has its own
categories. Switch the board to Global mode under
Board Controls → Settings → Board mode to share
categories with the rest of the world.
"My post got auto-deleted"
Posts have an expiration timer. After expiration, posts are moved to the Archive (if archiving is on) and permanently deleted after 14 days (if auto-delete is on). Use the Infinite expiration option for posts you want to keep forever, and make sure infinite posts haven't been disabled in Settings.
"Someone else is updating the board"
Two players tried to write to the board at the same time. Wait a second and try again; the lock auto-clears in under 3 seconds.
"How do I run a debug report?"
Operators can run any of these to print a diagnostic report (version, event wiring, DB status, settings, nearby cores, and a pass/fail health check):
/function jm_nb/debug
/function jm_nb/debug_verbose
When asking for help on Discord, please include the output of
/function jm_nb/debug_verbose.
For questions not covered here, visit my Discord.
Reference Tables
Available category icons
There are 21 icons available in the icon picker. They're sorted alphabetically in the in-game picker. The internal IDs are:
bed, bell, book_and_quill,
bread, brick_block, bundle,
campfire, chest, clock,
command_block, compass,
diamond_chesplate, diamond_hoe,
knowledge_book, locations,
nether, news, pin,
sign, sword, trade
The default icon for new categories (if none is picked) is the pin icon.
Note: diamond_chesplate is a known
misspelling of "chestplate" in the source code. The ID reproduced
here matches what you'll see in-game, and the spelling will be
corrected in the next addon update.
Default category assignments
| Category | Icon |
|---|---|
| News | News |
| Trade | Trade |
| Rules | Book and Quill |
| Miscellaneous | Bundle |
| Admin Notices | Command Block |
Comment system
| Constant | Value |
|---|---|
| Max comment length | 30 chars |
| Max comments per post | 20 |
| Comment cooldown | 60 seconds |
Activity events tracked
- Player posted / deleted / edited a post
- Admin approved / denied a pending post
- Admin pinned / unpinned a post (slot N)
- Admin locked / unlocked a post
- Player commented on / deleted a comment
- Admin set category visibility / posting lock / comments off
- Admin created / edited / removed a template
- Auto-delete sweep removed N archived posts
- Admin deleted an archived post / cleared the archive
Compatibility
- Bedrock version: 1.21.100 or newer (from manifest
min_engine_version) - Script API modules used:
@minecraft/server 2.1.0,@minecraft/server-ui 2.0.0 - No experiments needed: works on vanilla worlds and realms
- Achievements: Safe. Using this addon does not disable achievements
- Cheats: Not required. Board functions work in worlds with cheats off
- Multiplayer: Designed for it. Concurrent writes are protected by a world-level lock.
- Other JM addons: No known conflicts. Notice Board uses the
jm_nb:namespace exclusively for item IDs, block IDs, and dynamic properties. - Custom blocks: Notice Board adds 15 block IDs (9 standing + 6 wall). None overlap with vanilla.
- Worlds: Posts and settings persist across world saves and restarts via dynamic properties.