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

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Lisenochek, 23 авг 2016.

Статус темы:
Закрыта.
  1. Автор темы
    Lisenochek

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

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

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

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

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

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

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


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

    Код:
        @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 Активный участник Пользователь

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

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

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

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

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

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

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

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

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

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

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

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

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

    Обновленный код таймера:
    Код:
    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 Старожил Пользователь

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

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Сам спавн ящика.
     
  13. slavik123123123

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

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

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

    Баллы:
    123
    Полюбому так, ведь он даже не передает параметра "какому игроку" спавнить сундук...
     
Статус темы:
Закрыта.

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