Aller au contenu
Nashoba

Du Skript Au Java #1 - Bases et Événements

Messages recommandés

Invité
Bonjour,

 

Dans cette série de tuto je vais vous apprendre à passer du Skript au Java. En effet la manière de coder en Skript ressemble bien au Java, de ce qui est de la logique du code (événement, puis conditions, puis actions etc...). Bien sûr, des connaissances en Java sont nécessaires avant de commencer. Pour cela je vous conseille de suivre la Partie 1 et 2 de ce tuto: openclassrooms.com/courses/apprenez-a-programmer-en-java

 

Les bases

 

Étant donner que des dizaines et des dizaines de tutos pour ça traînent sur le net, j'en ai sélectionné un qui est plutôt bien fait:

 

Les Événements

 

Un événement en Java est recherché dans les classes ayant un Listener. Vous allez me dire: Ouais mais comment ça marche? Je vais vous expliquer du mieux possible.

Un Listener doit être implémenté dans la classe contenant des événements et aussi enregistré dans la classe principale de votre plugin. Pour implémenter un Listener, il faut ajouter

implements Listerner

Dans la ligne du "public class" (vers le début).

Par exemple avec ma classe principale j'obtiens ceci:

package fr.nashoba24.wolvmc;

import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.event.Listener;

public class WolvMC extends JavaPlugin implements Listener {
//CODE

}

 

Ensuite il faut enregistrer le Listener dans votre classe principale, sinon Bukkit ne sera pas où aller voir s'il y a des événements. Pour cela, dans la fonction

@Override
public void onEnable() {

}

Il faut mettre autant de lignes que de classe avec des événements comme ceci:

Bukkit.getPluginManager().registerEvents(new NomDeVotreClasseAvecLeListernerImplémenté(), this);

Bien sûr, vous devrez faire les imports nécessaires.

Si vous voulez enregistrer votre classe principale (Avec le "onEnable()"), vous devrez mettre:

Bukkit.getPluginManager().registerEvents(this, this);

Voilà! Vos classes sont prêtes pour recevoir des évnements!

 

 

 

Maintenant on va voir comment créer des événements.

Tout d'abord, en Java, un événement est une fonction avec en argument l'événement et une annotation "@EventHandler". Vous ne comprenez rien? OK j'explique

L'annotation permet de reconnaître la fonction en tant qu’événement et non en tant fonction basique. Sinon toutes vos fonctions seraient appelées et ce serait l'anarchie.

Un événement est une fonction avec comme argument l’événement. C'est une fonction qui ne renvoie rien (void) mais qui exécute des actions. Voilà comment ça marche niveau code:

@EventHandler
public void nomDeLaFonction(ClasseDeL'événement e) {
       //Actions et Conditions ici
}

Ici c'est un événement qui n'existe pas mais c'est pour vous montrer la structure. La variable "e" vous permettra ensuite de récupérer des infos de l'événement, on verra ça plus tard.

Un exemple avec un événement activé quand le joueur rejoint le serveur:

@EventHandler
public void onJoin(PlayerJoinEvent e) {
   //Actions et Conditions
}

 

Voici la liste des équivalents en class des événements de Skript:

[spoiler=Liste]

On Bed Enter: PlayerBedEnterEvent
On Bed Leave: PlayerBedLeaveEvent
On Block Damage: BlockDamageEvent
On Break / Mine: BlockBreakEvent
On Bucket Empty: PlayerBucketEmptyEvent
On Bucket Fill: PlayerBucketFillEvent
On Burn: BlockBurnEvent
On Can Build Check: BlockCanBuildEvent
On Chat: PlayerChatEvent
On Chunk Generate: ChunkPopulateEvent
On Chunk Load: ChunkLoadEvent
On Chunk Unload: ChunkUnloadEvent
On Click: PlayerInteractEvent OU PlayerInteractEntityEvent OU PlayerInteractAtEntityEvent
On Combust: EntityCombustEvent
On Command: PlayerCommandPreprocessEvent
On Connect: PlayerPreLoginEvent
On Craft: CraftItemEvent
On Creeper Power: CreeperPowerEvent
On Damage: EntityDamageByBlockEvent OU EntityDamageByEntityEvent OU EntityDamageEvent
On Death: EntityDeathEvent
On Dispense: BlockDispenseEvent
On Drop: PlayerDropItemEvent
On Enderman/Sheep: EntityChangeBlockEvent
On Explode: EntityExplodeEvent
On Explosion Prime: ExplosionPrimeEvent
On Fade: BlockFadeEvent
On First Join: PlayerJoinEvent
On Fishing: PlayerFishEvent
On Flow: BlockFromToEvent
On Form: BlockFormEvent
On Fuel Burn: FurnaceBurnEvent
On Gamemode Change: PlayerGameModeChangeEvent
On Grow: StructureGrowEvent
On Heal: EntityRegainHealthEvent
On Hunger Meter Change: FoodLevelChangeEvent
On Ignition: BlockIgniteEvent
On Item Break: PlayerItemBreakEvent
On Item Spawn: ItemSpawnEvent
On Join: PlayerJoinEvent
On Kick: PlayerKickEvent
On Leaves Decay: LeavesDecayEvent
On Level Change: PlayerLevelChangeEvent
On Lightning Strike: LightningStrikeEvent
On Move on: PlayerMoveEvent
On Physics: BlockPhysicsEvent
On Pick Up: PlayerPickupItemEvent
On Pig Zap: PigZapEvent
On Piston Extend: BlockPistonExtendEvent
On Piston Retract: BlockPistonRetractEvent
On Place: BlockPlaceEvent
On Portal: PlayerPortalEvent
On Portal Create: PortalCreateEvent
On Pressure Plate / Trip: EntityInteractEvent
On Projectile Hit: ProjectileHitEvent
On Quit: PlayerQuitEvent
On Redstone: BlockRedstoneEvent
On Respawn: PlayerRespawnEvent
On Shoot: EntityShootBowEvent
On Sign Change: SignChangeEvent
On Smelt: FurnaceSmeltEvent
On Sneak Toggle: PlayerToggleSneakEvent
On Spawn: CreatureSpawnEvent
On Spawn Change: SpawnChangeEvent
On Spread: BlockSpreadEvent
On Sprint Toggle: PlayerToggleSprintEvent
On Tame: EntityTameEvent
On Target: EntityTargetEvent
On Teleport: PlayerTeleportEvent
On Throwing of an Egg: PlayerEggThrowEvent
On Tool Change: PlayerItemHeldEvent
On Vehicle Change: VehicleUpdateEvent
On Vehicle Create: VehicleCreateEvent
On Vehicle Damage: VehicleDamageEvent
On Vehicle Destroy: VehicleDestroyEvent
On Vehicle Enter: VehicleEnterEvent
On Vehicle Exit: VehicleExitEvent
On Weather Change: WeatherChangeEvent
On World Init: WorldInitEvent
On World Load: WorldLoadEvent
On World Save: WorldSaveEvent
On World Unload: WorldUnloadtEvent
On Zombie Break Door: EntityBreakDoorEvent

 

 

 

Si jamais il vous faut quelques précisions ou aides n'hésitez pas à me demander :)

Bon, même si c'est relativement simple, c'est plutôt bien compréhensible et sans être vantard ! Tu ferais un bon professeur toi : )

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

×
×
  • 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.