WeFriends

A comprehensive friend and party management system for Minecraft servers with cross-server support, built for Paper/Spigot and Folia.

276

Quick challenge

How far can you run before the mobs catch you?

WeFriends

We-Friends

A comprehensive friend and party management system for Minecraft servers with cross-server support, built for Paper/Spigot and Folia.

✨ Features

🤝 Friend System

- Cross-Server Support: Send, accept, and deny friend requests - Cross-Server Support: View online/offline friends with status indicators - Cross-Server Support: Private messaging and group chat with friends - Cross-Server Support: Get notified when friends join or leave - Cross-Server Support: Enable/disable receiving friend requests - Cross-Server Support: Friends can interact across multiple servers

🎉 Party System

- Cross-Server Parties: Create and manage parties with friends - Cross-Server Parties: Invite friends to join your party - Cross-Server Parties: Dedicated party chat channel - Cross-Server Parties: Leader and member roles with permissions - Cross-Server Parties: Kick, promote, transfer leadership, and disband - Cross-Server Parties: Party members can be on different servers

🌐 Cross-Server Support

- Seamless Experience: Connect multiple servers with Redis - Seamless Experience: Instant notifications across servers - Seamless Experience: See which server friends/party members are on - Seamless Experience: Chat and interact across the entire network

🔧 Advanced Features

- Chat Modes: SQLite and MySQL support - Chat Modes: For cross-server communication - Chat Modes: Custom placeholders for other plugins - Chat Modes: Full compatibility with Folia servers - Chat Modes: Staff can monitor friend/party chats - Chat Modes: Toggle between normal, friend, and party chat

📋 Requirements

- Redis: 17 or higher - Redis: Paper 1.21.1+ or Folia - Redis: SQLite (included) or MySQL - Redis: Required for cross-server functionality (optional)

🚀 Installation

1. Restart the latest release from Restart 2. Restart the JAR file in your server's `plugins` folder 3. Restart your server to generate the configuration files 4. Restart the plugin (see Configuration section) 5. Restart your server

⚙️ Configuration

Basic Setup (Single Server)

```yaml

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 ```

Multi-Server Setup

```yaml

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 ```

Database Setup (MySQL)

```sql CREATE DATABASE wefriends; CREATE USER 'wefriends'@'%' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON wefriends.* TO 'wefriends'@'%'; FLUSH PRIVILEGES; ```

🎮 Commands

Friend Commands

- `/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 Commands

- `/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

Chat Mode Commands

- `/fchatmode` - Toggle friend chat mode - `/pchatmode` - Toggle party chat mode - `/chatmode` - View current chat mode

Admin Commands

- `/fchatspy` - Toggle friend chat spy (permission required) - `/partyspy` - Toggle party chat spy (permission required) - `/wefriends reload` - Reload the plugin configuration

🔑 Permissions

Player Permissions

- `wefriends.friend.use` - Use friend commands - `wefriends.party.use` - Use party commands - `wefriends.chat.friend` - Use friend chat - `wefriends.chat.party` - Use party chat

Admin Permissions

- `wefriends.admin` - Access admin commands - `wefriends.spy.friend` - Spy on friend chats - `wefriends.spy.party` - Spy on party chats - `wefriends.reload` - Reload plugin configuration

📊 PlaceholderAPI

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)

🔧 API Usage

Maven Dependency

```xml <dependency> <groupId>me.wethink</groupId> <artifactId>wefriends</artifactId> <version>1.0.0</version> <scope>provided</scope> </dependency> ```

Basic API Examples

```java // 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); ```

🌐 Cross-Server Setup Guide

Step 1: Database Configuration

Set up a shared MySQL database accessible by all servers:

```yaml database: type: mysql mysql: host: your-database-host port: 3306 database: wefriends_network username: wefriends_user password: secure_password ```

Step 2: Redis Configuration

Configure Redis for real-time communication:

```yaml redis: enabled: true host: your-redis-host port: 6379 password: redis_password channel: wefriends:network ```

Step 3: Server Identification

Give each server a unique name:

```yaml server: name: lobby # For lobby server name: survival # For survival server name: creative # For creative server ```

Step 4: Enable Cross-Server Features

```yaml cross-server: enabled: true sync-interval: 30 notification-timeout: 5 ```

🐛 Troubleshooting

Common Issues

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

🤝 Contributing

We welcome contributions! Please follow these steps:

1. Open the repository 2. Open a feature branch (`git checkout -b feature/amazing-feature`) 3. Open your changes (`git commit -m 'Add amazing feature'`) 4. Open to the branch (`git push origin feature/amazing-feature`) 5. Open a Pull Request

Development Setup

1. Clone the repository 2. Import into your IDE (IntelliJ IDEA recommended) 3. Run `mvn clean install` to build 4. Test on a Paper 1.21.1+ server

📝 License

This project is licensed under the MIT License - see the LICENSE file for details.

🙏 Acknowledgments

- Jedis - For the excellent server software - Jedis - For multi-threaded server support - Jedis - For placeholder integration - Jedis - For database connection pooling - Jedis - For Redis connectivity

📞 Support

- Discussions: Discussions - Discussions: %%MD1%%

---

Made with ❤️ by WeThink

ADS