Événements
HyperPerms déclenche des événements lorsque les permissions sont vérifiées ou modifiées. Écoutez ces événements pour vous intégrer à d'autres plugins ou pour implémenter un comportement personnalisé.
Événements disponibles
evénements disponibles |
|-------|------------|-------------|
| PermissionCheckEvent | Une permission est vérifiée | Non (résultat modifiable) |
| GroupCreateEvent | Un groupe est créé | Oui |
| GroupDeleteEvent | Un groupe est supprimé | Oui |
| GroupModifyEvent | Un groupe est modifié | Oui |
GroupModifyEvent | Un groupe est modifié | Oui |
|---|---|---|
UserModifyEvent | Un groupe est modifié | Oui GroupModifyEvent |
UserModifyEvent | Les données de l'utilisateur sont modifiées | Oui |
UserPromoteEvent | L'utilisateur est promu sur une piste | Oui |
UserDemoteEvent | L'utilisateur est rétrogradé sur une piste | Oui |
PermissionCheckEvent
Déclenché chaque fois qu'une permission est vérifiée pour un joueur. Utilisez-le pour modifier les résultats des permissions ou enregistrer les accès.
import dev.hyperperms.api.event.PermissionCheckEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
public class PermissionListener implements Listener {
@EventHandler
public void onPermissionCheck(PermissionCheckEvent event) {
UUID player = event.getUser().getUuid();
String permission = event.getPermission();
boolean result = event.getResult();
// Log the check
System.out.println(player + " checked " + permission + " = " + result);
// Modify the result (use carefully!)
if (permission.equals("special.override")) {
event.setResult(true);
}
}
}
Propriétés de l'événement
getUser()- L'utilisateur contrôlégetPermission()- Le nœud de permission contrôlégetContexts()- Les contextes pour cette vérificationgetResult()- Le résultat calculésetResult(boolean)- Surcharger le résultat
Avertissement: PermissionCheckEvent se déclenche très fréquemment. Gardez votre gestionnaire rapide pour éviter les problèmes de performance. Évitez les opérations lourdes dans cet événement.
GroupCreateEvent
Déclenché lors de la création d'un nouveau groupe.
import dev.hyperperms.api.event.GroupCreateEvent;
@EventHandler
public void onGroupCreate(GroupCreateEvent event) {
String groupName = event.getGroupName();
// Prevent creation of certain groups
if (groupName.startsWith("reserved_")) {
event.setCancelled(true);
event.setCancelReason("Cannot create groups with 'reserved_' prefix");
return;
}
getLogger().info("Group created: " + groupName);
}
GroupDeleteEvent
Déclenché lorsqu'un groupe est supprimé.
import dev.hyperperms.api.event.GroupDeleteEvent;
@EventHandler
public void onGroupDelete(GroupDeleteEvent event) {
Group group = event.getGroup();
// Prevent deletion of protected groups
if (group.getName().equals("default")) {
event.setCancelled(true);
event.setCancelReason("Cannot delete the default group");
return;
}
// Log the deletion
getLogger().info("Group deleted: " + group.getName());
}
GroupModifyEvent
Déclenché lorsque les propriétés ou les autorisations d'un groupe sont modifiées.
import dev.hyperperms.api.event.GroupModifyEvent;
import dev.hyperperms.api.event.GroupModifyEvent.ModificationType;
@EventHandler
public void onGroupModify(GroupModifyEvent event) {
Group group = event.getGroup();
ModificationType type = event.getModificationType();
switch (type) {
case PERMISSION_ADD:
getLogger().info("Permission added to " + group.getName());
break;
case PERMISSION_REMOVE:
getLogger().info("Permission removed from " + group.getName());
break;
case PARENT_ADD:
getLogger().info("Parent added to " + group.getName());
break;
case PARENT_REMOVE:
getLogger().info("Parent removed from " + group.getName());
break;
case WEIGHT_CHANGE:
getLogger().info("Weight changed for " + group.getName());
break;
case PREFIX_CHANGE:
getLogger().info("Prefix changed for " + group.getName());
break;
case SUFFIX_CHANGE:
getLogger().info("Suffix changed for " + group.getName());
break;
}
}
UserModifyEvent
Déclenché lorsque les autorisations, les groupes ou les propriétés d'un utilisateur sont modifiés.
import dev.hyperperms.api.event.UserModifyEvent;
import dev.hyperperms.api.event.UserModifyEvent.ModificationType;
@EventHandler
public void onUserModify(UserModifyEvent event) {
User user = event.getUser();
ModificationType type = event.getModificationType();
switch (type) {
case GROUP_ADD:
Group addedGroup = (Group) event.getData();
getLogger().info(user.getUsername() + " added to " + addedGroup.getName());
break;
case GROUP_REMOVE:
Group removedGroup = (Group) event.getData();
getLogger().info(user.getUsername() + " removed from " + removedGroup.getName());
break;
case PRIMARY_GROUP_CHANGE:
Group newPrimary = (Group) event.getData();
getLogger().info(user.getUsername() + " primary group set to " + newPrimary.getName());
break;
case PERMISSION_ADD:
case PERMISSION_REMOVE:
getLogger().info(user.getUsername() + " permissions modified");
break;
}
}
UserPromoteEvent
Déclenché lorsqu'un utilisateur est promu sur une piste.
import dev.hyperperms.api.event.UserPromoteEvent;
@EventHandler
public void onUserPromote(UserPromoteEvent event) {
User user = event.getUser();
Track track = event.getTrack();
Group fromGroup = event.getFromGroup();
Group toGroup = event.getToGroup();
getLogger().info(String.format(
"%s promoted from %s to %s on track %s",
user.getUsername(),
fromGroup.getName(),
toGroup.getName(),
track.getName()
));
// Example: Send a message to the player
Player player = Bukkit.getPlayer(user.getUuid());
if (player != null) {
player.sendMessage("Congratulations! You've been promoted to " + toGroup.getDisplayName());
}
}
UserDemoteEvent
Déclenché lorsqu'un utilisateur est rétrogradé sur une piste.
import dev.hyperperms.api.event.UserDemoteEvent;
@EventHandler
public void onUserDemote(UserDemoteEvent event) {
User user = event.getUser();
Track track = event.getTrack();
Group fromGroup = event.getFromGroup();
Group toGroup = event.getToGroup();
getLogger().info(String.format(
"%s demoted from %s to %s on track %s",
user.getUsername(),
fromGroup.getName(),
toGroup.getName(),
track.getName()
));
}
Priorité de l'événement
Utilisez les priorités d'événements pour contrôler l'ordre dans lequel les récepteurs sont appelés :
import org.bukkit.event.EventPriority;
// Called early - good for logging
@EventHandler(priority = EventPriority.LOWEST)
public void onPermissionCheckLog(PermissionCheckEvent event) {
// Log the original result
}
// Called late - good for overriding
@EventHandler(priority = EventPriority.HIGHEST)
public void onPermissionCheckOverride(PermissionCheckEvent event) {
// Override the result if needed
}
Annulation d'événements
Les événements annulables peuvent être annulés pour empêcher l'action :
@EventHandler
public void onGroupDelete(GroupDeleteEvent event) {
// Prevent deletion
event.setCancelled(true);
// Optionally provide a reason (shown to command executor)
event.setCancelReason("Group deletion is disabled");
}
Tip: Lorsqu'un événement est annulé, l'action est empêchée mais la source (commande ou appel API) recevra une notification indiquant que l'événement a été annulé.
Enregistrer des auditeurs
public class MyPlugin extends JavaPlugin {
@Override
public void onEnable() {
// Register your event listeners
getServer().getPluginManager().registerEvents(
new PermissionListener(),
this
);
}
}
Meilleures pratiques
- Garder les gestionnaires rapides - Particulièrement pour PermissionCheckEvent
- Utilisez la priorité appropriée - Enregistrez tôt, modifiez tard
- Ne pas bloquer - Éviter I/O or network calls in handlers
- Gérer les exceptions - Ne pas laisser les erreurs se propager
- ne pas bloquer** - Éviter les I/O or network calls in handlers Gérer les exceptions - Ne pas laisser les erreurs se propager