On this page

Full example

A complete, working plugin: it gives a Regeneration effect while a player wears all four pieces of a set, and adds a /warden command to hand the set out.

plugin.yml

name: WardenBonus
version: 1.0.0
main: com.example.wardenbonus.WardenBonus
api-version: '1.21.4'
softdepend: [NxEquipements]
commands:
  warden:
    description: Give yourself the Forest Warden set
    permission: wardenbonus.give
permissions:
  wardenbonus.give:
    default: op

WardenBonus.java

package com.example.wardenbonus;

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;

import org.nexo.nxequipement.api.EquipmentPiece;
import org.nexo.nxequipement.api.NxEquipementsApi;
import org.nexo.nxequipement.api.NxEquipementsProvider;
import org.nexo.nxequipement.api.event.NxEquipementsReloadEvent;

public class WardenBonus extends JavaPlugin implements Listener {

    private static final String SET_ID = "forest_warden";

    private NxEquipementsApi nxe;

    @Override
    public void onEnable() {
        // Never call get() here - NxEquipements is not ready yet.
        NxEquipementsProvider.whenReady(this, api -> {
            this.nxe = api;
            getServer().getPluginManager().registerEvents(this, this);
            startBonusTask();
            getLogger().info("Hooked into NxEquipements " + api.pluginVersion());
        });
    }

    private void startBonusTask() {
        getServer().getScheduler().runTaskTimer(this, () -> {
            for (Player player : getServer().getOnlinePlayers()) {
                if (wornPieces(player) == 4) {
                    player.addPotionEffect(new PotionEffect(
                            PotionEffectType.REGENERATION, 100, 0, true, false));
                }
            }
        }, 20L, 60L);
    }

    private int wornPieces(Player player) {
        int count = 0;
        for (ItemStack piece : player.getInventory().getArmorContents()) {
            if (piece == null) continue;
            boolean mine = nxe.readId(piece)
                              .filter(id -> id.setId().equals(SET_ID))
                              .isPresent();
            if (mine) count++;
        }
        return count;
    }

    @EventHandler
    public void onReload(NxEquipementsReloadEvent event) {
        getLogger().info("Equipment reloaded: " + event.setCount() + " sets");
    }

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if (!(sender instanceof Player player)) {
            sender.sendMessage("Players only.");
            return true;
        }
        if (nxe == null) {
            sender.sendMessage("NxEquipements is not ready.");
            return true;
        }

        var set = nxe.set(SET_ID);
        if (set.isEmpty()) {
            sender.sendMessage("The set '" + SET_ID + "' is not loaded.");
            return true;
        }

        for (EquipmentPiece piece : set.get().pieces()) {
            nxe.createItem(piece).ifPresent(item ->
                    player.getInventory().addItem(item));
        }
        player.sendMessage("Wear all four pieces for Regeneration.");
        return true;
    }
}

Try it

  1. Build your plugin and drop it in plugins/ alongside NxEquipements.
  2. Change SET_ID to one of your own — /nxe list shows them.
  3. Start the server and run /warden.
  4. Put all four pieces on. Regeneration kicks in.
On Folia, swap getScheduler().runTaskTimer for Folia's global region scheduler. Everything else in this example works unchanged.

Last updated August 11, 2026