Войти или зарегистрироваться

Написал плагин но он ругается в консоль

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

Tyzun

Старожил
Баллы
153
Имя в Minecraft
_Tyzun_
Вот написал такой код:
Код:
import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Entity;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.*********ventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
 
import com.earth2me.essentials.Essentials;
 
 
import ru.tehkode.permissions.bukkit.PermissionsEx;
 
public class AntiGodPvp extends JavaPlugin implements Listener {
    public Essentials ess = null;
   
    @Override
    public void onEnable() {
        getServer().getPluginManager().registerEvents(this, this);
    }
    private boolean hasPerm(Player player, String permission){ 
        return PermissionsEx.getUser(player).has(permission);
 
    }
 
    @EventHandler
      public void onPlayerDamage(EntityDamageByEntityEvent event) {
        Entity defender = event.getEntity();
        Entity attacker = event.getDamager();
        if (((defender instanceof Player)) && ((attacker instanceof Player))) {
          Player pl = (Player)event.getDamager();
          if (pl.isFlying() && (!hasPerm(pl, "agp.allowflypvp"))) {
            event.setCancelled(true);
          }
        }
      }
 
      @EventHandler
      public void onPlayerDamageArrow(EntityDamageByEntityEvent event)
      {
        Entity defender = event.getEntity();
        Entity damager = event.getDamager();
 
        if (((defender instanceof Player)) && ((damager instanceof Arrow))) {
          damager = ((Arrow)damager).getShooter();
          if (((damager instanceof Player)) && (((Player)damager).isFlying()) && (!hasPerm((Player)damager, "agp.allowflyshot"))) {
            event.setCancelled(true);
          }
        }
       
}
   
      public boolean removeItemInHand(Player p, int item_id, int item_data, int item_amount){
          item_id = 373;
          item_amount = 1;
            if ((p.getItemInHand() != null)&&
                    (p.getItemInHand().getTypeId()==item_id)&&
                    (p.getItemInHand().getAmount()>=item_amount)&&
                    ((item_data<0)||(item_data==p.getItemInHand().getData().getData()))){
 
                if (p.getItemInHand().getAmount()>item_amount) p.getItemInHand().setAmount(p.getItemInHand().getAmount()-item_amount);
                else p.setItemInHand(new ItemStack (Material.AIR));
 
                return true;
            }
            return false;
 
        }
     
     
         
 
      @EventHandler
      public void onPlayerDamage2(EntityDamageByEntityEvent event) {
        Entity defender = event.getEntity();
        Entity attacker = event.getDamager();
        if (((defender instanceof Player)) && ((attacker instanceof Player))) {
          Player pl = (Player)event.getDamager();
          if (pl.getGameMode() == GameMode.CREATIVE && (!hasPerm(pl, "agp.allowcreatpvp"))) {
            event.setCancelled(true);
          }
        }
      }
      @EventHandler
      public void onPlayerDamageArrow2(EntityDamageByEntityEvent event)
      {
        Entity defender = event.getEntity();
        Entity damager = event.getDamager();
 
        if (((defender instanceof Player)) && ((damager instanceof Arrow))) {
          damager = ((Arrow)damager).getShooter();
          if ((damager instanceof Player))
          {
            if (((HumanEntity)damager).getGameMode() == GameMode.CREATIVE && (!hasPerm((Player)damager, "agp.allowcreatshot"))) {
              event.setCancelled(true);
            }
          }
        }
      }
     
      @EventHandler
      public void onPlayerDamage3(EntityDamageByEntityEvent event) {
        Entity defender = event.getEntity();
        Entity attacker = event.getDamager();
        if (((defender instanceof Player)) && ((attacker instanceof Player))) {
          Player pl = (Player)event.getDamager();
          if (ess.getUser(attacker).isGodModeEnabled() && (!hasPerm(pl, "agp.allowgod"))) {
            event.setCancelled(true);
          }
        }
      }
 
      @EventHandler
      public void onPlayerDamageArrow3(EntityDamageByEntityEvent ev)
      {
        Entity defender = ev.getEntity();
        Entity damager = ev.getDamager();
 
        if (((defender instanceof Player)) && ((damager instanceof Arrow))) {
          damager = ((Arrow)damager).getShooter();
          if ((damager instanceof Player))
          {
            if (ess.getUser(damager).isGodModeEnabled() && (!hasPerm((Player)damager, "agp.allowgod"))) {
              ev.setCancelled(true);
            }
          }
        }
      }
     
      }
Все работает, но когда кто-то пытается нанести урон кому-то в креативе или флае или годе то консоль загаживается разнообразными ошибками. Хоть и все пашет, но неприятно все же, в чем дело быть может?
 
Консоль пишет ошибки по котором можно многое сказать - да за чем их сюда пихать, лучше анализировать код полностью.
 
Консоль пишет ошибки по котором можно многое сказать - да за чем их сюда пихать, лучше анализировать код полностью.

если быть точнее это Java пишет ошибку, а точнее пишет трассировку в которой указана строка с ошибкой и класс который её вызвал.
так что @Tyzun, без трассировки вам не помогут тут (разве что "за***ты", которые по коду могут сказать об ошибке (ну или те кто не поленился скомпилировать ваш код))
 
Ну для начала пермишены проверяются player.hasPermission(String permission)
 
Не понимаю для чего Вы обращаетесь к PEX?
 
Не понимаю для чего Вы обращаетесь к PEX?

В старом учебнике DmitriyMX написано, что обращаться надо к PEX (хотя уже давно обращаться можно к серверу). Если интересно то вот.
P.S. Знаю об этом потому, что сам совсем не давно начал писать плагины.
 
@TechnicianBear, ну в общем уже тогда не надо было. Просто проверяя пермишены через PEX вы автоматически лишаете плагин совместимости с кучей других плагинов.
Я к примеру предпочитаю bPermissions.
Если нужно делать что-то специфическое, то лучше действовать через Vault.
 
В старом учебнике DmitriyMX написано, что обращаться надо к PEX (хотя уже давно обращаться можно к серверу). Если интересно то вот.
P.S. Знаю об этом потому, что сам совсем не давно начал писать плагины.
Именно по этому уроку я и делаю пермы. Ладно. буду искать другие уроки.
 
Назад
Верх