108 lines
3.5 KiB
Java
108 lines
3.5 KiB
Java
package pw.yumc.MiaoLobby;
|
|
|
|
import com.google.common.io.ByteArrayDataOutput;
|
|
import com.google.common.io.ByteStreams;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.scheduler.BukkitRunnable;
|
|
import org.bukkit.scheduler.BukkitTask;
|
|
import pw.yumc.MiaoLobby.config.Config;
|
|
import pw.yumc.MiaoLobby.event.PreLobbyTpEvent;
|
|
import pw.yumc.YumCore.bukkit.Log;
|
|
import pw.yumc.YumCore.bukkit.P;
|
|
import pw.yumc.YumCore.bukkit.compatible.C;
|
|
|
|
import java.security.SecureRandom;
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
/**
|
|
* @author 喵♂呜
|
|
* @since 2016/12/25 0025
|
|
*/
|
|
public class Util {
|
|
private final static SecureRandom random = new SecureRandom();
|
|
private static MiaoLobby plugin = P.getPlugin();
|
|
private static Config config = plugin.config;
|
|
private static Map<String, BukkitTask> tasks = new HashMap<>();
|
|
|
|
public static void delayTp(final Player player) {
|
|
if (tasks.containsKey(player.getName())) {
|
|
Log.sender(player, config.TPing);
|
|
return;
|
|
}
|
|
tasks.put(player.getName(), new BukkitRunnable() {
|
|
int delay = config.AutoTPDelay;
|
|
|
|
@Override
|
|
public void run() {
|
|
if (player.isOnline()) {
|
|
if (delay > 0) {
|
|
C.ActionBar.send(player, String.format(plugin.config.TPDelay, delay));
|
|
delay--;
|
|
return;
|
|
}
|
|
random(player);
|
|
}
|
|
this.cancel();
|
|
}
|
|
}.runTaskTimerAsynchronously(plugin, 0, 20));
|
|
}
|
|
|
|
public static void delayTpTargetEvent(final Player player) {
|
|
PreLobbyTpEvent event = new PreLobbyTpEvent(player);
|
|
Bukkit.getPluginManager().callEvent(event);
|
|
if (!event.isCancelled()) {
|
|
delayTp(player);
|
|
}
|
|
}
|
|
|
|
public static void cancel(Player player) {
|
|
if (player != null) {
|
|
BukkitTask task = tasks.remove(player.getName());
|
|
if (task != null) {
|
|
task.cancel();
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void connect(final Player p, final String server) {
|
|
final ByteArrayDataOutput out = ByteStreams.newDataOutput();
|
|
try {
|
|
out.writeUTF("Connect");
|
|
out.writeUTF(server);
|
|
} catch (final Exception ignored) {
|
|
}
|
|
p.sendPluginMessage(plugin, "BungeeCord", out.toByteArray());
|
|
}
|
|
|
|
public static void random(final Player player) {
|
|
new BukkitRunnable() {
|
|
final List<String> servers = new ArrayList<>(config.Servers);
|
|
int i = 0;
|
|
|
|
@Override
|
|
public void run() {
|
|
if (servers.isEmpty()) {
|
|
if (config.ReTry) {
|
|
servers.addAll(config.Servers);
|
|
return;
|
|
}
|
|
C.ActionBar.send(player, config.Unavailable);
|
|
player.sendMessage(config.Unavailable);
|
|
} else if (player.isOnline()) {
|
|
final String serverName = servers.remove(random.nextInt(servers.size()));
|
|
C.ActionBar.send(player, String.format(i > 0 ? config.TimeOut : config.Message, serverName));
|
|
connect(player, serverName);
|
|
i++;
|
|
return;
|
|
}
|
|
Util.cancel(player);
|
|
this.cancel();
|
|
}
|
|
}.runTaskTimerAsynchronously(plugin, 0, config.WaitTime);
|
|
}
|
|
}
|