Ajouter un évènement
Créer l'évènement¶
Pour créer un nouvel évènement, commencer par créer une nouvelle classe qui héritera de la classe ScriptEvent
. Le constructeur de la classe ScriptEvent
est ce qui va permettre de passer des variables au contexte local de l'évènement lorsqu'il sera déclenché. Par exemple, l'évènement suivant donne accès au fichier du script qui vient d'être chargé :
public class EvtOnScriptLoad extends ScriptEvent {
public EvtOnScriptLoad(File scriptFile) {
super(new ScriptAccessor(new TypeFile(scriptFile),"[script] file"));
}
}
Le constructeur EvtOnScriptLoad
peut prendre n'importe quels arguments en paramètres. C'est ce constructeur qui sera appelé lorsqu'il faudra déclencher l'évènement.
Le constructeur super
accepte une infinité d'instances du type ScriptAccessor
. Pour rappel, les ScriptAccessor
sont des objets qui contiennent un élément de n'importe quel type, ainsi qu'un pattern RegEx. En utilisant le constructeur de ScriptAccessor
, on peut transformer un pattern en RegEx facilement. Ici, l'accesseur reconnaîtra les expressions "file" et "script file", et retournera le TypeFile()
nouvellement instancié.
Il faut maintenant enregistrer l'évènement. Il suffit pour cela d'ajouter l'annotation @Event
à la classe créée, puis de remplir les paramètres demandés. Les patterns permettront de reconnaître l'évènement lors de la lecture de la ligne. Par exemple, le pattern [script] load[ed]
reconnaîtra les lignes "load", "script load", "script loaded" et "loaded". Enfin, le paramètre accessors
permet d'indiquer au système de compilation quels accesseurs cet évènement possède.
Voici une classe d'évènement complète :
@Event(name = "script load",
description = "Called when script is loaded",
examples = "on script load:",
patterns = "[script] load[ed]",
accessors = "[script] file:file")
public class EvtOnScriptLoad extends ScriptEvent {
public EvtOnScriptLoad(File scriptFile) {
super(new ScriptAccessor(new TypeFile(scriptFile),"[script] file"));
}
}
Il est possible de configurer un side
pour l'évènement en l'ajoutant dans l'annotation. Dans tous les cas, il ne faut jamais (il est en tout cas fortement déconseillé) d'utiliser l'annotation forge @Side
pour en définir un. Sqript gère automatiquement ces problèmes et il suffit de le paramétrer dans l'annotation de l'élément concerné.
Déclencher l'évènement¶
Une fois que l'évènement est enregistré, il est possible de l'appeler depuis n'importe quel méthode ou fonction java. Pour cela, il suffit d'appeler la méthode ScriptManager.callEvent(ScriptEvent)
. L'argument ScriptEvent sera simplement une instance de votre classe. Par exemple, pour déclencher l'évènement définit par la classe ci-dessus, la fonction serait appelée comme suit :
ScriptManager.callEvent(new EvtOnScriptLoad(script_file));
Dans ce cas, toutes les instances de scripts recevront l'évènement. Cette méthode retournera true
si l'évènement a été annulé par un script.
Tip
Pour cibler un script en particulier, il suffit d'appeler la même méthode de l'instance de ScriptInstance du script.
Pour récupérer le contexte après exécution du script, par exemple si on veut savoir la valeur d'un des accesseurs après exécution, il suffit d'appeler la méthode ScriptManager.callEventAndGetContext(ScriptEvent)
. Une instance du ScriptContext vous sera alors renvoyée.