ServerPlugin ShopPlugin werte in YML speichern geht nicht

Dieses Thema im Forum "Programmierung" wurde erstellt von MaxCode, 8. Juni 2014.

  1. MaxCode
    Offline

    MaxCode

    Registriert seit:
    29. Januar 2012
    Beiträge:
    111
    Ort:
    Zu Hause =)
    Minecraft:
    proskatermax
    Hey leute,


    ich bin gerade dabei ein kleines Plugin für meinen Server zu Coden. Es macht bis jetzt wenn man [Shop] auf ein Schild schreibt das dann ein Schild erstellt wird mit dem man sich dann einen Shop kaufen kann. Zum schluss möchte ich es so machen das wenn sich jemand einen Shop kauft das er in eine YML eingetragen wird. Das möchte ich so aussehen lassen:
    Shops:
    Spielername:
    Anzahl: 1

    Bis jetzt geht auch alles nur das Werte einspeichern in die YML leider nicht. :/
    Kann mir da vieleicht jemand weiterhelfen?


    Code:
    package me.minemax.PeopleCraftSystem;

    import java.io.File;
    import java.io.IOException;

    import net.milkbowl.vault.economy.Economy;

    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.block.BlockState;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.block.SignChangeEvent;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.block.Sign;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.configuration.file.YamlConfiguration;

    public class ShopSystemSign implements Listener {

    private Economy econ;
    private FileConfiguration cfg;

    public ShopSystemSign(PeopleCraftSystem peopleCraftSystem) {
    this.econ = PeopleCraftSystem.economy;

    }

    public static void loadShopFile() {
    File file = new File("plugins/PeopleCraft-System" + "Shops.yml");
    FileConfiguration cfg = YamlConfiguration.loadConfiguration(file);


    try {
    cfg.save(file);
    } catch (IOException e) {
    e.printStackTrace();
    }

    }



    @EventHandler
    public void signplace(SignChangeEvent event) {
    Player p = event.getPlayer();

    if (p.hasPermission("pcsystem.sign.create")) {
    Location loc = event.getPlayer().getLocation();
    if (loc.getWorld().getName().equals("spawn")) {
    if (event.getLine(0).contains("[Shop]")) {

    event.setLine(0, ChatColor.DARK_GREEN + "" + ChatColor.BOLD + "[Shop]");
    p.sendMessage(ChatColor.BOLD + "PeopleCraft-ShopSytemschild erfolgreich erstellt!");

    }
    }
    }

    if (event.getLine(0).contains("[Shop]")) {
    if (!p.hasPermission("pcsystem.sign.create")) {

    event.getBlock().breakNaturally();
    p.sendMessage(ChatColor.DARK_GRAY + "[" + ChatColor.DARK_RED + "PeopleCraft-System" + ChatColor.DARK_GRAY+ "] " + ChatColor.GRAY + "Das Schild wurde wieder entfernt da du nicht die Rechte dazu hast");

    }
    }
    }


    @EventHandler
    public void signclick(PlayerInteractEvent event2) {

    Player p = event2.getPlayer();
    Location loc2 = p.getLocation();
    if (loc2.getWorld().getName().equals("spawn")) {
    if (event2.getAction() == Action.RIGHT_CLICK_BLOCK) {
    BlockState bs = event2.getClickedBlock().getState();
    if (bs instanceof Sign) {
    Sign sign = (Sign) bs;
    String line0 = sign.getLine(0);
    String line1 = sign.getLine(1);
    if (line0.contains("[Shop]")) {

    int price = 1000;

    if (this.econ.has(p.getName(), price)) {
    this.econ.withdrawPlayer(p.getName(), price);

    Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "rg addowner " + line1 + " " + p.getName() + " -w spawn");
    Bukkit.getServer().broadcastMessage(ChatColor.DARK_GRAY + "[" + ChatColor.DARK_RED + "PeopleCraft-System" + ChatColor.DARK_GRAY+ "] " + ChatColor.GRAY + p.getName() + " hat sich gerade einen Shop gekauft!");
    Bukkit.getServer().broadcastMessage(ChatColor.DARK_GRAY + "[" + ChatColor.DARK_RED + "PeopleCraft-System" + ChatColor.DARK_GRAY+ "] " + ChatColor.GRAY + "Mache "+ ChatColor.DARK_RED + "/warp shop" + ChatColor.GRAY + " um alle Spielershops zu sehen.");

    p.sendMessage(ChatColor.DARK_GRAY + "[" + ChatColor.DARK_RED + "PeopleCraft-System" + ChatColor.DARK_GRAY+ "] " + ChatColor.GRAY + "Du hast erfolgreich einen Shop erworben. Viel spass damit!");
    p.sendMessage(ChatColor.DARK_GRAY + "[" + ChatColor.DARK_RED + "PeopleCraft-System" + ChatColor.DARK_GRAY+ "] " + ChatColor.GRAY + "Du hast folgenden Shop erworben: " + line1);

    sign.setLine(0, ChatColor.BLACK + " ");
    sign.setLine(1, ChatColor.BLACK + "" + ChatColor.BOLD + "Shop von:");
    sign.setLine(2, p.getName());
    sign.setLine(3, ChatColor.BLACK + " ");
    sign.update();

    cfg.set("Shops." + p.getName() + ".Anzahl", 1);


    } else {
    p.sendMessage(ChatColor.DARK_GRAY + "[" + ChatColor.DARK_RED + "PeopleCraft-System" + ChatColor.DARK_GRAY+ "] " + ChatColor.GRAY + "Du hast nicht genug Geld!");
    p.sendMessage(ChatColor.DARK_GRAY + "[" + ChatColor.DARK_RED + "PeopleCraft-System" + ChatColor.DARK_GRAY+ "] " + ChatColor.GRAY + "Du brauchst: " + ChatColor.DARK_RED + price + ChatColor.GRAY + " Bux");


    }
    }
    }
    }
    }
    }
    }

    OnEnable() teil:
    loadConfigurations();

    loadConfigurations(); teil:
    private void loadConfigurations()
    {
    try
    {
    ShopSystemSign.loadShopFile();
    }
    catch (Exception e)
    {
    System.err.println("[PeopleCraftSystem] Error!");


    }


    Danke schonmal für alle Antworten! :)
    MFG
    Max
     
    #1
  2. StarDrink
    Offline

    StarDrink

    Registriert seit:
    9. September 2011
    Beiträge:
    37
    Minecraft:
    StarDrink
    Moin,

    habs nur übersprungen, allerdings lässt du nach dem cfg.set-Teil, die cfg mittels cfg.save nicht speichern, oder habe ich das etwa übersehen?
     
    #2
  3. MaxCode
    Offline

    MaxCode

    Registriert seit:
    29. Januar 2012
    Beiträge:
    111
    Ort:
    Zu Hause =)
    Minecraft:
    proskatermax
    Ganz wichtig ich habe die Fehlermeldung vergessen.:eek: Kannst du mir mit der Vieleicht sagen was ich falsch gemacht habe?
    Wenn ich cfg.save(file); mache ist file rot unterstrichen. Weiß du warum?

    Fehlermeldung:
    [23:20:57] [Server thread/ERROR]: Could not pass event PlayerInteractEvent to PeopleCraft-System v1.0
    org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:294) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-b3084jnks]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-b3084jnks]
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:501) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-b3084jnks]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:486) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-b3084jnks]
    at org.bukkit.craftbukkit.v1_7_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:216) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-b3084jnks]
    at net.minecraft.server.v1_7_R3.PlayerInteractManager.interact(PlayerInteractManager.java:374) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-b3084jnks]
    at net.minecraft.server.v1_7_R3.PlayerConnection.a(PlayerConnection.java:629) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-b3084jnks]
    at net.minecraft.server.v1_7_R3.PacketPlayInBlockPlace.a(SourceFile:60) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-b3084jnks]
    at net.minecraft.server.v1_7_R3.PacketPlayInBlockPlace.handle(SourceFile:9) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-b3084jnks]
    at net.minecraft.server.v1_7_R3.NetworkManager.a(NetworkManager.java:157) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-b3084jnks]
    at net.minecraft.server.v1_7_R3.ServerConnection.c(SourceFile:134) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-b3084jnks]
    at net.minecraft.server.v1_7_R3.MinecraftServer.v(MinecraftServer.java:667) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-b3084jnks]
    at net.minecraft.server.v1_7_R3.DedicatedServer.v(DedicatedServer.java:260) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-b3084jnks]
    at net.minecraft.server.v1_7_R3.MinecraftServer.u(MinecraftServer.java:558) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-b3084jnks]
    at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java:469) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-b3084jnks]
    at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:628) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-b3084jnks]
    Caused by: java.lang.NullPointerException
    at me.minemax.PeopleCraftSystem.ShopSystemSign.signclick(ShopSystemSign.java:106) ~[?:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_09]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_09]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_09]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_09]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:292) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-b3084jnks]
    ... 15 more

    MFG
    Max
     
    #3
  4. [Dev] iTzSasukeHDxLP
    Online

    [Dev] iTzSasukeHDxLP Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    938
    Code (Text):
    1. public static void loadShopFile() {      
    2.         File file = new File("plugins/PeopleCraft-System" + "Shops.yml");
    3.         FileConfiguration cfg = YamlConfiguration.loadConfiguration(file);
    4.  
    5.  
    6.         try {
    7.             cfg.save(file);
    8.         } catch (IOException e) {
    9.             e.printStackTrace();
    10.         }
    11.  
    12.  
    13.     }

    Da fehlt oben im Pfad ein zweiter Slash.
    Du catcht am Anfang nur die IO also tut ers trotzdem. Beim cfg laden kriegst du dann ne Nullpointer.


    Ich vermute mal du meinst das so:

    Code (Text):
    1. public static void loadShopFile() {      
    2.         File file = new File("plugins/PeopleCraft-System/ + "Shops.yml");
    3.         FileConfiguration cfg = YamlConfiguration.loadConfiguration(file);
    4.  
    5.  
    6.         try {
    7.             cfg.save(file);
    8.         } catch (IOException e) {
    9.             e.printStackTrace();
    10.         }
    11.  
    12.  
    13.     }
    Und der Typ ganz oben hat Recht:

    Code (Text):
    1. [COLOR=#444444][FONT=Verdana]sign.setLine(0, ChatColor.BLACK + " ");[/FONT][/COLOR]
    2. [COLOR=#444444][FONT=Verdana]sign.setLine(1, ChatColor.BLACK + "" + ChatColor.BOLD + "Shop von:");[/FONT][/COLOR]
    3. [COLOR=#444444][FONT=Verdana]sign.setLine(2, p.getName());[/FONT][/COLOR]
    4. [COLOR=#444444][FONT=Verdana]sign.setLine(3, ChatColor.BLACK + " ");[/FONT][/COLOR]
    5. [COLOR=#444444][FONT=Verdana]sign.update();[/FONT][/COLOR]
    6.  
    7. [COLOR=#444444][FONT=Verdana]cfg.set("Shops." + p.getName() + ".Anzahl", 1);[/FONT][/COLOR]
    8.  
    9.  


    Code (Text):
    1. [COLOR=#444444][FONT=Verdana]sign.setLine(0, ChatColor.BLACK + " ");[/FONT][/COLOR]
    2. [COLOR=#444444][FONT=Verdana]sign.setLine(1, ChatColor.BLACK + "" + ChatColor.BOLD + "Shop von:");[/FONT][/COLOR]
    3. [COLOR=#444444][FONT=Verdana]sign.setLine(2, p.getName());[/FONT][/COLOR]
    4. [COLOR=#444444][FONT=Verdana]sign.setLine(3, ChatColor.BLACK + " ");[/FONT][/COLOR]
    5. [COLOR=#444444][FONT=Verdana]sign.update();
    6. [/FONT][/COLOR]
    7. [COLOR=#ff0000]//Leg hier einfach ne neue FileConfiguration an und gib diesmal den richtigen Pfad an.[/COLOR]
    8.  
    9.  
    10. [COLOR=#444444][FONT=Verdana]cfg.set("Shops." + p.getName() + ".Anzahl", 1);
    11.  
    12. [/FONT][/COLOR][COLOR=#ff0000]//try{ cfg.save(file); } catch...[/COLOR]
    13.  
    14.  
     
    #4
    1 Person gefällt das.
  5. MaxCode
    Offline

    MaxCode

    Registriert seit:
    29. Januar 2012
    Beiträge:
    111
    Ort:
    Zu Hause =)
    Minecraft:
    proskatermax
    Habs hinbekommen. Dickes Danke! :)

    MFG
    Max
     
    #5