Ir para conteúdo

BlockBreakEvent


JmDiego275

Posts Recomendados

Bom, estou fazendo um plugin de mineração sem dropar o item minerado e vir em forma de dinheiro, porém o block.breaknaturally não está funcionando em específicos blocos, se alguém souber como resolver.

Código

Spoiler

 

@EventHandler
    public void qndminerar(BlockBreakEvent e){
        Player p = e.getPlayer();
        Block b = e.getBlock();

        if (b.getType() != Material.SPONGE) return;
        if (p.getWorld() == Bukkit.getWorld("mina")) {
            if (e.getPlayer().hasPermission("magma.minerar")){
                b.breakNaturally(new ItemStack(Material.SPONGE));
                Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "money give " + p.getName() + " 15.0");
                ActionBar magmine = new ActionBar("§6§l+10.0 ✪ §a§l+5.0");
                magmine.sendToPlayer(p);
        }

 

 

Link para o comentário
Compartilhar em outros sites

49 minutos atrás, JmDiego275 disse:

Bom, estou fazendo um plugin de mineração sem dropar o item minerado e vir em forma de dinheiro, porém o block.breaknaturally não está funcionando em específicos blocos, se alguém souber como resolver.

Código

  Ocultar conteúdo

 

@EventHandler
    public void qndminerar(BlockBreakEvent e){
        Player p = e.getPlayer();
        Block b = e.getBlock();

        if (b.getType() != Material.SPONGE) return;
        if (p.getWorld() == Bukkit.getWorld("mina")) {
            if (e.getPlayer().hasPermission("magma.minerar")){
                b.breakNaturally(new ItemStack(Material.SPONGE));
                Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "money give " + p.getName() + " 15.0");
                ActionBar magmine = new ActionBar("§6§l+10.0 ✪ §a§l+5.0");
                magmine.sendToPlayer(p);
        }

 

 

Recomendo usar um,

if (event.isCancelled()) return;

para que não de problema com outros plugins, como worldguard, já que o evento está em prioridade NORMAL.

@edit
Recomendo também retirar o comando /give do console pois caso muitos jogadores minerem ao mesmo tempo irá causar spam no console.

(É NECESSÁRIO IMPLEMENTAR O VAULT NO LIBRARIES DO PLUGIN)

Eu retirei e usei este código abaixo para adicionar money ao jogador.

<nome_da_class>.VaultAPIEco.depositPlayer(player.getName(), 1000);


Você pode usar o Vault para acessar a economia do seu servidor, é bem fácil basta adicionar uma class(ou na class principal, só tirar <nome_da_class>.) com:

public static Economy VaultAPIEco = null;

public static boolean ativarVAULTEco() {
	RegisteredServiceProvider<Economy> VaultEconomia = Bukkit.getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class);
	if(VaultEconomia != null) {
		VaultAPIEco = VaultEconomia.getProvider();
	}
return (VaultAPIEco != null);
}


E no onEnable do plugin, você ativa usando:

<nome_da_class>.ativarVAULTEco();

Lembrando que o Vault não é só economia, pode usar como permissão e chat também.

Eu fiz algumas modificações, bom é só uma dica para organizar melhor mas cada um tem o seu. 

@EventHandler
public void BlockBreakEvent(BlockBreakEvent event){
    if (event.isCancelled()) return; // Evita problema com outros plugins, sempre bom usar
	
    Player player = event.getPlayer();
    Block block = event.getBlock();
        
    if (block.getType() != Material.SPONGE) return;
    if (!(player.getWorld().getName().equalsIgnoreCase("mina"))) return; // Usei ! na frente
    if (!(player.hasPermission("magma.minerar"))) return; // Usei ! na frente
        
    block.setType(Material.AIR);
    <nome_da_class>.VaultAPIEco.depositPlayer(player.getName(), 15); // Usado para depositar money ao jogador
        
    ActionBar magmine = new ActionBar("§6§l+10.0 ✪ §a§l+5.0");
    magmine.sendToPlayer(player);
}


 

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

27 minutos atrás, Mounton disse:

Recomendo usar um,


if (event.isCancelled()) return;

Após aonde eu coloco isso? E sobre a duvida do tópico eu resolvi utilizando:

Spoiler

 

@EventHandler
    public void qndminerar(BlockBreakEvent e){
        Player p = e.getPlayer();
        Block b = e.getBlock();

        if (b.getType() != Material.SPONGE) return;
        if (p.getWorld() == Bukkit.getWorld("mina")) {
            if (e.getPlayer().hasPermission("magma.minerar")){
                b.setType(Material.AIR);
                Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "money give " + p.getName() + " 15.0");
                ActionBar magmine = new ActionBar("§6§l+10.0 ✪ §a§l+5.0");
                magmine.sendToPlayer(p);
        }

 

 

Link para o comentário
Compartilhar em outros sites

11 minutos atrás, JmDiego275 disse:

Após aonde eu coloco isso? E sobre a duvida do tópico eu resolvi utilizando:

  Ocultar conteúdo

 

@EventHandler
    public void qndminerar(BlockBreakEvent e){
        Player p = e.getPlayer();
        Block b = e.getBlock();

        if (b.getType() != Material.SPONGE) return;
        if (p.getWorld() == Bukkit.getWorld("mina")) {
            if (e.getPlayer().hasPermission("magma.minerar")){
                b.setType(Material.AIR);
                Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "money give " + p.getName() + " 15.0");
                ActionBar magmine = new ActionBar("§6§l+10.0 ✪ §a§l+5.0");
                magmine.sendToPlayer(p);
        }

 

 

Eu editei e dei um exemplo no comentário acima

Link para o comentário
Compartilhar em outros sites

4 minutos atrás, Mounton disse:

Eu editei e dei um exemplo no comentário acima

Então mesmo com o codigo abaixo ainda da de quebrar com o wg!

Spoiler

@EventHandler
    public void qndminerar(BlockBreakEvent e){
        if (e.isCancelled()) return;
        Player p = e.getPlayer();
        Block b = e.getBlock();

        if (b.getType() != Material.COAL_ORE) return;
        if (p.getWorld() == Bukkit.getWorld("mina")) {
            if (e.getPlayer().hasPermission("magma.minerar")){
                b.breakNaturally(new ItemStack(Material.COAL_ORE));
                Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "money give " + p.getName() + " 19.5");
                ActionBar magmine = new ActionBar("§6§l+13.0✪ §a§l+6.5");
                magmine.sendToPlayer(p);
        }

 

Link para o comentário
Compartilhar em outros sites

11 minutos atrás, JmDiego275 disse:

Então mesmo com o codigo abaixo ainda da de quebrar com o wg!

  Ocultar conteúdo

@EventHandler
    public void qndminerar(BlockBreakEvent e){
        if (e.isCancelled()) return;
        Player p = e.getPlayer();
        Block b = e.getBlock();

        if (b.getType() != Material.COAL_ORE) return;
        if (p.getWorld() == Bukkit.getWorld("mina")) {
            if (e.getPlayer().hasPermission("magma.minerar")){
                b.breakNaturally(new ItemStack(Material.COAL_ORE));
                Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "money give " + p.getName() + " 19.5");
                ActionBar magmine = new ActionBar("§6§l+13.0✪ §a§l+6.5");
                magmine.sendToPlayer(p);
        }

 

Muda a prioridade para

@EventHandler(priority=EventPriority.MONITOR)

e testa novamente.

Link para o comentário
Compartilhar em outros sites

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