Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Создал плагин, а он не работает...

Тема в разделе "Разработка плагинов для новичков", создана пользователем fswr33, 21 июл 2015.

  1. Автор темы
    fswr33

    fswr33 Новичок Пользователь

    Баллы:
    21
    Всем привет, я написал простейший плагин на дюп, но почему-то он не запускается (в консоли ни малейшего намека на его существование). Экспортировал вроде-бы правильно

    Вот код:
    Код:
    package ru.minechest.dupe;
    
    
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.command.ConsoleCommandSender;
    import org.bukkit.event.Listener;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.entity.Player;
    import org.bukkit.inventory.ItemStack;
    
    public class Main extends JavaPlugin implements Listener {
         ConsoleCommandSender console = getServer().getConsoleSender();
         String msgprefix = "[Prefix] ";
         public void onEnable() {
             console.sendMessage("MineChestDupe plugin has been enabled!");
         }
        public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
             if ((sender instanceof Player)) {
                 Player player = (Player)sender;
                 if (command.getLabel().equalsIgnoreCase("dupe")) {
                   if (args.length == 0) {
                       if (player.hasPermission("MineChestDupe.use")) {
                           ItemStack item = player.getItemInHand();
                           if (item.getAmount() == 64) {
                               sender.sendMessage(msgprefix + "У вас уже стак");
                           }
                           else if (item.getAmount() == 0) {
                               sender.sendMessage(msgprefix + "У вас в руке ничего нет");
                           }
                           else {
                               item.setAmount(64);
                               sender.sendMessage(msgprefix + "Вы успешно дюпнули");
                           }
                       }
                       else {
                           sender.sendMessage(msgprefix + "Вам нельзя дюпать!");
                       }
                   }
                 }
             }
             return true;
        }
    } 


    P.S. На момент написания первой строчки я не знал ничерта
     
    Последнее редактирование: 21 июл 2015
  2. Хостинг MineCraft
    <
  3. _EnderWorld_

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

    Баллы:
    78
    Имя в Minecraft:
    Steve
    А ты создал plugin.yml ?
     
  4. Автор темы
    fswr33

    fswr33 Новичок Пользователь

    Баллы:
    21
    да

    name: MineChestDupe
    main: ru.minechest.dupe.Main
    version: 1.0
    authors:
    - MineChest
    - CapSERG
    description: Dupe
    commands:
    dupe:
    description: Dupe is real
    usage: /dupe for dupe.
     
  5. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Пользуйся тегами CODE=Java и CODE=Yaml, соответственно, и не надо будет делать скрины чтобы могли читать код.
    Ошибки в консоли?

    Попробуй добавить @Override перед onEnable и nCommand.
     
  6. Автор темы
    fswr33

    fswr33 Новичок Пользователь

    Баллы:
    21
    Наоборот нет ни ошибок, ни сообщения о запуске
     
  7. CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Ты попробовал добавить @Override?
     
  8. MrTrojan

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

    Баллы:
    98
    Skype:
    mrtrojan.ru
    Имя в Minecraft:
    MrTrojan
    Возможно он забыл в onEnable и забыл ещё onDisable:
    Код:
    Bukkit.getPluginManager().registerEvents(this, this)
    [DOUBLEPOST=1437455569,1437455281][/DOUBLEPOST]Я сам ещё кое-что, возможно не правильно.

    Код:
    package net.mrtrojan;
    
    import org.bukkit.Bukkit;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.command.ConsoleCommandSender;
    import org.bukkit.entity.EntityType;
    import org.bukkit.entity.Player;
    import org.bukkit.event.Listener;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class MTDupe extends JavaPlugin implements Listener {
       
        ConsoleCommandSender console = getServer().getConsoleSender();
        String msgprefix = "[Dupe] ";
       
        @Override
        public void onEnable() {
            Bukkit.getPluginManager().registerEvents(this, this);
        }
       
        @Override
        public void onDisable() {
            Bukkit.shutdown();
        }
       
        @SuppressWarnings("deprecation")
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if(cmd.getName().equalsIgnoreCase("dupe")) {
                if(sender.equals(EntityType.PLAYER)) {
                    if(sender.hasPermission("MineChestDupe.use")) {
                        if(args.length == 0) {
                            Player p = (Player) sender;
                            ItemStack item = p.getItemInHand();
                            int amount = item.getAmount();
                            switch(amount) {
                                case 0:
                                    item.setAmount(64);
                                    p.updateInventory();
                                    p.sendMessage(msgprefix + "Вещь успешно дюпнута!");
                                    break;
                                case 64:
                                    p.sendMessage(msgprefix + "У вас же стак!");
                                    return true;
                            }
                        }
                    } else {
                        sender.sendMessage(msgprefix + "У вас нет прав для дюпа!");
                        return false;
                    }
                } else {
                    System.out.println("Команду можно выполнить только в игре!");
                    return false;
                }
            }
            return false;
        }
    }
    
     
  9. _EnderWorld_

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

    Баллы:
    78
    Имя в Minecraft:
    Steve
    У тебя сколько class создано?


    Если несколько, попробуй так добавить в главный класс onEnable
    Код:
    Bukkit.getPluginManager().registerEvents(Название class файла, this)
     
  10. Rider3217

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

    Баллы:
    98
    Имя в Minecraft:
    Planet0111
    Зачем ему это? у него нет ивентов вообще.[DOUBLEPOST=1437460196,1437459906][/DOUBLEPOST]Можно попробовать добавить @Override сюда:

    Код:
     @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    Потом вот ещё:

    Код:
    switch(amount) {
                                case 0: //Почему тут 0? Разве игрок дюпает воздух?
                                    item.setAmount(64);
                                    p.updateInventory();
                                    p.sendMessage(msgprefix + "Вещь успешно дюпнута!");
                                    break;
                                case 64:
                                    p.sendMessage(msgprefix + "У вас же стак!");
                                    return true;
                            }
     
  11. MrTrojan

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

    Баллы:
    98
    Skype:
    mrtrojan.ru
    Имя в Minecraft:
    MrTrojan
    Сейчас исправлю.[DOUBLEPOST=1437460605][/DOUBLEPOST]Поправил немного.
    Код:
    package net.mrtrojan;
    
    import org.bukkit.Bukkit;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.command.ConsoleCommandSender;
    import org.bukkit.entity.EntityType;
    import org.bukkit.entity.Player;
    import org.bukkit.event.Listener;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class MTDupe extends JavaPlugin implements Listener {
       
        ConsoleCommandSender console = getServer().getConsoleSender();
        String msgprefix = "[Dupe] ";
       
        @Override
        public void onEnable() {
            Bukkit.getPluginManager().registerEvents(this, this);
        }
       
        @Override
        public void onDisable() {
            Bukkit.shutdown();
        }
       
        @SuppressWarnings({ "deprecation", "unused" })
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if(cmd.getName().equalsIgnoreCase("dupe")) {
                if(sender.equals(EntityType.PLAYER)) {
                    if(sender.hasPermission("MineChestDupe.use")) {
                        if(args.length == 0) {
                            Player p = (Player) sender;
                            ItemStack item = p.getItemInHand();
                            int amount = item.getAmount();
                           
                            if(item != null) {
                                switch(amount) {
                                    case 1:
                                        item.setAmount(64);
                                        p.updateInventory();
                                        p.sendMessage(msgprefix + "Вещь успешно дюпнута!");
                                        break;
                                    case 64:
                                        p.sendMessage(msgprefix + "У вас же стак!");
                                    default:
                                        item.setAmount(64);
                                        p.updateInventory();
                                        p.sendMessage(msgprefix + "Вещь успешно дюпнута!");
                                }
                            } else {
                                p.sendMessage(msgprefix + "У вас в руке ничего нет!");
                                return false;
                            }
                        }
                    } else {
                        sender.sendMessage(msgprefix + "У вас нет прав для дюпа!");
                        return false;
                    }
                } else {
                    System.out.println("Команду можно выполнить только в игре!");
                    return false;
                }
            }
            return false;
        }
    }
    
     
  12. Rider3217

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

    Баллы:
    98
    Имя в Minecraft:
    Planet0111
    Почти всё правильно.
    Вот твой код, но уже работающий:

    Код:
    package net.mrtrojan;
    
    import org.bukkit.Bukkit;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.command.ConsoleCommandSender;
    import org.bukkit.entity.EntityType;
    import org.bukkit.entity.Player;
    import org.bukkit.event.Listener;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class MTDupe extends JavaPlugin implements Listener {
        String msgprefix = "[Dupe] ";
     
        public void onEnable() {
        }
     
        public void onDisable() {
        }
     
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if(cmd.getName().equalsIgnoreCase("dupe")) {
                if(sender.equals(EntityType.PLAYER)) {
                    if(sender.hasPermission("MineChestDupe.use")) {
                        if(args.length == 0) {
                            Player p = (Player) sender;
                            ItemStack item = p.getItemInHand();
                            int amount = item.getAmount();
                         
                            if(item != null) {
                                switch(amount) {
                                    case 64:
                                        p.sendMessage(msgprefix + "У вас же стак!");
                                    default:
                                        item.setAmount(64);
                                        p.updateInventory();
                                        p.sendMessage(msgprefix + "Вещь успешно дюпнута!");
                                }
                            } else {
                                p.sendMessage(msgprefix + "У вас в руке ничего нет!");
                                return false;
                            }
                        }
                    } else {
                        sender.sendMessage(msgprefix + "У вас нет прав для дюпа!");
                        return false;
                    }
                } else {
                    System.out.println("Команду можно выполнить только в игре!");
                    return false;
                }
            }
            return false;
        }
    }
    
     
  13. TheMrDanchik

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

    Баллы:
    66
    Имя в Minecraft:
    TheMrDanchik
    Зачем p.updateInventory()?
    Надо бы p.setItemInHand(item).
    Так же не помешало бы заменить 64 на item.getMaxStackSize()
     
  14. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Баллы:
    173
    Skype:
    RikkiLooh
    Имя в Minecraft:
    RubukkitDniwe
    Сервер не хочет чтобы школота на нём дюпала.
     
  15. Rider3217

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

    Баллы:
    98
    Имя в Minecraft:
    Planet0111
    Надо бы p.setItemInHand(item) - зачем?
    item.getMaxStackSize() зачем мне ещё и максимальный размер получать? для сервера проще будет если сразу 64 вписать.
     
  16. LomNar

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

    Баллы:
    78
    Skype:
    radius981
    Имя в Minecraft:
    LomNar
    Потому что хочу и могу и ни кто мне не запретит
     
  17. _EnderWorld_

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

    Баллы:
    78
    Имя в Minecraft:
    Steve
    Чтобы инвентарь обновился после ввода команды.
     
  18. TheMrDanchik

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

    Баллы:
    66
    Имя в Minecraft:
    TheMrDanchik
    Как же дюпнутый предмет попадет в руку?

    Что значит "для сервера проще"? Нагрузка меньше что ли? Она в любом случае мизерная.
    Хозяин, конечно, барин, но как-то неприятно когда, например, стакаются в 64 штуки нестакабельные мечи. Потом при неаккуратном перекладывании такой стак может разделяться. Да и урон будет считаться для всех 64-х мечей, что опять же неудобно

    Так а зачем его обновлять в данном случае?
     
  19. Rider3217

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

    Баллы:
    98
    Имя в Minecraft:
    Planet0111
    Предмет уже вруке, и его просто стакают.
    Всё же нагрузки больше от вашего способа, да и я думаю что в этом и суть дюпа, дюпать всё что в руку попадает.
    А p.updateInventory() вообще там не нужен.
     
  20. TheMrDanchik

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

    Баллы:
    66
    Имя в Minecraft:
    TheMrDanchik
    Стакают ItemStack item

    Я не спорю, что больше. Но эта, с позволения сказать, "нагрузка" вряд ли хоть как-то повлияет на сервер.

    Ну, тут уж, как говорится, "На вкус и цвет.. ". Хотя я считаю, что дюп в любом случае - зло
     
  21. LomNar

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

    Баллы:
    78
    Skype:
    radius981
    Имя в Minecraft:
    LomNar
    А ты по думал о бедных школьниках? Если они не будут дюпать у них будет плохое настроение, следовательно станут очень нервными, пропадёт аппетит и уроки перестанут учить. Так что мы спасаем мир!
     

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