JanekMaSkrypta_ 117 Opublikowano 21 lutego 2018 Udostępnij Opublikowano 21 lutego 2018 Czesc napotkałem mały problem z takim o to kodem: public void onPlayerDeath(PlayerDeathEvent e){ Player v = (Player) e.getEntity(); Player p = (Player) v.getKiller(); World getworld = p.getWorld(); World world2 = Bukkit.getServer().getWorld("standard"); if(getworld == world2){ if(bitwa.get(v) == p){ tag.remove(v); bitwa.remove(v); tag.remove(p); bitwa.remove(p); Bukkit.broadcastMessage(ChatColor.GOLD + "Gracz " + v.getName() + " zostal pokonany przez " + p.getName()); showAllPlayers(v); showAllPlayers(p); } } } Dokładnie to nie działa po prostu wysylanie wiadomosci na czacie i ogolnie nie dziala wszystko z tych kolumn czyli tag.remove(v); itd.. Odnośnik do komentarza https://skript.pl/temat/25570-playerdeathevent/ Udostępnij na innych stronach Więcej opcji udostępniania...
0 GotoFinal 195 Opublikowano 21 lutego 2018 Udostępnij Opublikowano 21 lutego 2018 nie porównuj obiektów za pomocą == tylko użyj .equals() A ten listener ma odpowiednią adnotację @EventHandler ? Oraz jest zarejestrowany? Dodatkowo pamiętaj że v.getKiller może zwrócić nulla. Odnośnik do komentarza https://skript.pl/temat/25570-playerdeathevent/#findComment-168990 Udostępnij na innych stronach Więcej opcji udostępniania...
0 KrejzolekPRO 600 Opublikowano 21 lutego 2018 Udostępnij Opublikowano 21 lutego 2018 (edytowane) Może po prostu warunek się nie spełnia? Edytowane 21 lutego 2018 przez KrejzolekPRO Odnośnik do komentarza https://skript.pl/temat/25570-playerdeathevent/#findComment-168993 Udostępnij na innych stronach Więcej opcji udostępniania...
0 JanekMaSkrypta_ 117 Opublikowano 21 lutego 2018 Autor Udostępnij Opublikowano 21 lutego 2018 Teraz mam inny problem. Zrobilem tak jak powiedzial @GotoFinal wszystko dziala poprawnie lecz gdy chce znowu z tym samym graczem walczyc to wysyla zaproszenie ale juz nie odlicza i nie mozna sie bic. Moge wyslac caly kod. package me.jms.standard; import java.util.HashMap; import net.md_5.bungee.api.ChatColor; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.PlayerDeathEvent; public class Standard implements Listener{ private int i = 5; private int TaskID; private HashMap<Player, Player> tag = new HashMap<Player, Player>(); private HashMap<Player, Player> bitwa = new HashMap<Player, Player>(); @SuppressWarnings("deprecation") @EventHandler public void onEntityDamage(EntityDamageByEntityEvent e){ if(e.getEntity() instanceof Player && e.getDamager() instanceof Player){ Player hit = (Player) e.getEntity(); Player damager = (Player) e.getDamager(); World getworld = damager.getWorld(); World world2 = Bukkit.getServer().getWorld("standard"); if(getworld == world2){ if(tag.get(hit) != damager){ tag.put(hit, damager); damager.sendMessage(ChatColor.GOLD + "Wyslales " + hit.getName() + " zaproszenie do walki"); hit.sendMessage(ChatColor.GOLD + "Gracz " + damager.getName() + " wyslal ci zaproszenie do walki"); } if(bitwa.get(hit) != null && tag.get(hit) != null){ e.setCancelled(false); }else { e.setCancelled(true); } if(tag.get(hit) == damager){ if(tag.get(damager) == hit){ TaskID = Bukkit.getScheduler().scheduleAsyncRepeatingTask(Main.getInst(), new Runnable(){ public void run(){ if(!(i <= -1)){ if(i == 0){ hideAllPlayers(damager); hideAllPlayers(hit); hit.showPlayer(damager); damager.showPlayer(hit); Bukkit.getScheduler().cancelTask(TaskID); hit.sendMessage(ChatColor.GOLD + "Walka sie rozpoczela!"); damager.sendMessage(ChatColor.GOLD + "Walka sie rozpoczela!"); bitwa.put(hit, damager); bitwa.put(damager, hit); i--; } else{ hit.sendMessage(ChatColor.GOLD + "Walka z " + ChatColor.BOLD + damager.getName() + ChatColor.GOLD + " rozpocznie sie za: " + ChatColor.GREEN + i); damager.sendMessage(ChatColor.GOLD + "Walka z " + ChatColor.BOLD + hit.getName() + ChatColor.GOLD + " rozpocznie sie za: " + ChatColor.GREEN + i); i--; } } } }, 0, 20); } } } } } @EventHandler public void onPlayerDeath(PlayerDeathEvent e){ Player v = (Player) e.getEntity(); Player p = (Player) v.getKiller(); World getworld = p.getWorld(); World world2 = Bukkit.getServer().getWorld("standard"); if(getworld == world2){ if(bitwa.get(v).equals(p)){ tag.remove(v); tag.remove(p); bitwa.remove(v); bitwa.remove(p); Bukkit.broadcastMessage(ChatColor.GOLD + "Gracz " + v.getName() + " zostal pokonany przez " + p.getName()); showAllPlayers(v); showAllPlayers(p); } } } public void hideAllPlayers(Player player){ for (Player p : Bukkit.getOnlinePlayers()) player.hidePlayer(p); } public void showAllPlayers(Player player){ for (Player p : Bukkit.getOnlinePlayers()) player.showPlayer(p); } } Odnośnik do komentarza https://skript.pl/temat/25570-playerdeathevent/#findComment-168996 Udostępnij na innych stronach Więcej opcji udostępniania...
0 yooniks 347 Opublikowano 21 lutego 2018 Udostępnij Opublikowano 21 lutego 2018 (edytowane) Po co ci TaskID skoro tego nigdzie nie uzywasz, metody show i hide allPlayers niepotrzebnie są publiczne @EventHandler public void onEntityDamage(EntityDamageByEntityEvent e){ if(e.getEntity() instanceof Player && e.getDamager() instanceof Player){ Player hit = (Player) e.getEntity(); Player damager = (Player) e.getDamager(); World getworld = damager.getWorld(); World world2 = Bukkit.getServer().getWorld("standard"); world2 moze zwrocic nulla, @EventHandler public void onPlayerDeath(PlayerDeathEvent e){ Player v = (Player) e.getEntity(); Player p = (Player) v.getKiller(); World getworld = p.getWorld(); World world2 = Bukkit.getServer().getWorld("standard"); if(getworld == world2){ i e.getEntity().getKiller() moze tez zwrocic nulla, (world2 tak samo), final World playerWorld = p.getWorld(); if(playerWorld.getName().equalsIgnoreCase("standard")) { //cos takiego bedzie lepsze I te mapki zmien z hashmap na concurrenthashmap no a co do twojego 'niedzialajacego odliczania' to problemem moze byc private int i = 5; bo to jest dla kazdego taska, a w dodatku nie zmieniasz pozniej tej wartosci znow na 5 tylko siedzi na 0, nie rob od razu takich trudniejszych rzeczy bo bedziesz mial jedynie bugi na serwerze, zaczynaj od czegos prostszego @edit: jednak uzywasz taskID, nie patrzylem na caly kod , i co do concurrenthashmap to tez nie moze byc bo nie moze zawierac null klucza, a ty chcesz jednak zrobic cos innego niz myslalem Edytowane 21 lutego 2018 przez yooniks Odnośnik do komentarza https://skript.pl/temat/25570-playerdeathevent/#findComment-169072 Udostępnij na innych stronach Więcej opcji udostępniania...
0 GotoFinal 195 Opublikowano 21 lutego 2018 Udostępnij Opublikowano 21 lutego 2018 jak robisz takie mapki po graczach to musisz też usuwać te dane w PlayerQuitEvent inaczej będziesz miał wycieki pomięci. (musisz usunąć wszystkie pary gdzie gracz który wyszedł jest albo kluczem, albo wartością) a zamiast bitwa.get(hit) != null można użyć bitwa.containsKey(hit) Dodatkowo raczej powinieneś nazywać wszystko po angielsku, żeby nie mieszać języków w kodzie bo to nie ma sensu i brzydko wygląda. no i nie nazywać zmiennych z dużej litery jak "TaskID" A tak to nie wiem jak ma działać ten twój kod, więc trudno mi powiedzieć dlaczego nie działa... opisz coś więcej co robisz i jak ma to działać, bo kod piszesz na tyle brzydki że trudno coś zrozumieć. @yooniks Używa tego id taska... I nie powinien nic zmieniać na concurrenthashmap, tylko tamten task nie powinien być async @JanekMaSkrypta_ zamiast scheduleAsyncRepeatingTask powinno być po prostu runTaskTimer Odnośnik do komentarza https://skript.pl/temat/25570-playerdeathevent/#findComment-169073 Udostępnij na innych stronach Więcej opcji udostępniania...
Pytanie
JanekMaSkrypta_ 117
Czesc napotkałem mały problem z takim o to kodem:
public void onPlayerDeath(PlayerDeathEvent e){ Player v = (Player) e.getEntity(); Player p = (Player) v.getKiller(); World getworld = p.getWorld(); World world2 = Bukkit.getServer().getWorld("standard"); if(getworld == world2){ if(bitwa.get(v) == p){ tag.remove(v); bitwa.remove(v); tag.remove(p); bitwa.remove(p); Bukkit.broadcastMessage(ChatColor.GOLD + "Gracz " + v.getName() + " zostal pokonany przez " + p.getName()); showAllPlayers(v); showAllPlayers(p); } } }Dokładnie to nie działa po prostu wysylanie wiadomosci na czacie i ogolnie nie dziala wszystko z tych kolumn czyli tag.remove(v); itd..
Odnośnik do komentarza
https://skript.pl/temat/25570-playerdeathevent/Udostępnij na innych stronach
5 odpowiedzi na to pytanie
Rekomendowane odpowiedzi