Вопрос Как реализовать телепорт игрока на последнюю локацию?

qmaan

Разработчик
Пользователь
Сообщения
89
Как реализовать телепорт игрока на последнюю локацию?
 
Решение
Ну примерно так. Писал по памяти и под 18 java, так что, возможно, тебе придётся изменить некоторые моменты. Если хочешь хранить несколько последних локаций - используй коллекцию в качестве значения Map.

Java:
public class MyPlugin extends JavaPlugin implements Listener {
   
    private final Map<UUID, Location> lastPlayerLocation = new HashMap<>();
   
    @Override
    public void onEnable() {
        Bukkit.getPluginManager().registerEvents(this, this);
        getCommand("back").setExecutor(this);
    }
   
    public Optional<Location> findLastPlayerLocation(Player player) {
        Location location = lastPlayerLocation.get(player.getUniqueId());
        return location == null ? Optional.empty() : Optional.of(location);
    }...
Сохраняй в памяти предыдущую локацию игрока и при необходимости телепортируй на неё.
Отследить телепортацию игрока можешь через
Можешь пример привести кода?
 
Ну примерно так. Писал по памяти и под 18 java, так что, возможно, тебе придётся изменить некоторые моменты. Если хочешь хранить несколько последних локаций - используй коллекцию в качестве значения Map.

Java:
public class MyPlugin extends JavaPlugin implements Listener {
   
    private final Map<UUID, Location> lastPlayerLocation = new HashMap<>();
   
    @Override
    public void onEnable() {
        Bukkit.getPluginManager().registerEvents(this, this);
        getCommand("back").setExecutor(this);
    }
   
    public Optional<Location> findLastPlayerLocation(Player player) {
        Location location = lastPlayerLocation.get(player.getUniqueId());
        return location == null ? Optional.empty() : Optional.of(location);
    }
   
    public void saveLastPlayerLocation(Player player, Location location) {
        lastPlayerLocation.put(player.getUniqueId, location);
    }
   
    @EventHandler
    public void onPlayerQuit(PlayerQuitEvent e) {
        lastPlayerLocation.remove(e.getPlayer().getUniqueId());
    }
   
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (sender instanceof Player p) {
            findLastPlayerLocation(p).ifPresentOrElse(location -> p.teleport(location),
                                                     p.sendMessage("Последняя локация не найдена"));
        }
    }
   
}
 
flaweoff, у меня возникла проблема не большая
Вам необходимо зарегистрироваться для просмотра изображений-вложений

Объединено

Все ли правильно я сделал?
нужно в конце getUniqueId() добавить ()
 
Спасибо , теперь вопрос , что тут не так?

if (args[0].equals("spy") && args[1].equals("off")) {
if (sender instanceof Player p) {
findLastPlayerLocation(p).ifPresentOrElse(location -> p.teleport(location),
p.sendMessage("Последняя локация не найдена"));
sender.sendMessage(prefix + " &7Слежка за игроком деактивирована! Не забудьте сохранить запись.");
player.setGameMode(GameMode.SURVIVAL);
}
return true;
}
Вам необходимо зарегистрироваться для просмотра изображений-вложений

вставь текст как код java а то не читабельно.
 
Спасибо , не знал как
Объединено

Java:
        if (args[0].equals("spy") && args[1].equals("off")) {
            if (sender instanceof Player p) {
                findLastPlayerLocation(p).ifPresentOrElse(location -> p.teleport(location),
                        p.sendMessage("Последняя локация не найдена"));
                sender.sendMessage(prefix + " &7Слежка за игроком деактивирована! Не забудьте сохранить запись.");
                player.setGameMode(GameMode.SURVIVAL);
            }
            return true;
        }
 
Спасибо , не знал как
Объединено

Java:
        if (args[0].equals("spy") && args[1].equals("off")) {
            if (sender instanceof Player p) {
                findLastPlayerLocation(p).ifPresentOrElse(location -> p.teleport(location),
                        p.sendMessage("Последняя локация не найдена"));
                sender.sendMessage(prefix + " &7Слежка за игроком деактивирована! Не забудьте сохранить запись.");
                player.setGameMode(GameMode.SURVIVAL);
            }
            return true;
        }
Java:
        if (args[0].equalsIgnoreCase("spy") && args[1].equalsIgnoreCase("off")) {
            if (sender instanceof Player p) {
                findLastPlayerLocation(p).ifPresentOrElse(location -> p.teleport(location),
                        p.sendMessage("Последняя локация не найдена"));
                sender.sendMessage(prefix + " &7Слежка за игроком деактивирована! Не забудьте сохранить запись.");
                player.setGameMode(GameMode.SURVIVAL);
            }
            return true;
        }
 
Все равно показывает ошибки
Вам необходимо зарегистрироваться для просмотра изображений-вложений
Java:
        if (args[0].equalsIgnoreCase("spy") && args[1].equalsIgnoreCase("off")) {
            if (sender instanceof Player) {
                Player p = (Player) sender;
                findLastPlayerLocation(p).ifPresentOrElse(location -> p.teleport(location),
                        p.sendMessage("Последняя локация не найдена"));
                sender.sendMessage(prefix + " &7Слежка за игроком деактивирована! Не забудьте сохранить запись.");
                player.setGameMode(GameMode.SURVIVAL);
            }
            return true;
        }
попробуй так
Объединено

Все равно показывает ошибки
Вам необходимо зарегистрироваться для просмотра изображений-вложений
Java:
if (args[0].equalsIgnoreCase("spy") && args[1].equalsIgnoreCase("off")) {
            if (sender instanceof Player) {
                Player p = (Player) sender;
                findLastPlayerLocation(p.getUniqueId()).ifPresentOrElse(location -> p.teleport(location),
                        p.sendMessage("Последняя локация не найдена"));
                sender.sendMessage(prefix + " &7Слежка за игроком деактивирована! Не забудьте сохранить запись.");
                player.setGameMode(GameMode.SURVIVAL);
            }
            return true;
        }
 
а в чём проблема навести курсор на ошибку, чтобы увидеть её описание? да и вообще не очень красиво каждую ошибку слать сюда, не пытаясь разобраться самостоятельно
 
Cannot resolve method 'findLastPlayerLocation' in 'command'
покажи весь код класса command
Объединено

Cannot resolve method 'findLastPlayerLocation' in 'command'
Вам необходимо зарегистрироваться для просмотра изображений-вложений

потом
Java:
if (args[0].equalsIgnoreCase("spy") && args[1].equalsIgnoreCase("off")) {
            if (sender instanceof Player) {
                Player p = (Player) sender;
                teleport.findLastPlayerLocation(p).ifPresentOrElse(location -> p.teleport(location),
                        p.sendMessage("Последняя локация не найдена"));
                sender.sendMessage(prefix + " &7Слежка за игроком деактивирована! Не забудьте сохранить запись.");
                player.setGameMode(GameMode.SURVIVAL);
            }
            return true;
        }
 
Назад
Сверху Снизу