1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Идея Пвп по уровням предмета.

Тема в разделе "Запросы на разработку плагинов", создана пользователем Slorikworld, 21 июн 2016.

  1. Dereku

    Dereku Старожил Пользователь

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Ни разу. Но это будет работать.

    Вот то, что у меня получилось:
    Код:
    package club.without.dereku.pvpbylevel;
    
    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.EntityDamageByEntityEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    /**
     *
     * @author Dereku
     */
    public class PvPByLevel extends JavaPlugin implements Listener {
    
        private int levelDifference;
       
        @Override
        public void onEnable() {
            this.saveDefaultConfig();
            this.levelDifference = this.getConfig().getInt("levelDifference", 20);
            this.getServer().getPluginManager().registerEvents(this, this);
        }
       
        @EventHandler
        public void onDamage(EntityDamageByEntityEvent event) {
            if (!event.getDamager().getType().equals(EntityType.PLAYER) && !event.getEntity().getType().equals(EntityType.PLAYER)) {
                return;
            }
           
            Player damager = (Player) event.getDamager();
            Player reciever = (Player) event.getEntity();
           
            int difference = Math.max(damager.getLevel(), reciever.getLevel()) - Math.min(damager.getLevel(), reciever.getLevel());
           
            if (difference > this.levelDifference) {
                event.setCancelled(true);
                damager.sendMessage(ChatColor.RED + "Ваш уровень слишком высок для атаки этого игрока.");
            }
        }
    }

    Передавать ссылку в класс, не?
     
  2. _MediaNik_

    _MediaNik_ Активный участник Пользователь

    Баллы:
    76
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    Это конечно хорошо, но, нету создания(автоматического) конфига.
    this.levelDifference = this.getConfig().getInt("levelDifference", 20); ничего не возвратит...
    А так разве можно? Ну и если это так, то зачем нужен static?
     
  3. Dereku

    Dereku Старожил Пользователь

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    this.saveDefaultConfig(); .
    И даже если нету никакого значения, вернётся 20, т.к. я его указал как дэфолтное значение.
    Можно. static нужен для таких вещей, которые не нужно инициализировать из одной копии класса в другой. Т.е. если у тебя есть лист с данными, которые никогда не меняются, то лучше будет его объявить финальной статической переменной (лол, переменной), т.е.
    Код:
    public static final List someData = Arrays.asList(data);
    А вообще понимание когда стоит использовать статические ссылки приходит с опытом. Которого у вас нету :trf:
     
  4. Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Вместо каких this? Ты про что?
     
  5. _MediaNik_

    _MediaNik_ Активный участник Пользователь

    Баллы:
    76
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    Ну в твоем классе ты пишешь:
    this.configFile = new File(this.getDataFolder().getAbsolutePath(), "config.yml");
    this.config = YamlConfiguration.loadConfiguration((File)this.configFile);
    this.getServer().getPluginManager().registerEvents((Listener)this, (Plugin)this);
    this.getLogger().log(Level.INFO, "Enabled!");
    Зачем?
     
  6. Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Ты дурачек?
     
  7. Dereku

    Dereku Старожил Пользователь

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Лично мне быстрее написать "this.con" и выбрать нужное мне, чем тыкать Ctrl+Space и искать что либо.
    Да и, имхо, так красивее выглядит :D
     
  8. _MediaNik_

    _MediaNik_ Активный участник Пользователь

    Баллы:
    76
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    Ну а если и так, то все-равно не докажешь. Хаха
     
  9. Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Человек, я не хочу тебя огорчать, НО, то что твой декомпилятор решил назвать моим кодом - не мой код.
    Это то как решил его показать тебе твой декомпилятор.
    [​IMG]
    P.S. И декомпилятор у тебя дурачек тоже, jd-gui декомпилирует без всех этих "this" каких-то бесполезных кастов, и т.д..
     
  10. Dereku

    Dereku Старожил Пользователь

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Ты разделил 20 строк кода на два класса.
    #доказательства #изи #какМалыша #неНапрягаясь
     
  11. _MediaNik_

    _MediaNik_ Активный участник Пользователь

    Баллы:
    76
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    Ну и шо?
    Это не я виноват, это все он
     
  12. Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Ладно, я пездун3000, jd-gui тоже декомпилит не совсем правильно...
    Но все-равно лучше чем твой!
    [​IMG]
     
  13. Dereku

    Dereku Старожил Пользователь

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    fernflower
    2016 08 03_13-52-08.png
     
  14. Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
  15. Dereku

    Dereku Старожил Пользователь

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Мамка твоя щит. Лично я не хочу гадать откуда вызывается тот или иной метод.
     
  16. Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Сам такой(9((
     
  17. _MediaNik_

    _MediaNik_ Активный участник Пользователь

    Баллы:
    76
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    НЕАДЕКВАТ!!!! МОДЕРОВ СУДУ
     
  18. CoolBoy

    CoolBoy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    Xezard
    1 совсем глупый вопрос.
    Есть ли какая-либо разница при сравнении EntityType или Material?
    Например, я всегда сравниваю через ==:
    Код:
    if (Material.GRASS == Material.GRASS)
    
    Ты сравнил EntityType через .equals:
    Код:
    if (EntityType.PLAYER.equals(EntityType.PLAYER) {
    
    Собственно, вопрос:
    Разве через .equals не сравниваются лишь строковые значения? И почему equals вместо "=="?
     
  19. Dereku

    Dereku Старожил Пользователь

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Через equals сравниваются объекты, у которых вроде бы как есть hashCode(), но точно не могу сказать, ибо доки джавы не читаю (а надо бы).
    Т.е.
    Код:
    JavaPlugin plugin = this;
    boolean isEquals = plugin.equals(this); //true
    Пятка левой ноги так захотела. А я не люблю отказывать.
     
  20. Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Я Енумы всегда через "==" сравниваю..
     

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