Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

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

Discussion in 'Разработка плагинов для новичков' started by ShadowKADM, Mar 5, 2015.

  1. Автор темы
    ShadowKADM

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

    Trophy Points:
    68
    Имя в Minecraft:
    Shadow
    Прошу помощи у сообщества рубакит. Мне необходима ваша помощь.
    В общем делают телепортацию на координаты, но с задержкой, то есть пишешь команду, проходит 30 секунд и игрок телепортируется. Все бы ничего, но пока один игрок телепортируется, другой телепортироваться не может.
    Code:
    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]
     
  2. Хостинг MineCraft
    <
  3. serega6531

    serega6531 Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    shkurovs
    А чего вы ожидали? Переменная-то одна.
     
  4. Автор темы
    ShadowKADM

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

    Trophy Points:
    68
    Имя в Minecraft:
    Shadow
    Я понимаю, но что мне с этим делать? Ведь эти переменные нельзя занести под onCommand.
     
  5. serega6531

    serega6531 Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    shkurovs
    Ну так сделайте лист с никами игроков.
     
  6. Автор темы
    ShadowKADM

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

    Trophy Points:
    68
    Имя в Minecraft:
    Shadow
    Я об этом думал, но как? 3 листа создавать? Или можно пример?
     
  7. serega6531

    serega6531 Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    shkurovs
    Создаете лист, по команде добавляете в него игрока, через n секунд удаляете.
     
  8. Автор темы
    ShadowKADM

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

    Trophy Points:
    68
    Имя в Minecraft:
    Shadow
    Как-то так. Но как время хранить?
    Code:
    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;
        }
    }
    
     
  9. serega6531

    serega6531 Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    shkurovs
    Это и не нужно. Можно просто запускать удаление через нужное количество секунд.
     
  10. Автор темы
    ShadowKADM

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

    Trophy Points:
    68
    Имя в Minecraft:
    Shadow
    Не могли бы вы дать пример?
     
  11. serega6531

    serega6531 Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    shkurovs
    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);
     
  12. Автор темы
    ShadowKADM

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

    Trophy Points:
    68
    Имя в Minecraft:
    Shadow
    Благодарю.[DOUBLEPOST=1425588808,1425588655][/DOUBLEPOST]Но как мне все уже узнать время до окончания таймера? Очень это нужно.
     
  13. serega6531

    serega6531 Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    shkurovs
    Тогда делайте мапу из ника и количества секунд до окончанияю
     

Share This Page