Nashoba Posté(e) le 10 juin 2016 Posté(e) le 10 juin 2016 Bonjour, Aujourd'hui je vais vous expliquer comment réaliser en Java les événements "at XX:XX" et "every X seconds/ticks/hours..." L'évent At Time Pour l'évent "at time", il vous faudra d'abord une variable locale qui enregistrera l'heure du dernier test. Ensuite on pourra voir grâce à cette donnée si l'heure est passée ou non. Donc ajouter votre variable juste après le "public class": static int lastTick = 0; Maintenant on passe au code. Vous devez mettre ce code lorsque le serveur démarre, soit dans la méthode onEnable(), soit dans une fonction qui est appelée en même temps que le onEnable(). Voici le code en question: BukkitScheduler scheduler = Bukkit.getServer().getScheduler(); int CHECKPERIOD = 10; String world = "world"; int time = 0; scheduler.scheduleSyncRepeatingTask(this.getPlugin(this.getClass()), new Runnable() { @Override public void run() { World w = Bukkit.getServer().getWorld(world); boolean mid = false; final int tick = (int) w.getTime(); if (lastTick == tick) { if (lastTick + CHECKPERIOD * 2 < tick || lastTick > tick && lastTick - 24000 + CHECKPERIOD * 2 < tick) { lastTick = (tick - CHECKPERIOD) % 24000; } final boolean midnight = lastTick > tick; if (midnight) { lastTick -= 24000; mid = true; } } if(tick>time && lastTick<=time) { //CODE } lastTick = tick; return; } }, 0L, CHECKPERIOD); Dans ce code vous pouvez changer 3 paramètres: L'heure Le monde Le période de test (tous les combiens de ticks ça va être testé) Vous pouvez les trouver aux lignes 2, 3, 4. Pour le monde c'est tout simplement du texte. Pour la période de test c'est en ticks. Vous savez probablement que 20 ticks font 1 seconde. De base ça test ça toutes les 1/2 secondes (car 10/20 = 1/2). Pour l'heure il faut la mettre en ticks. Dans une journée Minecraft il y a 24000 ticks. 0 tick correspond à 6h et 24000 correspond à 6h aussi. On prend donc la différence d'heure entre 6h et l'heure voulue et on multiplie par 1000. Par exemple pour 8h on aura: 2*1000 = 2000. 8h correspond à 2000 ticks. Pour 22h: 16 * 1000 = 16000 Exemple: int CHECKPERIOD = 20; String world = "pvp"; int time = 6000; Ici à 12h dans le monde pvp, le code s'effectura. Le code est à mettre à la place de "//CODE". Exception: Pour 6h, il faut remplacer: if(tick>time && lastTick<=time) { //CODE } par: if(mid) { //CODE } L'évent every X time Pour l'évent every X time, c'est la même chose que précédemment mais simplifié. Vous devez également le mettre à l'ouverture de votre serveur (dans le onEnable() ). Voici le code: BukkitScheduler scheduler = Bukkit.getServer().getScheduler(); int time = 20; scheduler.scheduleSyncRepeatingTask(this.getPlugin(this.getClass()), new Runnable() { @Override public void run() { //CODE } }, 0L, time); Ici nous pouvons changer une seule variable: int time = 20; C'est le temps avant que le code soit répété. Il est exprimé en ticks (je rappelle 20 ticks = 1 seconde). Par exemple pour executer mon code toutes les minutes je met: int time = 1200; //Car 20 * 60 = 1200 Voilà j'espère avoir encore une fois avoir été assez clair :) Et proposez moi des idées pour les prochains tutos car là je ne sèche un peu sur les thèmes à aborder :eek:
HardTrox Posté(e) le 27 juin 2016 Posté(e) le 27 juin 2016 Salut j'aimerais savoir si en Skript c'est possible de detecter si on tape dans la tête d'un zombie ou sinon en java ?
Nashoba Posté(e) le 27 juin 2016 Auteur Posté(e) le 27 juin 2016 La seule solution que je connais c'est avec une flèche, en testant sa hauteur lros de l'impact par rapport à la hauteur de la tête du zombie. Pour ce qui est de taper à l'épée, il faut faire un système très compliqué en utilisant des vecteurs 3d, des locations, l'orientation du joueur etc...
HardTrox Posté(e) le 28 juin 2016 Posté(e) le 28 juin 2016 La seule solution que je connais c'est avec une flèche, en testant sa hauteur lros de l'impact par rapport à la hauteur de la tête du zombie. Pour ce qui est de taper à l'épée, il faut faire un système très compliqué en utilisant des vecteurs 3d, des locations, l'orientation du joueur etc... Mince :/
Inerska Posté(e) le 27 décembre 2016 Posté(e) le 27 décembre 2016 public void ppj1(PlayerJoinEvent e){ Player p = e.getPlayer(); p.sendMessage("§6" + p.getName() + "§7a rejoind le serveur"); p.getInventory().clear(); p.getEquipment().clear(); p.getInventory().setItem(0, diamondsword); p.updateInventory(); } diamondsword cannot be resolved to a variable :(
Nashoba Posté(e) le 27 décembre 2016 Auteur Posté(e) le 27 décembre 2016 A la place de diamondsword ça doit être une variable du type ItemStack. Si tu veux que ce soit une épée en diamant ton code doit être: p.getInventory().setItem(0, new ItemStack(Material.DIAMOND_SWORD, 1));
Skripting Posté(e) le 27 décembre 2016 Posté(e) le 27 décembre 2016 public void ppj1(PlayerJoinEvent e){ Player p = e.getPlayer(); p.sendMessage("§6" + p.getName() + "§7a rejoind le serveur"); p.getInventory().clear(); p.getEquipment().clear(); p.getInventory().setItem(0, diamondsword); p.updateInventory(); } diamondsword cannot be resolved to a variable :( p.getInventory().setItem(0, new ItemStack(Material.DIAMOND_SWORD, 64)); # Tu remplaces 64 par le nombre d'épées en diamants.
Inerska Posté(e) le 28 décembre 2016 Posté(e) le 28 décembre 2016 Comment je dois faire si je veut que sa fasse: clear inventory set slot 0 of player to diamond sword named "Ouvrir#" with lore "TEST" J'ai comencé :o @EventHandler public void oj(PlayerJoinEvent e){ Player p = e.getPlayer() p.inventory().p.clear(); Après ji sais pas :( }
Skripting Posté(e) le 28 décembre 2016 Posté(e) le 28 décembre 2016 @EventHandler public void onJoin(PlayerJoinEvent e){ Player p = e.getPlayer(); p.getInventory().clear(); ItemStack sword = new ItemStack(Material.DIAMOND_SWORD); ItemMeta meta = sword.getItemMeta(); meta.setDisplayName("Ouvrir"); ArrayList<String> lore = new ArrayList<String>(); lore.add("Test"); meta.setLore(lore); sword.setItemMeta(meta); p.getInventory().setItem(0, sword); } Après comme c'est long, si tu veux utiliser ça plusieurs fois, tu peux passer par une fonction : public void giveItem(Player p, Material item, int size, String name, String lore, int slot){ ItemStack itemStack = new ItemStack(item, size); ItemMeta meta = itemStack.getItemMeta(); meta.setDisplayName(name); ArrayList<String> lores = new ArrayList<String>(); lores.add(lore); meta.setLore(lores); itemStack.setItemMeta(meta); p.getInventory().setItem(slot, itemStack); }
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant