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! 

Stik0u

Membres
  • Compteur de contenus

    66
  • Inscription

  • Dernière visite

Réputation sur la communauté

10 Neutre

À propos de Stik0u

  • Rang
    Membre
  1. VPS et nom de domaine...

    Merci beaucoup, j'ai donc utilisé le virtualhost Apache qui marche très bien.
  2. VPS et nom de domaine...

    Merci à vous pour vos réponses, j'ai réussi à faire ce que je voulais avec ça : "_minecraft._tcp.play.exemple.fr. 86400 IN SRV 0 5 2174 www.exemple.fr." (sur mon registar j'ai fait préalablement un enregistrement de type A avec www pointant vers l'adresse IP de mon VPS) "exemple" est remplacé par mon nom de domaine, "2174" est le port sur lequel mon serveur minecraft écoute, et "play" et le sous domaine que j'ai choisis. Maintenant, on peut se connecter sur mon serveur avec "play.exemple.fr".   J'aimerai faire de même avec ma Dynmap. Dynmap est configuré pour l'instant sur "monAdresseIpDeMonVps:12345" (cette adresse marche, le problème ne vient donc pas de Dynmap). J'aimerai accéder à la Dynmap avec l'adresse "dynmap.exemple.fr" J'ai essayé de rajouter : "_map._tcp.dynmap.exemple.fr. 86400 IN SRV 0 5 12345 www.exemple.fr." mais ça ne marche pas.   Avez-vous une solution et/ou une idée ? Merci
  3. Hello !   Avant tout, je ne savais pas dans quelle catégorie poster mon message, et je m'excuse d'avance si celle-ci n'est pas la bonne. Ensuite, je n'ai pas inclus le "formulaire d'aide" car il n'est pas du tout adapté au sujet présent. Pour finir, même si le sujet n'est pas complètement à propos de bukkit, j'ai préféré posté sur ce site car je pense que des personnes ici doivent s'y connaître. J'espère que ces points ne vous ennuient pas. Mais bref, commençons : J'ai un nom de domaine et un VPS (linux). Sur mon VPS j'ai un serveur minecraft et un serveur web (apache). J'aimerai créer un sous domaine qui redirige vers le serveur minecraft et au autre sur le serveur web. Je pensais différencier les deux serveurs avec des ports différents. Le problème est que l'enregistrement de type A ne supporte pas les ports. Je ne sais du coup pas quoi utiliser, si il faut faire quelque chose par rapport au nom de domaine ou si il faut changer quelque chose sur le VPS. Avez-vous une idée pour résoudre le problème ?   Merci encore ! 
  4. ID:IDdata

    Essaye inventory.getItem(13).getData().getData() (oui avec deux fois getData()) ou inventory.getItem(13).getDurability(); Mais essaye en priorité la première option.
  5. Générer des grandes structures... sans lags !

    Merci de vos réponses, encore une fois. Je n'arrive pas à déclarer des Object ou Method en static final quand ceux-ci nécessitent de la structure try catch. Pouvez-vous m'aider ? Un exemple serait parfait !
  6. Générer des grandes structures... sans lags !

    Hi, j'ai pas compris où tu veux en venir ? Un exemple ? Merci
  7. Générer des grandes structures... sans lags !

    Merci ! Je vais tester ça ! Juste pour ma curiosité et car je ne connais pas totalement Java, à quoi sert le "@Override" dans ce cas là, et en général (onEnable ?) ?  
  8. Générer des grandes structures... sans lags !

    Merci encore pour vos réponses, je vais regarder ça PimaPvP. Je vous dirais ce que j'ai finalment utilisé si vous le souhaitez. MISE A JOUR : Re ! Je veux absolument que mon plugin soit compatible inter-versions. Si j'utilise cette méthode : (que j'ai trouvé dans le sujet qu'a donné @PimaPvP)... public void setBlockFast(World world, int x, int y, int z, int blockId, byte data) { net.minecraft.server.World w = ((CraftWorld) world).getHandle(); net.minecraft.server.v1_11_R1.Chunk chunk = w.getChunkAt(x >> 4, z >> 4); BlockPosition bp = new BlockPosition(x, y, z); int combined = blockId + (data << 12); IBlockData ibd = net.minecraft.server.v1_11_R1.Block.getByCombinedId(combined); chunk.a(bp, ibd); } ...je suis obligé d'utiliser la réflexion. Ce que j'ai fait. Voici la même méthode avec l'utilisation de la réflexion et donc compatible inter-versions : (j'ai testé, ça marche) public void setBlockFast(World world, int x, int y, int z, int blockId, byte data) { try { Object worldNMS = getBukkitClass("CraftWorld").getMethod("getHandle").invoke(world); Object chunkNMS = getNMSClass("World").getMethod("getChunkAt", int.class, int.class).invoke(worldNMS, x >> 4, z >> 4); Object blockPositionNMS = getNMSClass("BlockPosition").getConstructor(int.class, int.class, int.class).newInstance(x, y, z); int combined = blockId + (data << 12); Object iBlockDataNMS = getNMSClass("Block").getMethod("getByCombinedId", int.class).invoke(null, combined); getNMSClass("Chunk").getMethod("a", getNMSClass("BlockPosition"), getNMSClass("IBlockData")).invoke(chunkNMS, blockPositionNMS, iBlockDataNMS); } catch (Exception e) { e.printStackTrace(); } } J'ai néanmoins deux questions : - J'ai souvent entendu que la réflexion n'était pas très optimisée au niveau des performances, utiliser ceci peut poser problème ? Voire même prendre plus de temps que le simple Block.setType() ? - Cette méthode (avec réflexion ou sans) marche, mais le joueur ne voit pas la modification tout de suite. Il faut qu'il actualise les chunks en se "déco-reco" ou en faisant F3+A. J'ai vu dans plusieurs anciens sujets qu'il suffisait d'ajouter les chunks concernés dans la liste chunkCoordIntPairQueue se trouvant dans la classe NMS EntityPlayer. Le problème est que cette liste n'existe plus. Avez vous une autre solution pour actualisez les chunks ? J'ai aussi vu ce post (ici) de @Skyost qui donne une classe qui faite par lui-même et qui fait normalement la même chose. Étant donné de l'ancienneté du post, je me demande si celle-ci marche encore (manifeste toi svp ).   Je vous remercie encore une fois de votre aide et j'attends vos réponses. ++
  9. Générer des grandes structures... sans lags !

    Ok, je testerai comme ça alors. Merci Et si vous avez d'autres idées vous pouvez toujours les donner !
  10. Générer des grandes structures... sans lags !

    Comme vous l'aurez pu le voir dans le code d'erreur j'essaye de faire mon plugin pour générer un labyrinthe. Pour l'instant, mon code permet juste de faire un cadrillage (avec les cellules du labyrinthe) comme ceci : Voici le code de génération de ceci : Material material = labyrinth.getBlockType(); Location center = labyrinth.getCenter(); int sizeX = labyrinth.getSizeX(); int sizeZ = labyrinth.getSizeZ(); World world = center.getWorld(); int y = center.getBlockY(); //GENERATION DES MURS & CELLULES : Location coin1 = new Location(world, center.getBlockX() - sizeX, y, center.getBlockZ() - sizeZ); Location coin2 = new Location(world, center.getBlockX() - sizeX, y, center.getBlockZ() + sizeZ); Location coin3 = new Location(world, center.getBlockX() + sizeX, y, center.getBlockZ() - sizeZ); HashMap<Block, Boolean> slots = new HashMap<>(); ArrayList<Block> borders = new ArrayList<>(); for(int x = coin1.getBlockX() ; x <= coin3.getBlockX() ; x++){ for(int z = coin1.getBlockZ() ; z <= coin2.getBlockZ(); z++){ Block b = new Location(world, x, y, z).getBlock(); //BORDURES DU LABYRINTHE : if(x == coin1.getBlockX() || x == coin3.getBlockX() || z == coin1.getBlockZ() || z == coin2.getBlockZ()){ borders.add(b); }else{ //CELLULES ET MURS DU LABYRINTHE if((coin1.getBlockX()%2 == 0 || coin1.getBlockX()%2 == -0) && (coin1.getBlockZ()%2 == 0 || coin1.getBlockZ()%2 == -0)){ if((x%2 == 1 || x%2 == -1) && (z%2 == 1 || z%2 == -1)){ b.setType(Material.AIR); slots.put(b, false); }else{ b.setType(material); } }else if((coin1.getBlockX()%2 == 1 || coin1.getBlockX()%2 == -1) && (coin1.getBlockZ()%2 == 1 || coin1.getBlockZ()%2 == -1)){ if((x%2 == 0 ||x%2 == -0) && (z%2 == 0 || z%2 == -0)){ b.setType(Material.AIR); slots.put(b, false); }else{ b.setType(material); } }else if((coin1.getBlockX()%2 == 1 || coin1.getBlockX()%2 == -1) && (coin1.getBlockZ()%2 == 0 || coin1.getBlockZ()%2 == -0)){ if((x%2 == 0 || x%2 == -0) && (z%2 == 1 || z%2 == -1)){ b.setType(Material.AIR); slots.put(b, false); }else{ b.setType(material); } }else if((coin1.getBlockX()%2 == 0 || coin1.getBlockX()%2 == -0) && (coin1.getBlockZ()%2 == 1 || coin1.getBlockZ()%2 == -1)){ if((x%2 == 1 || x%2 == -1) && (z%2 == 0 || z%2 == -0)){ b.setType(Material.AIR); slots.put(b, false); }else{ b.setType(material); } } } } } //TESTS : for(Block b : borders){ b.setType(Material.DIAMOND_BLOCK); } for(Map.Entry<Block, Boolean> entry : slots.entrySet()){ entry.getKey().setType(Material.GOLD_BLOCK); } Quelques précisions : labyrinth.getBlockType() permet de récupérer le Material des murs du labyrinthe. labyrinth.getCenter() permet de récupérer la Location du centre du labyrinthe. labyrinth.getSizeX() et labyrinth.getSizeZ() permettent de récupérer le nombre de cellule du labyrinthe en X et en Z.   Si vous avez une question sur le code, n'hésitez pas !
  11. Générer des grandes structures... sans lags !

    Donc il est impossible de générer une structure sans faire freeze le serveur ?  
  12. Hello ! Version (serveur) : 1.11.2 API utilisée : Spigot IDE utilisé : Intellij Idea Explications du problème rencontré : Je fais un plugin dans lequel je génère des structures d'une taille assez grande. Quand je génère une structure, le serv freeze pendant quelques secondes et la console est remplie de "Stik0u moved too quickly! 5.670546690313829,0.0,16.518378988364553". J'ai donc essayé de mettre mon code dans un Runnable puis de le lancer avec "Bukkit.getScheduler().runTaskAsynchronounsly(Plugin, Runnable)". Mais une erreur apparait dans la console (checkez Code d'erreur). Du coup je ne sais plus quoi faire pour générer une structure sans lags. Recherches effectuées : Google, wiki Bukkit, forum Spigot, forum Bukkit. Code d'erreur :  [18:16:24 WARN]: [Labyrinths] Plugin Labyrinths v0.1 generated an exception while executing task 7 java.lang.IllegalStateException: Asynchronous block remove! at org.spigotmc.AsyncCatcher.catchOp(AsyncCatcher.java:14) ~[spigot-1.11.2.jar:git-Spigot-3fb9445-6e3cec8] at net.minecraft.server.v1_11_R1.Block.remove(Block.java:314) ~[spigot-1.11.2.jar:git-Spigot-3fb9445-6e3cec8] at net.minecraft.server.v1_11_R1.Chunk.a(Chunk.java:473) ~[spigot-1.11.2.jar:git-Spigot-3fb9445-6e3cec8] at net.minecraft.server.v1_11_R1.World.setTypeAndData(World.java:374) ~[spigot-1.11.2.jar:git-Spigot-3fb9445-6e3cec8] at org.bukkit.craftbukkit.v1_11_R1.block.CraftBlock.setTypeIdAndData(CraftBlock.java:145) ~[spigot-1.11.2.jar:git-Spigot-3fb9445-6e3cec8] at org.bukkit.craftbukkit.v1_11_R1.block.CraftBlock.setTypeId(CraftBlock.java:132) ~[spigot-1.11.2.jar:git-Spigot-3fb9445-6e3cec8] at org.bukkit.craftbukkit.v1_11_R1.block.CraftBlock.setType(CraftBlock.java:123) ~[spigot-1.11.2.jar:git-Spigot-3fb9445-6e3cec8] at org.bukkit.craftbukkit.v1_11_R1.block.CraftBlock.setType(CraftBlock.java:118) ~[spigot-1.11.2.jar:git-Spigot-3fb9445-6e3cec8] at fr.stik0u.labyrinths.labyrinths.LabyrinthGenerator.run(LabyrinthGenerator.java:69) ~[?:?] at org.bukkit.craftbukkit.v1_11_R1.scheduler.CraftTask.run(CraftTask.java:71) ~[spigot-1.11.2.jar:git-Spigot-3fb9445-6e3cec8] at org.bukkit.craftbukkit.v1_11_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:52) [spigot-1.11.2.jar:git-Spigot-3fb9445-6e3cec8] at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_131] at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_131] at java.lang.Thread.run(Unknown Source) [?:1.8.0_131] Code :             Informations supplémentaires :                Merci !
  13. Message de mort colorés !

    Merci <3 C'est plus opti que ce que je voulais faire ! Bon, par contre il y aura quelque chose qui ne sera jamais possible de faire, c'est si le joueur à le même nom qu'un mot de la phrase :/ Et juste car je suis curieux, pouvez-vous me dire la différence en Bukkit.getPlayer() et Bukkit.getPlayerExact() ?
  14. Message de mort colorés !

    Vous avez loupé ma question je crois :/
  15. Message de mort colorés !

    Mais encore une fois, ça ne s'adapte pas si le joueur a été tué avec une épée, un arc, etc... J'avais pensé à récupérer le getDeathMessage() (comme ça le message est toujours le bon) et de remplacer les noms de joueurs par les nom de joueurs colorés, mais je ne sais pas comment m'y prendre...