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

Помогите Плагин с бафом

ShadowKADM

Активный участник
Пользователь
Баллы
68
Имя в Minecraft
Shadow
Прошу помощи у сообщества рубакит. Мне необходима ваша помощь.
В общем делают телепортацию на координаты, но с задержкой, то есть пишешь команду, проходит 30 секунд и игрок телепортируется. Все бы ничего, но пока один игрок телепортируется, другой телепортироваться не может.
Код:
package my.Pack;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;

class tpspawn implements CommandExecutor {
    public final global plugin;
    public tpspawn(global aThis) {
        this.plugin = aThis;
    }
   
    int i = 30;
    boolean alreadyTeleported = false;
   
    public boolean onCommand(final CommandSender cs, Command cmnd, String string,
            String[] strings) {
        if(alreadyTeleported == false){
        alreadyTeleported = true;
        BukkitRunnable runnable = new BukkitRunnable() {
            final global plugin2 = plugin;
            @Override
            public void run() {
                Player p = ((Player) cs).getPlayer();
                p.sendMessage(String.valueOf(i));
                i = i - 1;
                if (i == 0) {
                    alreadyTeleported = false;
                    World w = Bukkit.getServer().getWorlds().get(0);
                    p.teleport(new Location(w, 0, 73, 0));
                    p.sendMessage(ChatColor.GREEN + "Вы были телепортированы.");
                    this.cancel();
                    i = 30;
                }
            }
        };
        runnable.runTaskTimer(this.plugin, 1L, 20L);
        }
        return true;
    }
}
[code]
 
Я понимаю, но что мне с этим делать? Ведь эти переменные нельзя занести под onCommand.
 
Я об этом думал, но как? 3 листа создавать? Или можно пример?
 
Создаете лист, по команде добавляете в него игрока, через n секунд удаляете.
 
Как-то так. Но как время хранить?
Код:
package my.Pack;

import java.util.ArrayList;
import java.util.List;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;

class tpspawn implements CommandExecutor {
    public final global plugin;
    public tpspawn(global aThis) {
        this.plugin = aThis;
    }
   
    List<String> users = new ArrayList<String>();
   
    boolean alreadyTeleported = false;
   
    boolean userInList(String user){
        for(int i = 0; i < users.size(); i++){
            if(users.get(i).equals(user)){
                return true;
            }
        }
        return false;
    }
   
    void delUserFromList(String user){
        for(int i = 0; i < users.size(); i++){
            if(users.get(i).equals(user)){
                users.remove(i);
            }
        }
    }
   
    int i = 30;
   
    public boolean onCommand(final CommandSender cs, Command cmnd, String string,
            String[] strings) {
        Player pl = ((Player) cs).getPlayer();
        if(!userInList(pl.getDisplayName())){
        users.add(pl.getDisplayName());
        BukkitRunnable runnable = new BukkitRunnable() {
            final global plugin2 = plugin;
            @Override
            public void run() {
                Player p = ((Player) cs).getPlayer();
                p.sendMessage(String.valueOf(i));
                i = i - 1;
                if (i == 0) {
                    delUserFromList(p.getPlayer().getDisplayName());
                    World w = Bukkit.getServer().getWorlds().get(0);
                    p.teleport(new Location(w, 0, 73, 0));
                    p.sendMessage(ChatColor.GREEN + "Вы были телепортированы.");
                    this.cancel();
                    i = 30;
                }
                ((Player) cs).sendPluginMessage(this.plugin2, "spawnSec", String.valueOf(i).getBytes());
            }
        };
        runnable.runTaskTimer(this.plugin, 1L, 20L);
        }
        return true;
    }
}
 
Это и не нужно. Можно просто запускать удаление через нужное количество секунд.
 
List<String> players

onCommand:
final name = sender.getName();
players.put(name);
Bukkit.getScheluder().runTaskLater(this, new Runnable(){public void run(){players.remove(name)}}, time * 20);
 
Благодарю.
Но как мне все уже узнать время до окончания таймера? Очень это нужно.
 

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

Назад
Верх