Ir para conteúdo
  • 0

[Resolvido] WorldGuard API - Verificar flags.


DEVKEWI

Pergunta

Opa abuiguinhos do gaymersboirds

 

Quero verificar se o local é pvp on, se for on o evento funciona, se não, não.

 

Eu fiz isso:

public static WorldGuardPlugin verificar = null;

 

public static void getHookWorldGuard() {
        RegisteredServiceProvider<WorldGuardPlugin> pvp = Bukkit.getServer().getServicesManager()
                .getRegistration(WorldGuardPlugin.class);
        if (pvp != null) {
            verificar = pvp.getProvider();
            KwMetodos.getConsole("WorlGuard encontrado! Hook com a §b<WorldGuardPlugin>");
        }
    }

    public static boolean semPvP(Player p) {
        ApplicableRegionSet regiao = verificar.getRegionManager(p.getWorld()).getApplicableRegions(p.getLocation());
        if (regiao.allows(DefaultFlag.PVP)) {
            return true;
        }
        return false;
    }

 

Já registrei no onEnable o método: getHookWorldGuard();

 

E agora estou com dúvida, como coloco para verificiar se o local é pvp on/off ?

Tipo eu não sei se tem que colocar alguma coisa em um determinado lugar, exemplo:

o semPvP, creio que tinha que colocar no EntilyDamageByEvent ...

http://prntscr.com/af81iv

Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

private WorldGuardPlugin worldGuard;

public WorldGuardPlugin getWorldGuard(){

if (worldGuard == null) {

Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin("WorldGuard");

if ((plugin == null) || (!(plugin instanceof WorldGuardPlugin))) {

return null;

}

worldGuard = (WorldGuardPlugin)plugin;

}

return worldGuard;

}

 

 

 

//Se retornar true == pvp on

//Se retornar false == pvp off

public static boolean PvP(Player p) {

WorldGuardPlugin wgp = getWorldGuard();

Location loc = p.getLocation();

RegionManager rm = wgp.getRegionManager(loc.getWorld());

ApplicableRegionSet app = rm.getApplicableRegions(loc);

if(!app.iterator().hasNext()){

return true;

}

State state = app.getFlag(DefaultFlag.PVP);

if(state != null && state == State.ALLOW){

return true;

}

return false;

}

 

Editado por ???
Link para o comentário
Compartilhar em outros sites

private WorldGuardPlugin worldGuard;
public WorldGuardPlugin getWorldGuard(){
    if (worldGuard == null) {
        Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin("WorldGuard");
        if ((plugin == null) || (!(plugin instanceof WorldGuardPlugin))) {
            return null;
        }
        worldGuard = (WorldGuardPlugin)plugin;
    }
    return worldGuard;
}



//Se retornar true == pvp on
//Se retornar false == pvp off
public static boolean PvP(Player p) {
    WorldGuardPlugin wgp = getWorldGuard();
    Location loc = p.getLocation();
    RegionManager rm = wgp.getRegionManager(loc.getWorld());
    ApplicableRegionSet app = rm.getApplicableRegions(loc);
    if(!app.iterator().hasNext()){
        return true;
    }
    State state = app.getFlag(DefaultFlag.PVP);
    if(state != null && state == State.ALLOW){
        return true;
    }
    return false;
}

Ainda da para se hitar mesmo em lugar pvp off ¬¬

Link para o comentário
Compartilhar em outros sites

Ainda da para se hitar mesmo em lugar pvp off ¬¬

RegionManager regionManager = wg.getRegionManager(p.getWorld());
ApplicableRegionSet set = regionManager.getApplicableRegions(p.getLocation());
if(set.size() != 0){
    String id = ((ProtectedRegion)set.iterator().next()).getId();
    ProtectedRegion region = regionManager.getRegion(id);
    State pvp = region.getFlag(DefaultFlag.PVP);
    if(pvp == State.DENY){
        e.setCancelled(true);
        return;
    }
}
Editado por Dery
Link para o comentário
Compartilhar em outros sites

Você também pode usar (mais fácil):

public boolean canPvP(Player p) {
return getWorldGuard().getRegionManager(p.getWorld()).getApplicableRegions(p.getLocation()).allows(DefaultFlag.PVP);
}

Mas se ta dando pra hitar em local com PvP Off, é bug do WG.

Link para o comentário
Compartilhar em outros sites

Você também pode usar (mais fácil):

public boolean canPvP(Player p) {
return getWorldGuard().getRegionManager(p.getWorld()).getApplicableRegions(p.getLocation()).allows(DefaultFlag.PVP);
}

Mas se ta dando pra hitar em local com PvP Off, é bug do WG.

Na verdade não da para hitar em pvp off, é que ele em pvp em local que não tem pvp... aí quando da dc em pvp mesmo em lugar sem pvp o lek morre =/

Link para o comentário
Compartilhar em outros sites

Na verdade não da para hitar em pvp off, é que ele em pvp em local que não tem pvp... aí quando da dc em pvp mesmo em lugar sem pvp o lek morre =/

@EventHandler
public void onQuit(PlayerQuitEvent e) {
    Player p = e.getPlayer();
    if (canPvP(p)) {
        p.setHealth(0);
    }
}

Tenta isso, combinado com o que te passei ali em cima, e com o getWorldGuard() que o outro passou.

Link para o comentário
Compartilhar em outros sites

Conseguiu?

Não =/

Agora eu não morro quando dou "dc" ¬¬

@Edit: Eu não morro mais mesmo assim aparece a msg ¬¬

saAQ2H3.png

 

 

Deixa eu explicar melhor: Eu quero saber como fazer para cancelar o evento caso esteja pvp off

Editado por Kewilleen G.
Link para o comentário
Compartilhar em outros sites

Não =/

Agora eu não morro quando dou "dc" ¬¬

@Edit: Eu não morro mais mesmo assim aparece a msg ¬¬

saAQ2H3.png

 

 

Deixa eu explicar melhor: Eu quero saber como fazer para cancelar o evento caso esteja pvp off

 

Tu ja viu como verifica se ta pvp off?

Link para o comentário
Compartilhar em outros sites

Não, mas é algo relacionado a isso: set.allows(DefaultFlag.PVP);

@edit: (acho)

Tenta ai...

 

Poste resultados.

 

 

 

 

https://github.com/sk89q/WorldGuard/blob/master/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/regions/ProtectedRegion.java#L441

Editado por leonardosc
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...