A lightweight, API-first player settings management system for Paper/Purpur/Folia servers (1.20.5+)
- ๐ฏ 50+ Built-in Settings - Communication, display, gameplay, protection, and notification preferences
- ๐ Developer API - Easy-to-use API for third-party plugins to register custom settings
- ๐ช Event System - Cancellable pre-toggle and post-change events for deep integration
- ๐ Categorized GUI - Organized settings menu with category navigation and pagination
- ๐ Folia Compatible - Full support for Folia's regionized threading model
- ๐ Thread-Safe - Concurrent data access with proper synchronization
- โก Async I/O - Non-blocking file operations for optimal performance
- ๐จ Highly Configurable - Customize every aspect via YAML configuration files
- ๐ชถ Lightweight - Only 92KB! No external plugin dependencies required
- ๐ฅ Download
BetterSettings-1.0.0.jarfrom Releases - ๐ Place in your server's
pluginsfolder - ๐ Start/restart your server
- ๐ฎ Use
/settingsto open the settings GUI
That's it! Your players can now customize their experience.
| Command | Description | Permission |
|---|---|---|
/settings |
๐ฎ Open settings GUI | bettersettings.use |
/settings reload |
๐ Reload configuration | bettersettings.reload |
/settings info |
โน๏ธ View plugin information | bettersettings.info |
Aliases: /setting, /prefs, /preferences
| Permission | Description | Default |
|---|---|---|
bettersettings.use |
Access settings GUI | โ
true |
bettersettings.reload |
Reload plugin config | ๐ op |
bettersettings.info |
View plugin info | ๐ op |
bettersettings.* |
All permissions | ๐ op |
- โ๏ธ config.yml - Main plugin settings
- ๐ฏ settings.yml - Configure built-in settings (enable/disable, icons, descriptions)
- ๐ฌ messages.yml - Customize all user-facing messages
- โก performance.yml - Performance tuning (I/O, caching, auto-save)
- ๐จ ui.yml - GUI appearance and layout customization
- ๐ settings/*.yml - Custom setting definitions (optional)
๐ Full Configuration Guide โ
29 Fully Functional Settings + 31 API Framework Settings
โ Global Chat โข โ Private Messages โข โ Death Messages โข โ Join/Leave Messages โข ๐ Teleport Requests โข ๐ Trade Requests โข ๐ Friend Requests โข ๐ Chat Mentions โข ๐ DM Sound
โ Scoreboard โข โ Player Visibility โข ๐ Particle Effects โข ๐ Sound Effects โข โ Weather โข โ Time โข ๐ Damage Indicators โข โ Night Vision โข ๐ AFK Status โข โ Vanish โข ๐ Block Break Particles โข ๐ Scoreboard Numbers โข โ Tab List โข ๐ Coordinates Display โข ๐ Biome Display
โ Auto-Pickup โข โ Flight โข โ PvP โข โ Auto-Sprint โข โ Auto-Respawn โข โ God Mode โข โ Speed Boost โข โ Jump Boost โข โ Water Breathing โข โ Fire Resistance โข โ Hunger Loss โข โ Item Pickup โข โ Entity Collision โข ๐ Teleport Cooldown Bypass โข ๐ Build Mode
โ Drop Protection โข โ Inventory Protection โข โ Fall Damage โข โ Mob Targeting
๐ Mob Spawn โข ๐ Achievements โข ๐ Action Bar โข ๐ Boss Bar โข ๐ Titles โข ๐ Keep Inventory Reminder โข ๐ Mob Griefing โข ๐ Fire Spread โข ๐ Explosions โข ๐ Command Spy โข ๐ Social Spy
Legend: โ = Fully Functional | ๐ = API Framework (requires plugin integration)
Note: Settings marked with ๐ are placeholders that save player preferences but require integration with other plugins to function. See SETTINGS_STATUS.md for details.
๐ Full API Documentation โ
import com.bettersettings.api.Setting;
import com.bettersettings.api.SettingsRegistry;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
public class MyCustomSetting implements Setting {
@Override
public String getId() {
return "myplugin_mysetting";
}
@Override
public String getDescription() {
return "&eToggle My Feature";
}
@Override
public ItemStack getIcon(Player player, boolean state) {
return new ItemStack(Material.DIAMOND);
}
@Override
public boolean getDefaultState() {
return true;
}
@Override
public String getPermission() {
return "myplugin.setting.mysetting";
}
@Override
public boolean onToggle(Player player, boolean newState) {
// Apply the setting effect
if (newState) {
// Enable feature
} else {
// Disable feature
}
return true; // Return false to cancel toggle
}
}
// Register during plugin initialization
@Override
public void onEnable() {
SettingsRegistry.getInstance().registerSetting(new MyCustomSetting());
}import com.bettersettings.BetterSettings;
import com.bettersettings.data.PlayerDataManager;
// Get the data manager
PlayerDataManager dataManager = BetterSettings.getInstance().getDataManager();
// Check if a player has a setting enabled
UUID playerId = player.getUniqueId();
boolean isEnabled = dataManager.getSetting(playerId, "bettersettings_chat");
// Set a player's setting (use with caution)
dataManager.setSetting(playerId, "bettersettings_chat", false);import com.bettersettings.api.events.PlayerSettingChangeEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
public class MyListener implements Listener {
@EventHandler
public void onSettingChange(PlayerSettingChangeEvent event) {
if (event.getSettingId().equals("bettersettings_vanish")) {
if (event.wasEnabled()) {
// Player enabled vanish
hideFromMap(event.getPlayer());
}
}
}
}BetterSettings is designed for high-performance servers:
- ๐ Async I/O - All file operations are non-blocking
- ๐ฆ Batch Saves - Multiple players saved in single operation
- ๐งน Smart Caching - Automatic cleanup of offline player data
- ๐ฏ Minimal Overhead - Optimized data structures and algorithms
- ๐ Folia Ready - Proper scheduler usage for regionized threading
For SSD/NVMe servers:
io:
async: true
batch-saves: true
max-concurrent: 8For HDD servers:
io:
async: true
batch-saves: true
max-concurrent: 2Edit ui.yml to customize:
- GUI size (27 or 54 slots)
- Items per page
- Category system (menu or tabs mode)
- Navigation button positions
- Colors and icons
Edit settings.yml to change icons:
chat:
icon: PAPER # Change to any Material name
description: "&eToggle global chat messages"Edit messages.yml to customize all text:
setting-enabled: "&aEnabled: &7{setting}"
setting-disabled: "&cDisabled: &7{setting}"Track your server's usage on bStats!
- ๐ Issues: Report bugs on GitHub
- ๐ Wiki: Full documentation
- ๐ก Discussions: Ask questions
- ๐ API: JavaDocs included in source
Contributions are welcome! Please read CONTRIBUTING.md for guidelines.
MIT License - See LICENSE file for details
git clone https://github.com/mattbaconz/BetterSettings.git
cd BetterSettings
mvn clean packageThe compiled JAR will be in target/BetterSettings-1.0.0.jar
- โ Java 21+
- ๐ Paper/Purpur/Folia 1.20.5+
- โ No external plugin dependencies required
Note: BetterSettings is a standalone plugin that only requires the Paper API (provided by your server). Third-party plugins can optionally depend on BetterSettings to integrate with its API.
Made with โค๏ธ by mattbaconz
โญ Star this repo if you find it useful!