Welcome to Bukkit France

Inscrivez-vous maintenant pour profiter d'un accès total à tout le contenu offert par la meilleur communauté Bukkit française ! Une fois inscrit et connecté, vous pourrez contribuez à la communauté en postant vos propres sujets et questions ou en répondant à ceux existants. Vous pourrez aussi customiser votre profil, recevoir des points de réputations, communiquer avec les autres membres via le chat, et plus encore! 

TheElectronWill

Contributeur
  • Compteur de contenus

    850
  • Inscription

  • Dernière visite

Réputation sur la communauté

996 Excellent

À propos de TheElectronWill

  • Rang
    ✨ Scala Evangelist ✨
  • Date de naissance 05/02/99

Me contacter

  • Discord TheElectronWill#0423
  • GitHub TheElectronWill
  • Minecraft TheElectronWill
  • Mail [email protected]il.com
  • Site Web mcphoton.fr
  • Twitter TheElectronWill

Informations de profil

  • Bukkitorg http://dev.bukkit.org/profiles/TheElectronWill/
  • Centres d'intérêt Informatique, Badminton, Aikido, Piano.
  • Sexe Homme

Visiteurs récents du profil

6869 visualisations du profil
  1. ClassNotFoundException qui rend fou

    Il ne suffit pas de déclarer la dépendance, il faut inclure la lib dans le .jar de ton plugin.
  2. DataWatcher, WatchableObject à quoi sa sert ??

    Ça traque les changements des metadata des entités pour, par exemple, les envoyer aux joueurs quand ça change
  3. [1.7.2] DataInputStream

    Je pense que oui
  4. [1.7.2] DataInputStream

    "envoyer le packet pour que le client fasse ceci" Les données envoyées via un PluginMessageChannel ou un paquet custom doivent être traitées par du code spécifique côté client - il faut modifier le client quoi. Le serveur peut pas décider automagiquement du code client   EDIT : c'est peut-être plutôt ça ta question ? L'équivalent de ça en write: int id = in.readShort(); int amount = in.readByte(); int data = in.readShort(); int enchantsCount = in.readByte();*/ ItemStack stack = new ItemStack(Item.getItemById(id), amount, data); for (int i = 0; i < enchantsCount; i++) { stack.addEnchantment(Enchantment.enchantmentsList[in.readByte()], in.readByte()); } return stack; Ce serait un truc du genre: out.writeShort(item.getTypeId()); out.writeShort(item.getAmount()); out.writeShort(item.getData().getData()); Map<Enchantment, Integer> enchants = item.getEnchantments(); out.writeByte(enchants.size()); // enchantsCount for(Map.Entry<Enchantment, Integer> entry : enchants.entrySet()) { Enchantment enchant = entry.getKey(); Integer level = entry.getValue(); out.writeByte(enchant.getId()); out.writeByte(level); }  
  5. MySQL Se déconnecte automatiquement Mojang Bloque Les Reseaux !

    S'il veut vraiment rester connecté pourquoi ne pas changer le keep-alive côté mysql ?
  6. 2 - Les Bases

    2 - Les Bases   Variables & Constantes Scala utilise deux mots-clés différents pour les variables et pour les constantes. var nom: Type = valeur // variable, contient une valeur val nom: Type = valeur // constante, ne peux pas être modifiée Remarquez que, contrairement à Java, C et d'autres, le type de la valeur est après son nom, pas avant.   Scala est capable de trouver le type des expressions lui-même, donc vous pouvez écrire par exemple : var i = 0 // pas besoin de préciser que c'est un int   En Scala les types "primitifs" se notent avec une majuscule: Int, Long, Float, Double, Boolean. Puisque tout est objet, ils ont aussi leur classe ! Mais ce n'est pas comme si on remplaçait les types primitifs de Java par leur wrappers : au final, le compilateur Scala utilise les types primitifs (dès que c'est possible).     Méthodes Une méthode se définit avec le mot-clé def, comme en Python. def nom(param1: Type, param2: Type): TypeResultat = { // code ... resultat // pas besoin de return } Le mot-clé return existe en scala, mais il est peu utilisé. En effet, un bloc de code qui doit retourner une valeur prend automatiquement celle de sa dernière expression.   Là encore, Scala peut trouver le type du résultat tout seul. Cependant c'est une bonne habitude d'écrire le type, d'une part pour éviter les surprises (résultat qui n'est pas du type auquel on s'attendait) et pour informer les autres développeurs, ainsi que votre vous du futur qui aura oublié comment il a fait cette fonction   Petit exemple, attention c'est difficile ! On va additionner deux nombres def add(a: Int, b: Int) = { a + b } Et voilà   On peut aussi écrire la fonction en une seule ligne et enlever les accolades: def add(a: Int, b: Int) = a + b   Conditions Les conditions sont similaires à celles du Java, avec un truc en plus : une condition est une expression qui donne un résultat. Il n'y a pas d'opérateur ternaire en Scala, juste des conditions. var v = if(condition1) "a" else if (condition2) "b" else "c"   Boucles On retrouve les classiques while(condition) (tant que) et do { ... } while(condition) (répéter) que vous connaissez bien. Là où il y a du changement c'est au niveau de la boucle for. Vous avez peut-être l'habitude d'utiliser ce type de boucle : for (int i = 0; i < 10; i++) { //code } En Scala, ça n'existe pas ! Il n'y a que le "foreach" : for (i <- 0 until 10) { // i prend les valeurs 0,1,2,3,4,5,6,7,8,9 //code } for (element <- array) { // parcourt un tableau //code } Cette écriture n'est en fait que du "sucre syntaxique" qui se traduit par un appel à la méthode foreach : (0 until 10).foreach(/*code*/)  
  7. Enfin ! Le blog scala :3

  8. 1 - Introduction

    1 - Introduction   Bonjour à toutes et à tous ! (non ce tuto n'est pas sponsorisé par Emmanuel Macron ... bon OK c'était pas très drôle )   Ne vous-êtes vous jamais dit, après avoir passé des heures à coder en Java, C ou autre langage créé dans le siècle précédent, "mais pourquoi c'est si long de faire ce que je veux ?!", "ah ben c'est pas possible, dommage c'était la meilleure solution pour avoir un design correct" ou encore "pourquoi les génériques java sont si limités ?". Eh bien, nous allons apprendre un langage qui dépasse beaucoup de ces limites, pour que vous puissiez faire plus de choses et plus rapidement !   Mettez vos points-virgules de côté, aujourd'hui on fait du Scala !       La petite histoire du Scala Peu après la sortie de Java, en 1995, un certain "Martin Odersky" travaille avec d'autres ingénieurs pour ajouter des fonctionnalités au langage, avec un nouveau compilateur. Une partie de ce travail est intégré dans Java sous la forme des génériques que vous connaissez. En 2001, dans le cadre de ses recherches à l'EPFL, il se lance dans l'élaboration d'un nouveau langage avec l'objectif ambitieux de combiner programmation orienté objet et programmation fonctionnelle en évitant les problèmes de Java. Ce nouveau langage, il le nomme Scala, condensé de "scalable language", que l'on pourrait traduire par "langage extensible/évolutif", c'est-à-dire un langage qui grandit pour et avec ses utilisateurs. Le logo rouge représente... un escalier. Oui oui, un escalier ! L'escalier qui se trouve dans le bâtiment d'informatique de l'EPFL, à côté des bureaux de recherche Au moins c'est simple, moderne et assez esthétique ^^ (pas comme Go ). Mais revenons au sujet.   Scala est purement orienté objet : Chaque valeur est un considérée comme un objet, même les ints ! Et c'est quand même bien pratique. On définit les objets avec des classes et des traits, de façon similaire à Java. Scala est aussi fonctionnel : Chaque fonction est une valeur, qui peut être stockée, passée en paramètre et utilisée comme un objet. On a une lib de collections immuables à disposition. Support du currying et de la tail recursion (qui est optimisée par le compilateur, contrairement à Java). Scala est enfin à typage statique : Les variables ont un type précis et le compilateur vérifie qu'on ne met pas n'importe quoi comme valeur. Comme en Java, je ne peux pas associer une String à un Int.   Scala compile en bytecode java, et peut donc interagir avec du code Java. On peut utiliser Scala et Java dans le même projet ! On peut aussi utiliser scala en mode Script ou REPL pour évaluer des expressions isolées, et des travaux sont en cours pour compiler Scala en JavaScript (stable) et en binaire natif (encore en beta). Nous nous concentrerons sur la compilation classique en bytecode, qui est la mieux supportée et la plus utilisée.   Les bases de la programmation ? Cette série de cours sur Scala s'adresse à des gens qui ont un minimum d'expérience en programmation. Vous devez donc savoir ce qu'est une variable, une fonction, de préférence un objet, et savoir utiliser un éditeur de texte ou votre IDE préféré. Je ne reviendrai pas en détail sur ces bases-là.   Mise en place de l'environnement Avant toute chose vous devez installer le JDK 8 -> cf le site d'oracle. Le 9 devrait fonctionner avec les dernières versions mais officiellement le support de Java 9 n'est pas encore complet. Vous avez ensuite plusieurs options : Utiliser IntelliJ avec le plugin Scala. Utiliser Eclipse avec le plugin Scala. Utiliser Scala IDE, un IDE basé sur Eclipse et optimisé pour Scala. Utiliser votre éditeur préféré + le terminal. Vous pouvez utiliser l'outil sdkman pour installer scala et sbt (l'outil de build). Scala fonctionne aussi avec maven et gradle.   Je vous laisse consulter la documentation de l'outil que vous avez choisi. Personnellement j'utilise IntelliJ et gradle, mais il n'y a pas de mauvais choix   Hello World Pour donner un aperçu du langage, voici deux façons de faire un Hello World en Scala. Créez un nouveau fichier HelloWorld.scala et mettez-y le code. Vous devriez ensuite pouvoir l'exécuter avec votre IDE. La façon classique, équivalente à celle que vous connaissez peut-être en Java : class HelloWorld { def main(args: Array[String]): Unit = { println("Hello, World") } } Et la version "simplifiée" en héritant de App (on reparlera des objets et de l'héritage dans un futur billet). object HelloWorld extends App { println("Hello, World!") }
  9. Vanic.us Replay

    Euh pourquoi une entité custom ? Bukkit donne déjà plein d'évènements sur les déplacements et les actions des joueurs
  10. Vanic.us Replay

    Pendant le game tu enregistre les infos de tous les events. Et pour replay tu reprend les infos une par une et tu modifie les entités des joueurs en conséquence. Faire un player.setMachin c'est fluide ^^
  11. Vanic.us Replay

    Il suffirait d'enregistrer tout ce qui se passe avec des events, puis de rejouer les events (= appliquer les mêmes modifications aux entités) en respectant les intervalles de temps. Et hop tu peux rejouer n'importe quoi sur n'importe quel entité, joueur ou pas
  12. Photon - Le serveur libre et multi-thread !

    Comme vous avez pu le voir, il y a eu peu de commits cette semaine. En fait je mène une grosse réflexion sur deux aspects : Modularisation : séparer la base du serveur et les choses qui changent en fonction des versions du jeu, c'est-à-dire principalement le protocole réseau, les entités et les blocs. Ça permettra de pouvoir mettre à jour Photon très facilement, et de supporter plusieurs versions en même temps sans problème. Calcul distribué : en adaptant un tout petit peu le modèle actuel, on peut avoir quelque chose de distribuable sur plusieurs serveurs ! Donc en plus d'avoir plusieurs coeurs de CPU vous pourrez avoir plusieurs machines qui travaillent ensembles. Si avec ça on surpasse pas les autres logiciels serveurs...   Pour pas faire un truc bâclé, je travaille pas mal sur papier et tableau blanc (oui j'ai un tableau blanc, pas vous ?), tout en testant si ce que je veux faire est faisable en programmation. Je suis en train de faire un document qui récapitule tout, je le mettrai dans les prochains jours   À bientôt !
  13. Erreur Java SQL

    de rien ^^
  14. Erreur Java SQL

    Et ta méthode connection() tu l'utilise où ?
  15. Mineur2Rue - Le seul, l'unique ...

      Ça, c'est parce que tu ne connais pas Scala En tout cas, un grand bienvenue à toi !