A comprehensive friend and party management system for Minecraft servers with cross-server support, built for Paper/Spigot and Folia.
- Friend Requests: Send, accept, and deny friend requests
- Friend List: View online/offline friends with status indicators
- Friend Chat: Private messaging and group chat with friends
- Join/Quit Notifications: Get notified when friends join or leave
- Request Toggle: Enable/disable receiving friend requests
- Cross-Server Support: Friends can interact across multiple servers
- Party Creation: Create and manage parties with friends
- Party Invites: Invite friends to join your party
- Party Chat: Dedicated party chat channel
- Party Roles: Leader and member roles with permissions
- Party Management: Kick, promote, transfer leadership, and disband
- Cross-Server Parties: Party members can be on different servers
- Multi-Server Network: Connect multiple servers with Redis
- Real-time Sync: Instant notifications across servers
- Server Identification: See which server friends/party members are on
- Seamless Experience: Chat and interact across the entire network
- Database Support: SQLite and MySQL support
- Redis Integration: For cross-server communication
- PlaceholderAPI: Custom placeholders for other plugins
- Folia Support: Full compatibility with Folia servers
- Chat Spy: Staff can monitor friend/party chats
- Chat Modes: Toggle between normal, friend, and party chat
- Java: 17 or higher
- Server Software: Paper 1.21.1+ or Folia
- Database: SQLite (included) or MySQL
- Redis: Required for cross-server functionality (optional)
- Download the latest release from Releases
- Place the JAR file in your server's
plugins
folder - Start your server to generate the configuration files
- Configure the plugin (see Configuration section)
- Restart your server
# config.yml
database:
type: sqlite # Use SQLite for single server
server:
name: lobby # Your server name
cross-server:
enabled: false # Disable for single server
redis:
enabled: false # Not needed for single server
# config.yml
database:
type: mysql # Required for multi-server
mysql:
host: localhost
port: 3306
database: wefriends
username: root
password: "your_password"
server:
name: lobby # Unique name for each server
cross-server:
enabled: true # Enable cross-server features
sync-interval: 30
notification-timeout: 5
redis:
enabled: true # Required for cross-server
host: localhost
port: 6379
password: ""
channel: wefriends:events
limits:
max-friends: 200
max-party-size: 8
CREATE DATABASE wefriends;
CREATE USER 'wefriends'@'%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON wefriends.* TO 'wefriends'@'%';
FLUSH PRIVILEGES;
/friend add <player>
- Send a friend request/friend accept <player>
- Accept a friend request/friend deny <player>
- Deny a friend request/friend remove <player>
- Remove a friend/friend list
- View your friends list/friend requests
- View pending requests/friend toggle
- Toggle friend requests on/off/fchat <message>
- Send a message to all friends/fmsg <friend> <message>
- Send a private message to a friend
/party create
- Create a new party/party invite <player>
- Invite a friend to your party/party accept <player>
- Accept a party invite/party deny <player>
- Deny a party invite/party leave
- Leave your current party/party kick <player>
- Kick a member from the party (leader only)/party promote <player>
- Promote a member to leader (leader only)/party transfer <player>
- Transfer leadership (leader only)/party disband
- Disband the party (leader only)/pc <message>
- Send a message to party members
/fchatmode
- Toggle friend chat mode/pchatmode
- Toggle party chat mode/chatmode
- View current chat mode
/fchatspy
- Toggle friend chat spy (permission required)/partyspy
- Toggle party chat spy (permission required)/wefriends reload
- Reload the plugin configuration
wefriends.friend.use
- Use friend commandswefriends.party.use
- Use party commandswefriends.chat.friend
- Use friend chatwefriends.chat.party
- Use party chat
wefriends.admin
- Access admin commandswefriends.spy.friend
- Spy on friend chatswefriends.spy.party
- Spy on party chatswefriends.reload
- Reload plugin configuration
The plugin provides placeholders for use with PlaceholderAPI:
%wefriends_friends_online%
- Number of online friends%wefriends_friends_total%
- Total number of friends%wefriends_party_size%
- Current party size%wefriends_party_leader%
- Party leader name%wefriends_in_party%
- Whether player is in a party (true/false)
<dependency>
<groupId>me.wethink</groupId>
<artifactId>wefriends</artifactId>
<version>1.0.0</version>
<scope>provided</scope>
</dependency>
// Get the plugin instance
WeFriends plugin = WeFriends.getInstance();
// Check if two players are friends
boolean areFriends = plugin.getFriendManager().areFriends(player1UUID, player2UUID);
// Get a player's friends
Set<UUID> friends = plugin.getFriendManager().getFriendUuidsPublic(playerUUID);
// Get party information
String partyId = plugin.getPartyManager().getPartyIdPublic(playerUUID);
List<UUID> partyMembers = plugin.getPartyManager().getPartyMembers(partyId);
Set up a shared MySQL database accessible by all servers:
database:
type: mysql
mysql:
host: your-database-host
port: 3306
database: wefriends_network
username: wefriends_user
password: secure_password
Configure Redis for real-time communication:
redis:
enabled: true
host: your-redis-host
port: 6379
password: redis_password
channel: wefriends:network
Give each server a unique name:
server:
name: lobby # For lobby server
name: survival # For survival server
name: creative # For creative server
cross-server:
enabled: true
sync-interval: 30
notification-timeout: 5
Database Connection Failed
- Verify MySQL credentials and host accessibility
- Check firewall settings
- Ensure database exists and user has proper permissions
Redis Connection Failed
- Verify Redis server is running
- Check Redis host and port configuration
- Verify Redis password if authentication is enabled
Cross-Server Not Working
- Ensure all servers use the same MySQL database
- Verify Redis configuration is identical across servers
- Check that server names are unique
- Confirm
cross-server.enabled
is true
Plugin Not Loading
- Verify Java 17+ is installed
- Check server software compatibility (Paper 1.21.1+)
- Review server logs for error messages
We welcome contributions! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
- Clone the repository
- Import into your IDE (IntelliJ IDEA recommended)
- Run
mvn clean install
to build - Test on a Paper 1.21.1+ server
This project is licensed under the MIT License - see the LICENSE file for details.
- Paper Team - For the excellent server software
- Folia Team - For multi-threaded server support
- PlaceholderAPI - For placeholder integration
- HikariCP - For database connection pooling
- Jedis - For Redis connectivity
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Made with โค๏ธ by WeThink