ВОПРОС РЕШЁН

  • Автор темы Автор темы MrMeow
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

MrMeow

Ньюби
Баллы
1
Я написал плагин на деньги и комманду /money с неопределённым количеством аргументов(от 0 до бесконечности аргументов должно приниматься), вот я сделал, скомпилил в JAR, скинул другу на серв, а там выдаёт ошибку по поводу комманды(заранее говорю, проблем с спигот апи и слишком новой версией JRE у меня быть не должно, уже прошёл через это в своём обучении писанию плагинов).
Вот ошибка от сервера друга в консоли и мой код с plugin.yml:
Ошибка:
Код:
[15:22:00 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'money' in plugin ManiMani v1.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[patched_1.16.3.jar:git-Paper-231]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:159) ~[patched_1.16.3.jar:git-Paper-231]
        at org.bukkit.craftbukkit.v1_16_R2.CraftServer.dispatchCommand(CraftServer.java:802) ~[patched_1.16.3.jar:git-Paper-231]
        at net.minecraft.server.v1_16_R2.PlayerConnection.handleCommand(PlayerConnection.java:1918) ~[patched_1.16.3.jar:git-Paper-231]
        at net.minecraft.server.v1_16_R2.PlayerConnection.a(PlayerConnection.java:1729) ~[patched_1.16.3.jar:git-Paper-231]
        at net.minecraft.server.v1_16_R2.PacketPlayInChat.a(PacketPlayInChat.java:47) ~[patched_1.16.3.jar:git-Paper-231]
        at net.minecraft.server.v1_16_R2.PacketPlayInChat.a(PacketPlayInChat.java:5) ~[patched_1.16.3.jar:git-Paper-231]
        at net.minecraft.server.v1_16_R2.PlayerConnectionUtils.lambda$ensureMainThread$1(PlayerConnectionUtils.java:23) ~[patched_1.16.3.jar:git-Paper-231]
        at net.minecraft.server.v1_16_R2.TickTask.run(SourceFile:18) ~[patched_1.16.3.jar:git-Paper-231]
        at net.minecraft.server.v1_16_R2.IAsyncTaskHandler.executeTask(IAsyncTaskHandler.java:136) ~[patched_1.16.3.jar:git-Paper-231]
        at net.minecraft.server.v1_16_R2.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[patched_1.16.3.jar:git-Paper-231]
        at net.minecraft.server.v1_16_R2.IAsyncTaskHandler.executeNext(IAsyncTaskHandler.java:109) ~[patched_1.16.3.jar:git-Paper-231]
        at net.minecraft.server.v1_16_R2.MinecraftServer.ba(MinecraftServer.java:1135) ~[patched_1.16.3.jar:git-Paper-231]
        at net.minecraft.server.v1_16_R2.MinecraftServer.executeNext(MinecraftServer.java:1128) ~[patched_1.16.3.jar:git-Paper-231]
        at net.minecraft.server.v1_16_R2.IAsyncTaskHandler.awaitTasks(IAsyncTaskHandler.java:119) ~[patched_1.16.3.jar:git-Paper-231]
        at net.minecraft.server.v1_16_R2.MinecraftServer.sleepForTick(MinecraftServer.java:1089) ~[patched_1.16.3.jar:git-Paper-231]
        at net.minecraft.server.v1_16_R2.MinecraftServer.w(MinecraftServer.java:1003) ~[patched_1.16.3.jar:git-Paper-231]
        at net.minecraft.server.v1_16_R2.MinecraftServer.lambda$a$0(MinecraftServer.java:177) ~[patched_1.16.3.jar:git-Paper-231]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_261]
Caused by: java.lang.NullPointerException
        at org.mrmeow.mani_mani.CommandMoney.onCommand(CommandMoney.java:12) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[patched_1.16.3.jar:git-Paper-231]
        ... 18 more

Main
Код:
package org.mrmeow.mani_mani;

import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.EntityType;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener{
   @Override
   public void onEnable(){
       this.getCommand("money").setExecutor(new CommandMoney());
       getServer().getPluginManager().registerEvents(this, this);
   }
  
   @EventHandler
   public void onEntityDeath(EntityDeathEvent deathEvent){
       Entity e = deathEvent.getEntity();
       if(e.getType() != null){
           Entity k = ((LivingEntity)e).getKiller();
           if(k.getType() == EntityType.PLAYER){
               if(Money.MoneyList.get(k.getName()) == null)
               {
                   Money.MoneyList.put(k.getName(), 1);
               }
               Money.MoneyList.put(k.getName(), Money.MoneyList.get(k.getName()) + 1);
           }
       }
   }
}


CommandMoney
Код:
package org.mrmeow.mani_mani;

import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;

public class CommandMoney implements CommandExecutor{
    @Override
    public boolean onCommand(CommandSender sender, Command command, String aliases, String[] args){
        if (args.length == 0){
            if(Money.MoneyList.containsKey(sender.getName())){
                sender.sendMessage("У вас " + Integer.toString(Money.MoneyList.get(sender.getName())) + " монеток!");
            }
            else{
                sender.sendMessage("Я конечно могу сказать что у вас 0 монеток, но вы ещё ничего не сделали, идите бейте мобов, а потом можете спрашивать!");
            }
        }
        else{
            Money.MoneyList.forEach((playerName, moneyAmount) ->{
                if(Money.MoneyList.containsKey(playerName)){
                    System.out.println("У игрока " + playerName + " " + Integer.toString(moneyAmount) + " монеток!");
                }
                else{
                    sender.sendMessage("У игрока " + playerName + " ещё не активен счёт!");
                    }
            });
        }
        return true;
    }
}

Money
Код:
package org.mrmeow.mani_mani;
import java.util.HashMap;

public class Money{
    public static HashMap<String, Integer> MoneyList;
}

plugin.yml
Код:
main: org.mrmeow.mani_mani.Main
name: ManiMani
version: 1.0
commands:
    money:
        description: Get someone's money amount!
        aliases: [cash]
        usage: /money [PlayerNames like "George Maria228 PewDieCake"]
 
Может дашь прямой ответ, а не будешь кидать документации и говорить "Изучай java". Человек учится параллельно делая плагины, и попросил помощи. Дай прямой ответ, ты старожил, и раз зашёл сюда, значит что-то знаешь о java и о создание плагинов.
 
sender.sendMessage("У вас " + Integer.toString(Money.MoneyList.get(sender.getName())) + " монеток!");
В этой строке чего-то не существует, скорее всего объекта в листе, который ты просишь достать методом get
 
У тебя поле MoneyList в классе Money не инициализированно.
 
Может дашь прямой ответ, а не будешь кидать документации и говорить "Изучай java". Человек учится параллельно делая плагины, и попросил помощи. Дай прямой ответ, ты старожил, и раз зашёл сюда, значит что-то знаешь о java и о создание плагинов.
А я что сделал? Прямее не бывает.
 
В этой строке чего-то не существует, скорее всего объекта в листе, который ты просишь достать методом get
Код:
if(Money.MoneyList.containsKey(sender.getName())){
                sender.sendMessage("У вас " + Integer.toString(Money.MoneyList.get(sender.getName())) + " монеток!");
            }
            else{
                sender.sendMessage("Я конечно могу сказать что у вас 0 монеток, но вы ещё ничего не сделали, идите бейте мобов, а потом можете спрашивать!");
            }
Нет, я в хэшмапе проверяю, есть ли ключ такой, а потом, если есть, то использую, иначе отвечаю что нет у игрока активного счёта(то что он ничего ещё не заработал и не потратил)
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх