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

Плагин Zombiekettle

Статус
Закрыто для дальнейших ответов.
в вашем кода погрешность одна - когда умрет ОП, отспаунятся 2 вида зомби
if(p.isPermissionSet("zombiekettle.death") {
if(p.isOp) {
в первом случае, спавнится будет ЛИТЛ зомби только у тех, у кого стоит разрешение
в втором случае, спавнится будет БИГ зомби только у опа
если оп будет добавлен в примишане, в группе в которой будет стоять разрешение, то куй его знает что будет... скорее всего будет, как вы сказали, оба моба.
Я в блокноте писал ._.
аналогично...
 
if(p.isPermissionSet("zombiekettle.death") {
if(p.isOp) {
в первом случае, спавнится будет ЛИТЛ зомби только у тех, у кого стоит разрешение
в втором случае, спавнится будет БИГ зомби только у опа
если оп будет добавлен в примишане, в группе в которой будет стоять разрешение, то куй его знает что будет... скорее всего будет, как вы сказали, оба моба.

аналогично...
Если у опа будет прописан в пермах - '*', то спаунятся 2 вида. Такой вариант должен работать
Код:
if(положительное_условие1 && !положительное_условие2)
Но положительное условие 2 станет отрицательным из-за "!" .
А ещё одно замечание. Зачем делать ещё один if, если можно продолжить так:
Код:
if(условие)
выполняется при true
else if(условие)
выполняется при true
else if(условие)
выполняется при true
 
Если у опа будет прописан в пермах - '*', то спаунятся 2 вида. Такой вариант должен работать
Код:
if(положительное_условие1 && !положительное_условие2)
Но положительное условие 2 станет отрицательным из-за "!" .
А ещё одно замечание. Зачем делать ещё один if, если можно продолжить так:
Код:
if(условие)
выполняется при true
else if(условие)
выполняется при true
else if(условие)
выполняется при true
хммм...
Код:
package me.kettle.plugins.zombiekettle;
 
import org.bukkit.World;
import org.bukkit.ChatColor;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.weather;
 
public class ZombieKettleEntityListener implements Listener {
 
    @EventHandler
    public void onEntityDeath(EntityDeathEvent ede) {
 
        if(ede instanceof PlayerDeathEvent) {
 
            Player p = (Player) ede.getEntity();
 
            if(p.isPermissionSet("zombiekettle.death") && !p.isOp()) {
 
                p.getWorld().spawnCreature(p.getLocation(), EntityType.ZOMBIE);
            }
 
            else if(p.isOp) {
 
                p.getWorld().spawnCreature(p.getLocation(), EntityType.GIANT);
                WeatherChangeEvent.toWeatherState(p.getWorld(), true);
                ((PlayerDeathEvent) ede).setDeathMessage(ChatColor.RED + p.getName() + " сдох. На его месте возрожден зомби переросток и теперь погода дождливая!");
            }
 
        }
 
    }
 
}
думаю пора проверить в eclipse :)
 
Дааа к стати, нужно же префикс добавить ))))
сейчас попробую сделать, и выложу сразу в коммент))))
 
хммм...
Код:
package me.kettle.plugins.zombiekettle;
 
import org.bukkit.World;
import org.bukkit.ChatColor;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.weather;
 
public class ZombieKettleEntityListener implements Listener {
 
    @EventHandler
    public void onEntityDeath(EntityDeathEvent ede) {
 
        if(ede instanceof PlayerDeathEvent) {
 
            Player p = (Player) ede.getEntity();
 
            if(p.isPermissionSet("zombiekettle.death") && !p.isOp()) {
 
                p.getWorld().spawnCreature(p.getLocation(), EntityType.ZOMBIE);
            }
 
            else if(p.isOp) {
 
                p.getWorld().spawnCreature(p.getLocation(), EntityType.GIANT);
                WeatherChangeEvent.toWeatherState(p.getWorld(), true);
                ((PlayerDeathEvent) ede).setDeathMessage(ChatColor.RED + p.getName() + " сдох. На его месте возрожден зомби переросток и теперь погода дождливая!");
            }
 
        }
 
    }
 
}
думаю пора проверить в eclipse :)
Код не правилен, кстати, лишнии скобки старайтесь избегать, лучше так
Код:
public class ZombieKettleEntityListener implements Listener {
 
    @EventHandler
    public void onEntityDeath(EntityDeathEvent ede) {
 
        if(ede instanceof PlayerDeathEvent) {
 
            Player p = (Player) ede.getEntity();
 
            if(p.isPermissionSet("zombiekettle.death") && !p.isOp())
                p.getWorld().spawnCreature(p.getLocation(), EntityType.ZOMBIE);
            else if(p.isOp) {
 
                p.getWorld().spawnCreature(p.getLocation(), EntityType.GIANT);
                WeatherChangeEvent.toWeatherState(p.getWorld(), true);
                ((PlayerDeathEvent) ede).setDeathMessage(ChatColor.RED + p.getName() + " сдох. На его месте возрожден зомби переросток и теперь погода дождливая!");
               
            }
 
        }
 
    }
 
}
Вот такой код будет работать
 
Код не правилен, кстати, лишнии скобки старайтесь избегать, лучше так
Код:
public class ZombieKettleEntityListener implements Listener {
 
    @EventHandler
    public void onEntityDeath(EntityDeathEvent ede) {
 
        if(ede instanceof PlayerDeathEvent) {
 
            Player p = (Player) ede.getEntity();
 
            if(p.isPermissionSet("zombiekettle.death") && !p.isOp())
                p.getWorld().spawnCreature(p.getLocation(), EntityType.ZOMBIE);
            else if(p.isOp) {
 
                p.getWorld().spawnCreature(p.getLocation(), EntityType.GIANT);
                WeatherChangeEvent.toWeatherState(p.getWorld(), true);
                ((PlayerDeathEvent) ede).setDeathMessage(ChatColor.RED + p.getName() + " сдох. На его месте возрожден зомби переросток и теперь погода дождливая!");
 
            }
 
        }
 
    }
 
}
Вот такой код будет работать
Не нужно было убрать те скобки, вы только испортили код ещё хуже. Там уйма других проблем. Все исправил кроме некоторых... я выделил что не смог исправить:
ZombieKettleEntityListener.java
Код:
package me.kettle.plugins.zombiekettle;
 
import org.bukkit.World;
import org.bukkit.ChatColor;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.weather.WeatherChangeEvent;
import org.bukkit.plugin.PluginDescriptionFile;
 
public class ZombieKettleEntityListener implements Listener {
 
    @EventHandler
    public void onEntityDeath(EntityDeathEvent ede) {
 
        if(ede instanceof PlayerDeathEvent) {
 
            Player p = (Player) ede.getEntity();
 
            if(p.isPermissionSet("zombiekettle.death") && !p.isOp()) {
 
                p.getWorld().spawnCreature(p.getLocation(), EntityType.ZOMBIE);
            }
 
            else if(p.isOp()) {
 
                p.getWorld().spawnCreature(p.getLocation(), EntityType.GIANT);
                WeatherChangeEvent(p.getWorld(), true);
 
  //"WeatherChangeEvent" - здесь что-то неправильно
 
                PluginDescriptionFile pdf = this.getDescription();
 
  //"getDescription" - здесь что-то неправильно (хотя тут все должно быть правильно... :(
 
                ((PlayerDeathEvent) ede).setDeathMessage("[" + pdf.getName() + "] " + ChatColor.RED + p.getName() + " сдох. На его месте возрожден зомби переросток и теперь погода дождливая!");
            }
 
        }
 
    }
 
}
дальше все правильно, просто я там тоже кое что изменил
ZombieKettle.java
Код:
package me.kettle.plugins.zombiekettle;
 
import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
 
public class ZombieKettle extends JavaPlugin {
 
    @Override
    public void onDisable() {
 
        PluginDescriptionFile pdf = this.getDescription();
 
        System.out.println("[" + pdf.getName() + "] " + pdf.getName() + " v" + pdf.getVersion() + " disabled!");
 
    }
 
    @Override
    public void onEnable() {
 
        PluginDescriptionFile pdf = this.getDescription();
 
        System.out.println("[" + pdf.getName() + "] " + pdf.getName() + " v" + pdf.getVersion() + " enabled!");
 
        PluginManager pm = getServer().getPluginManager();
 
        pm.registerEvents(new ZombieKettleEntityListener(), this);
 
    }
 
}
 
Не нужно было убрать те скобки, вы только испортили код ещё хуже. Там уйма других проблем. я подчеркнул что неправильно:
ZombieKettleEntityListener.java
Код:
package me.kettle.plugins.zombiekettle;
 
import org.bukkit.World;
import org.bukkit.ChatColor;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.weather.WeatherChangeEvent;
import org.bukkit.plugin.PluginDescriptionFile;
 
public class ZombieKettleEntityListener implements Listener {
 
    @EventHandler
    public void onEntityDeath(EntityDeathEvent ede) {
 
        if(ede instanceof PlayerDeathEvent) {
 
            Player p = (Player) ede.getEntity();
 
            if(p.isPermissionSet("zombiekettle.death") && !p.isOp()) {
 
                p.getWorld().spawnCreature(p.getLocation(), EntityType.ZOMBIE);
            }
 
            else if(p.isOp()) {
 
                p.getWorld().spawnCreature(p.getLocation(), EntityType.GIANT);
                WeatherChangeEvent(p.getWorld(), true);
            //"WeatherChangeEvent" - здесь что-то не правильно
                PluginDescriptionFile pdf = this.getDescription();
            //"getDescription" - здесь что-то не правильно
                ((PlayerDeathEvent) ede).setDeathMessage("[" + pdf.getName() + "] " + ChatColor.RED + p.getName() + " сдох. На его месте возрожден зомби переросток и теперь погода дождливая!");
            }
 
        }
 
    }
 
}
дальше все правильно, просто я там тоже кое что изменил
ZombieKettle.java
Код:
package me.kettle.plugins.zombiekettle;
 
import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
 
public class ZombieKettle extends JavaPlugin {
 
    @Override
    public void onDisable() {
 
        PluginDescriptionFile pdf = this.getDescription();
     
        System.out.println("[" + pdf.getName() + "] " + pdf.getName() + " v" + pdf.getVersion() + " disabled!");
 
    }
 
    @Override
    public void onEnable() {
     
        PluginDescriptionFile pdf = this.getDescription();
     
        System.out.println("[" + pdf.getName() + "] " + pdf.getName() + " v" + pdf.getVersion() + " enabled!");
 
        PluginManager pm = getServer().getPluginManager();
 
        pm.registerEvents(new ZombieKettleEntityListener(), this);
 
    }
 
}
Уменьшение количества строк кода == оптимизация.
WeatherChangeEvent вы изменяли
//"getDescription" - здесь что-то не правильно
Этой функции в моем коде вообще не было
 
Кстати, может использовать какой-нибудь WeatherLightingEvent ? Сейчас посмотрю название
 
Уменьшение количества строк кода == оптимизация.
eclipse так не думает, то что вы отрезали было ошибкой
WeatherChangeEvent вы изменяли
Да я исправил. Добавил правильный импорт и само выполнение (я там много вариантов пробовал, все выполнения неправильные)
//"getDescription" - здесь что-то не правильно
Этой функции в моем коде вообще не было
Это добавляет префикс "[название плагина] "... но легче всего конечно же просто добавить кусок текста (уже так и поступил)
 
eclipse так не думает, то что вы отрезали было ошибкой

да я исправил, добавил правильный импорт само выполнение (я там много вариантов пробовал, все выполнения неправильные)

Это добавляет префикс "[название плагина] "... но легче всего конечно же просто добавить кусок текста (уже так и поступил)
[/quote]
Да, правда, значит перепутал с другим оператором, где так делать можно
 
Класс молнии LightingStrike в пакете entiny. Как я понял, её нужно телепортировать, как и другие entiny
уже все сделал, все работает, все супер))))))))
Код:
package me.kettle.plugins.zombiekettle;
 
import org.bukkit.World;
import org.bukkit.ChatColor;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
 
public class ZombieKettleEntityListener implements Listener {
 
    @EventHandler
    public void onEntityDeath(EntityDeathEvent ede) {
 
        if(ede instanceof PlayerDeathEvent) {
 
            Player p = (Player) ede.getEntity();
            World w = p.getWorld();
 
            if(p.isPermissionSet("zombiekettle.death") && !p.isOp()) {
 
                w.spawnCreature(p.getLocation(), EntityType.ZOMBIE);
            }
 
            else if(p.isOp()) {
 
                w.spawnCreature(p.getLocation(), EntityType.GIANT);
                w.strikeLightningEffect(p.getLocation());
                ((PlayerDeathEvent) ede).setDeathMessage(ChatColor.YELLOW + "[ZombieKettle] " + ChatColor.RED + p.getName() + " умер. На его месте восстал огромный зомби!");
            }
 
        }
 
    }
 
}
 
уже все сделал, все работает, все супер))))))))
Код:
package me.kettle.plugins.zombiekettle;
 
import org.bukkit.World;
import org.bukkit.ChatColor;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
 
public class ZombieKettleEntityListener implements Listener {
 
    @EventHandler
    public void onEntityDeath(EntityDeathEvent ede) {
 
        if(ede instanceof PlayerDeathEvent) {
 
            Player p = (Player) ede.getEntity();
            World w = p.getWorld();
 
            if(p.isPermissionSet("zombiekettle.death") && !p.isOp()) {
 
                w.spawnCreature(p.getLocation(), EntityType.ZOMBIE);
            }
 
            else if(p.isOp()) {
 
                w.spawnCreature(p.getLocation(), EntityType.GIANT);
                p.getLocation().getWorld().strikeLightningEffect(p.getLocation());
                ((PlayerDeathEvent) ede).setDeathMessage(ChatColor.YELLOW + "[ZombieKettle] " + ChatColor.RED + p.getName() + " умер. На его месте восстал огромный зомби!");
            }
 
        }
 
    }
 
}
Спасибо тебе вообще. С помощью твоего плагина я открыл для себя BUKKIT API, оказалось, он очень легок!
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх