Aller au contenu
Nashoba

Tuto Addon #5 - Créer un évent

Messages recommandés

Sommaire:

  1. Base de l'addon
  2. Créer un effet
  3. Créer une condition
  4. Créer une expression
  5. Créer un évent
  6. Créer un type

---------------------------

 

Avant de continuer, assurez-vous d'avoir suivi au moins les 2 premiers tutoriaux ou vous pourrez être perdus.

 

Créer un évent simple

 

 

Aujourd'hui on va voir comment créer un évent simple. Dans cette partie on aura pas besoin de créer de nouvelle classe, on va juste enregistrer l'évent « on ... » ainsi que les valeurs dedans (ex : event-player, event-location...).

 

Voici comment enregistrer votre évent :

 

Skript.registerEvent("Nom de votre évent", SimpleEvent.class, ClassBukkitDeVotreEvent.class, "event");
 

 

Pour le « Nom de votre évent », vous pouvez mettre ce que vous voulez.

 

Pour ClassBukkitDeVotreEvent.class, il faut remplacer ceci par la classe Bukkit de l'évent.

 

Pour « event », il faut remplacer par le code skript sans le « on ».

 

 

Par exemple on va recréer l'évent « on join ». Ça nous donne tout simplement :

 

Skript.registerEvent("Join Event", SimpleEvent.class, PlayerJoinEvent.class, "join");
 

 

 

 

 

Le problème reste qu'on ne peut toujours pas récupérer les infos. Pour se faire on va enregistrer les « event values ». Encore une fois pas besoin de créer de classe spéciale, on met ce code juste après le Skript.registerEvent(...).

 

Voici à quoi ressemble le bout de code pour enregistrer une valeur d'évenement :

 

EventValues.registerEventValue(ClassBukkitDeVotreEvent.class, Object.class, new Getter<Object, ClassBukkitDeVotreEvent.class>() {
   public Object get(ClassBukkitDeVotreEvent e) {
       return null;
   }
}, 0);
 

 

La première chose à faire est de remplacer tous les ClassBukkitDeVotreEvent par la classe Bukkit qui contient votre événement.

 

Ensuite il faut définir le type d'objet que renvoie la valeur d’événement. Si on remplace tous les Object par Player, on pourra utiliser « event-player » en Skript. Si on remplace tous les Object par Location, on pourra utiliser « event-location » en Skript.

 

Pour finir la dernière chose à changer est le return. Il faut retourner l'objet en question, celui que vous voulez utiliser. Pour cela vous pourrez utiliser la variable e qui sera votre évent.

 

 

Reprenons notre exemple « on join ». Le code final (avec l'enregistrement + le return du joueur) donnera :

 

Skript.registerEvent("Join Event", SimpleEvent.class, PlayerJoinEvent.class, "join");
EventValues.registerEventValue(PlayerJoinEvent.class, Player.class, new Getter<Player, PlayerJoinEvent.class>() {
   public Player get(PlayerJoinEvent e) {
       return e.getPlayer();
   }
}, 0);
 

 

 

Créer un évent complexe

 

 

Bientôt

Modifié par Nashoba
  • J'aime 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut^^ !

 

Merci beaucoup pour le tutoriel ! Ca m'a été très utile ! Mais, est-ce-qu'il est possible de créer un événement Skript via un événement personnalisé ? Je m'explique, j'ai crée un événement personnalisé (RegionCreateEvent (WorldGuard)). Voici la classe de mon événement :

 

package fr.psyziik.skpsytools;

import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
public class RegionCreateEvent extends Event{

       Player p;
       String region;

       public RegionCreateEvent(Player p, String region){

               this.p = p;
               this.region = region;

       }

       public Player getPlayer(){

               return p;

       }

       public String getRegion{

               return region;

       }

       private static final HandlerList handlers = new HandlerList();

       public HandlerList getHandlers(){

           return handlers;

       }

       public static HandlerList getHandlerList(){

           return handlers;

       }

}

 

Et voici le moment où j'appelle mon événement dans mon Main :

 

package fr.psyziik.skpsytools;

import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;

import ch.njol.skript.Skript;

public class Main extends JavaPlugin implements Listener{

   @Override
   public void onEnable(){

       PluginManager pluginManager = Bukkit.getPluginManager();

       pluginManager.registerEvents(this, this);

   }

   @EventHandler
   public void onCommand(PlayerCommandPreprocessEvent e){

       if(e.getMessage().equalsIgnoreCase("/rg") || e.getMessage().equalsIgnoreCase("/region")){

           String[] args = e.getMessage().split(" ");

           if(args[1].equalsIgnoreCase("define") && args[2] != null){

               Bukkit.getServer().getPluginManager().callEvent(new RegionCreateEvent(e.getPlayer(), args[2]));

           }

       }

   }

}

 

Est-ce-que quand je crée mon event Skript je peux faire ça ? :

 

Skript.registerEvent("Region Create", SimpleEvent.class, RegionCreateEvent.class, "region create");

 

Merci d'avance :p !

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui ça marche, je l'ai déjà fait dans mon addon :)

  • J'aime 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci @Nashoba.

 

Dernière question, comment fait on pour enregistrer plusieurs évents values ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu refais la même chose (en rajoutant à nouveau le code pour l'évent value), avec la même classe pour l'évent mais tu change le type d'objet ^^

  • J'aime 1

Partager ce message


Lien à poster
Partager sur d’autres sites
Tu refais la même chose (en rajoutant à nouveau le code pour l'évent value), avec la même classe pour l'évent mais tu change le type d'objet ^^

Merci je viens de tester ça fonctionne :P

Partager ce message


Lien à poster
Partager sur d’autres sites
Je veux pas apprendre ^^ C'est trop chaud le Java , je cramerai moi xD

Tu fais comme tu veux, mais les blagues comme ça moi j'aime pas ça ;(

Partager ce message


Lien à poster
Partager sur d’autres sites

Je n'ai pas compris un truc, j'ai fait tout comme tu le dis sauf que dans Skript on récupère comment ces variables ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Les event values? Tu dois utiliser "event-%type de variable%". Exemples:

Player: event-player
Location: event-location
String: event-text
Inventory: event-inventory
Integer: event-integer

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui mais avec un addon il est possible de créer des types.

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai un problème avec les EventValues que je n'ais toujours pas réussi a résoudre, j'ai toujours une erreur dans ma console pourtant cela devrait fonctionner.

Voilà le code java:

EventValues.registerEventValue(PlayerJumpEvent.class, Player.class, new Getter<Player, PlayerJumpEvent>() {
            @Override
            public Player get(PlayerJumpEvent playerJumpEvent) {
                return playerJumpEvent.getPlayer();
            }
        }, 0);

Et voilà l'erreur dans ma console:

[18:09:52] [Server thread/ERROR]: Could not load 'plugins\SkWaze.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: java.lang.NoClassDefFoundError: ch/njol/skript/util/Getter
	at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:133) ~[Spigot.jar:git-Spigot-2086bb0-d0a3620]
	at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:327) ~[Spigot.jar:git-Spigot-2086bb0-d0a3620]
	at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:248) [Spigot.jar:git-Spigot-2086bb0-d0a3620]
	at org.bukkit.craftbukkit.v1_12_R1.CraftServer.loadPlugins(CraftServer.java:305) [Spigot.jar:git-Spigot-2086bb0-d0a3620]
	at org.bukkit.craftbukkit.v1_12_R1.CraftServer.reload(CraftServer.java:750) [Spigot.jar:git-Spigot-2086bb0-d0a3620]
	at org.bukkit.Bukkit.reload(Bukkit.java:525) [Spigot.jar:git-Spigot-2086bb0-d0a3620]
	at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:27) [Spigot.jar:git-Spigot-2086bb0-d0a3620]
	at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) [Spigot.jar:git-Spigot-2086bb0-d0a3620]
	at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServer.java:648) [Spigot.jar:git-Spigot-2086bb0-d0a3620]
	at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchServerCommand(CraftServer.java:634) [Spigot.jar:git-Spigot-2086bb0-d0a3620]
	at net.minecraft.server.v1_12_R1.DedicatedServer.aP(DedicatedServer.java:444) [Spigot.jar:git-Spigot-2086bb0-d0a3620]
	at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:407) [Spigot.jar:git-Spigot-2086bb0-d0a3620]
	at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) [Spigot.jar:git-Spigot-2086bb0-d0a3620]
	at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) [Spigot.jar:git-Spigot-2086bb0-d0a3620]
	at java.lang.Thread.run(Unknown Source) [?:1.8.0_172]
Caused by: java.lang.NoClassDefFoundError: ch/njol/skript/util/Getter
	at java.lang.Class.forName0(Native Method) ~[?:1.8.0_172]
	at java.lang.Class.forName(Unknown Source) ~[?:1.8.0_172]
	at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:78) ~[Spigot.jar:git-Spigot-2086bb0-d0a3620]
	at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:129) ~[Spigot.jar:git-Spigot-2086bb0-d0a3620]
	... 14 more
Caused by: java.lang.ClassNotFoundException: ch.njol.skript.util.Getter
	at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_172]
	at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:152) ~[Spigot.jar:git-Spigot-2086bb0-d0a3620]
	at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:100) ~[Spigot.jar:git-Spigot-2086bb0-d0a3620]
	at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_172]
	at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_172]
	at java.lang.Class.forName0(Native Method) ~[?:1.8.0_172]
	at java.lang.Class.forName(Unknown Source) ~[?:1.8.0_172]
	at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:78) ~[Spigot.jar:git-Spigot-2086bb0-d0a3620]
	at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:129) ~[Spigot.jar:git-Spigot-2086bb0-d0a3620]
	... 14 more

Voilà, en espérant que quelqu'un sache résoudre mon problème...

Partager ce message


Lien à poster
Partager sur d’autres sites

Il manque une class dans le plugin Skript. Tu as la dernière version ?

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 14/08/2018 à 22:07, Nashoba a dit :

Il manque une class dans le plugin Skript. Tu as la dernière version ?

Bah j'ai le dernier build de Bensku je ne comprend vraiment pas cette erreur et je n'arrives pas a la corriger, j'ai même essayé avec l'ancien build de njol mais cela ne fonctionne pas ?

Ou alors il faut le compiler avec maven j'en sais rien...

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.