|
5 | 5 |
|
6 | 6 | import java.util.List; |
7 | 7 |
|
8 | | -@Header("LandClaimPlugin - Main Configuration") |
| 8 | +@Header({ |
| 9 | + "===========================================================", |
| 10 | + " LandClaimPlugin - Main Configuration ", |
| 11 | + "===========================================================" |
| 12 | +}) |
9 | 13 | public class PluginConfig extends OkaeriConfig { |
10 | 14 |
|
11 | | - @Comment("Messages Prefix (MiniMessage format)") |
| 15 | + @Comment({ |
| 16 | + "Messages Prefix (MiniMessage format)", |
| 17 | + "This prefix will appear before all chat messages sent by the plugin." |
| 18 | + }) |
12 | 19 | public String prefix = "<dark_gray>[<gold>LandClaim<dark_gray>]</gold> "; |
13 | 20 |
|
14 | | - @Comment("The item used as the Claim Wand (Material name)") |
15 | | - public String claimWandItem = "GOLDEN_SHOVEL"; |
16 | | - |
17 | | - @Comment("The default language file to load from the locales folder (e.g., en-US, es-ES)") |
| 21 | + @Comment({ |
| 22 | + "The default language/locale file to load from the locales folder (e.g., en-US, es-ES).", |
| 23 | + "Make sure the corresponding file exists in the plugins/LandClaimPlugin/locales/ directory." |
| 24 | + }) |
18 | 25 | public String language = "en-US"; |
19 | 26 |
|
| 27 | + @Comment({ |
| 28 | + "Adjacent Claim Connection Check", |
| 29 | + "If true, players can only claim new chunks that are directly adjacent to their existing claims.", |
| 30 | + "If false, players can claim chunks anywhere in the world." |
| 31 | + }) |
20 | 32 | public boolean requireConnectedClaims = false; |
| 33 | + |
| 34 | + @Comment({ |
| 35 | + "Diagonal Chunk Connection Check", |
| 36 | + "If requireConnectedClaims is true, this determines whether diagonal chunks count as connected (true)", |
| 37 | + "or only orthogonal (north/south/east/west) chunks count as connected (false)." |
| 38 | + }) |
21 | 39 | public boolean allowDiagonalConnections = true; |
22 | 40 |
|
23 | | - @Comment("Blocked worlds for claiming") |
| 41 | + @Comment({ |
| 42 | + "Blocked Worlds for Claiming", |
| 43 | + "Players will be unable to claim any land inside the worlds listed below." |
| 44 | + }) |
24 | 45 | public List<String> blockWorld = List.of("world_nether", "world_the_end"); |
25 | 46 |
|
| 47 | + @Comment({ |
| 48 | + "Blocked Commands in Claims", |
| 49 | + "List of commands that players are strictly blocked from executing while standing inside other players' claims.", |
| 50 | + "Use this to prevent unauthorized warping, setting homes, or teleportation in claimed territories." |
| 51 | + }) |
26 | 52 | public List<String> blockCmd = List.of("setwarp", "warp", "sethome"); |
27 | 53 |
|
28 | 54 | @Comment({ |
29 | 55 | "Multi-Profile System", |
30 | | - "Enable to allow players to manage multiple claims via an active profile selector.", |
| 56 | + "Enable to allow players to manage multiple separate claim profiles via an active profile selector GUI.", |
31 | 57 | "WARNING: If you disable this after players have already created multiple profiles, ", |
32 | | - "they will lose access to all but their primary profile! (Unless they switch back)", |
| 58 | + "they will lose access to all secondary profiles! Switch back to enable them again.", |
33 | 59 | "Use with caution." |
34 | 60 | }) |
35 | 61 | public boolean multiProfilesEnabled = false; |
36 | | - @Comment("Maximum number of profiles a single player is allowed to create (own)") |
| 62 | + |
| 63 | + @Comment("Maximum number of separate claim profiles a single player is allowed to own/create.") |
37 | 64 | public int maxProfilesPerPlayer = 2; |
38 | 65 |
|
| 66 | + @Comment("Cooldown in seconds for the /claim unstuck command to prevent spamming.") |
39 | 67 | public int cooldownUnstuck = 30; |
40 | 68 |
|
41 | | - @Comment("Map Integration") |
| 69 | + @Comment("Integration settings for web-based live maps (Dynmap, BlueMap, Squaremap, Pl3xmap).") |
42 | 70 | public MapConfig dynmap = new MapConfig(); |
43 | 71 | public MapConfig bluemap = new MapConfig(); |
44 | 72 | public MapConfig squaremap = new MapConfig(); |
45 | 73 | public MapConfig pl3xmap = new MapConfig(); |
46 | 74 |
|
47 | 75 | public static class MapConfig extends OkaeriConfig { |
| 76 | + @Comment("Enable/disable this specific map integration.") |
48 | 77 | public boolean enabled = true; |
| 78 | + @Comment("Fill color for the claim areas on the map (Hex color code without #).") |
49 | 79 | public String fillColor = "3366FF"; |
| 80 | + @Comment("Fill opacity for the claim areas on the map (0.0 = fully transparent, 1.0 = fully solid).") |
50 | 81 | public double fillOpacity = 0.3; |
| 82 | + @Comment("Border color for the claim areas on the map (Hex color code without #).") |
51 | 83 | public String borderColor = "3366FF"; |
| 84 | + @Comment("Border opacity for the claim areas on the map (0.0 = fully transparent, 1.0 = fully solid).") |
52 | 85 | public double borderOpacity = 0.8; |
53 | 86 | } |
54 | 87 |
|
55 | | - public boolean autoClaimDefault = false; |
56 | | - public boolean autoUnclaimDefault = false; |
| 88 | + @Comment("Default maximum number of chunks a player is allowed to claim (can be bypassed with landclaim.limit.X permission).") |
57 | 89 | public int chunkClaimLimit = 5; |
58 | 90 |
|
59 | | - @Comment("Maximum number of claims a player can be a member of (default: 1)") |
| 91 | + @Comment("Maximum number of claims a player is allowed to join as a trusted member (default: 1).") |
60 | 92 | public int maxMemberships = 1; |
61 | 93 |
|
62 | | - @Comment("Database Settings (Supported: MYSQL, SQLITE)") |
| 94 | + @Comment("Database connection and backend settings (Supported backends: SQLITE, MYSQL, MARIADB).") |
63 | 95 | public DatabaseConfig database = new DatabaseConfig(); |
64 | 96 |
|
65 | 97 | public static class DatabaseConfig extends OkaeriConfig { |
66 | | - @Comment("Database type: SQLITE or MYSQL") |
| 98 | + @Comment("Database type: SQLITE, MYSQL, or MARIADB") |
67 | 99 | public String type = "SQLITE"; |
68 | | - @Comment("MySQL/MariaDB host (ignored for SQLite)") |
| 100 | + @Comment("MySQL/MariaDB host address (ignored for SQLite)") |
69 | 101 | public String host = "localhost"; |
70 | 102 | @Comment("MySQL/MariaDB port (ignored for SQLite)") |
71 | 103 | public int port = 3306; |
72 | 104 | @Comment("Database name") |
73 | 105 | public String databaseName = "landclaim"; |
74 | 106 | @Comment("MySQL/MariaDB username (leave empty for SQLite)") |
75 | 107 | public String username = ""; |
76 | | - @Comment({"MySQL/MariaDB password (leave empty for SQLite)", |
77 | | - "Can also be set via LANDCLAIM_DB_PASSWORD environment variable for security"}) |
| 108 | + @Comment({ |
| 109 | + "MySQL/MariaDB password (leave empty for SQLite)", |
| 110 | + "For improved security, this can also be set via the LANDCLAIM_DB_PASSWORD environment variable." |
| 111 | + }) |
78 | 112 | public String password = ""; |
79 | | - @Comment("Table prefix for all plugin tables") |
| 113 | + @Comment("Table prefix for all plugin tables in the database") |
80 | 114 | public String tablePrefix = "lc_"; |
81 | | - @Comment("Maximum number of database connections in the pool") |
| 115 | + @Comment("Maximum number of active database connections in the HikariCP pool") |
82 | 116 | public int maximumPoolSize = 10; |
83 | | - @Comment("Minimum number of idle connections in the pool") |
| 117 | + @Comment("Minimum number of idle connections to maintain in the pool") |
84 | 118 | public int minimumIdle = 2; |
85 | | - @Comment("Connection timeout in milliseconds") |
| 119 | + @Comment("Maximum connection timeout in milliseconds before failing") |
86 | 120 | public long connectionTimeout = 30000; |
87 | 121 | } |
88 | 122 |
|
89 | | - @Comment("Redis Cross-Server Sync Settings") |
| 123 | + @Comment("Redis settings for cross-server synchronization (useful for BungeeCord/Velocity proxy networks).") |
90 | 124 | public RedisConfig redis = new RedisConfig(); |
91 | 125 |
|
92 | 126 | public static class RedisConfig extends OkaeriConfig { |
| 127 | + @Comment("Enable/disable Redis synchronization.") |
93 | 128 | public boolean enabled = false; |
| 129 | + @Comment("Redis server host address.") |
94 | 130 | public String host = "localhost"; |
| 131 | + @Comment("Redis server port.") |
95 | 132 | public int port = 6379; |
| 133 | + @Comment("Redis server password (leave empty if no authentication is required).") |
96 | 134 | public String password = ""; |
| 135 | + @Comment("Redis Pub/Sub channel name used for synchronization messages.") |
97 | 136 | public String channel = "landclaim:sync"; |
98 | 137 | } |
99 | 138 |
|
| 139 | + @Comment({ |
| 140 | + "WorldGuard Adjacency Protection Gap", |
| 141 | + "Minimum distance in chunks that must be maintained between a player claim and any WorldGuard region.", |
| 142 | + "Set to 0 to disable this gap restriction." |
| 143 | + }) |
100 | 144 | public int worldguardGap = 0; |
| 145 | + |
| 146 | + @Comment({ |
| 147 | + "Claim Adjacency Protection Gap", |
| 148 | + "Minimum distance in chunks that must be maintained between claims owned by different players.", |
| 149 | + "Set to 0 to allow players to claim chunks adjacent to other players' claims." |
| 150 | + }) |
101 | 151 | public int minClaimGap = 0; |
102 | 152 |
|
| 153 | + @Comment("Interval in server ticks (20 ticks = 1 second) for updating the player action bar display (boundary titles, claim status, etc.).") |
103 | 154 | public int actionbarUpdateInterval = 20; |
104 | 155 |
|
105 | | - @Comment("Default maximum warps per player (bypass with landclaim.warps.limit.X)") |
| 156 | + @Comment("Default maximum claim warps a player can set (can be bypassed with landclaim.warps.limit.X permission).") |
106 | 157 | public int maxWarps = 3; |
107 | 158 |
|
108 | 159 | @Comment({ |
109 | | - "LuckPerms / Bukkit Permissions", |
| 160 | + "LuckPerms / Bukkit Permissions Bypass", |
110 | 161 | "If true, separate permissions like landclaim.menu.<menu>, landclaim.menu.*, ", |
111 | 162 | "and command-specific permissions (e.g., landclaim.unstuck) will be checked.", |
112 | | - "If false, separate permissions are bypassed so you don't have to configure a permission system." |
| 163 | + "If false, these separate permissions are bypassed. This is ideal for friendly/vanilla SMP ", |
| 164 | + "servers where players don't want to set up an elaborate permission group system." |
113 | 165 | }) |
114 | 166 | public boolean useSeparatePremission = false; |
115 | 167 |
|
|
0 commit comments