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

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

fswr33

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

Вот код:
Java:
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.*********ventory.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. На момент написания первой строчки я не знал ничерта
 
Последнее редактирование:
Пользуйся тегами CODE=Java и CODE=Yaml, соответственно, и не надо будет делать скрины чтобы могли читать код.
Ошибки в консоли?

Попробуй добавить @Override перед onEnable и nCommand.
 
Возможно он забыл в onEnable и забыл ещё onDisable:
Java:
Bukkit.getPluginManager().registerEvents(this, this)

Я сам ещё кое-что, возможно не правильно.

Java:
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.*********ventory.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;
    }
}
 
Наоборот нет ни ошибок, ни сообщения о запуске
У тебя сколько class создано?


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


Если несколько, попробуй так добавить в главный класс onEnable
JavaScript:
Bukkit.getPluginManager().registerEvents(Название class файла, this)
Зачем ему это? у него нет ивентов вообще.
Можно попробовать добавить @Override сюда:

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

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

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

JavaScript:
switch(amount) {
                            case 0: //Почему тут 0? Разве игрок дюпает воздух?
                                item.setAmount(64);
                                p.updateInventory();
                                p.sendMessage(msgprefix + "Вещь успешно дюпнута!");
                                break;
                            case 64:
                                p.sendMessage(msgprefix + "У вас же стак!");
                                return true;
                        }
Сейчас исправлю.
Поправил немного.
Java:
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.*********ventory.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;
    }
}
 
Сейчас исправлю.
Поправил немного.
Java:
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.*********ventory.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;
    }
}
Почти всё правильно.
Вот твой код, но уже работающий:

Java:
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.*********ventory.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;
    }
}
 
Сервер не хочет чтобы школота на нём дюпала.
 
Зачем p.updateInventory()?
Надо бы p.setItemInHand(item).
Так же не помешало бы заменить 64 на item.getMaxStackSize()
Надо бы p.setItemInHand(item) - зачем?
item.getMaxStackSize() зачем мне ещё и максимальный размер получать? для сервера проще будет если сразу 64 вписать.
 
Надо бы p.setItemInHand(item) - зачем?
item.getMaxStackSize() зачем мне ещё и максимальный размер получать? для сервера проще будет если сразу 64 вписать.
Потому что хочу и могу и ни кто мне не запретит
 
p.setItemInHand(item) - зачем?
Как же дюпнутый предмет попадет в руку?

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

Чтобы инвентарь обновился после ввода команды.
Так а зачем его обновлять в данном случае?
 
Как же дюпнутый предмет попадет в руку?


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


Так а зачем его обновлять в данном случае?
Предмет уже вруке, и его просто стакают.
Всё же нагрузки больше от вашего способа, да и я думаю что в этом и суть дюпа, дюпать всё что в руку попадает.
А p.updateInventory() вообще там не нужен.
 
Предмет уже вруке, и его просто стакают.
Стакают ItemStack item

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

да и я думаю что в этом и суть дюпа, дюпать всё что в руку попадает.
Ну, тут уж, как говорится, "На вкус и цвет.. ". Хотя я считаю, что дюп в любом случае - зло
 
Стакают ItemStack item


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


Ну, тут уж, как говорится, "На вкус и цвет.. ". Хотя я считаю, что дюп в любом случае - зло
А ты по думал о бедных школьниках? Если они не будут дюпать у них будет плохое настроение, следовательно станут очень нервными, пропадёт аппетит и уроки перестанут учить. Так что мы спасаем мир!
 
А ты по думал о бедных школьниках? Если они не будут дюпать у них будет плохое настроение, следовательно станут очень нервными, пропадёт аппетит и уроки перестанут учить. Так что мы спасаем мир!
Браво! Только жаль, что эта тема не о прелестях игры Minecraft, а о том, как правильно писать дюп-плагины
 
Всем привет, я написал простейший плагин на дюп, но почему-то он не запускается (в консоли ни малейшего намека на его существование). Экспортировал вроде-бы правильно

Вот код:
Java:
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.*********ventory.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. На момент написания первой строчки я не знал ничерта
1. Ваш класс должен быть реализацией CommandExecutor(implements CommandExecutor)
2. Вы не используете слушатели, так что интерфейс Listener вам имплементировать не надо.
3. В метод onEnable добавите следующее:
Java:
this.getCommand("dupe").setExecutor(this);
4. В plugin.yml в конце допишите:
YAML:
commands:
  dupe:
5. В своем методе обработки команд, вы не изменяете количество предметов в руке игрока. Используйте:
Java:
player.setItemInHand(item);
 

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

Назад
Верх