Skocz do zawartości
  • 0

runTask


KrejzolekPRO

Pytanie

Witajcie mam sobie taki kod (a w sumie cześć kodu):

else if (args[0].equalsIgnoreCase("dom")){
	if (!yml.getBoolean("dzialki." + sender.getName().toLowerCase() + ".tak"))
    	{
    		sender.sendMessage(Utils.fixColor("&cNie posiadasz dzialki."));
    		return true;
    	}
	Location pll = ((Player) sender).getLocation();
	Double X = yml.getDouble("dzialki." + sender.getName().toLowerCase() + ".jajX");
    	Double Y = yml.getDouble("dzialki." + sender.getName().toLowerCase() + ".jajY");
    	Double Z = yml.getDouble("dzialki." + sender.getName().toLowerCase() + ".jajZ");
	Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable(){
		public void run{
			if(((Player) sender).getLocation() == pll){
				final Location l = new Location(Bukkit.getWorld(yml.getString("swiatDzialek")),X,Y,Z);
    				((Player)sender).teleport(l.add(0, 1, 0));
    				sender.sendMessage(Utils.fixColor("&7Teleportacja przebiegla &apomyslnie&7."));
			} else {
				sender.sendMessage(Utils.fixColor("&cRuszyles sie."));
			}
		}
	}, 20*5);
}

Błędów w eclipsie nie ma, ale po wywołaniu komendy /działka dom sypie się, błąd leży w tej linijce.

Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable()

Może ktoś poprawić/wytłumaczyć? Bez taska działa wszystko okej.

Edytowane przez KrejzolekPRO
Odnośnik do komentarza
https://skript.pl/temat/20685-runtask/
Udostępnij na innych stronach

11 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
2 godziny temu, insertt napisał:

wklej logi z błędem przy uruchomieniu

Przy uruchamianiu nic nie ma, dopiero po wykonaniu komendy.

//edit wkleje jak bede na kompie, czyli jutro.

Edytowane przez KrejzolekPRO
Odnośnik do komentarza
https://skript.pl/temat/20685-runtask/#findComment-140600
Udostępnij na innych stronach

  • 0
1 godzinę temu, Ixidi napisał:

Użyj tego:


       new BukkitRunnable() {
            @Override
            public void run() {

            }
        }.runTaskLater(plugin, czas_w_tickach);

 

@insertt @Ixidi, po dodaniu twojego kodu, sypie błędem w .runTaskLater(...).

A tutaj błędy z konsoli:

 KrejzolekPR0 issued server command: /dzialka dom
[14:42:05 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'dzialka' in plugin CrazyCuboids v0.1
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641) ~[spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerConnection.java:1162) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:997) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:45) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:1) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_131]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_131]
        at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_131]
Caused by: java.lang.IllegalArgumentException: Plugin cannot be null
        at org.apache.commons.lang.Validate.notNull(Validate.java:192) ~[spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftScheduler.validate(CraftScheduler.java:397) ~[spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftScheduler.runTaskTimer(CraftScheduler.java:123) ~[spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftScheduler.runTaskLater(CraftScheduler.java:106) ~[spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at org.bukkit.scheduler.BukkitRunnable.runTaskLater(BukkitRunnable.java:64) ~[spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        at pl.krejzolekpro.crazycuboids.Cmd.onCommand(Cmd.java:114) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
        ... 15 more

 

Odnośnik do komentarza
https://skript.pl/temat/20685-runtask/#findComment-140649
Udostępnij na innych stronach

  • 0
9 minut temu, Ixidi napisał:

Plugin jest nullem.

Podaj kod.

public class Cmd
  implements CommandExecutor
{
	public static Plugin plugin = this;
  public boolean onCommand(final CommandSender sender, Command cmd, String label, String[] args)
  {
    if (cmd.getName().equalsIgnoreCase("dzialka"))
    {
    	if(sender instanceof Player){
    		final FileConfiguration yml = Main.getInst().getConfig();
    	      if ((args.length < 1) || (args.length > 2))
    	      {
    	    	sender.sendMessage("");
    	    	sender.sendMessage(Main.c("&2/dzialka dom &7- teleportuje na dom dzialki."));  
    	        sender.sendMessage(Main.c("&2/dzialka dodaj [GRACZ] &7- dodaje gracza do dzialki."));
    	        sender.sendMessage(Main.c("&2/dzialka wyrzuc [GRACZ] &7- wyrzuca gracza z dzialki."));
    	        sender.sendMessage(Main.c("&2/dzialka opusc &7- opuszczasz dzialke."));
    	        sender.sendMessage(Main.c("&2/dzialka usun &7- usuwa dzialke."));       
    	        sender.sendMessage("");
    	        sender.sendMessage(Main.c("&7Crafting dzialki znajduje sie na &2spawnie."));
    	        return true;
    	      }
    	      if (args[0].equalsIgnoreCase("dodaj"))
    	      {
    	        if (args.length != 2)
    	        {
    	          sender.sendMessage(Main.s1 + Main.c("&cPoprawne uzycie: /dzialka dodaj [GRACZ]."));
    	          return true;
    	        }
    	        if (!yml.getBoolean("dzialki." + sender.getName().toLowerCase() + ".tak"))
    	        {
    	          sender.sendMessage(Main.s1 + Main.c("&cNie posiadasz dzialki."));
    	          return true;
    	        }
    	        Player poff = Bukkit.getPlayer(args[1]);
    	        if (poff == null)
    	        {
    	          sender.sendMessage(Main.s1 + Main.c("&cTen gracz nie jest online."));
    	          return true;
    	        }
    	        yml.set("dzialki." + sender.getName().toLowerCase() + ".addmem." + args[1].toLowerCase(), Boolean.valueOf(true));
    	        Main.getInst().saveConfig();
    	        sender.sendMessage(Main.s1 + Main.c(new StringBuilder("&7Pomyslnie dodano do dzialki gracza: &2").append(poff.getName()).toString()));
    	        poff.sendMessage(Main.s1 + Main.c(new StringBuilder("&7Gracz &2").append(sender.getName()).append(" &7dodal Cie do dzialki!").toString()));
    	        return true;
    	      }
    	      else if (args[0].equalsIgnoreCase("wyrzuc"))
    	      {
    	        if (args.length != 2)
    	        {
    	          sender.sendMessage(Main.s1 + Main.c("&cPoprawne uzycie: /dzialka wyrzuc [GRACZ]"));
    	          return true;
    	        }
    	        if (!yml.getBoolean("dzialki." + sender.getName().toLowerCase() + ".tak"))
    	        {
    	          sender.sendMessage(Main.s1 + Main.c("&cNie posiadasz dzialki."));
    	          return true;
    	        }
    	        if (!yml.getBoolean("dzialki." + sender.getName().toLowerCase() + ".addmem." + args[1].toLowerCase()))
    	        {
    	          sender.sendMessage(Main.s1 + Main.c("&cTen gracz nie nalezy do twojej dzialki."));
    	          return true;
    	        }
    	        yml.set("dzialki." + sender.getName().toLowerCase() + ".addmem." + args[1].toLowerCase(), null);
    	        Main.getInst().saveConfig();
    	        sender.sendMessage(Main.s1 + Main.c(new StringBuilder("&7Usunieto z dzialki gracza: &2").append(args[1]).toString()));
    	      }
    	      else if (args[0].equalsIgnoreCase("opusc")){
    	    	  if (!yml.getBoolean("dzialki." + sender.getName().toLowerCase() + ".tak"))
    	          {
    	    		  sender.sendMessage(Main.s1 + Main.c("&cNie posiadasz dzialki."));
    	              return true;
    	          }
    	    	  for (String p : yml.getConfigurationSection("dzialki").getKeys(false)){
    	    		  yml.set("dzialki." + p + ".addmem." + sender.getName().toLowerCase() , null);
    	    		  sender.sendMessage(Main.c("&7Opusciles dzialke gracza: &2" + p + "&7."));
    	    	  }
    	      }
    	      else if (args[0].equalsIgnoreCase("dom")){
    	    	  if (!yml.getBoolean("dzialki." + sender.getName().toLowerCase() + ".tak"))
    	          {
    	    		  sender.sendMessage(Main.s1 + Main.c("&cNie posiadasz dzialki."));
    	              return true;
    	          }
    	    	  final Location pll = ((Player) sender).getLocation();
    	    	  new BukkitRunnable() {
    	              public void run() {
    	            	  if(((Player) sender).getLocation() == pll){
    	            		  Double X = yml.getDouble("dzialki." + sender.getName().toLowerCase() + ".jajX");
        	    	          Double Y = yml.getDouble("dzialki." + sender.getName().toLowerCase() + ".jajY");
        	    	          Double Z = yml.getDouble("dzialki." + sender.getName().toLowerCase() + ".jajZ");
        	    	    	  final Location l = new Location(Bukkit.getWorld(yml.getString("swiatDzialek")),X,Y,Z);
        	    	  		  ((Player)sender).teleport(l.add(0, 1, 0));
        	    	  		  sender.sendMessage(Main.s1 + Main.c("&7Teleportacja przebiegla &apomyslnie&7."));
    	            	  } else {
    	            		  sender.sendMessage(Main.s1 + Main.c("&cRuszyles sie, teleportacja nie powiodla sie."));
    	            	  }
    	              }
    	          }.runTaskLater(plugin, 100);
    	  		  
    	      }
    	      else if (args[0].equalsIgnoreCase("usun")){
    	    	  if (!yml.getBoolean("dzialki." + sender.getName().toLowerCase() + ".tak"))
    	          {
    	    		  sender.sendMessage(Main.s1 + Main.c("&cNie posiadasz dzialki."));
    	              return true;
    	          }
    	    	  
    	          Double X = yml.getDouble("dzialki." + sender.getName().toLowerCase() + ".jajX");
    	          Double Y = yml.getDouble("dzialki." + sender.getName().toLowerCase() + ".jajY");
    	          Double Z = yml.getDouble("dzialki." + sender.getName().toLowerCase() + ".jajZ");
    	    	  Location l = new Location(Bukkit.getWorld(yml.getString("swiatDzialek")),X,Y,Z);
    	    	  l.getBlock().setType(Material.AIR);
    	    	  yml.set("dzialki." + sender.getName().toLowerCase(), null);
    	    	  sender.sendMessage(Main.s1 + Main.c("&7Dzialka zostala usunieta."));
    	    	  
    	    	  
    	      }
    	      else
    	      {
    	    	  sender.sendMessage("");
    	    	  sender.sendMessage(Main.c("&2/dzialka dom &7- teleportuje na dom dzialki.")); 
    	          sender.sendMessage(Main.c("&2/dzialka dodaj [GRACZ] &7- dodaje gracza do dzialki."));
    	          sender.sendMessage(Main.c("&2/dzialka wyrzuc [GRACZ] &7- wyrzuca gracza z dzialki."));
    	          sender.sendMessage(Main.c("&2/dzialka opusc &7- opuszczasz dzialke."));
    	          sender.sendMessage(Main.c("&2/dzialka usun &7- usuwa dzialke."));   
    	          return true;
    	      }
    	    }
    	}
    return true;
  }

}

 

Odnośnik do komentarza
https://skript.pl/temat/20685-runtask/#findComment-140653
Udostępnij na innych stronach

  • 0
3 minuty temu, Ixidi napisał:

       new BukkitRunnable() {
            @Override
            public void run() {

            }
        }.runTaskLater(plugin, czas_w_tickach);

W miejsce plugin musisz podac instacje klasy glownej, czyli Main.getInst().

Jeszcze jedno pytanko, możesz sprawdzić dlaczego zawsze po 5 sekundach wyrzuca (w komendzie: /dzialka dom), że się ruszam? 

Odnośnik do komentarza
https://skript.pl/temat/20685-runtask/#findComment-140656
Udostępnij na innych stronach

  • 0

Musisz na poczatku oczytwywac pierwotny x, y i z gracza metoda loc.getBlockZ();
Potem musisz musisz znowu je odczytac i porownac. Nie mozesz calej Loaklizacji, bo ona przechowuje w sobie Yaw i Pitch, wiec nawet najdrobniejszu ruch przerwie.

Odnośnik do komentarza
https://skript.pl/temat/20685-runtask/#findComment-140660
Udostępnij na innych stronach

  • 0
1 minutę temu, Ixidi napisał:

Musisz na poczatku zapisywac pierwotny x, y i z gracza metoda loc.getBlockZ();
Potem musisz je odczytywac. Nie mozesz calej Loaklizacji, bo ona przechowuje w sobie Yaw i Pitch, wiec nawet najdrobniejszu ruch przerwie.

Sam o tym pomyślałem gdy obie wartości wyświteliłem na ekranie. Dzięki :)

Odnośnik do komentarza
https://skript.pl/temat/20685-runtask/#findComment-140661
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...