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

Помогите Зоны - WorldGuard

Тема в разделе "Разработка плагинов для новичков", создана пользователем DarklingCodex, 6 июн 2017.

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

    DarklingCodex Новичок

    Баллы:
    6
    Здравствуйте, уважаемы посетители форума Rubukkit. Интересует меня одна, но правда, очень легкая задача - каким образом можно получить иное: при заходе в allowPvp зону WorldGuard'a игроку отправлялось определенное сообщение; а в noPvp - другое?
     
    Последнее редактирование: 6 июн 2017
  2. Хостинг MineCraft
    <
  3. Qmaks

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

    Баллы:
    173
    Имя в Minecraft:
    Qmaks
    HashMap<Player, String> regions = new HashMap<Player, String>;
    void onMove(PlayerMoveEvent e) {
    Player p = e.getPlayer();
    String region = гуглишь как получить текущий регион игрока;
    if(regions.containsKey(p)) {
    if(regions.get(p).equals(region)) {
    тут до сих пор в том регионе, в котором был на одно движение раньше
    } else {
    Это часть кода, которая будет выполняться при смене региона (иначе говоря при входе в другой регион).
    Проверяем есть ли у текущего региона allowPvp и в зависимости от результата отправляем нужные сообщения.
    }
    }
    }
     
  4. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Отлитчный способ убить тпс сервера.
     
  5. Exception_Prototype

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

    Баллы:
    46
    У WG там вроде свои очереди проверки, если проверять как выше, то будет плохо.
     
  6. Qmaks

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

    Баллы:
    173
    Имя в Minecraft:
    Qmaks
    Никто не говорил о оптимизации)) У самого вг нету евентов, так что надо чекать как-то же.
     
  7. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Вот можете взять из моего екшенвг за основу. Вместо канбуилд проверяешь на флаг.

    Код:
    package ActionWG;
    
    import com.sk89q.worldguard.bukkit.*;
    import org.bukkit.*;
    import org.bukkit.entity.*;
    import com.sk89q.worldguard.protection.regions.*;
    import com.sk89q.worldguard.protection.*;
    import java.util.*;
    
    public class wg6
    {
        public Main plugin;
        public WorldGuardPlugin wg;
    
        public wg6(Main instance) {
            this.wg = (WorldGuardPlugin)Bukkit.getPluginManager().getPlugin("WorldGuard");
            this.plugin = instance;
        }
    
        String wg(Player p) {
            ApplicableRegionSet set = this.wg.getRegionManager(p.getWorld()).getApplicableRegions(p.getLocation());
            Iterator<ProtectedRegion> iterator = set.getRegions().iterator();
            if (iterator.hasNext()) {
                ProtectedRegion rg = iterator.next();
                return String.valueOf(rg.getId()) + ":" + this.wg.canBuild(p, p.getLocation());
            }
            return "__global__:" + this.wg.canBuild(p, p.getLocation());
        }
    }
    
    Ну и там шедулоер рисуете на примере моего.

    Код:
    package ActionWG;
    
    import org.bukkit.entity.*;
    import java.util.*;
    
    class wg6Runs implements Runnable
    {
        private Main plugin;
    
        wg6Runs(Main instance) {
            this.plugin = instance;
        }
    
        @Override
        public void run() {
            for (Player p : this.plugin.getServer().getOnlinePlayers()) {
                String[] rg = this.plugin.w.wg(p).split(":");
                String s = "4";
                if (rg[1].equals("true")) {
                    s = "2";
                }
                ActionBar actionBar = new ActionBar("[§" + s + rg[0] + "§f]");
                if (this.plugin.map.get(p) == null) {
                    this.plugin.map.put(p, rg[0]);
                    actionBar.sendToPlayer(p);
                } else {
                    if (this.plugin.map.get(p).equals(rg[0])) {
                        continue;
                    }
                    this.plugin.map.put(p, rg[0]);
                    actionBar.sendToPlayer(p);
                }
            }
        }
    }
    
     
    Последнее редактирование: 6 июн 2017
  8. Qmaks

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

    Баллы:
    173
    Имя в Minecraft:
    Qmaks
    Дык лол, тоже самое, но через шулдер.
     
  9. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Дык что бы серв не упал при овермиллион регионах.
     
  10. Qmaks

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

    Баллы:
    173
    Имя в Minecraft:
    Qmaks
    Ну это да.
     

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