Welcome to the Hangar Open Beta. Please report any issue you encounter on GitHub!
Avatar for AJA_RETRO

An alternative (Maybe only) of Essentialsx For Folia

Report FoliaCore?

What is this?

Let's be real: you're running a Folia server. You're on the cutting edge, but you've probably realized it breaks everything.

Your old "essentials" plugin (like EssentialsX) is built on a single "main thread". The second you run it on Folia, it will cause crashes, data corruption, and lag. Other "Folia-compatible" plugins are often just quick patches, not true fixes.

FoliaCore is not a patch. It's a from-scratch replacement.

We built this plugin with a "Folia-first" design. We use Folia's native schedulers for everything. The result? A rock-solid, thread-safe core plugin that will never lag your server just because a player saved their home or sent a TPA request.

Why You Should Download This

We aren't just "another" essentials plugin. We are an architectural upgrade. This is what our Folia-native design gives you:

Feature FoliaCore (Our Code) The Old Way (Essentials / zEssentials)
Threading Model Folia-Native. Uses EntityScheduler & RegionScheduler for all tasks. 100% thread-safe. Single-Threaded. Incompatible. Will crash, stall, or corrupt data on Folia.
Data Saving (Performance) Asynchronous YAML. All file saves use the AsyncScheduler. Guarantees zero tick-skips (lag). Requires External MySQL for reliability, or uses slow, synchronous YAML saving that causes server stutter.
Simplicity True "Drag & Drop". Our async saving is fast and simple. No setup needed. Complex Setup. Requires a database and multiple dependencies (like Vault, zMenu) to get full use.
The Price 100% Free & Open Source (MIT). Free (and broken) or Paid (and complex).

Features (v1.0 Pre-Release)

  • Chat Module: Full private messaging (/msg, /r), persistent mutes (/mute, /unmute), and player blocking (/block, /unblock).
  • Mail Module: Persistent, offline /mail system with login notifications.
  • Ranged Chat: /chat <global|world|regional> modes, plus a global shout prefix (!).
  • Teleport Module: Fully thread-safe /tpa, /tpahere, /tpaccept, and /tpdeny.
  • Home Module: Permission-based homes (/sethome, /home, /delhome, /homes).
  • Spawn Module: Persistent server spawn (/setspawn, /spawn).
  • Team System: Full party management (/team create, invite, kick, leave, etc.).
  • Kit System: A full GUI-based kit system (/kit) with cooldowns and admin commands (/createkit, /delkit).
  • Warp System: Admin-defined, permission-based server warps (/setwarp, /delwarp, /warp, /warps).
  • GPS System: Player-based waypoints (/marker) with an action-bar compass (/gps).
  • Economy Module: Vault integration for /balance, /pay, and /eco admin commands.

Installation

  1. Make sure you are running a Paper 1.20+ or Folia server.
  2. Download the FoliaCore.jar from the Versions tab.
  3. Drop it in your /plugins folder.
  4. [Dependency] If you want economy features, install Vault and an economy plugin (like EssentialsX Eco).
  5. Restart your server. (Do not use /reload!)

Commands & Permissions

<details> <summary>Click to see all Commands and Permissions</summary>

# This is a reference for all permissions. You do not need to copy this.
# All permissions are also listed on our plugin.yml on GitHub.

permissions:
  # Chat & Mail Permissions
  foliacore.mute: {description: Allows muting players, default: op}
  foliacqcore.unmute: {description: Allows unmuting players, default: op}
  foliacore.msg: {description: Allows sending private messages, default: true}
  foliacore.reply: {description: Allows replying to private messages, default: true}
  foliacore.block: {description: Allows blocking players, default: true}
  foliacore.unblock: {description: Allows unblocking players, default: true}
  foliacore.mail: {description: Base permission for the /mail command, default: true}
  foliacore.mail.send: {description: Allows sending mail, default: true}
  foliacore.mail.read: {description: Allows reading mail, default: true}
  foliacore.mail.clear: {description: Allows clearing your mailbox, default: true}
  foliacore.chat: {description: Base permission for the /chat command, default: true}
  foliacore.chat.global: {description: Allows switching to GLOBAL chat, default: true}
  foliacore.chat.world: {description: Allows switching to WORLD chat, default: true}
  foliacore.chat.regional: {description: Allows switching to REGIONAL chat, default: true}
    
  # Teleportation & Spawn Permissions
  foliacore.sethome: {description: Allows setting a home, default: true}
  foliacore.home: {description: Allows teleporting to a home, default: true}
  foliacore.delhome: {description: Allows deleting a home, default: true}
  foliacore.homes.list: {description: Allows listing your homes, default: true}
  foliacore.homes.default: {description: Gives the player 1 home, default: true}
  foliacore.homes.unlimited: {description: Gives the player unlimited homes, default: op}
  foliacore.homes.5: {description: Gives the player 5 homes, default: false}
  foliacore.homes.10: {description: Gives the player 10 homes, default: false}
  foliacore.tpa: {description: Allows sending /tpa requests, default: true}
  foliacore.tpahere: {description: Allows sending /tpahere requests, default: true}
  foliacore.tpaccept: {description: Allows accepting teleport requests, default: true}
  foliacore.tpdeny: {description: Allows-denying teleport requests, default: true}
  foliacore.setspawn: {description: Allows setting the server spawn, default: op}
  foliacore.spawn: {description: Allows teleporting to spawn, default: true}
  
  # Team Permissions
  foliacore.team: {description: Base permission for the /team command, default: true}
  foliacore.team.create: {description: Allows creating a team, default: true}
  foliacore.team.disband: {description: Allows disbanding a team (owner only), default: true}
  foliacore.team.invite: {description: Allows inviting players to a team, default: true}
  foliacore.team.accept: {description: Allows accepting a team invite, default: true}
  foliacore.team.leave: {description: Allows leaving a team, default: true}
  foliacore.team.kick: {description: Allows kicking players from a team, default: true}

  # Kit Permissions
  foliacore.kit: {description: Allows using the /kit command and GUI, default: true}
  foliacore.kit.starter: {description: Allows redeeming the 'starter' kit, default: true}
  foliacore.kit.admin: {description: Allows creating and deleting kits, default: op}
    
  # Warp Permissions
  foliacore.setwarp: {description: Allows setting server warps, default: op}
  foliacore.delwarp: {description: Allows deleting server warps, default: op}
  foliacore.warp: {description: Allows using the base /warp command, default: true}
  foliacore.warp.all: {description: Allows using all warps without specific permissions, default: op}
  foliacore.warps.list: {description: Allows listing available warps, default: true}
    
  # GPS Permissions
  foliacore.marker: {description: Base permission for /marker, default: true}
  foliacore.marker.set: {description: Allows setting markers, default: true}
  foliacore.marker.delete: {description: Allows deleting markers, default: true}
  foliacore.marker.list: {description: Allows listing markers, default: true}
  foliacore.gps: {description: Allows using the /gps command, default: true}
    
  # Economy Permissions
  foliacore.balance.self: {description: Allows checking your own balance, default: true}
  foliacore.balance.other: {description: Allows checking other players' balances, default: op}
  foliacore.pay: {description: Allows paying other players, default: true}
  foliacore.eco: {description: Allows using the admin /eco command, default: op}

</details>

For Developers (Our API)

We built this to be a platform. All our managers are thread-safe and accessible. Just add FoliaCore as a dependency and grab our instance.

import dev.ajaretro.foliaCore.FoliaCore;
import dev.ajaretro.foliaCore.managers.ChatManager;
import dev.ajaretro.foliaCore.managers.TeamManager;

public class MyPlugin extends JavaPlugin {

    public void doSomething(Player player) {
        // You can call our managers from any thread, safely.
        // We already handled the concurrency for you.
        
        ChatManager chat = FoliaCore.getInstance().getChatManager();
        if (chat.isMuted(player.getUniqueId())) {
            //...
        }
        
        TeamManager teams = FoliaCore.getInstance().getTeamManager();
        if (teams.getTeam(player.getUniqueId()) != null) {
            //...
        }
    }
}

Support & Contact

FoliaCore is a free, open-source project by AJARETRO. If you find a bug, please report it on our GitHub Issues page.

For other inquiries, you can reach me here:

Information

CategoryAdmin Tools
Published onNovember 17, 2025
LicenseMIT
Downloads5
Stars0
Watchers0
Supports Folia

Members