Может и можно сказать, что плагин сам по себе неплохой, интересная задумка, реализация и так далее. Но если мы заглянем внутрь, то наше мнение сразу же поменяется.
Во-первых, зачем ты создаешь синглтон, если ни где его не используешь?
Java:
private FileConfiguration config;
public void onEnable() {
instance = this;
saveDefaultConfig();
this.config = getConfig();
getServer().getPluginManager().registerEvents(new SpecListener(this), (Plugin)this);
getLogger().info("Made with love by TiLZetnick for LuskDev");
}
public static LuskSpec getInstance() {
return instance;
}
Ну ладно. Вопрос в том либо по незнайке либо я не могу понять почему. Если у тебя есть синглтон, то-есть методом getInstance(); ты можешь получить экземпляр главного класса, но вместо этого в классе SpecListener ты создаешь конструктор главного класса.
Java:
private final LuskSpec plugin;
public SpecListener(LuskSpec plugin) {
this.plugin = plugin;
}
Ну бог с ним, может, действительно по незнайке. Идем дальше. Если ты уж создал синглтон, то соизволил бы раскидать методы по классам например тот же метод onCommand, который редко когда бывает в главном классе. Может GPT код, не знаю. Ладно, ок. Но мне стало не по себе когда в этом методе ты создаешь переменную типа Player, присваивая ей значение перемененной типа CommandSender и уже через переменную типа Player вызываешь метод hasPermission();. Главный вопрос - зачем? Когда и от переменной типа CommandSender можно вызвать этот же метод.
Java:
Player player = (Player)sender;
if (!player.hasPermission(getPermission("specUse"))) {
player.sendMessage(colorize("&c));
return true;
}
Также удивил метод colorize, ну может этот плагин был создан еще до версии 1.16, сильно сомневаюсь, но, на минуточку, HEX был добавлен в майнкрафт 5 лет назад, грех не заменить этот древний метод на что-то новее.
Java:
public String colorize(String text) {
return ChatColor.translateAlternateColorCodes('&', text);
}
Ну, так сказать, прошелся по мелочам, остальное тебе могут подсказать более опытные разработчики