GFactions Version 1.4.1 Changelog June 13, 2025
This is a small quality-of-life update focused on giving factions more personality and control over their identity.
✨ New Features Custom Faction Colors on Dynmap New /f setcolor Command: Faction leaders can now set a custom color for their territory on the server's Dynmap.
Usage:
/f setcolor <0xHexCode> to set a new color (e.g., /f setcolor 0xFF00FF for magenta).
/f setcolor reset to clear the custom color and return to the default relationship-based colors (ally/enemy/neutral).
Persistent Storage: Your custom color is saved and will persist through server restarts.
Info Display: The currently set custom color for a faction is now visible in the /f who screen.
🛠️ Improvements & Fixes Tab Completion: The new /f setcolor command includes tab-completion to suggest "0x" and "reset", making it easier to use.
Instant Dynmap Update: Changing a faction's color will now trigger an immediate refresh of that faction's appearance on the Dynmap.
GFactions Version 1.4.0 Changelog June 13, 2025
This update introduces significant new features, fixes key bugs, and adds a host of new configuration options to give you more control over your server's factions experience.
✨ New Features Faction Descriptions Factions can now set a public description using the new /f desc [description] command.
The description is displayed in /f who and on the Dynmap popup for the faction's territory.
This feature can be toggled on or off in the config.yml.
A configurable character limit for descriptions has also been added.
Extensive Configuration for Limits & Power The config.yml file now has dedicated sections to control core mechanics.
Power: You can now set the absolute maximum power a faction can have (max_power).
Claiming: You can now set the absolute maximum number of claims a faction can have (max_claim_limit) and the maximum size of a /f claimfill operation (claimfill_max_size).
🛠️ Improvements & Fixes Claiming Systems Autoclaim Fixed: The /f autoclaim command now functions as intended. When toggled on, players will automatically claim any unclaimed chunk they enter, provided their faction has enough power and is within its claim limits.
Claimfill Reworked: The /f claimfill command has been completely overhauled.
Players must now stand in an unclaimed chunk.
The command will now intelligently detect if the chunk is part of a "pocket" that is completely surrounded by the player's faction's territory.
If a valid, enclosed pocket is found, all unclaimed chunks within it will be claimed, up to the new configurable claimfill_max_size.
General Improvements Home & Outpost Setting: Using /f sethome or /f outpost sethome will now correctly overwrite and move an existing home location.
Dynmap Integration: The Dynmap territory pop-up now includes the new faction description.
Teleport Safety: The plugin now safely handles attempts to teleport to a location in an unloaded world.
⚙️ Configuration Changes (config.yml) The following keys have been added or moved within your config.yml.
power.max_power: Sets the absolute maximum power a faction can achieve.
faction_details.description.enabled: Toggles the entire faction description feature.
faction_details.description.max_length: Sets the character limit for faction descriptions.
faction_details.who_screen_display.show_description: Toggles showing the description in /f who.
claiming.max_claim_limit: Sets the absolute maximum number of land chunks a faction can claim.
claiming.claimfill_max_size: Sets the maximum number of chunks that can be filled by a single /f claimfill command.
Version 1.3.1 - 2025-06-06This update introduces major configuration enhancements, a complete overhaul of the chat prefix system for better compatibility, and improved command consistency.AddedPvP Protection System Toggle: A new master toggle, pvp_protection_system_enabled, has been added to config.yml to completely enable or disable the faction PvP protection feature. It is disabled by default.When this feature is disabled in the config, the /f togglepvp command is hidden from /f help and cannot be used by players.The "PvP Protection" status line is also hidden from the /f info screen if the system is disabled.Configurable /f info Screen: A new section, who_screen_display, has been added to config.yml.This allows server administrators to enable or disable every individual line item on the /f info (or /f who) screen, providing full control over the information displayed to players.The ability to see a faction's home block coordinates (show_home_location) is disabled by default.ChangedChat System Overhaul: The internal chat prefix system has been replaced with full PlaceholderAPI integration. This is a major change that ensures GFactions prefixes work seamlessly with other chat management plugins like EssentialsXChat. Public chat formatting is now handled by setting placeholders (e.g., %gfactions_prefix% or %gfactions_tag_prefix%) in your chat formatter's configuration.Standardized Public Chat Prefix: As part of the new chat system, the default public chat prefix is now the full faction name, e.g., [MyFaction] PlayerName: message. This is provided by the %gfactions_prefix% placeholder.Claimfill Cost: The power cost for using the /f claimfill command is now directly tied to the standard claim_chunk cost, removing the separate claim_fill cost variable from config.yml for better consistency.FixedChat Prefix Conflicts: Resolved a long-standing issue where faction chat prefixes would conflict with or be overridden by other plugins. The new PlaceholderAPI-based system prevents these conflicts entirely.Claimfill Cost Consistency: Addressed an issue where the cost for /f claimfill was confusing. The cost is now identical to using /f claim for each chunk, making the command's behavior more intuitive.
GFactions Plugin - Changelog (Version 1.3.0) Date: 2024-05-23
This changelog summarizes new features, fixes, and improvements made to the GFactions plugin.
New Features & Major Changes Claim Filling (/f claimfill): Implemented the /f claimfill command, allowing factions to claim pockets of unclaimed land completely surrounded by their existing territory. This feature uses a Breadth-First Search (BFS) algorithm to identify fillable areas.
Claim filling is subject to power costs per chunk and the faction's overall claim limits. Successfully filled chunks are claimed, power is deducted, and data is saved. Player Tab List Display: Implemented a system to update a player's display name in the tab list to reflect their faction tag and rank. This update occurs on player join, when joining/leaving a faction, or when their rank changes.
Outpost System Enhancements: Outposts can now merge with the main faction territory if their claimed chunks connect. Improved handling of outpost home relocation if the original outpost spawn chunk is lost. Faction Guide (/f guide): Added an in-game /f guide command that displays configurable messages explaining basic faction functionalities and commands. Admin Spy for Chat: Admins with the goatedfactions.admin.spy permission can now see faction-only chat messages. A new permission goatedfactions.admin.allyspy allows admins to see ally-only chat messages. Core Plugin (GFactionsPlugin.java) Task Management: Added getPowerDecayTask() method to retrieve the BukkitTask for the power decay system.
Changed visibility of startPowerRegeneration() and startPowerDecayTask() to public for better access during admin-initiated config reloads.
Data Loading & Integrity (loadFactionsData): Strengthened data loading with robust null checks for critical fields like originalName and ownerUUIDString to prevent errors and improve logging for corrupted entries. Ensured a faction's home chunk and outpost claims are correctly registered globally and internally upon loading. Claiming Logic (claimChunk): Refined overclaiming logic: the global claimedChunks map and the old owner's internal claim list are now correctly updated. Ensured the isOutpostCreation flag correctly bypasses certain costs/checks when establishing new outposts.
Data Persistence: Reviewed and increased consistency in calling saveFactionsData() and saveFactionActivityData() after significant data modifications (relations, invites, disbands, power changes, claims).
Faction Disband (disbandFactionInternal): Enhanced disband logic for thorough cleanup: removing faction from internal maps, clearing all global claims, updating other factions' relation lists, clearing pending invites/requests, removing activity data, triggering Dynmap visual removal, and updating tab lists for former members. Faction Commands (FactionCommand.java) Method Call Corrections: Ensured plugin.updatePlayerTabListName(player) and plugin.handleClaimFill(player, faction) calls correctly target their implementations in GFactionsPlugin.java. Help Message Formatting: Explicitly used ChatColor.ENUM_VALUE.toString() in help message concatenations as a robust measure against potential IDE/compiler issues with string and integer concatenation, particularly with COST_PLACEHOLDER. NullPointerException Prevention (handleSetRank): Added a null check for targetCurrentRank before accessing its properties to prevent errors with potentially missing rank data. Command Handler Improvements: Improved clarity, null-checking (for playerFaction, targetFaction), data saving, and UI feedback (tab list updates) across various command handlers. Corrected handleLeaderTransfer logic to ensure the target player is at least a Member. Ensured handleOutpostCreate deducts power only after successful claim and outpost addition. Enhanced feedback messages for various command scenarios. Tab Completion: Added @NotNull annotations to onCommand and onTabComplete parameters. Refined tab completion logic for more relevant subcommand suggestions. Admin Commands (AdminFactionCommand.java) Method Call Corrections: Ensured calls to plugin.getPowerDecayTask(), plugin.startPowerRegeneration(), and plugin.startPowerDecayTask() correctly target the public methods in GFactionsPlugin.java. Configuration Reload (/fa reloadconfig): The command now correctly reloads config.yml, applies these values internally, and then resets/restarts power regeneration and decay tasks to use the new settings. Dynmap Reload (/fa dynmapreload): Improved logic to attempt reactivation of the Dynmap manager if it's disabled before refreshing faction claim visuals. Dynmap Integration (DynmapManager.java) Data Display Accuracy: Corrected generatePopupDescription to use faction.getMaxPowerCalculated(plugin) and faction.getMaxClaimsCalculated(plugin) for accurate display of maximum power and claim limits on Dynmap popups.
Styling and Robustness: Made getColorFromHexString more robust by trimming input and providing clearer warnings for color format errors. Refined updateFactionClaimsVisual for better handling of old marker removal and new marker creation for contiguous claim areas. Improved calculateOutline and mergeContiguousChunks for more reliable geometric calculations of claim visualizations.
Added a fallback in updateFactionClaimsVisual to draw individual chunk markers if a valid polygon cannot be formed for a contiguous area, enhancing map display reliability. General Code Quality & Fixes Error Handling: Implemented additional null checks and improved error logging in data loading procedures and other critical operations to enhance stability. Consistency: Ensured more consistent use of getNameKey() for internal map lookups and faction comparisons. Annotations: Added @NotNull annotations to overridden methods where appropriate for better code clarity and contract enforcement. Teleportation Safety: Teleport warmups are now also cancelled if another teleport occurs during the warmup period, preventing potential exploits.
Version: (e.g., v1.2.1 / Internal Update) Date: May 18, 2025
This update introduces new controls for claiming land in different dimensions and includes several enhancements for stability and functionality.
claiming.allow_nether_claiming) to enable or disable faction land claiming in The Nether.
false (Disabled)claiming.allow_end_claiming) to enable or disable faction land claiming in The End.
false (Disabled)GFactionsPlugin.createFactionAndReturn() when a faction is first created (for the initial home claim).GFactionsPlugin.claimChunk() for all subsequent land claims, including those for outpost creation.GFactionsPlugin.java)allow_nether_claiming and allow_end_claiming settings from config.yml.claimChunk operation.unclaimChunkPlayer to provide feedback on both success and failure.createFactionAndReturn for the faction's initial claim.sendAllyRequest will now receive feedback if a request is already pending to or from the target faction.loadFactionsData()):
ownerUUID parsing more robust with improved error logging for invalid UUIDs.homeLocation): if a home location's world is not loaded on startup, a warning is logged, and the home may need to be reset.Outpost are correctly registered in the faction's global claim list and the plugin-wide claimedChunks map during the data loading process.enemyDeclareTimestamps keys to be loaded in lowercase to prevent case-sensitivity issues.null item stacks within faction vaults during loading and will log a warning for any invalid items found.saveFactionsData()):
homeLocation to be more cautious if the world associated with the location is null (a warning will be logged).enemyDeclareTimestamps keys to be saved in lowercase.pendingMemberInvites and pendingAllyRequests sections in factions.yml will now only be written if they actually contain pending invites/requests, leading to a cleaner data file.getFactionOwningChunk(Chunk chunk) to prevent errors if the chunk or its world is unexpectedly null.getFactionOwningChunkAsFaction(Chunk chunk).config.yml)The following settings were added to the claiming: section of the config.yml file:
claiming:
# ... other claiming settings ...
allow_nether_claiming: false # Set to true to allow claiming in The Nether
allow_end_claiming: false # Set to true to allow claiming in The End
📄 File Modifications SummaryConfig.txt (representing config.yml):Updated to include the new allow_nether_claiming and allow_end_claiming options.GFactionsPlugin.java:Implemented the core logic for dimension-specific claiming.Incorporated the various
