Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Статус
Закрыто для дальнейших ответов.

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)));
                    });
        }
    }
}
 
Последнее редактирование:
Может кто знает, как еще реализовать такой телепорт на другой сервер - не строя там спавн для рандомной телепортации?
 
А зачем прибегать к проксе? Просто на каждом сервере обрабатывай PlayerJoinEvent
 
А зачем прибегать к проксе? Просто на каждом сервере обрабатывай PlayerJoinEvent
Понял, спасибо. Это значительно упрощает задачу. Таким образом должно быть? Просто, чтобы при каждом заходе на сервер - телепортировало в рандомную точку
Код:
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);
}
}
 
Последнее редактирование:
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх