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

Помогите Failed to remap class plugin.plugin

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

Статус темы:
Закрыта.
  1. Автор темы
    _MCMaster_

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

    Баллы:
    76
    Имя в Minecraft:
    DragOn4ik
    Здравствуйте :)
    Столкнулся я с такой проблемой:
    Я разработал свой первый плагин, в компиляции ошибок не было, plugin.yml составлен правильно.
    Но при загрузке плагина получаю ошибку:
    Код:
    2018-07-25 18:21:54 [SEVERE] Could not load 'plugins/dragoncraft.jar' in folder 'plugins'
    org.bukkit.plugin.InvalidPluginException: java.lang.ClassNotFoundException: Failed to remap class plugin.plugin     at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:176)     at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:307)    
    at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:231)    
    at org.bukkit.craftbukkit.v1_5_R3.CraftServer.loadPlugins(CraftServer.java:265)   
     at org.bukkit.craftbukkit.v1_5_R3.CraftServer.<init>(CraftServer.java:243)    
    at net.minecraft.server.management.ServerConfigurationManager.<init>(ServerConfigurationManager.java:128)    
    at net.minecraft.server.dedicated.DedicatedPlayerList.<init>(SourceFile:11)    
    at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:158)    
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:579)    
    at net.minecraft.server.ThreadMinecraftServer.run(SourceFile:573) Caused by: java.lang.ClassNotFoundException: Failed to remap class plugin.plugin    
    at org.bukkit.plugin.java.PluginClassLoader.remappedFindClass(PluginClassLoader.java:442)    
    at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:356)    
    at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:332)    
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)    
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)    
    at java.lang.Class.forName0(Native Method)    
    at java.lang.Class.forName(Class.java:348)    
    at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:165)    
    ... 9 more
    Caused by: java.lang.IllegalArgumentException    
    at org.objectweb.asm.ClassReader.<init>(Unknown Source)     at org.objectweb.asm.ClassReader.<init>(Unknown Source)     at org.objectweb.asm.ClassReader.<init>(Unknown Source)    
    at net.md_5.specialsource.RemapperPreprocessor.preprocess(RemapperPreprocessor.java:83)   
    at org.bukkit.plugin.java.PluginClassLoader.remappedFindClass(PluginClassLoader.java:398)    
    ... 16 more
    
    Как исправить эту ошибку?
    P.S. Проблема решена.
    Скачать плагин
    package com.dragon4ik.plugin;
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.PlayerDeathEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    public class Plugin extends JavaPlugin implements Listener, CommandExecutor{
    public void onEnable() {
    Bukkit.getPluginManager().registerEvents(this, this); //Регистрация эвента
    getCommand("explokill").setExecutor(this); //Регистрация команды
    Bukkit.getConsoleSender().sendMessage("<DragOn4ik> My plugin is enabled! :)");
    }
    public void onDisable() {
    Bukkit.getConsoleSender().sendMessage("<DragOn4ik> My plugin is disabled! Good bye.");
    }
    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent e)
    {
    if(e.getPlayer().hasPermission("dragon4ik.hidejoin"))
    return;
    String name = e.getPlayer().getName();
    for(Player p:Bukkit.getServer().getOnlinePlayers())
    if(!p.getName().equals(name))
    p.sendMessage("Игрок "+name+" вошёл на сервер!");
    }
    @EventHandler
    public void onDeath(PlayerDeathEvent e) {
    Player player = e.getEntity();
    Player killer = player.getKiller();
    String killername = killer.getName();
    player.sendMessage(ChatColor.DARK_PURPLE + "Вас убил игрок " + ChatColor.RED + killername);
    }
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if(command.getName().equalsIgnoreCase("vk")){
    Player player = (Player)sender;
    if(player.hasPermission("dragon4ik.command.vk")) {
    player.sendMessage(ChatColor.GREEN + "Наша группа ВКонтакте: " + ChatColor.BLUE + "<замени этот текст в Plugin.java>");
    return true;
    } else {
    player.sendMessage(ChatColor.RED + "Недостаточно прав!");
    }
    }
    if(command.getName().equalsIgnoreCase("explokill")) {
    float explosionPower = 4F;
    Player player = (Player)sender;
    if(args.length == 0) {
    player.sendMessage(ChatColor.RED + "А кого взрывать-то? (/explokill [игрок])");
    return true;
    }
    if(player.getServer().getPlayerExact(args[0]) == null) {
    player.sendMessage(ChatColor.RED + "Игрока нет на сервере!");
    return true;
    }
    if(player.hasPermission("dragon4ik.command.explokill")) {

    Player target = player.getServer().getPlayerExact(args[0]);
    target.getWorld().createExplosion(target.getLocation(), explosionPower);
    target.setHealth(0);
    player.sendMessage(ChatColor.AQUA + "Вы взорвали игрока " + ChatColor.RED + target.getName());
    String killer = player.getPlayer().getName();
    String etarget = target.getName();
    Bukkit.getConsoleSender().sendMessage("Игрок " + killer + " взорвал игрока " + etarget);
    return true;
    } else {
    player.sendMessage(ChatColor.DARK_RED + "Недостаточно прав!");
    }
    }
    return false;
    }
    }
    name: DragOn4ikPlugin
    author: DragOn4ik
    version: 0.1
    main: com.dragon4ik.plugin.Plugin
    commands:
    vk:
    description: VK Group
    permission: dragon4ik.command.vk
    usage: /vk
    explokill:
    description: Explode Player
    permission: dragon4ik.command.explokill
    usage: /explokill [player]

    За говнокод простите, первый раз плагин пишу ;)
     
    Последнее редактирование: 26 июл 2018
  2. Zoom4ikDan4ik

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

    Баллы:
    78
    Не через Eclipse создавался?
     
  3. Автор темы
    _MCMaster_

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

    Баллы:
    76
    Имя в Minecraft:
    DragOn4ik
    Вы угадали) Через Eclipse.
     
  4. Nikolai_Faint

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

    Баллы:
    96
    package ru.mcmaster.dragoncraft;
    public class Main;
    main: ru.mcmaster.dragoncraft.Main;
     
  5. Zoom4ikDan4ik

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

    Баллы:
    78
    name: DragonCraft
    author: DragOn4ik
    version: 1.0
    main: com.dragon4ik.plugin.Plugin
    commands:
    vk:
    description: VK Group
    permission: dragoncraft.command.vk
    usage: /vk
    explokill:
    description: Explode Player
    permission: dragoncrat.troll.explokill
    usage: /explokill [player]
    package com.dragon4ik.plugin;

    import java.util.logging.Logger;
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.World;
    import org.bukkit.block.Block;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.event.player.PlayerMoveEvent;
    import org.bukkit.plugin.java.JavaPlugin;

    public class Plugin extends JavaPlugin implements Listener, CommandExecutor{
    Logger console = getLogger();

    public void onEnable() {
    console.info("Plugin successfully enabled!");
    }
    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent e)
    {
    if(e.getPlayer().hasPermission("dragoncraft.join.message.hide"))
    return;
    String name = e.getPlayer().getName();
    for(Player p:Bukkit.getServer().getOnlinePlayers())
    if(!p.getName().equals(name))
    p.sendMessage("Игрок "+name+" вошёл на сервер!");
    }
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if(command.getName().equalsIgnoreCase("vk")){
    Player player = (Player)sender;
    if(player.hasPermission("dragoncraft.command.vk")) {
    player.sendMessage(ChatColor.GREEN + "Наша группа ВКонтакте: " + ChatColor.BLUE + "vk.com/game_dc");
    return true;
    } else {
    player.sendMessage(ChatColor.RED + "Недостаточно прав!");
    }
    }
    if(command.getName().equalsIgnoreCase("explokill")) {
    float explosionPower = 4F;
    Player player = (Player)sender;
    if(player.hasPermission("dragoncraft.troll.explokill")) {
    Player target = player.getServer().getPlayerExact(args[0]);
    target.getWorld().createExplosion(target.getLocation(), explosionPower);
    target.setHealth(0);
    player.sendMessage(ChatColor.DARK_PURPLE + "[DragonCraft Troll] " + ChatColor.AQUA + "Вы взорвали игрока " + ChatColor.RED + target.getName());
    String killer = player.getPlayer().getName();
    String etarget = target.getName();
    console.info("Игрок " + killer + "взорвал игрока" + etarget);
    return true;
    } else {
    player.sendMessage(ChatColor.DARK_RED + "Недостаточно прав!");
    }
    }
    return false;
    }
    }
     
  6. Nikolai_Faint

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

    Баллы:
    96
    Под спойлер.
     
  7. Zoom4ikDan4ik

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

    Баллы:
    78
    Редко тут сижу, сейчас...
     
  8. Nikolai_Faint

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

    Баллы:
    96
    Спасибо.
     
  9. Автор темы
    _MCMaster_

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

    Баллы:
    76
    Имя в Minecraft:
    DragOn4ik
    Спасибо, сейчас попробую ваш вариант.
     
  10. xDark

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

    Баллы:
    96
    Компилировалось под более новую версию джавы (сервер запущен на старой, или же ASM не умеет в эту версию)
     
  11. Автор темы
    _MCMaster_

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

    Баллы:
    76
    Имя в Minecraft:
    DragOn4ik
    Компилировалось под Java 8. Сервер запущен на Java 8.
     
  12. Автор темы
    _MCMaster_

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

    Баллы:
    76
    Имя в Minecraft:
    DragOn4ik
    Так. Проблема была в том что MCPC+ почему-то не захотел запускать мой плагин, обычный bukkit запустил без вопросов.
    Но теперь другая проблема. Не пишется ничего в консоль(не работает логирование), и при выполнении команды /explokill появляется ошибка в консоли(команда выполняется, все работает как надо, но появляется ошибка).
    Ошибка:
    Код:
    2018-07-26 09:41:32 [SEVERE] null org.bukkit.command.CommandException: Unhandled exception executing command 'explokill' in plugin DragonCraft v1.0     
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46)    
     at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:189)     
    at org.bukkit.craftbukkit.v1_5_R3.CraftServer.dispatchCommand(CraftServer.java:523)     
    at net.minecraft.server.v1_5_R3.PlayerConnection.handleCommand(PlayerConnection.java:971)     
    at net.minecraft.server.v1_5_R3.PlayerConnection.chat(PlayerConnection.java:889)     
    at net.minecraft.server.v1_5_R3.PlayerConnection.a(PlayerConnection.java:846)     
    at net.minecraft.server.v1_5_R3.Packet3Chat.handle(Packet3Chat.java:44)     
    at net.minecraft.server.v1_5_R3.NetworkManager.b(NetworkManager.java:292)     
    at net.minecraft.server.v1_5_R3.PlayerConnection.d(PlayerConnection.java:115)     
    at net.minecraft.server.v1_5_R3.ServerConnection.b(SourceFile:35)     
    at net.minecraft.server.v1_5_R3.DedicatedServerConnection.b(SourceFile:30)     
    at net.minecraft.server.v1_5_R3.MinecraftServer.r(MinecraftServer.java:581)     
    at net.minecraft.server.v1_5_R3.DedicatedServer.r(DedicatedServer.java:226)     
    at net.minecraft.server.v1_5_R3.MinecraftServer.q(MinecraftServer.java:477)     
    at net.minecraft.server.v1_5_R3.MinecraftServer.run(MinecraftServer.java:410)     
    at net.minecraft.server.v1_5_R3.ThreadServerApplication.run(SourceFile:573) 
    Caused by: java.lang.NullPointerException     
    at plugin.plugin.onCommand(plugin.java:54)     
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)     
    ... 15 more
    Обновленные сорцы плагина:
    Код:
    package com.dragon4ik.plugin;
    
    import java.util.logging.Logger;
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.World;
    import org.bukkit.block.Block;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.event.player.PlayerMoveEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Plugin extends JavaPlugin implements Listener, CommandExecutor{
    Logger console = getLogger();
    
    public void onEnable() {
    console.info("Plugin successfully enabled!");
    }
    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent e)
    {
    if(e.getPlayer().hasPermission("dragoncraft.join.message.hide"))
    return;
    String name = e.getPlayer().getName();
    for(Player p:Bukkit.getServer().getOnlinePlayers())
    if(!p.getName().equals(name))
    p.sendMessage("Игрок "+name+" вошёл на сервер!");
    }
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if(command.getName().equalsIgnoreCase("vk")){
    Player player = (Player)sender;
    if(player.hasPermission("dragoncraft.command.vk")) {
    player.sendMessage(ChatColor.GREEN + "Наша группа ВКонтакте: " + ChatColor.BLUE + "vk.com/game_dc");
    return true;
    } else {
    player.sendMessage(ChatColor.RED + "Недостаточно прав!");
    }
    }
    if(command.getName().equalsIgnoreCase("explokill")) {
    float explosionPower = 4F;
    Player player = (Player)sender;
    if(player.hasPermission("dragoncraft.troll.explokill")) {
    Player target = player.getServer().getPlayerExact(args[0]);
    target.getWorld().createExplosion(target.getLocation(), explosionPower);
    target.setHealth(0);
    player.sendMessage(ChatColor.DARK_PURPLE + "[DragonCraft Troll] " + ChatColor.AQUA + "Вы взорвали игрока " + ChatColor.RED + target.getName());
    String killer = player.getPlayer().getName();
    String etarget = target.getName();
    console.info("Игрок " + killer + "взорвал игрока" + etarget);
    return true;
    } else {
    player.sendMessage(ChatColor.DARK_RED + "Недостаточно прав!");
    }
    }
    return false;
    }
    }
    
    Код:
    name: DragonCraft
    author: DragOn4ik
    version: 1.0
    main: com.dragon4ik.plugin.Plugin
    commands:
    vk:
    description: VK Group
    permission: dragoncraft.command.vk
    usage: /vk
    explokill:
    description: Explode Player
    permission: dragoncrat.troll.explokill
    usage: /explokill [player]
    
     
  13. HunterGaming

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

    Баллы:
    96
    Имя в Minecraft:
    sqdFendy
    И тут я ахренел, с какого перепуга, плагин, который был написал на Bukkit/Spigot ядре должен запускаться на MCPC+???!!! Это совсем разные ядра, хочешь под MCPC+ писать, импортируй библиотеку MCPC+, а не Bukkit/Spigot
     
  14. Автор темы
    _MCMaster_

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

    Баллы:
    76
    Имя в Minecraft:
    DragOn4ik
    Я первы раз плагин пишу, не знал что это уж совсем разные ядра) Ну а как насчет ошибки в команде, про которую я написал выше? Это происходит уже на bukkit
     
  15. HunterGaming

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

    Баллы:
    96
    Имя в Minecraft:
    sqdFendy
    А по коду вот что, во-первых ты не зарегистрировал Listener при загрузке, во-вторых не зарегистрировал команду, т.к. имплементишь CommandExecutor, а значит нужно регистрировать ее в главном классе

    Bukkit.getPluginManager().registerEvents(this, this); //Регистрация эвента
    getCommand("explokill").setExecutor(this); //Регистрация команды

    Следующее на счет ошибки в кнс.

    Ты получаешь игрока target = Bukkit.getPlayer(args[0]); таким способом, но нужно ведь заранее проверить args[0] на null, либо просто проверить длину массива args, а потом уже получать игрока, а также там нужна будет проверка на target == null => return true;
     
  16. alexandrage

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

    Баллы:
    173
    Капец ты сложный. Проблема там куда проще. MCPC не умеет в class version 52.
     
  17. HunterGaming

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

    Баллы:
    96
    Имя в Minecraft:
    sqdFendy
    Тсс, "имеет*"
     
  18. Автор темы
    _MCMaster_

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

    Баллы:
    76
    Имя в Minecraft:
    DragOn4ik
    Спасибо, сейчас поправлю код.
     
  19. Автор темы
    _MCMaster_

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

    Баллы:
    76
    Имя в Minecraft:
    DragOn4ik
    В какую часть кода это вставить?
    Вставил в начало класса - получаю ошибки компилятора
    P.S. Java ещё учу, если что
     
  20. Автор темы
    _MCMaster_

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

    Баллы:
    76
    Имя в Minecraft:
    DragOn4ik
    И ещё один вопрос: какая ошибка относится к тому, что в консоль ничего не пишет?
     
Статус темы:
Закрыта.

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