• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Config aus Ressourcen kopieren

Mario52

Workaholic
Registriert
19 August 2013
Beiträge
507
Diamanten
1
Minecraft
Mario_52
Hallo, das Thema wurde vor kurzem schon angesprochen, aber ich habe ein neues Problem:
Vorhin hat es geklappt, die Config aus den Ressourcen zu kopieren, jetzt gibt es einen Fehler.
Code:
[21:58:59] [Server thread/ERROR]: Error occurred while enabling MySecureServer v1.0.0 (Is it up to date?)
java.lang.NullPointerException
    at de.mario52.Main.Mainclass.copyConfig(Mainclass.java:57) ~[?:?]
    at de.mario52.Main.Mainclass.onEnable(Mainclass.java:21) ~[?:?]
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:250) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:350) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:389) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at org.bukkit.craftbukkit.v1_7_R1.CraftServer.loadPlugin(CraftServer.java:439) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at org.bukkit.craftbukkit.v1_7_R1.CraftServer.enablePlugins(CraftServer.java:375) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at org.bukkit.craftbukkit.v1_7_R1.CraftServer.reload(CraftServer.java:773) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at org.bukkit.Bukkit.reload(Bukkit.java:279) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:23) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:175) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at org.bukkit.craftbukkit.v1_7_R1.CraftServer.dispatchCommand(CraftServer.java:683) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at org.bukkit.craftbukkit.v1_7_R1.CraftServer.dispatchServerCommand(CraftServer.java:670) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at net.minecraft.server.v1_7_R1.DedicatedServer.aw(DedicatedServer.java:286) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:251) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:545) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java:457) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:617) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
[21:58:59]

Plugin Code:
Code:
FileOutputStream writer = new FileOutputStream(new File("plugins//MySecureServer//config.yml"));
            InputStream out = Mainclass.class.getResourceAsStream("/config.yml");
            byte[] linebuffer = new byte[1024];
            int lineLength;
           
            while((lineLength = out.read(linebuffer)) > 0)
            {
            writer.write(linebuffer, 0, lineLength);
            }
            out.close();
            writer.close();

Fehlerzeile:
Code:
while((lineLength = out.read(linebuffer)) > 0)

Ich hoffe jemand kann mir helfen.
LG
 

MrPyro13

Workaholic
Registriert
29 April 2013
Beiträge
826
Diamanten
300
Minecraft
MrPyro13
Hallo,

ist dieser Code richtig? Wenn ja, wie lasse ich den boolean beim start ausführen? Wenn nein, wie lautet der Code richtig?

Code:
       public boolean saveResourceToPath(String resourcePath, String targetFolder) {
        java.io.InputStream in = getResource(resourcePath);
        if(in == null)
        return false;
     
        int lastIndex = resourcePath.lastIndexOf('/');
        File outDir = new File(dataFolder, resourcePath.substring(0, lastIndex >= 0 ? lastIndex : 0));
        if(!outDir.exists())
        outDir.mkdirs();
        File outFile = new File(targetFolder, resourcePath);
        try {
        if (!outFile.exists()) {
        OutputStream out = new FileOutputStream(outFile);
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
        out.write(buf, 0, len);
        }
        out.close();
        in.close();
        } else {
        return false;
        }
        } catch (IOException ex) {
        return false;
        }
        return true;
        }

Von wo muss ich eigentlich den InputStream importieren? (Zu viele Auswahlmöglichkeiten)
 

MiCrJonas

Threadripper
Registriert
29 Oktober 2012
Beiträge
1.064
Diamanten
0
Was willst du für einen boolean ausführen? Außerdem solltest du den Code richtig formatieren, damit man den auch lesen kann.
InputStream musst du nicht importieren, weil schon angegeben ist, welchen du benutzen musst (
java.io.InputStream).
 

MrPyro13

Workaholic
Registriert
29 April 2013
Beiträge
826
Diamanten
300
Minecraft
MrPyro13
Was willst du für einen boolean ausführen?
Führt der sich der Code von alleine aus? Wenn er in der Main enthalten ist?

Außerdem solltest du den Code richtig formatieren, damit man den auch lesen kann.
http://pastebin.com/L4zQ12r6

InputStream musst du nicht importieren, weil schon angegeben ist, welchen du benutzen musst (
java.io.InputStream).
Dann habe ich es richtig importiert/immportieren lassen bzw gefixt/fixen lassen


Mein obriger Code möchte einfach nicht funktionieren :(
 

MiCrJonas

Threadripper
Registriert
29 Oktober 2012
Beiträge
1.064
Diamanten
0
Schau mal hier: http://de.wikipedia.org/wiki/Quelltextformatierung zur Quelltextformatierung.

Du musst die Methode in der onEnable()-Methode aufrufen und die Pfade übergeben:
Code:
public void onEnable() {
  saveResourceToPath("Lobby/src/messages.yml", "plugins/Lobby/messages.yml");
  //Weiterer Code

Die Variablen 'resourcePath' und 'targetFolder' benötigst du dann nicht mehr.
 

MrPyro13

Workaholic
Registriert
29 April 2013
Beiträge
826
Diamanten
300
Minecraft
MrPyro13
Es möchte einfach nicht kopieren!
Und das dataFolder wird rot Unterstrichen

Code:
package de.mrpyro13.lobby;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.inventory.Inventory;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin {
  
    @Override
    public void onDisable() {
        System.out.println("[Lobby] Plugin wurde beendet");
    }
  
    @Override
    public void onEnable() {
        System.out.println("[Battelfield - Statistik] Plugin wurde gestartet");
      
        //Config Laden
        loadConfig();
      
        //Messages + Levels Laden
        saveResourceToPath("Lobby/src/messages.yml","/plugins/Lobby/messages.yml");
      
        //Command Imports
      
        //Listener Imports
        new Listener_Join(this);
        new Listener_Quit(this);
        new Listener_InvMenu_Haupt(this);
        new Listener_InvMenu_Opening(this);
      
    }
  
    //FILE IMPORT
  
    File messages= new File("plugins/Lobby", "messages.yml");
    FileConfiguration msg_cfg = YamlConfiguration.loadConfiguration(messages);
  
    File data = new File("plugins/_Database_", "data.yml");
    FileConfiguration data_cfg = YamlConfiguration.loadConfiguration(data);

    File levels = new File("plugins/_Database_", "levels.yml");
    FileConfiguration lvl_cfg = YamlConfiguration.loadConfiguration(levels);
  
  
    //Extra
    public Inventory inv;
  
  
    //Public Voids
    public void loadConfig() {
        getConfig().options().copyDefaults(true);
        saveConfig();
    }
  
    public void saveData() {
        try {
            data_cfg.save(data);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public boolean saveResourceToPath(String resourcePath, String targetFolder) {
        java.io.InputStream in = getResource(resourcePath);
        if(in == null)
        return false;
       
        int lastIndex = resourcePath.lastIndexOf('/');
        File outDir = new File(dataFolder, resourcePath.substring(0, lastIndex >= 0 ? lastIndex  : 0));
        if(!outDir.exists())
        outDir.mkdirs();
        File outFile = new File(targetFolder, resourcePath);
        try {
        if (!outFile.exists()) {
        OutputStream out = new FileOutputStream(outFile);
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
        out.write(buf, 0, len);
        }
        out.close();
        in.close();
        } else {
        return false;
        }
        } catch (IOException ex) {
        return false;
        }
        return true;
        }

}
 

Elrontur

Ehemaliges Teammitglied
Ehem. Teammitglied
Registriert
5 April 2013
Beiträge
138
Diamanten
0
Wenn es echt nur um eine normale Config geht, habe ich auch was zu liefern. Das hat bei mir eig. immer gut funktioniert, was Windows angeht. Einige Leute haben auf meine Plugins geantwortet, dass damit ein Linux-MCServer net klarkommt... Ich kann da jedoch leider nicht ansetzen. ^^ Hat was mit den "/" zu tun bzw. "\" bei Windows. (Ich habe meinen Configfile-Pfad definitiv nicht hardcoded und keine / oder \ benutzt.)

Code:
File config = new File(getDataFolder(), "config.yml");
if(!getDataFolder().exists()) {
    getDataFolder().mkdir();
}
if (!config.exists()) {
    getConfig().options().copyDefaults(true);
    saveConfig();

    getLogger().log(Level.INFO, "Config created. Configure the config.yml and restart the server to connect to your database!");
} else {
    // DO STUFF ...
}
 

_Baum_

Kuhfänger
Registriert
4 August 2013
Beiträge
66
Diamanten
0
Minecraft
PlueschAffe
Hi zusammen,

mal ganz ehrlich, worum geht es hier eigentlich? Eine ganz normale Config?!
Wenn man schon den Luxus genießt und Bukkit benutzen kann, wieso dann so umständlich?

Config laden:
Code:
//Sollte im onEnable() stehen

//Normale Config
String currentDir= System.getProperty("config.yml");
File Dir = new File(currentDir + "/plugins/PluginName/config.yml");
if(!Dir.exists())
{
       plugin.saveDefaultConfig();
  }

//Selbstbenannte Config
FileConfiguratioon egal_yml = YamlConfiguration.loadConfiguration(new File("plugins/Egal/egal.yml"));
//Der Ordner "Egal" und das Dokument "egal.yml" scheinen sich au magische Art und Weise zu erstellen :O



Mit der Config irgendwas machen:
Code:
FileConfiguration config = plugin.getConfig();
//Für selbstbennante Config siehe oben

Die Config bearbeiten
Code:
config.set("pfad","Wert");
//Wert kann hier zB. den Datentyp Boolean, String, Integer, etc. haben)
//Methode überschreibt oder legt neu an
//Für selbstbenannte Config identisch, da Datentyp gleich


Werte aus der Config auslesen:
Code:
config.get("pfad");
//Oder:
config.getString("Pfad");
config.getStringList("Pfad");
...
//Für selbstbenannte Config identisch, da Datentyp gleich

Die Config speichern:
Code:
//Normale Config
plugin.saveConfig();

//Selbstbenannte Config
egal_yml.save(new File("plugins/Egal/egal.yml"));

Sollte der Code in der Mainclass ausgeführt werden kann man statt "plugin" auch "this" schreiben.
Sonst muss "plugin" ein Wert (in diesem Fall die Mainclass) zugewiesen werden.

War das das Problem? :D

MfG
_Baum_
 
Zuletzt bearbeitet:
Oben