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

Помогите Срабатывание таймера только для одного игрока

Discussion in 'Разработка плагинов для новичков' started by Lisenochek, Aug 23, 2016.

Thread Status:
Not open for further replies.
  1. Автор темы
    Lisenochek

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

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek
    Всем привет. Сделал таймер, который спавнит сундуки при срабатывании ивента, но беда в том, что сундуки таймер спавнит всем игрокам (логично, правда?), а мне надо, чтобы таймер сработал только у того игрока, который и активировал ивент.

    Можете мне помочь?
     
  2. Хостинг MineCraft
    <
  3. Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Trophy Points:
    123
    Эм... Щто? Несешь какую-то дичь..
    Может хотя-бы код скинешь??
     
  4. Автор темы
    Lisenochek

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

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek
    Проблема такая, что таймер срабатывает у всех, а мне надо, чтобы таймер срабатывал только у игрока, который совершил действие.


    Да, конечно. Вот:

    Code:
        @EventHandler
        public void dropCommon(BlockPlaceEvent e) {
    
            Player p = e.getPlayer();
            Block b = e.getBlockPlaced();
    
            if (!this.ml.WLWorlds.contains(e.getPlayer().getWorld().getName())) {
                return;
            }
    
            if (e.isCancelled()) {
                return;
            }
    
            if (e.getBlockPlaced().getTypeId() == 76) {
    
                if (p.getItemInHand().getItemMeta().getDisplayName() != null
                        && p.getItemInHand().getItemMeta().getDisplayName()
                                .equalsIgnoreCase(ChatColor.GOLD + ChatColor.BOLD.toString() + "Сигнальная шашка")) {
    
                    MessageManager.getManager().msg(p, MsgType.SUCCESS, cm.messageConfig.getString("signal_enable"));
    
                    BukkitRunnable run = new BukkitRunnable() {
    
                        @Override
                        public void run() {
    
                            for (Player p : Bukkit.getOnlinePlayers()) {
    
                                World w = Bukkit.getWorld("Realistic_World");
    
                                Location loc = p.getLocation();
                                int radius = 25;
                                for (int x = -radius; x < radius; x++) {
                                    for (int y = -radius; y < radius; y++) {
                                        for (int z = -radius; z < radius; z++) {
                                            Block b = w.getBlockAt(loc.getBlockX() + x, loc.getBlockY() + y,
                                                    loc.getBlockZ() + z);
    
                                            if (b.getType() == Material.REDSTONE_TORCH_ON) {
    
                                                ParticleEffect.SMOKE_LARGE.display(0, 2, 0, 0, 5,
                                                        b.getLocation().add(0.5, 0, 0.5), 200);
    
                                                if (r.nextInt(500) <= 10) {
    
                                                    cs.spawnCrate();
    
                                                    b.setType(Material.AIR);
    
                                                    this.cancel();
    
                                                    MessageManager.getManager().msg(p, MsgType.SUCCESS,
                                                            cm.messageConfig.getString("signal_success"));
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    };
                    run.runTaskTimer(plugin, 1, 1);
                }
            }
        }
     
  5. Novichock

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

    Trophy Points:
    76
    Skype:
    pavel.batalov1
    Так не запускай цикл,которой проходит по всем игрокам.
     
  6. Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Trophy Points:
    123
    Я не могу понять... Ты код писал сам?..
    Ты сам делаешь цикл чтоб сделать что-то для всех игроков, а не для того который содержится в ивенте...
    Так что, давай ты сам раскроешь глазки...
     
  7. xDark

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

    Trophy Points:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Он скорее хочет чтобы только один игрок видел результат, ну хз хз
     
  8. Reality_SC

    Reality_SC Старожил Пользователь

    Trophy Points:
    123
    Имя в Minecraft:
    Reality_SC
    Я не хочу вьезжать в код, но имхо, проблема в этом:
    upload_2016-8-23_22-53-36.png
     
  9. xDark

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

    Trophy Points:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    da ladno
     
  10. Автор темы
    Lisenochek

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

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek
    Проблема все еще актуальна.

    Еще раз повторю суть проблемы: если игрок поставит кастомный факел заспавнится сундук всем игрокам поблизости, хотя они не ставили факела (логика таймера).

    А надо, чтобы сундук спавнился ТОЛЬКО тому человеку, кто и поставил факел.

    Обновленный код таймера:
    Code:
    package com.realistic.events;
    
    import java.util.Random;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.Material;
    import org.bukkit.World;
    import org.bukkit.block.Block;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.BlockPlaceEvent;
    import org.bukkit.scheduler.BukkitRunnable;
    
    import com.realistic.api.API;
    import com.realistic.api.MessageManager;
    import com.realistic.api.MessageManager.MsgType;
    import com.realistic.config.configMessage;
    import com.realistic.list.MinecraftList;
    import com.realistic.particle_api.ParticleEffect;
    import com.realistic.timers.Crate_spawn;
    
    public class Signal_Drop implements Listener {
    
        private API plugin;
        private configMessage cm;
        private MinecraftList ml;
        private Crate_spawn cs;
        private final Random r = new Random();
    
        public Signal_Drop(API plugin) {
            this.plugin = plugin;
        }
    
        @EventHandler
        public void dropCommon(BlockPlaceEvent e) {
    
            Player p = e.getPlayer();
            Block b = e.getBlockPlaced();
    
            if (!this.ml.WLWorlds.contains(e.getPlayer().getWorld().getName())) {
                return;
            }   
    
            if (e.isCancelled()) {
                return;
            }
    
            if (e.getBlockPlaced().getTypeId() == 76) {
    
                if (p.getItemInHand().getItemMeta().getDisplayName() != null
                        && p.getItemInHand().getItemMeta().getDisplayName()
                                .equalsIgnoreCase(ChatColor.GOLD + ChatColor.BOLD.toString() + "Сигнальная шашка")) {
    
                    MessageManager.getManager().msg(p, MsgType.SUCCESS, cm.messageConfig.getString("signal_enable"));
    
                    BukkitRunnable run = new BukkitRunnable() {
    
                        @Override
                        public void run() {
    
                            World w = Bukkit.getWorld("Realistic_World");
    
                            Location loc = p.getLocation();
                            int radius = 25;
                            for (int x = -radius; x < radius; x++) {
                                for (int y = -radius; y < radius; y++) {
                                    for (int z = -radius; z < radius; z++) {
                                        Block b = w.getBlockAt(loc.getBlockX() + x, loc.getBlockY() + y,
                                                loc.getBlockZ() + z);
    
                                        if (b.getType() == Material.REDSTONE_TORCH_ON) {
    
                                            ParticleEffect.SMOKE_LARGE.display(0, 2, 0, 0, 5,
                                                    b.getLocation().add(0.5, 0, 0.5), 200);
    
                                            if (r.nextInt(500) <= 10) {
    
                                                cs.spawnCrate();
    
                                                b.setType(Material.AIR);
    
                                                this.cancel();
    
                                                MessageManager.getManager().msg(p, MsgType.SUCCESS,
                                                        cm.messageConfig.getString("signal_success"));
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    };
                    run.runTaskTimer(plugin, 5, 5);
                }
            }
        }
    }
    
     
  11. slavik123123123

    slavik123123123 Старожил Пользователь

    Trophy Points:
    143
    Имя в Minecraft:
    Leymooooooooooo
    что тут находиться?
     
  12. Автор темы
    Lisenochek

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

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek
    Сам спавн ящика.
     
  13. slavik123123123

    slavik123123123 Старожил Пользователь

    Trophy Points:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Ну скорее всего там и спавнит всем игрокам сундук.
     
  14. Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Trophy Points:
    123
    Полюбому так, ведь он даже не передает параметра "какому игроку" спавнить сундук...
     
Thread Status:
Not open for further replies.

Share This Page