Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Jak zrobić teleport z czasem oczekiwania?


Turret

Rekomendowane odpowiedzi

Opublikowano
 

 I errory sypie w mc kek

public void teleportPlayerWithDelay(final Player player, int delayTime, final Location location, final String messageAfterTp, final boolean prefix, final Runnable postTeleport)
{
if (TeleportManager.getPlayerTeleportLocation().get(player) != null) {
TeleportManager.getPlayerTeleportLocation().remove(player);
}
BukkitTask task = Bukkit.getServer().getScheduler().runTaskLater(this, new Runnable()
{

Veni, vidi, vici

I came, I saw, I conqered

Opublikowano

@Mentosky w jakim dziale jesteś?

Interesują mnie wszystkie opcje zrobienia tego a nie ZRÓB W SKRYPCIE, SKRYPT > PLUGIN

Veni, vidi, vici

I came, I saw, I conqered

Opublikowano

@Mentosky w jakim dziale jesteś?

Interesują mnie wszystkie opcje zrobienia tego a nie ZRÓB W SKRYPCIE, SKRYPT > PLUGIN

Pisząc "SKRYPT > PLUGIN" oznajmiasz że skrypt jest lepszy od pluginu....

Opublikowano
package me.kamilkime.youtube;

import java.util.HashMap;
import java.util.Map;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitTask;

public class Komendy implements CommandExecutor{

	public static Map<String, BukkitTask> tp = new HashMap<String, BukkitTask>();
	
	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
		if(cmd.getName().equalsIgnoreCase("spawn")){
			if(!(sender instanceof Player)){
				sender.sendMessage("§cMusisz byc na serwerze!");
				return true;
			}
			final Player p = (Player) sender;
			if(tp.containsKey(p.getName())){
				((BukkitTask)tp.remove(p.getName())).cancel();
			}
			p.sendMessage("§aTeleportacja nastapi za 5 sek.");
			BukkitTask bt = Bukkit.getScheduler().runTaskLater(Main.getInst(), new Runnable(){
				public void run(){
					p.teleport(p.getWorld().getSpawnLocation());
					((BukkitTask)tp.remove(p.getName())).cancel();
				}
			}, 5*20);
			tp.put(p.getName(), bt);
		}
		return false;
	}
}

Ps. 11 odcinek @Kamilkime

Opublikowano
package me.kamilkime.youtube;

import java.util.HashMap;
import java.util.Map;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitTask;

public class Komendy implements CommandExecutor{

	public static Map<String, BukkitTask> tp = new HashMap<String, BukkitTask>();
	
	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
		if(cmd.getName().equalsIgnoreCase("spawn")){
			if(!(sender instanceof Player)){
				sender.sendMessage("§cMusisz byc na serwerze!");
				return true;
			}
			final Player p = (Player) sender;
			if(tp.containsKey(p.getName())){
				((BukkitTask)tp.remove(p.getName())).cancel();
			}
			p.sendMessage("§aTeleportacja nastapi za 5 sek.");
			BukkitTask bt = Bukkit.getScheduler().runTaskLater(Main.getInst(), new Runnable(){
				public void run(){
					p.teleport(p.getWorld().getSpawnLocation());
					((BukkitTask)tp.remove(p.getName())).cancel();
				}
			}, 5*20);
			tp.put(p.getName(), bt);
		}
		return false;
	}
}

Ps. 11 odcinek @Kamilkime

 

 

No god no..

Plox..

CO TO W OGÓLE JEST?

 

 

@Turret

Jest parę sposób, które możesz wykorzystać.

Chyba najbardziej zrozumiały dla Ciebie to:

1. Tworzysz listę z uuid/nickami

2. Przy komendzie wrzucasz do tej listy nick/uuid gracza, który użył komendy

3. Puszczasz runTaskLater za X sekund, który sprawdza czy UUID/NICK znajduje się w liście, jeśli się znajduje to go teleportuje

 

Anulujesz podczas pvp/ruchu etc po prostu usuwając te UUID/NICK gracza z listy.

784091427630431250239.png

Regulamin sygnatur

Opublikowano

@OldisPL jak pobrac np. te uuid z serwer i jak to zrobić żeby przy wywołaniu /spawn sprawdzał liste z UUID/nickami i jeśli jest to wlaczal taska
Z TpCancelListener sobie poradziłem

#Edit
Player.getUniqueId(); i to mam pobrac przy /spawn? Ale jak ma to sprawdzić kek (poziom BukkitApi kappa)

#EDIT 2

package me.everest.commands;

import java.util.HashMap;
import java.util.Map;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitTask;

import me.everest.Main;

public class SpawnCommand implements CommandExecutor{

	public static Map<String, BukkitTask> tp = new HashMap<String, BukkitTask>();
	
	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
		if(cmd.getName().equalsIgnoreCase("spawn")){
			  {
				    if (!sender.hasPermission("etoolsv.spawn"))
				    {
				      sender.sendMessage(" §8» §cNie masz praw do tego! §7(etoolsv.spawn)");
				      return true;
				    }
			  }
			    if ((sender instanceof Player))
			    {
				final Player p = (Player) sender;
			      if (sender.hasPermission("etoolsv.spawn.nowait"))
			      {
				    p.teleport(p.getWorld().getSpawnLocation());
			        p.sendMessage(" §e» §cAdministratorze §6zostales przeteleportowany na spawn!");
			        return true;
			      }
			if(!(sender instanceof Player)){
				sender.sendMessage("§cKonsolo sorry ale nie!");
				return true;
			}
			    }
			final Player p = (Player) sender;
			if(tp.containsKey(p.getName())){
				((BukkitTask)tp.remove(p.getName())).cancel();
			}
			p.sendMessage(" §e» §6Teleportacja nastapi za §c5 §6sekund.");
			BukkitTask bt = Bukkit.getScheduler().runTaskLater(Main.getInst(), new Runnable(){
				public void run(){
					p.teleport(p.getWorld().getSpawnLocation());
			        p.sendMessage(" §e» §6Zostales przeteleportowany na §cspawn§6!");
					((BukkitTask)tp.remove(p.getName())).cancel();
				}
			}, 5*20);
			tp.put(p.getName(), bt);
		}
		return false;
		}
	}

Wziałem to od kamilkime i troszkę zmieniłem.

Jak myślisz co z wydajnością?

@OldisPL

Veni, vidi, vici

I came, I saw, I conqered

Opublikowano

@OldisPL jak pobrac np. te uuid z serwer i jak to zrobić żeby przy wywołaniu /spawn sprawdzał liste z UUID/nickami i jeśli jest to wlaczal taska

Z TpCancelListener sobie poradziłem

 

#Edit

Player.getUniqueId(); i to mam pobrac przy /spawn? Ale jak ma to sprawdzić kek (poziom BukkitApi kappa)

#EDIT 2

package me.everest.commands;

import java.util.HashMap;
import java.util.Map;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitTask;

import me.everest.Main;

public class SpawnCommand implements CommandExecutor{

	public static Map<String, BukkitTask> tp = new HashMap<String, BukkitTask>();
	
	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
		if(cmd.getName().equalsIgnoreCase("spawn")){
			  {
				    if (!sender.hasPermission("etoolsv.spawn"))
				    {
				      sender.sendMessage(" §8» §cNie masz praw do tego! §7(etoolsv.spawn)");
				      return true;
				    }
			  }
			    if ((sender instanceof Player))
			    {
				final Player p = (Player) sender;
			      if (sender.hasPermission("etoolsv.spawn.nowait"))
			      {
				    p.teleport(p.getWorld().getSpawnLocation());
			        p.sendMessage(" §e» §cAdministratorze §6zostales przeteleportowany na spawn!");
			        return true;
			      }
			if(!(sender instanceof Player)){
				sender.sendMessage("§cKonsolo sorry ale nie!");
				return true;
			}
			    }
			final Player p = (Player) sender;
			if(tp.containsKey(p.getName())){
				((BukkitTask)tp.remove(p.getName())).cancel();
			}
			p.sendMessage(" §e» §6Teleportacja nastapi za §c5 §6sekund.");
			BukkitTask bt = Bukkit.getScheduler().runTaskLater(Main.getInst(), new Runnable(){
				public void run(){
					p.teleport(p.getWorld().getSpawnLocation());
			        p.sendMessage(" §e» §6Zostales przeteleportowany na §cspawn§6!");
					((BukkitTask)tp.remove(p.getName())).cancel();
				}
			}, 5*20);
			tp.put(p.getName(), bt);
		}
		return false;
		}
	}

Wziałem to od kamilkime i troszkę zmieniłem.

Jak myślisz co z wydajnością?

@OldisPL

Powinieneś wykorzystać uuid zamiast nickname, można by też przebudować całego taska.

Opublikowano

@OldisPL jak pobrac np. te uuid z serwer i jak to zrobić żeby przy wywołaniu /spawn sprawdzał liste z UUID/nickami i jeśli jest to wlaczal taska

Z TpCancelListener sobie poradziłem

 

#Edit

Player.getUniqueId(); i to mam pobrac przy /spawn? Ale jak ma to sprawdzić kek (poziom BukkitApi kappa)

#EDIT 2

package me.everest.commands;

import java.util.HashMap;
import java.util.Map;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitTask;

import me.everest.Main;

public class SpawnCommand implements CommandExecutor{

	public static Map<String, BukkitTask> tp = new HashMap<String, BukkitTask>();
	
	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
		if(cmd.getName().equalsIgnoreCase("spawn")){
			  {
				    if (!sender.hasPermission("etoolsv.spawn"))
				    {
				      sender.sendMessage(" §8» §cNie masz praw do tego! §7(etoolsv.spawn)");
				      return true;
				    }
			  }
			    if ((sender instanceof Player))
			    {
				final Player p = (Player) sender;
			      if (sender.hasPermission("etoolsv.spawn.nowait"))
			      {
				    p.teleport(p.getWorld().getSpawnLocation());
			        p.sendMessage(" §e» §cAdministratorze §6zostales przeteleportowany na spawn!");
			        return true;
			      }
			if(!(sender instanceof Player)){
				sender.sendMessage("§cKonsolo sorry ale nie!");
				return true;
			}
			    }
			final Player p = (Player) sender;
			if(tp.containsKey(p.getName())){
				((BukkitTask)tp.remove(p.getName())).cancel();
			}
			p.sendMessage(" §e» §6Teleportacja nastapi za §c5 §6sekund.");
			BukkitTask bt = Bukkit.getScheduler().runTaskLater(Main.getInst(), new Runnable(){
				public void run(){
					p.teleport(p.getWorld().getSpawnLocation());
			        p.sendMessage(" §e» §6Zostales przeteleportowany na §cspawn§6!");
					((BukkitTask)tp.remove(p.getName())).cancel();
				}
			}, 5*20);
			tp.put(p.getName(), bt);
		}
		return false;
		}
	}

Wziałem to od kamilkime i troszkę zmieniłem.

Jak myślisz co z wydajnością?

@OldisPL

 

Wydajności tutaj nie ma.

Dla Kamilkime wydajność to pojęcie nieznane tak samo jak przejrzystość kodu..

Przecież z tego nawet się rozczytać nie idzie..

 

Jeśli robisz na wersję w której już zostało dodane UUID to wykorzystuj UUID a nie nick gracza.

784091427630431250239.png

Regulamin sygnatur

Opublikowano

Zamiast

tp.put(p.getName()

p.getUniqueId?

@Riveilli

W jaki sposob przebudowac taska?

Przy /spawn wlacza sie, czeka 120 ticow (5sek), teleportuje do miejsca spawna i się anuluje?

Co tu zmieniać oprócz zmiany p.getName na odczyt uuid?

Veni, vidi, vici

I came, I saw, I conqered

Opublikowano

Zamiast

tp.put(p.getName()

p.getUniqueId?

@Riveilli

W jaki sposob przebudowac taska?

Przy /spawn wlacza sie, czeka 120 ticow (5sek), teleportuje do miejsca spawna i się anuluje?

Co tu zmieniać oprócz zmiany p.getName na odczyt uuid?

Tak tp.put(p.getName()... na tp.put(p.getUniqueId().. + oczywiście zmiana argumentów mapy. Możesz też ogarnąć te ify.

sygn.png

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...