Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Использование API другого плагина

Статус
Закрыто для дальнейших ответов.

kirr9999

Старожил
Пользователь
Баллы
103
Всем привет. Решил написать небольшой плагин, использующий API плагина iDisguise. Вот код :
Код:
package description.disguiseadd;

import org.bukkit.ChatColor;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.entity.ThrownPotion;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.PotionSplashEvent;
import org.bukkit.plugin.java.JavaPlugin;

import de.robingrether.idisguise.api.DisguiseAPI;

public class DisguiseExPlugin extends JavaPlugin implements Listener {
    private DisguiseAPI api;
   
    public void onEnable() {
        api = getServer().getServicesManager().getRegistration(DisguiseAPI.class).getProvider();
        getServer().getPluginManager().registerEvents(this, this);
    }
   
    @EventHandler(priority = EventPriority.NORMAL)
    public void onEntityDamage(EntityDamageEvent e) {
        if(e.isCancelled()) return;
        if (e.getEntity() instanceof Player){
            if (e instanceof EntityDamageByEntityEvent) {
                Player damager = null;
                boolean cancel = false;
                EntityDamageByEntityEvent edbye = (EntityDamageByEntityEvent) e;
                if (edbye.getDamager() instanceof Projectile){
                    Projectile projectile = (Projectile) edbye.getDamager();
                    if (projectile.getShooter() instanceof Player) {
                        damager = (Player) projectile.getShooter();
                        cancel = true;
                    }
                } else if (edbye.getDamager() instanceof Player) {
                    damager = (Player) edbye.getDamager();
                    cancel = true;
                }
                if (cancel && api.isDisguised(damager) && !damager.hasPermission("disguiseex.ignore")) {
                    damager.sendMessage(ChatColor.RED+"Вы не можете бить игрока будучи замаскированным!");
                    e.setCancelled(true);
                }
            }
        }
    }
   
    @EventHandler(priority = EventPriority.NORMAL)
    public void PotionHit(PotionSplashEvent event) {
        if (event.isCancelled()) return;
        ThrownPotion potion = event.getPotion();
        if (potion.getShooter() instanceof Player) {
            Player damager = (Player) potion.getShooter();
            for(LivingEntity entity : event.getAffectedEntities()) {
                if (entity instanceof Player) {
                    if (!((Player) entity).equals(damager)) {
                        if (api.isDisguised(damager) && !damager.hasPermission("disguiseex.ignore")) {
                            damager.sendMessage(ChatColor.RED+"Вы не можете наносить урон игроку будучи замаскированным!");
                            event.setCancelled(true);
                        }
                    }
                }
            }
        }
    }
   
    @EventHandler(priority = EventPriority.NORMAL)
    public void onBlockPlace (BlockPlaceEvent e) {
        if (e.isCancelled()) return;
        Player player = e.getPlayer();
        if (api.isDisguised(player) && !player.hasPermission("disguiseex.ignore")) {
            player.sendMessage(ChatColor.RED+"Вы не можете строить будучи замаскированным!");
            e.setCancelled(true);
        }
    }
   
    @EventHandler(priority = EventPriority.NORMAL)
    public void onBlockBreak (BlockBreakEvent e) {
        if (e.isCancelled()) return;
        Player player = e.getPlayer();
        if (api.isDisguised(player) && !player.hasPermission("disguiseex.ignore")) {
            player.sendMessage(ChatColor.RED+"Вы не можете ломать блоки будучи замаскированным!");
            e.setCancelled(true);
        }
    }
   

}
При запуске этого плагина выводит такую вот ошибку:
Код:
2014-09-26 17:05:49 [SEVERE] Error occurred while enabling DisguiseExtention v1.0 (Is it up to date?)
java.lang.NullPointerException
    at description.disguiseadd.DisguiseExPlugin.onEnable(DisguiseExPlugin.java:24)
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:217)
    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:467)
    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:383)
    at org.bukkit.craftbukkit.v1_6_R3.CraftServer.loadPlugin(CraftServer.java:279)
    at org.bukkit.craftbukkit.v1_6_R3.CraftServer.enablePlugins(CraftServer.java:261)
    at net.minecraft.server.MinecraftServer.func_71243_i(MinecraftServer.java:522)
    at net.minecraft.server.MinecraftServer.func_71222_d(MinecraftServer.java:486)
    at net.minecraft.server.MinecraftServer.func_71247_a(MinecraftServer.java:429)
    at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:225)
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:637)
    at net.minecraft.server.ThreadMinecraftServer.run(SourceFile:583)
Подскажите, пожалуйста, что я делаю не так?
 
В plugin.yml нужно в softdepend прописывать названия всех тебе нужных плагнов, чтобы твой включался только после их готовности.
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх