1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите плагин, который будет тпать игрока в рандомное место при подключении к определенному серверу

Тема в разделе "Разработка плагинов для новичков", создана пользователем rich-man, 6 май 2023.

Статус темы:
Закрыта.
  1. Автор темы
    rich-man

    rich-man Активный участник Пользователь

    Баллы:
    66
    Привет. Если у кого-то есть свободное время, чтобы написать такой плагин, который будет телепортировать игрока в случайную точку мира при подключении к определенному серверу, подключенному через Velocity, то это было бы здорово. Я бы попробовал написать его сам, но у меня слабые познания в области Java и компиляции плагинов в целом. Есть примерно такое -
    Код:
    package com.example.randomteleport;
    
    import com.velocitypowered.api.event.Subscribe;
    import com.velocitypowered.api.event.player.ServerConnectedEvent;
    import com.velocitypowered.api.proxy.ProxyServer;
    import net.kyori.adventure.text.Component;
    import net.kyori.adventure.text.format.NamedTextColor;
    import net.kyori.adventure.text.format.TextColor;
    import net.kyori.adventure.text.format.TextDecoration;
    
    import java.util.Random;
    
    public class RandomTeleportPlugin implements Plugin {
    
        private final ProxyServer proxy;
        private final Random random;
    
        public RandomTeleportPlugin(ProxyServer proxy) {
            this.proxy = proxy;
            this.random = new Random();
        }
    
        @Subscribe
        public void onServerConnected(ServerConnectedEvent event) {
            if (event.getServer().getServerInfo().getName().equalsIgnoreCase("название-сервера")) {
                // Генерировать случайные координаты в мире
                int x = this.random.nextInt(1000) - 500;
                int z = this.random.nextInt(1000) - 500;
    
                // Телепортировать игрока по случайным координатам
                event.getPlayer().createConnectionRequest(this.proxy.getServer("название-сервера"))
                        .connect()
                        .thenRun(() -> {
                            event.getPlayer().teleport(this.proxy.createPosition(event.getServer(), x, 100, z));
                            event.getPlayer().sendMessage(Component.text()
                                    .append(Component.text("Вы были телепортированы в случайное место в мире!", NamedTextColor.GREEN)
                                            .decorate(TextDecoration.BOLD))
                                    .decorate(TextDecoration.ITALIC)
                                    .color(TextColor.color(0xFF0000)));
                        });
            }
        }
    }
     
    Последнее редактирование: 22 июл 2023
  2. Автор темы
    rich-man

    rich-man Активный участник Пользователь

    Баллы:
    66
    Может кто знает, как еще реализовать такой телепорт на другой сервер - не строя там спавн для рандомной телепортации?
     
  3. Level132331

    Level132331 Активный участник Пользователь

    Баллы:
    66
    А зачем прибегать к проксе? Просто на каждом сервере обрабатывай PlayerJoinEvent
     
  4. Автор темы
    rich-man

    rich-man Активный участник Пользователь

    Баллы:
    66
    Понял, спасибо. Это значительно упрощает задачу. Таким образом должно быть? Просто, чтобы при каждом заходе на сервер - телепортировало в рандомную точку
    Код:
    package com.randomteleport;
    
    import net.md_5.bungee.api.ChatColor;
    import net.md_5.bungee.api.chat.TextComponent;
    import org.bukkit.Bukkit;
    import org.bukkit.Location;
    import org.bukkit.World;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import java.util.Random;
    
    public class Randomteleport extends JavaPlugin implements Listener {
    
    private Random random;
    
    @Override
    public void onEnable() {
    getServer().getPluginManager().registerEvents(this, this);
    random = new Random();
    }
    
    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent event) {
    Player player = event.getPlayer();
    
    // Генерировать случайные координаты в мире
    World world = player.getWorld();
    int x = random.nextInt(10000) - 5000;
    int z = random.nextInt(10000) - 5000;
    
    // Телепортировать игрока по случайным координатам в безопасное место
    int y = world.getHighestBlockYAt(x, z);
    Location location = new Location(world, x, y, z);
    
    // Получить блок на поверхности в заданных координатах
    while (location.getBlock().isLiquid() || location.getBlock().getType().isSolid()) {
    y++;
    location.setY(y);
    }
    
    // Создание цветного текста
    String message = ChatColor.DARK_GREEN + "Пожалуйста, подождите, мы телепортируем Вас в случайную точку...";
    
    // Создание компонента текста
    TextComponent textComponent = new TextComponent(message);
    
    // Отправка компонента текста игроку
    player.spigot().sendMessage(textComponent);
    
    // Отложенная телепортация игрока
    Location finalLocation = location;
    Bukkit.getScheduler().runTaskLater(this, () -> player.teleport(finalLocation), 100L);
    }
    }
    
     
    Последнее редактирование: 8 май 2023
  5. Level132331

    Level132331 Активный участник Пользователь

    Баллы:
    66
    Ну да. Потестируй
     
  6. Автор темы
    rich-man

    rich-man Активный участник Пользователь

    Баллы:
    66
    Благодарю тебя добрейший человек! Немного переделал и все заработало как надо. Почему-то до тебя никто не хотел и минуты выделить, чтобы помочь
     
Статус темы:
Закрыта.

Поделиться этой страницей