Aller au contenu

Nashoba

Ancien
  • Compteur de contenus

    682
  • Inscription

  • Dernière visite

  • Jours gagnés

    27

Tout ce qui a été posté par Nashoba

  1. Nashoba

    [Suggestion] Addon Twitter

    J'avais déjà eu l'idée de mettre ça dans mon addon mais j'ai oublié... Je vais voir ça pour une prochaine maj
  2. 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 les précédents tutoriaux ou vous pourrez être perdus. Créer une expression Cette partie va être plus longue et plus complexe. Une expression je vous le rappelle renvoie un objet, n'importe lequel. Une expression peut être aussi « settable », c'est-à-dire que l'ont peut utiliser « add %object% to %object% » (le premier est votre expression et le deuxième ce que vous ajoutez), « remove %object% from %object% », « set %object% to %object% », « reset %object% » ou « remove all from %object% ». Tout d'abord voici le code de base de votre class : package votre.package; import javax.annotation.Nullable; import org.bukkit.event.Event; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; public class VotreClass SimpleExpression<Object>{ @Override public boolean isSingle() { return true; } @Override public Class<? extends Object> getReturnType() { return Object.class; } @SuppressWarnings("unchecked") @Override public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean paramKleenean, ParseResult paramParseResult) { return true; } @Override public String toString(@Nullable Event e, boolean paramBoolean) { return null; } @Override @Nullable protected Object[] get(Event e) { return new Object[]{ }; } } Voyons les fonctions 1 par 1 : isSingle() : Si vous renvoyez false, c'est que ce que vous renvoyez avec votre expression est une liste (plusieurs objets), si vous renvoyer true, vous ne renvoyez qu'un seul objet. getReturnType() : Permet à Skript d'obtenir la class du type d'objet que vous renvoyez (ex : String.class, Integer.class, Player.class...). init() : Si vous avez suivi le reste du tuto, vous la connaissez. toString() : Vous connaissez aussi. get() : Permet d'obtenir l'objet de l'expression. /!\ Vous devez renvoyer une liste obligatoirement, si vous renvoyez false à la fonction isSingle(), vous devez renvoyer une liste à un seul élément. Dans votre class, la première chose à faire est de remplacer tous les « Object » par le type d'objet que vous voulez renvoyer (ex : String, Integer, Player, NPC, UUID, Long...). Comme exemple je vais faire une expression qui renvoie le nom du joueur, ça renvoie donc un String (texte). Dans ma classe ça me donne : package votre.package; import javax.annotation.Nullable; import org.bukkit.entity.Player; import org.bukkit.event.Event; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; public class ExprPlayerName extends SimpleExpression<String>{ private Expression<Player> player; @Override public boolean isSingle() { return true; } @Override public Class<? extends String> getReturnType() { return String.class; } @SuppressWarnings("unchecked") @Override public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean paramKleenean, ParseResult paramParseResult) { player = (Expression<Player>) expr[0]; return true; } @Override public String toString(@Nullable Event e, boolean paramBoolean) { return "name of player"; } @Override @Nullable protected String[] get(Event e) { return new String[]{ }; } } Maintenant voyons la fonction get(). Dans le « return new String[]{ } » je dois ajouter le nom du joueur dans la liste. J'obtiens donc le code suivant : @Override @Nullable protected String[] get(Event e) { String name = player.getSingle(e).getName(); return new String[]{ name }; } } Maintenant voyons voir pour une expression « settable ». On va rajouter 2 nouvelles fonctions dans notre class : @Override public void change(Event e, Object[] delta, Changer.ChangeMode mode){ } @SuppressWarnings("unchecked") @Override public Class<?>[] acceptChange(final Changer.ChangeMode mode) { return null; } La fonction change() est appelée quand l'objet doit être changé. Vous avez 3 paramètres dedans : e : Vous le connaissez (pour récupérer une variable private avec getSingle(e)) delta : L'objet que vous devrez ajouter (vous devrez le cast) mode : Le type de changement : add, remove, reset... La fonction acceptChange() doit renvoyer les class des objets que vous acceptez lors d'un changement. Par exemple si vous souhaitez pouvoir ajouter uniquement des nombres en fonction de certains mode, il faut faire une condition avec le type de mode et renvoyer Number.class. Exemple : Avec le plugin PayerPoints, pouvoir récupérer les points du joueur et pouvour en add, remove, reset ou set : package fr.nashoba24.wolvsk.playerpoints; import javax.annotation.Nullable; import org.black_ixx.playerpoints.PlayerPoints; import org.bukkit.entity.Player; import org.bukkit.event.Event; import ch.njol.skript.classes.Changer; import ch.njol.skript.classes.Changer.ChangeMode; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; import ch.njol.util.coll.CollectionUtils; public class ExprPoints extends SimpleExpression<Integer>{ private Expression<Player> player; @Override public boolean isSingle() { return true; } @Override public Class<? extends Integer> getReturnType() { return Integer.class; } @SuppressWarnings("unchecked") @Override public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean paramKleenean, ParseResult paramParseResult) { player = (Expression<Player>) expr[0]; return true; } @Override public String toString(@Nullable Event e, boolean paramBoolean) { return "points of player"; } @Override @Nullable protected Integer[] get(Event e) { return new Integer[]{ PlayerPoints.getPlugin(PlayerPoints.class).getAPI().look(player.getSingle(e).getUniqueId()) }; } @Override public void change(Event e, Object[] delta, Changer.ChangeMode mode){ if (mode == ChangeMode.SET) { PlayerPoints.getPlugin(PlayerPoints.class).getAPI().set(player.getSingle(e).getUniqueId(), ((Number) delta[0]).intValue()); } else if (mode == ChangeMode.RESET) { PlayerPoints.getPlugin(PlayerPoints.class).getAPI().reset(player.getSingle(e).getUniqueId()); } else if(mode == ChangeMode.ADD) { PlayerPoints.getPlugin(PlayerPoints.class).getAPI().give(player.getSingle(e).getUniqueId(), ((Number) delta[0]).intValue()); } else if(mode == ChangeMode.REMOVE) { PlayerPoints.getPlugin(PlayerPoints.class).getAPI().take(player.getSingle(e).getUniqueId(), ((Number) delta[0]).intValue()); } } @SuppressWarnings("unchecked") @Override public Class<?>[] acceptChange(final Changer.ChangeMode mode) { if (mode == ChangeMode.SET || mode == ChangeMode.RESET || mode == ChangeMode.ADD || mode == ChangeMode.REMOVE) return CollectionUtils.array(Number.class); return null; } } Maintenant il ne nous reste plus qu'à enregistrer l'expression dans Skript : Skript.registerExpression(VotreClassclass, Object.class, ExpressionType.PROPERTY, pattern); La seule chose en plus des autres patterns est « Object.class ». Vous devez mettre à la place le type d'objet que vous renvoyez dans votre expression. Par exemple avec l'exemple précédent j'obtiens : Skript.registerExpression(ExprPoints.class, Integer.class, ExpressionType.PROPERTY, "point[s] of %player%", "%player%['s] point[s]");
  3. 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 commencer, assurez-vous d'avoir suivi les 2 premiers tutoriaux sinon vous serez perdu ^^ Créer une condition Pour créer une condition, c'est très similaire à un effet. Voici le code de base : package votre.package; import javax.annotation.Nullable; import org.bukkit.event.Event; public class VotreClass extends Condition { @SuppressWarnings("unchecked") @Override public boolean init(Expression<?>[] expr, int i, Kleenean kl, ParseResult pr) { return true; } @Override public String toString(@Nullable Event e, boolean b) { return null; } @Override public boolean check(Event e) { return true; } } Pour remplir la condition init(), si vous avez suivi cette partie dans « Créer un effet » vous devez savoir faire, sinon je vous renvoie à cette partie. La fonction toString(), pareil. Pour la fonction check(), elle doit renvoyer true ou false. Si vous renvoyez false, la condition ne sera pas passée, si vous renvoyer true, elle sera bonne. Dans cette fonction vous pouvez ajouter tout le code que vous voulez mais au final, vous devez renvoyer true ou false. Exemple : Une condition qui test si un nombre est pair. package votre.package; import javax.annotation.Nullable; import org.bukkit.event.Event; public class CondNombrePair extends Condition { private Expression<Number> nombre; @SuppressWarnings("unchecked") @Override public boolean init(Expression<?>[] expr, int i, Kleenean kl, ParseResult pr) { nombre = (Expression<Number>) expr[0]; return true; } @Override public String toString(@Nullable Event e, boolean b) { return "nombre pair"; } @Override public boolean check(Event e) { if(number.getSingle(e).intValue() % 2 == 0) { return true; } else { return false; } } } Pour enregistrer votre pattern, utilisez le code suivant : Skript.registerCondition(VotreClass.class, pattern); Pour mon exemple j'obtiens : Skript.registerCondition(CondNombrePair.class, "%number% is even");
  4. 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 --------------------------- Créer un effet On va commencer par le plus facile. Je rappelle, un effet permet d’exécuter du code sans renvoyer d'informations en échange. Tout d'abord on va choisir l'effet à créer et on va créer une classe où on veut. Par exemple je crée un package « fr.nashoba24.wolvsk.effets » et je crée une classe nommée EffSendMessageToPlayer car je veux envoyer un message à un joueur grâce à cette fonction. Ensuite je vais coller dans cette nouvelle classe le code suivant, puis je l'éditerai : package votre.package; import ch.njol.skript.lang.Effect; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; import javax.annotation.Nullable; import org.bukkit.event.Event; public class VotreClass extends Effect { @SuppressWarnings("unchecked") @Override public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean paramKleenean, ParseResult paramParseResult) { return true; } @Override public String toString(@Nullable Event e, boolean b) { return null; } @Override protected void execute(Event e) { } } La fonction init() permet d'enregistrer les éventuelles variables et de retourner vrai si tout est bon (que les variables sont bonnes par exemple) La fonction toString() retourne le nom de l'effet, qui sera éventuellement utilisé dans des messages d'erreur par exemple. Pour finir, la fonction execute() est appelée quand l'effet est exécuté. Il contiendra donc votre code pour réaliser un effet en Skript. Voyons d'abord la fonction init(). L'argument expr[] retourne les variables dont vous aurez éventuellement besoin dans votre fonction execute(). matchedPattern renvoie le numéro du pattern correspondant (on verra plus tard qu'on peut avoir plusieurs patterns pour un(e) même effet/évent/condition). Pour les 2 autres je ne vais pas vous cacher que je n'en ai jamais eu besoin donc je ne sais pas à quoi ça sert ? Maintenant on va voir comment enregistrer une variable. Tout d'abord, après public class VotreClass extends Effect { on va rajouter une voir plusieurs lignes avec les variables dont vous aurez besoin. Vous devez la déclarer comme ceci : private Expression<TypeDeVotreObjet> nomDeLaVariable; Ensuite dans init(), on va changer la valeur de la variable. Pour ceci on ajoute autant de lignes que nécessaire avec nomDeLaVariable = (Expression<TypeDeVotreObjet>) expr[numéro]; La numéro correspond au numéro de l'objet envoyé par Skript. Pour le trouver, il vous suffit de compter le numéro de l'objet dans le pattern. Par exemple avec send %string% to %player% Là, l'objet %string% aura pour numéro 0 et player aura pour numéro 1. Voyons voir maintenant à quoi ressemble ma class si j'enregistre les variables pour envoyer un message. J'aurais besoin de variable : le message et le joueur. Le pattern que j'utilise est « send %string% to %player% » package votre.package; import ch.njol.skript.lang.Effect; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; import javax.annotation.Nullable; import org.bukkit.entity.Player; import org.bukkit.event.Event; public class EffSendMessageToPlayer extends Effect { private Expression<String> message; private Expression<Player> player; @SuppressWarnings("unchecked") @Override public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean paramKleenean, ParseResult paramParseResult) { message = (Expression<String>) expr[0]; player = (Expression<Player>) expr[1]; return true; } @Override public String toString(@Nullable Event e, boolean b) { return null; } @Override protected void execute(Event e) { } } Maintenant attaquons nous à la fonction toString(). C'est relativement simple, il faut retourner un String avec le nom de la fonction qui sera éventuellement utilisé par exemple dans des message d'erreurs. Ici je vais retourner « send message to player ». J'obtiens donc : @Override public String toString(@Nullable Event e, boolean b) { return "send message to player"; } Pour finir il faut remplir la fonction execute(). Vous pouvez mettre ici n'importe quel code, qui fera au final ce que la fonction demande. Ici je dois faire en sorte d'envoyer le message au joueur. Vous aurez sûrement besoin de variable, je vais donc vous montrer comment récupérer une variable. Il faut tout simplement faire ceci : nomDeLaVariable.getSingle(e) Au final ma class ressemble à ça : package votre.package; import ch.njol.skript.lang.Effect; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; import javax.annotation.Nullable; import org.bukkit.entity.Player; import org.bukkit.event.Event; public class EffSendMessageToPlayer extends Effect { private Expression<String> message; private Expression<Player> player; @SuppressWarnings("unchecked") @Override public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean paramKleenean, ParseResult paramParseResult) { message = (Expression<String>) expr[0]; player = (Expression<Player>) expr[1]; return true; } @Override public String toString(@Nullable Event e, boolean b) { return "send message to player"; } @Override protected void execute(Event e) { player.getSingle(e).sendMessage(message.getSingle(e)); } } Bien, il reste une seule chose à faire : enregistrer l'effet dans Skript. Pour ceci, il faut placer la ligne suivante dans une fonction appelée au démarrage du serveur (par exemple onEnable(), dans la classe principale). Skript.registerEffect(VotreClass.class, pattern); A la place de VotreClass, vous mettez le nom de la classe contenant l'effet et à la place de pattern vous mettez votre pattern sous forme de String. Si vous voulez en mettre plusieurs, vous pouvez mettre une virgule et mettre d'autres patterns après. Pour mon exemple ça me donne ça : Skript.registerEffect(EffSendMessageToPlayer.class, "(send|message) %string% to %player%");
  5. C'est autorisé, si c'est juste pour regarder. Sinon beaucoup de projet sont open sources: Skript: https://github.com/Njol/Skript SkQuery: https://github.com/w00tmast3r/skquery/ SkRayFall: https://github.com/eyesniper2/skRayFall/ skUtilities: https://github.com/tim740/skUtilities/ Umbaska: https://github.com/nfelly/Umbaska WolvSK (pub cachée): https://github.com/Nashoba24/WolvSK
  6. Me voilà Membre Actif :)
  7. Nashoba

    Mes kebabb

    De toute façon les doubles comptes sont interdis: https://skript-mc.fr/forum/threads/double-compte.7288/#post-64712
  8. Nashoba

    give a un slot precis

    Tu dois enlever tous tes % % Du coup ça te donne: set slot 8 of player to 1 feather named "Fly VIP"
  9. Nashoba

    Mes kebabb

    Il faut être membre actif: https://skript-mc.fr/forum/threads/membres-actifs.3033/
  10. Tu dois enregistrer une variable avec comme valeur true quand le joueur fais la commande. Ensuite, tu dois tester si ta variable est set ou non quand tu met l'item dans le GUI. Si elle n'est pas set, tu met comme nom "Pas posé", sinon tu met "Posé". Par exemple: on command "TA COMMANDE": command sender is a player set {zombie.pose.%uuid of player%} to true command /zombiegui: trigger: command sender is a player open chest with 1 rows named "&6Spawner a Zombie" to player if {zombie.pose.%uuid of player%} is not set: format slot 0 of the player with mob spawner named "Pas posé" to close then run [execute player command "{@zombie}"] else: format slot 0 of the player with mob spawner named "Posé" to close
  11. Tu peux essayer: On drop clock: if player has permission "clock.bg": cancel event
  12. Je suis en train de faire un tuto pour créer un addon en Java. Il me reste à faire les expressions, les évents et les types.
  13. J'avais pas fait gaffe mais le problème vient de SkQuery. Pour ce qui est de Skript tout va bien. Dans tes logs la 1ère erreur tu peux la corriger en téléchargeant la bonne version de SkQuery (je te renvoie à mon post: https://skript-mc.fr/forum/threads/packs-skript-addons-1-7-1-8-1-9-1-10.7684/) et la 2ème erreur est tout a fait anodine.
  14. BuildTools permet juste de télécharger la dernière version de spigot. Or sur ce site, spigot est tenu à jour.
  15. Spigot tu peux le télécharger ici: https://tcpr.ca/downloads/spigot
  16. Si tu veux j'ai fais un post avec des les différentes versions de Skript & ses addons compatible en fonction de ta version de bukkit: https://skript-mc.fr/forum/threads/packs-skript-addons-1-7-1-8-1-9-1-10.7684/
  17. Nashoba

    clear all + tp all

    Au temps pour moi, dans le code que j'ai proposé j'ai sans faire exprès mis un "p" devant "loop-player"
  18. Au temps pour moi j'avais mal lu ^^
  19. Pareil j'en connaissais 3/6 ^^ Je ne connaissais pas le 2, 4 et le 5
  20. Il semblerait que SkStuff permet de faire le 1: https://www.skunity.com/search?search=nbt+of+an+entity Pour le 2 je ne sais pas ^^
  21. Nashoba

    clear all + tp all

    loop all players: clear ploop-player's inventory teleport loop-player to {TA.LOCATION}
  22. Le problème vient d'un flag... Mais je ne serais pas te dire lequel :/ Il est peut-être en rapport avec GroupManager (comme un test de groupe) mais je ne suis pas sûr.
  23. As-tu essayé de mettre à jour ta version de WorldGuard? Tu peux essayer cette version: https://dev.bukkit.org/media/files/881/691/worldguard-6.1.jar
  24. Nashoba

    Load Kit

    "Chests must have a size that is a multiple of 9!" Tout est dit dans cette phrase. L'inventaire que tu essaye de charger dans le coffre n'a pas un nombre de slots multiple de 9. Pour régler ce problème tu peux essayer de loop l'inventaire et d'ajouter les items un par un.
  25. Tkt c'est juste que j'ai trouvé ça en cherchant des conditions et effets méconnus. Ne sachant pas si tu en avais besoin j'ai préféré te les dire. AU pire ça servira pour quelqu'un d'autre
×
×
  • Créer...

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.