ProX3Q 23 Opublikowano 21 marca 2017 Udostępnij Opublikowano 21 marca 2017 tak jak w temacie. Plugin lub kod ponieważ piszę takie małe core i potrzebuje Odnośnik do komentarza https://skript.pl/temat/17167-plugin-na-tnt-od-danej-do-danej-godziny/ Udostępnij na innych stronach Więcej opcji udostępniania...
0 KrejzolekPRO 600 Opublikowano 21 marca 2017 Udostępnij Opublikowano 21 marca 2017 (edytowane) options: godzinaod: 10 godzinado: 15 on explode: if {@godzinaod} <= hour: if {@godzinado} >= hour: stop else: cancel event else: cancel event Pluginy: Script. PS: Weź to wytabuj. Edytowane 21 marca 2017 przez KrejzolekPRO Odnośnik do komentarza https://skript.pl/temat/17167-plugin-na-tnt-od-danej-do-danej-godziny/#findComment-117546 Udostępnij na innych stronach Więcej opcji udostępniania...
0 TheMolkaPL 345 Opublikowano 21 marca 2017 Udostępnij Opublikowano 21 marca 2017 (edytowane) 6 godzin temu, KrejzolekPRO napisał: options: godzinaod: 10 godzinado: 15 on explode: if {@godzinaod} <= hour: if {@godzinado} >= hour: stop else: cancel event else: cancel event Pluginy: Script. PS: Weź to wytabuj. Towarzyszu to nie jest plugin tylko skrypt. Inaczej konfiguracja do jakiegoś pluginu. -------------------------------------------------- Ten problem można rozwiązać na dwa sposoby. Jeden to blokowanie stawiania TNT oraz jego wybuchania. Drugie to tylko jego wybuchania. Osobiście preferuje to pierwsze, ponieważ można wtedy do gracza wysłać bezpośrednią wiadomość o wyłączonym TNT. Do zarządzania czasem na serwerze będziesz potrzebował klasy Calendar. Dzięki temu będziesz mógł porównać godziny do tych podanych w pliku konfiguracyjnym (oczywiście możesz je zapisać na twardo w kodzie (tzw. hard-coded), ale moje osobiste doświadczenia pokazują, że jest to jeden z największych błędów). Po porównaniu możesz zwrócić prawdę (true), lub fałsz (false) jako rezultat tej metody. Drugą częścią tego kodu będą słuchacze (listenery), które będą śledzić serwer i nasłuchiwać podanych przez wydarzeń w jego logice. Możesz nasłuchiwać BlockPlaceEvent (nadawany przy postawieniu bloku przez gracza), ExplosionPrimeEvent (nadawany przy odpaleniu TNT - patrz niżej), EntityExplodeEvent (kiedy TNT ale także i creeper wybucha), EntityChangeBlockEvent (kiedy enderman będzie próbował postawić TNT) oraz BlockDispenseEvent (kiedy blok zostanie postawiony przez dispenser). Myślę, że to już wszystko. Pamiętaj, że o czymś mogłem zapomnieć. ExplosionPrimeEvent: nadawany przy odpaleniu TNT, jego aktywacji. Musimy nasłuchiwać to zdarzenie, ponieważ TNT mogło zostać postawione w czasie włączonego TNT na serwerze, natomiast odpalone poprzez redstone lub palącą się strzałę, co doprowadziło do jego aktywacji. Jeżeli wszystkie dane w zdarzeniu zostały sprawdzone (jest to TNT) możesz sprawdzić czy zostało wykonane w odpowiednim przedziale czasowym. Jeżeli nie to anulujesz event i w miarę możliwości próbujesz wysłać do gracza wiadomość o wyłączonym TNT. Myślę, że pomogłem! Pozdrawiam Czerwono Towarzyszu! Edytowane 21 marca 2017 przez TheMolkaPL Odnośnik do komentarza https://skript.pl/temat/17167-plugin-na-tnt-od-danej-do-danej-godziny/#findComment-117623 Udostępnij na innych stronach Więcej opcji udostępniania...
0 Killerek01 10 Opublikowano 24 marca 2017 Udostępnij Opublikowano 24 marca 2017 (edytowane) Spoiler import java.util.Calendar; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.player.PlayerInteractEvent; import pl.killerek.xfosahc.core.utils.ColorUtils; import pl.killerek.xfosahc.core.utils.Util; public class ExplodeListener implements Listener { @EventHandler public void onEntityExplode(EntityExplodeEvent e) { Calendar c = Calendar.getInstance(); int hr = c.get(11); if (((hr >= 24) || (hr < 12)) && (e.getEntity().getType().equals(EntityType.PRIMED_TNT))) { e.setCancelled(true); } } @EventHandler(priority=EventPriority.HIGHEST) public void onBlock(BlockPlaceEvent e) { Player p = e.getPlayer(); Material m = e.getBlock().getType(); Location l = e.getBlock().getLocation(); int y = l.getBlockY(); if (m == Material.TNT) { if (y > 50) { e.setCancelled(true); p.sendMessage(ColorUtils.fixColor("§4Blad: §cTnT mozna stawiac od 50 kratki")); } } } @EventHandler public void onPlayerClick(PlayerInteractEvent e) { Player p = e.getPlayer(); if ((e.getAction() == Action.RIGHT_CLICK_BLOCK) && (p.getItemInHand().getType().equals(Material.EXPLOSIVE_MINECART)) && (p.getLocation().getY() > 50.0D)) { Util.sendMsg(p, "&4Blad: &cMinecart z TNT mozna stawiac tylko od 50 poziomu w dol."); e.setCancelled(true); return; } } @EventHandler public void onTNTPlace(BlockPlaceEvent e) { Material m = e.getBlockPlaced().getType(); Player p = e.getPlayer(); Calendar c = Calendar.getInstance(); int hr = c.get(11); if ((m == Material.TNT) && ((hr >= 24) || (hr < 12))) { e.setCancelled(true); p.sendMessage(ColorUtils.fixColor("§4Blad: §cTnT jest wlaczone w godzinach 12-24")); } } } Liczę na +. PS. Ten kawałek kodu z tnt place od 50 poziomu se usuń. Edytowane 24 marca 2017 przez Killerek01 Odnośnik do komentarza https://skript.pl/temat/17167-plugin-na-tnt-od-danej-do-danej-godziny/#findComment-118087 Udostępnij na innych stronach Więcej opcji udostępniania...
0 TheMolkaPL 345 Opublikowano 25 marca 2017 Udostępnij Opublikowano 25 marca 2017 (edytowane) Formatuj kod Ciężko się czyta z tą jedną spacją. Trochę się do niego też przyczepie. int hr = c.get(11); Powinieneś używać const, czyli HOUR_OF_DAY z klasy Calendar. Pamiętaj, że te wartości liczbowe mogą zostać zmienione, i co wtedy? Tak, wszystko się popsuje. p.sendMessage(ColorUtils.fixColor("§4Blad: §cTnT mozna stawiac od 50 kratki")); Nie używaj paragrafów i nie twórz zbędnych metod do formatowania, jeżeli możesz to zrobić przy włączeniu serwera. Obciążasz przez to zbędnie procesor, bo ta metoda używana jest za każdym razem jej wywołania, a jej rezultat mógłby być łatwo cachowany przy włączeniu serwera. Paragrafy już dzisiaj są "deprecated", czyli przestarzałe. Powinieneś używać enum ChatColor do kolorowania wiadomości. Dzisiaj te teksty są już "legacy", czyli stare i nieużywane. Najnowocześniejszą metodą wysyłania i kolorowania wiadomości jest JSON i są od niego klasy BaseComponent z API chatu BungeeCorda, który jest zaimplementowany także w Spigocie. Paragrafy już nie są używane i tylko z prośby zostało dodane ich konwertowanie do JSONa. Pamiętaj, że ta konwersja z paragrafów może zostać w każdej chwili usunięta (Spigot lubi psuć kompatybilność ze starszymi plugnami), i co wtedy? Tak, wszystko się popsuje. Util.sendMsg(p, "&4Blad: &cMinecart z TNT mozna stawiac tylko od 50 poziomu w dol."); To samo też i tu. Calendar c = Calendar.getInstance(); int hr = c.get(11); if ((m == Material.TNT) && ((hr >= 24) || (hr < 12))) { e.setCancelled(true); p.sendMessage(ColorUtils.fixColor("§4Blad: §cTnT jest wlaczone w godzinach 12-24")); } Kopiujesz kod z pierwszego listenera. Nigdy przenigdy nie kopiuje się kodu! Naprawa jednej rzeczy nie naprawi drugiej! Od takiej uniwersalności są metody. To ona powinna sprawdzić czy można postawić TNT i zwrócić prawdę lub fałsz. Poza EntityExplodeEvent powinieneś jeszcze nasłuchiwać ExplosionPrimeEvent. Anulowanie EntityExplodeEvent spowoduje owszem, brak wybuchu. Ale TNT które miało wybuchnąć zniknie! Dzieje się tak, ponieważ to TNT jest entity, a event wywoływany jest wtedy kiedy już zniknęło i ma nastąpić sam wybuch. ExplosionPrimeEvent jest wywoływany jeszcze wcześniej. Jego anulowanie spowoduje brak zniknięcia TNT. Pozdrawiam Czerwono Edytowane 26 marca 2017 przez TheMolkaPL Podział na sekcję dla wygodniejszego czytania Odnośnik do komentarza https://skript.pl/temat/17167-plugin-na-tnt-od-danej-do-danej-godziny/#findComment-118152 Udostępnij na innych stronach Więcej opcji udostępniania...
Pytanie
ProX3Q 23
tak jak w temacie. Plugin lub kod ponieważ piszę takie małe core i potrzebuje
Odnośnik do komentarza
https://skript.pl/temat/17167-plugin-na-tnt-od-danej-do-danej-godziny/Udostępnij na innych stronach
4 odpowiedzi na to pytanie
Rekomendowane odpowiedzi