A Minecraft Fabric mod for server announcements and notices with optional client-side GUI enhancement.
- Features
- Requirements
- Installation
- Commands
- Chat Display Format
- Configuration
- Database
- Permissions
- Client GUI (Coming Soon)
- For Developers
- Roadmap
- Contributing
- License
- π’ Server-side Notice Management - Create, delete, pin, and manage server announcements
- πΎ Persistent Storage - SQLite database for reliable notice storage
- π¨ Dual Display Modes - Chat-based notifications (fallback) and optional client GUI
- π Pin Important Notices - Highlight critical announcements
- π Permission System - OP level 3 required for notice management
- βοΈ Configurable - JSON-based configuration system
- Minecraft: 1.21.7
- Fabric Loader: 0.18.4 or higher
- Fabric API: 0.129.0+1.21.7 or higher
- Java: 21 or higher
- Download the mod JAR file
- Place it in your server's
modsfolder - Start the server
- Configuration will be generated at
config/noticeexpress/config.json
- Download the same mod JAR file
- Place it in your client's
modsfolder - Enjoy enhanced GUI features (coming soon)
All commands start with /notice:
/notice publish <title> <content>
Example:
/notice publish "Server Maintenance" "The server will be down for maintenance on Saturday from 2-4 PM."
/notice delete <id>
Example:
/notice delete 1
/notice pin <id>
Example:
/notice pin 2
/notice unpin <id>
Example:
/notice unpin 2
/notice list
Shows a compact list of all notices with their IDs and titles.
/notice show
Displays all notices with full content in chat.
When viewing notices in chat, they appear in the following format:
[Publisher] [YYYY/MM/DD HH:mm] [PINNED]
Title (in gold, bold)
Content (in white, supports multiple lines)
Example:
[Admin] [2026/02/02 12:30] [PINNED]
Server Maintenance
The server will be down for maintenance on Saturday from 2-4 PM.
Please save your progress before then.
Configuration file location: config/noticeexpress/config.json
{
"serverTitle": "Server Announcements",
"databasePath": "config/noticeexpress/notices.db"
}- serverTitle: The title displayed in the client GUI (default: "Server Announcements")
- databasePath: Path to the SQLite database file (default: "config/noticeexpress/notices.db")
NoticeExpress uses SQLite for persistent storage. The database is automatically created and managed.
CREATE TABLE notices (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
publisher TEXT NOT NULL,
publisher_uuid TEXT NOT NULL,
content TEXT NOT NULL,
timestamp INTEGER NOT NULL,
is_pinned INTEGER NOT NULL DEFAULT 0,
created_at INTEGER NOT NULL
)The mod uses Minecraft's built-in OP system:
- OP Level 3+: Can publish, delete, pin, and unpin notices
- All Players: Can view notices using
/notice listand/notice show
The optional client-side mod will provide an enhanced GUI with:
- π Scrollable notice list
- π΄ Beautiful notice cards
- π Visual pinned indicators
- β¨ Expand/collapse functionality
- π±οΈ Click-to-interact interface
- Clone the repository:
git clone https://github.com/0x002500/NoticeExpress.git
cd NoticeExpress- Build the mod:
./gradlew build- Find the compiled JAR in
build/libs/
src/
βββ main/
β βββ java/top/orderly/noticeexpress/
β β βββ NoticeExpress.java # Main mod class
β β βββ command/
β β β βββ NoticeCommand.java # Command registration and handlers
β β βββ config/
β β β βββ ModConfig.java # Configuration management
β β βββ database/
β β β βββ DatabaseManager.java # SQLite connection manager
β β β βββ NoticeRepository.java # CRUD operations
β β βββ model/
β β β βββ Notice.java # Notice entity
β β βββ util/
β β βββ ChatNotificationFormatter.java # Chat formatting
β β βββ PermissionChecker.java # Permission utilities
β β βββ TimeFormatter.java # Time formatting
β βββ resources/
β βββ fabric.mod.json # Mod metadata
β βββ assets/noticeexpress/
β βββ icon.png # Mod icon
βββ client/
βββ java/top/orderly/noticeexpress/
βββ NoticeExpressClient.java # Client initialization
βββ ui/ # GUI components (coming soon)
import top.orderly.noticeexpress.NoticeExpress;
import top.orderly.noticeexpress.model.Notice;
Notice notice = new Notice();
notice.setTitle("My Notice");
notice.setPublisher("System");
notice.setPublisherUuid(UUID.randomUUID());
notice.setContent("This is a programmatically created notice.");
NoticeExpress.getNoticeRepository().createNotice(notice);import top.orderly.noticeexpress.NoticeExpress;
import top.orderly.noticeexpress.model.Notice;
import java.util.List;
// Get all notices
List<Notice> allNotices = NoticeExpress.getNoticeRepository().getAllNotices();
// Get a specific notice by ID
Notice notice = NoticeExpress.getNoticeRepository().getNoticeById(1);
// Get notices since a timestamp
long timestamp = System.currentTimeMillis() - 86400000; // Last 24 hours
List<Notice> recentNotices = NoticeExpress.getNoticeRepository().getNoticesSince(timestamp);- Client-side GUI
- Network packet communication
- Player join notifications
- Localization support (English & Chinese)
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'feat: add some amazing feature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project follows Conventional Commits:
feat:- New featuresfix:- Bug fixesdocs:- Documentation changesstyle:- Code style changes (formatting, etc.)refactor:- Code refactoringtest:- Adding or updating testschore:- Maintenance tasks
This project is licensed under the Apache-2.0 License - see the LICENSE file for details.