Помогите Как убрать любую телепортацию в регион

  • Автор темы Автор темы Detfor
  • Дата начала Дата начала

Detfor

Активный участник
Пользователь
Баллы
61
Ник в Minecraft
Detfor
У меня на сервере есть пирамида испытаний, за чье прохождение игрок получает награду. Мне нужно как-то сделать чтобы извне нельзя было туда телепортироваться к другим игрокам. Флаг blocked-cmds может убрать только /tpaccept, а если к игроку тпхается его супруг(а) или друг то ему уже вводить команду не нужно. Есть ли способ такой?
 
Кастом флагом, типо такого.
Код:
    @EventHandler
    public void on(PlayerTeleportEvent e) {
        if (Flags.canBuild(e.getPlayer(), e.getTo())) {
            return;
        }
        if (!WGRegionUtils.isFlagAllows(e.getPlayer(), e.getTo(), TeleportFlag.getInstance())) {
            e.setCancelled(true);
        }
    }
(Flags.canBuild)
Код:
wp = WorldGuard.getInstance().getPlatform();
Код:
wg = (WorldGuardPlugin) JavaPlugin.getPlugin(WorldGuardPlugin.class);
Код:
    public static boolean canBuild(Player p, Location loc) {
        return p.hasPermission("worldguard.region.bypass." + p.getWorld().getName())
                || wp.getRegionContainer().createQuery().testBuild(BukkitAdapter.adapt(loc), wg.wrapPlayer(p));
    }
Код:
public class TeleportFlag extends StateFlag {
    private static TeleportFlag instance;

    public static TeleportFlag getInstance() {
        if (instance == null) {
            instance = new TeleportFlag();
        }
        return instance;
    }

    protected TeleportFlag() {
        super("tp", true);
    }

    public State getDefault() {
        return State.ALLOW;
    }

    public static StateFlag.State allowOrNone(boolean flag) {
        return StateFlag.State.ALLOW;
    }
}
 
Последнее редактирование:
(WGRegionUtils)
Код:
public static final RegionQuery REGION_QUERY = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
Код:
    public static boolean isFlagAllows(Player player, Location location, StateFlag flag) {
        return REGION_QUERY.testState(BukkitAdapter.adapt(location), Flags.getWorldGuard().wrapPlayer(player), flag);
    }
 
Ну и сама регистрация в onLoad, не путать с onEnable, иначе не зарегистрируется.
WorldGuard.getInstance().getFlagRegistry().register(TeleportFlag.getInstance());
 
Не пробовал, не знаю. И я тут увидел ток запрет тп из региона, работает он в обратную сторону или нет.
Я не исключаю, что entry относится и к пешим заходам, и к телепортациям внутрь. Да и на уровне баккита фича с запретом телепорта реализуется элементарно.
В любом случае, ТСу стоит проверить
 
Да и на уровне баккита фича с запретом телепорта реализуется элементарно.
Ну как бы мой флаг делает на уровне бакита. А тот из самого плагина хз как работает.
 
Последнее редактирование:
Так зачем твой флаг, если в WG, возможно, уже из коробки есть такой флаг? )
Я говорю - пускай ТС чекнет
Ну если он такой же, че и нет. Но по описанию он односторонний.
 
Последнее редактирование:
Назад
Верх Низ