Nashoba Posté(e) le 27 décembre 2016 Posté(e) le 27 décembre 2016 (modifié) Sommaire: Base de l'addon Créer un effet Créer une condition Créer une expression Créer un évent 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é le 26 juillet 2018 par Nashoba 2
Skripting Posté(e) le 27 décembre 2016 Posté(e) le 27 décembre 2016 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 !
Nashoba Posté(e) le 27 décembre 2016 Auteur Posté(e) le 27 décembre 2016 Oui ça marche, je l'ai déjà fait dans mon addon :) 1
Skripting Posté(e) le 28 décembre 2016 Posté(e) le 28 décembre 2016 Merci @Nashoba. Dernière question, comment fait on pour enregistrer plusieurs évents values ?
Nashoba Posté(e) le 28 décembre 2016 Auteur Posté(e) le 28 décembre 2016 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 ^^ 1
Skripting Posté(e) le 28 décembre 2016 Posté(e) le 28 décembre 2016 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
Nashoba Posté(e) le 31 décembre 2016 Auteur Posté(e) le 31 décembre 2016 Je comprends pas le Java :'( https://openclassrooms.com/courses/apprenez-a-programmer-en-java :) 1
MrForoche Posté(e) le 31 décembre 2016 Posté(e) le 31 décembre 2016 Je veux pas apprendre ^^ C'est trop chaud le Java , je cramerai moi xD
ExtraCreep Posté(e) le 1 janvier 2017 Posté(e) le 1 janvier 2017 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 ;(
Danvilld Posté(e) le 9 septembre 2017 Posté(e) le 9 septembre 2017 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 ?
Nashoba Posté(e) le 9 septembre 2017 Auteur Posté(e) le 9 septembre 2017 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
angelus76 Posté(e) le 10 septembre 2017 Posté(e) le 10 septembre 2017 Merci pour ces tutos sur la creation d'add-on en francais ;) 1
Danvilld Posté(e) le 15 septembre 2017 Posté(e) le 15 septembre 2017 Et comment j'en crée genre %event-coucou%
angelus76 Posté(e) le 16 septembre 2017 Posté(e) le 16 septembre 2017 Coucou n'est pas un type. Tu peut pas creer des type de n'importe quel nom. http://en.njol.ch/projects/skript/doc/classes
Nashoba Posté(e) le 16 septembre 2017 Auteur Posté(e) le 16 septembre 2017 Oui mais avec un addon il est possible de créer des types.
Mrweefle Posté(e) le 14 août 2018 Posté(e) le 14 août 2018 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...
Nashoba Posté(e) le 14 août 2018 Auteur Posté(e) le 14 août 2018 Il manque une class dans le plugin Skript. Tu as la dernière version ?
Mrweefle Posté(e) le 16 août 2018 Posté(e) le 16 août 2018 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...
Mrweefle Posté(e) le 20 août 2018 Posté(e) le 20 août 2018 Mon problème est enfin résolu, merci maven ?
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant