ServerPlugin Config bearbeiten ?

Dieses Thema im Forum "Programmierung" wurde erstellt von Payno4, 4. August 2015.

  1. Payno4
    Offline

    Payno4

    Registriert seit:
    12. Februar 2015
    Beiträge:
    117
    Hei Community ,

    ich versuche schon die ganze Zeit über ein Command , eine Location in die Config einzutragen , damit ich sie später wieder abrufen kann , doch leider gelingt mir das nicht wirklich .

    Hoffentlich könnt ihr mir helfen . :)

    Code :
    Code (Text):
    1.  
    2. package CommandManager;
    3.  
    4.  
    5.  
    6. import org.bukkit.Location;
    7.  
    8. import org.bukkit.command.Command;
    9.  
    10. import org.bukkit.command.CommandExecutor;
    11.  
    12. import org.bukkit.command.CommandSender;
    13.  
    14. import org.bukkit.entity.Player;
    15.  
    16.  
    17.  
    18. import JNRmain.main;
    19.  
    20.  
    21.  
    22. publicclasssavePosimplementsCommandExecutor{
    23.  
    24.  
    25.  
    26.     privatestaticmain pl;
    27.  
    28.  
    29.  
    30.     @Override
    31.  
    32.     publicbooleanonCommand(CommandSendersender,Commandcmd,Stringlabel,String[]args){
    33.  
    34.         Player p =(Player)sender;
    35.  
    36.         Location loc = p.getLocation();
    37.  
    38.  
    39.  
    40.         if(senderinstanceofPlayer){
    41.  
    42.             if(args.length == 1){
    43.  
    44.                 String arg = args[0];
    45.  
    46.                 if(arg.equalsIgnoreCase("start")){
    47.  
    48.                     pl.getConfig().addDefault("pos.start.x", loc);
    49.  
    50.                     p.sendMessage("Start wurde gesetzt");
    51.  
    52.                     pl.saveConfig();
    53.  
    54.                 }
    55.  
    56.                 if(arg.equalsIgnoreCase("end")){
    57.  
    58.                     pl.getConfig().set("pos.end.x", loc );
    59.  
    60.                     p.sendMessage("Ende wurde gesetzt");
    61.  
    62.                     pl.saveConfig();
    63.  
    64.                 }
    65.  
    66.             }
    67.  
    68.         }
    69.  
    70.         returnfalse;
    71.  
    72.     }
    73.  
    74. }
    75.  
    76.  
    77.  

    Die Fehlermeldung :
    Code (Text):
    1.  
    2. [09:49:24 INFO]: payno4 issued server command: /pos start
    3.  
    4. [09:49:24 ERROR]: null
    5.  
    6. org.bukkit.command.CommandException: Unhandled exception executing command 'pos' in plugin JNR v1.0
    7.  
    8.     at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot-1.8.3.jar:git-Spigot-870264a-0a645a2]
    9.  
    10.     at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[spigot-1.8.3.jar:git-Spigot-870264a-0a645a2]
    11.  
    12.     at org.bukkit.craftbukkit.v1_8_R2.CraftServer.dispatchCommand(CraftServer.java:646) ~[spigot-1.8.3.jar:git-Spigot-870264a-0a645a2]
    13.  
    14.     at net.minecraft.server.v1_8_R2.PlayerConnection.handleCommand(PlayerConnection.java:1139) [spigot-1.8.3.jar:git-Spigot-870264a-0a645a2]
    15.  
    16.     at net.minecraft.server.v1_8_R2.PlayerConnection.a(PlayerConnection.java:974) [spigot-1.8.3.jar:git-Spigot-870264a-0a645a2]
    17.  
    18.     at net.minecraft.server.v1_8_R2.PacketPlayInChat.a(PacketPlayInChat.java:45) [spigot-1.8.3.jar:git-Spigot-870264a-0a645a2]
    19.  
    20.     at net.minecraft.server.v1_8_R2.PacketPlayInChat.a(PacketPlayInChat.java:1) [spigot-1.8.3.jar:git-Spigot-870264a-0a645a2]
    21.  
    22.     at net.minecraft.server.v1_8_R2.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.8.3.jar:git-Spigot-870264a-0a645a2]
    23.  
    24.     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_45]
    25.  
    26.     at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_45]
    27.  
    28.     at net.minecraft.server.v1_8_R2.SystemUtils.a(SourceFile:60) [spigot-1.8.3.jar:git-Spigot-870264a-0a645a2]
    29.  
    30.     at net.minecraft.server.v1_8_R2.MinecraftServer.A(MinecraftServer.java:712) [spigot-1.8.3.jar:git-Spigot-870264a-0a645a2]
    31.  
    32.     at net.minecraft.server.v1_8_R2.DedicatedServer.A(DedicatedServer.java:368) [spigot-1.8.3.jar:git-Spigot-870264a-0a645a2]
    33.  
    34.     at net.minecraft.server.v1_8_R2.MinecraftServer.z(MinecraftServer.java:651) [spigot-1.8.3.jar:git-Spigot-870264a-0a645a2]
    35.  
    36.     at net.minecraft.server.v1_8_R2.MinecraftServer.run(MinecraftServer.java:554) [spigot-1.8.3.jar:git-Spigot-870264a-0a645a2]
    37.  
    38.     at java.lang.Thread.run(Thread.java:745) [?:1.8.0_45]
    39.  
    40. Caused by: java.lang.NullPointerException
    41.  
    42.     at CommandManager.savePos.onCommand(savePos.java:24) ~[?:?]
    43.  
    44.     at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot-1.8.3.jar:git-Spigot-870264a-0a645a2]
    45.  
    46.     ... 15 more
    47.  
    48.  
    49.  
     
    #1
  2. Victini151
    Offline

    Victini151

    Würdest du bitte Zeile 24 hervorheben? Die können wir uns leider nicht ansehen, so wie der Code eingefügt ist :)

    Alternativ kannst du den Code auch auf hastebin.com einfügen, dort sollte das wunderbar klappen.
     
    #2
  3. seschi98
    Offline

    seschi98

    Registriert seit:
    28. Juni 2013
    Beiträge:
    7
    Also so wie ich das sehe, versuchst du damit die ganze Location in einer Variable zu speichern. Besser wäre es jedoch, alle Parameter in einer einzelnen Config-Variable zu speichern. Ist hier im Bukkit-Forum auch erklärt, ein einfaches googlen hätte auch gereicht...
     
    #3
    ItZMichii und Payno4 gefällt das.
  4. necnuc
    Offline

    necnuc

    Registriert seit:
    15. Dezember 2013
    Beiträge:
    36
    Ort:
    /home
    Minecraft:
    necnuc | Der Kunde
    Versuche es lieber wie der @seschi98 das gesagt hat, zB.:
    Code (Text):
    1.          Player p =(Player)sender;
    2.         Location loc = p.getLocation();
    3.         if(senderinstanceofPlayer){
    4.             if(args.length == 1){
    5.                 String arg = args[0];
    6.                 if(arg.equalsIgnoreCase("start")){
    7.  
    8.                     int x = loc.getBlockX();
    9.                     int y = loc.getBlockZ();
    10.                     int z = loc.getBlockY();
    11.  
    12.                     pl.getConfig().addDefault("pos.start.x", x);
    13.                     pl.getConfig().addDefault("pos.start.y", y);
    14.                     pl.getConfig().addDefault("pos.start.z", z);
    15.                     p.sendMessage("Start wurde gesetzt");
    16.                     pl.saveConfig();
    17.                 }
    So solltest du alle Variablen in der Config speichern und bei dem auslesen setzt du diese natürlich zu einer Location zusammen wobei da noch eine Welt benötigt wird.

    LG Nick.
     
    #4
    Payno4 gefällt das.
  5. Payno4
    Offline

    Payno4

    Registriert seit:
    12. Februar 2015
    Beiträge:
    117
    Ich habs mal so gemacht wie du geschrieben hast aber irgendwie taucht immer noch die gleiche Fehlermeldung wie oben auf . :(
     
    #5
  6. Victini151
    Offline

    Victini151

    Dann zeig uns doch jetzt bitte die Zeile 24, sofern der Fehler dort noch immer auftritt :)
     
    #6
    Payno4 gefällt das.
  7. GPSforLEGENDS
    Offline

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    295
    Ort:
    Bürostuhl
    Minecraft:
    GPSforLEGENDS
    Code (Text):
    1. private static main pl;
    1. private static .....
    2. Ich sehe an keiner stelle das du der Variable ein Wert zuweist.
    3. Java lernen bevor man mit Bukkit anfängt.

    Lösung: Mach entweder eine eigene Config Klasse so wie die hier:
    Code (Text):
    1. public class CFG {
    2.  
    3.      // Variables
    4.     private static YamlConfiguration myConfig;
    5.     private static File configFile;
    6.     private static boolean loaded = false;
    7.     /**
    8.      * Gets the configuration file.
    9.      *
    10.      * @return the myConfig
    11.      */
    12.     public static YamlConfiguration getConfig() {
    13.         if (!loaded) {
    14.             loadConfig();
    15.         }
    16.         return myConfig;
    17.     }
    18.     /**
    19.      * Gets the configuration file.
    20.      *
    21.      * @return Configuration file
    22.      */
    23.     public static File getConfigFile() {
    24.         return configFile;
    25.     }
    26.     /**
    27.      * Loads the configuration file from the .jar.
    28.      */
    29.     public static void loadConfig() {
    30.         configFile = new File(Bukkit.getServer().getPluginManager().getPlugin("DeinPluginName").getDataFolder(), "config.yml");
    31.         if (configFile.exists()) {
    32.             myConfig = new YamlConfiguration();
    33.             try {
    34.                 myConfig.load(configFile);
    35.             } catch (FileNotFoundException ex) {
    36.                 // TODO: Log exception
    37.             } catch (IOException ex) {
    38.                 // TODO: Log exception
    39.             } catch (InvalidConfigurationException ex) {
    40.                 // TODO: Log exception
    41.             }
    42.             loaded = true;
    43.         } else {
    44.             try {
    45.                 Bukkit.getServer().getPluginManager().getPlugin("DeinPluginName").getDataFolder().mkdir();
    46.                 InputStream jarURL = itemsCFG.class.getResourceAsStream("/config.yml");
    47.                 copyFile(jarURL, configFile);
    48.                 myConfig = new YamlConfiguration();
    49.                 myConfig.load(configFile);
    50.                 loaded = true;
    51.                 // TODO: Log that config has been loaded
    52.             } catch (Exception e) {
    53.                 // TODO: Log exception
    54.             }
    55.         }
    56.     }
    57.     /**
    58.      * Copies a file to a new location.
    59.      *
    60.      * @param in InputStream
    61.      * @param out File
    62.      *
    63.      * @throws Exception
    64.      */
    65.     static private void copyFile(InputStream in, File out) throws Exception {
    66.         InputStream fis = in;
    67.         FileOutputStream fos = new FileOutputStream(out);
    68.         try {
    69.             byte[] buf = new byte[1024];
    70.             int i = 0;
    71.             while ((i = fis.read(buf)) != -1) {
    72.                 fos.write(buf, 0, i);
    73.             }
    74.         } catch (Exception e) {
    75.             throw e;
    76.         } finally {
    77.             if (fis != null) {
    78.                 fis.close();
    79.             }
    80.             if (fos != null) {
    81.                 fos.close();
    82.             }
    83.         }
    84.     }
    85.     /**
    86.      * Constructor of SpaceConfig.
    87.      */
    88.     private itemsCFG() {
    89.     }
    90.  
    91. }
    92.  
    ODER

    du benutzt ein konstruktor in deine SavePos Klasse

    Code (Text):
    1.         private Main plugin;
    2.  
    3.     public SavePos(Main plugin){
    4.         this.plugin = plugin;
    5.     }
    PS: Bitte berücksichtige besonders Punkt 3!!!
     
    #7
    Eisphoenix und ItZMichii gefällt das.
  8. Payno4
    Offline

    Payno4

    Registriert seit:
    12. Februar 2015
    Beiträge:
    117
    Nachdem ich den Code geändert hab ist es nun ein Paar Zeilen weiter unten . :)
    Code (Text):
    1.  
    2. Caused by: java.lang.NullPointerException
    3.  
    4.     at CommandManager.savePos.onCommand(savePos.java:29) ~[?:?]
    5.  
    6.     at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot-1.8.3.jar:git-Spigot-870264a-0a645a2]
    7.  
    8.     ... 15 more
    9.  
    10.  
    Die Zeile 29 :
    Code (Text):
    1.  
    2.      pl.getConfig().addDefault("pos.start.x", x );
    3.  
     
    #8
    ItZMichii gefällt das.
  9. Victini151
    Offline

    Victini151

    Einer der folgenden Ausdrücke läuft auf null hinaus:
    pl
    pl.getConfig()

    Ist pl initialisiert worden?
     
    #9
    ItZMichii gefällt das.
  10. Basti07711
    Offline

    Basti07711 Ehem. Teammitglied

    Registriert seit:
    2. August 2012
    Beiträge:
    714
    Ort:
    Hinter dir
    Minecraft:
    Basti07711
    Hier mal eine Beispiel, wie ich Locations und Sonstiges abspeichere (Ja ich weiß, dass es Umständlicher ist).

    Code (Javascript):
    1.     @Override
    2.     public boolean onCommand(CommandSender sender, Command cmd, String arg2, String[] args) {
    3.         if(cmd.getName().equalsIgnoreCase("sethome")){
    4.             if(sender instanceof Player){
    5.                 if(args.length == 0){
    6.                     Player p = (Player) sender;
    7.                     if(Main.permission.has(p, "ApocalypseZ.SetHome") | Main.permission.has(p, "ApocalypseZ.*")){
    8.                        
    9.                         try {
    10.                             FileManager.home.load(FileManager.file3);
    11.                         } catch (FileNotFoundException e1) {
    12.                             e1.printStackTrace();
    13.                         } catch (IOException e1) {
    14.                             e1.printStackTrace();
    15.                         } catch (InvalidConfigurationException e1) {
    16.                             e1.printStackTrace();
    17.                         }
    18.                        
    19.                         Location loc = p.getLocation();
    20.                        
    21.                         double x = loc.getX();
    22.                         double y = loc.getY();
    23.                         double z = loc.getZ();
    24.                         double yaw = loc.getYaw();
    25.                         double pitch = loc.getPitch();
    26.                         String wn = loc.getWorld().getName();
    27.                        
    28.                         FileManager.home.set(p.getUniqueId().toString() + ".Home.X", x);
    29.                         FileManager.home.set(p.getUniqueId().toString() + ".Home.Y", y);
    30.                         FileManager.home.set(p.getUniqueId().toString() + ".Home.Z", z);
    31.                         FileManager.home.set(p.getUniqueId().toString() + ".Home.Yaw", yaw);
    32.                         FileManager.home.set(p.getUniqueId().toString() + ".Home.Pitch", pitch);
    33.                         FileManager.home.set(p.getUniqueId().toString() + ".Home.World", wn);
    34.                        
    35.                         try {
    36.                             FileManager.home.save(FileManager.file3);
    37.                         } catch (IOException e) {
    38.                             e.printStackTrace();
    39.                         }
    40.                        
    41.                         p.sendMessage("§4[§9Z§4] §2Home gesetzt!");
    42.                        
    43.                     }else{
    44.                         p.sendMessage("§4[§9Z§4] §2Du hast nicht das Recht dazu!");
    45.                     }
    46.                 }
    47.             }
    48.         }
    49.        
    50.         return true;
    51.     }
    Im FileManager steht dann folgendes:

    Code (Javascript):
    1.     public static File file3 = new File("plugins/ApocalypseZ", "Homes.yml");
    2.     public static FileConfiguration home = YamlConfiguration.loadConfiguration(file3);
     
    #10