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
- Build your plugin and drop it in
plugins/alongside NxEquipements. - Change
SET_IDto one of your own — /nxe list shows them. - Start the server and run /warden.
- 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.