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

То есть это правильно:
Ни разу. Но это будет работать.

Вот то, что у меня получилось:
Java:
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 + "Ваш уровень слишком высок для атаки этого игрока.");
        }
    }
}

Нужны, как я по твоему буду cfg из другого класса вызывать без static?
Передавать ссылку в класс, не?
 
Ни разу. Но это будет работать.

Вот то, что у меня получилось:
Java:
package club.without.dereku.pvpbylevel;
    @Override
    public void onEnable() {
        this.saveDefaultConfig();
        this.levelDifference = this.getConfig().getInt("levelDifference", 20);
        this.getServer().getPluginManager().registerEvents(this, this);
    }
Это конечно хорошо, но, нету создания(автоматического) конфига.
this.levelDifference = this.getConfig().getInt("levelDifference", 20); ничего не возвратит...

Передавать ссылку в класс, не?
А так разве можно? Ну и если это так, то зачем нужен static?
 
Это конечно хорошо, но, нету создания(автоматического) конфига.
this.levelDifference = this.getConfig().getInt("levelDifference", 20); ничего не возвратит...
this.saveDefaultConfig(); .
И даже если нету никакого значения, вернётся 20, т.к. я его указал как дэфолтное значение.
А так разве можно? Ну и если это так, то зачем нужен static?
Можно. static нужен для таких вещей, которые не нужно инициализировать из одной копии класса в другой. Т.е. если у тебя есть лист с данными, которые никогда не меняются, то лучше будет его объявить финальной статической переменной (лол, переменной), т.е.
Java:
public static final List someData = Arrays.asList(data);
А вообще понимание когда стоит использовать статические ссылки приходит с опытом. Которого у вас нету :trf:
 
Вместо каких this? Ты про что?
Ну в твоем классе ты пишешь:
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!");
Зачем?
 
Ну в твоем классе ты пишешь:
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!");
Зачем?
Ты дурачек?
 
Ну в твоем классе ты пишешь:
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!");
Зачем?
Лично мне быстрее написать "this.con" и выбрать нужное мне, чем тыкать Ctrl+Space и искать что либо.
Да и, имхо, так красивее выглядит 😁
 
Ну а если и так, то все-равно не докажешь. Хаха
Человек, я не хочу тебя огорчать, НО, то что твой декомпилятор решил назвать моим кодом - не мой код.
Это то как решил его показать тебе твой декомпилятор.
9d612798c00c.png

P.S. И декомпилятор у тебя дурачек тоже, jd-gui декомпилирует без всех этих "this" каких-то бесполезных кастов, и т.д..
 
Ты разделил 20 строк кода на два класса.
#доказательства #изи #какМалыша #неНапрягаясь
Ну и шо?
Человек, я не хочу тебя огорчать, НО, то что твой декомпилятор решил назвать моим кодом - не мой код.
Это то как решил его показать тебе твой декомпилятор.
9d612798c00c.png

P.S. И декомпилятор у тебя дурачек тоже, jd-gui декомпилирует без всех этих "this" каких-то бесполезных кастов, и т.д..
Это не я виноват, это все он
 
Ладно, я пездун3000, jd-gui тоже декомпилит не совсем правильно...
Но все-равно лучше чем твой!
80d3313857a7.png
 
Ни разу. Но это будет работать.

Вот то, что у меня получилось:
Java:
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 + "Ваш уровень слишком высок для атаки этого игрока.");
        }
    }
}

Передавать ссылку в класс, не?
1 совсем глупый вопрос.
Есть ли какая-либо разница при сравнении EntityType или Material?
Например, я всегда сравниваю через ==:
Java:
if (Material.GRASS == Material.GRASS)
Ты сравнил EntityType через .equals:
Java:
if (EntityType.PLAYER.equals(EntityType.PLAYER) {
Собственно, вопрос:
Разве через .equals не сравниваются лишь строковые значения? И почему equals вместо "=="?
 
Разве через .equals не сравниваются лишь строковые значения?
Через equals сравниваются объекты, у которых вроде бы как есть hashCode(), но точно не могу сказать, ибо доки джавы не читаю (а надо бы).
Т.е.
Java:
JavaPlugin plugin = this;
boolean isEquals = plugin.equals(this); //true
И почему equals вместо "=="?
Пятка левой ноги так захотела. А я не люблю отказывать.
 
Назад
Верх