ServerPlugin Brauche Hilfe bei Programmierung eines Plugins.

Dieses Thema im Forum "Programmierung" wurde erstellt von BlueT3xoN, 23. Februar 2013.

  1. BlueT3xoN
    Offline

    BlueT3xoN

    Registriert seit:
    13. Februar 2013
    Beiträge:
    15
    Hallo ich bin neu hier und brauche nun hilfe
    ich habe eine art Shopsystem in planung
    und nun wollte ich das mein Plugin bei dem ersten laden eine config erstellt (funktioniert super)

    jedoch brauche ich hilfe bei einem code teil undzwar handelt es sich dabei um den preis
    dieser soll aus der Config rausgelesen werden und dann * die anzahl die der spieler eingegeben hat von seinem konto abgezogen bekommen
    also eigendlich nur das der Festgelegte preis der in der Connfig steht rausgelesen wird.

    eigendlich wollte ich das alles in eine variable packen das ich nur z.b. price*amount oder sowas angeben muss jedoch bin ich anfänger und suche nun eure hilfe

    mit freundlichem gruß
    BlueT3XoN
     
    #1
  2. sirkarpfen
    Offline

    sirkarpfen

    Registriert seit:
    23. Februar 2013
    Beiträge:
    10
    Code (Text):
    1. int preis = plugin.getConfig().getInt("Pfad zum Preis")
    So liest man aus der config einen int wert. Wenn du Gleitkomma verwendest, einfach das int durch ein double ersetzen und mit getDouble() den Preis auslesen :).

    Vergiss aber nicht, dass du den Pfad auch dementsprechend in der config.yml eintragen musst. HIer noch ein kleiner Guide zu den Configuration-Objekten: http://wiki.bukkit.org/Introduction_to_the_New_Configuration/de
     
    #2
  3. BlueT3xoN
    Offline

    BlueT3xoN

    Registriert seit:
    13. Februar 2013
    Beiträge:
    15
    danke ^^

    WoW erst mal danke für die schnelle antwort und die seite schau ich mir gleich mal an
    den int muss ich den für jede ItemID nehmen ??
    da ich alle items einbinden wollte und jedes item einen anderen preis haben soll
    jetzt noch mal meine frage an dich persönlich
    wie würdest du diese abfrage umsetzten um von der eingegeben ItemID den preis auszulesen ?
    deine antwort werd ich gleich mal ausprobieren und die seite anschauen

    ich entschuldige mich für die umstände
    bin aber ein neuling im programmieren von Plugins
    bisher klappt auch alles super nur dieses auslesen eben nicht

    ach ja und das Verkaufen von items klappt dann wohl auch so über den INT z.b. int verkauspreis

    ich danke dir noch mal ^^

    okay neues problem neues glück
    wenn ich nun /buy 1 3 (also 3 stone) dann kommt :

    "An internal Error occurred while attempting to perform this command"

    hier mein Buy code (bin anfänger)

    Code (Text):
    1. package me.peddi20.MultiPlugin.VipShop;
    2.  
    3. import java.text.NumberFormat;
    4. import me.peddi20.MultiPlugin.MultiPlugin;
    5.  
    6. import net.milkbowl.vault.economy.Economy;
    7.  
    8. import org.bukkit.ChatColor;
    9. import org.bukkit.command.Command;
    10. import org.bukkit.command.CommandExecutor;
    11. import org.bukkit.command.CommandSender;
    12. import org.bukkit.entity.Player;
    13. import org.bukkit.inventory.Inventory;
    14. import org.bukkit.inventory.ItemStack;
    15. import org.bukkit.inventory.PlayerInventory;
    16. import org.bukkit.plugin.java.JavaPlugin;
    17.  
    18. public class CommandBuy extends JavaPlugin
    19. {
    20.  
    21.     private Economy econ;
    22.    
    23.     public CommandBuy(MultiPlugin Multiplugin)
    24.     {
    25.         this.econ = MultiPlugin.economy;
    26.     }
    27.  
    28.     public boolean onCommand(CommandSender cs, Command cmd, String Label, String[] args)
    29.     {
    30.         if (cs instanceof Player)
    31.         {
    32.             Player p = (Player) cs;
    33.             PlayerInventory pi = p.getInventory();
    34.             int itemid = new preise().getItemID(args[0]);
    35.             int amount;
    36.             int preis = this.getConfig().getInt("vipshop.preise");
    37.             if (args.length != 2)
    38.             {
    39.                 p.sendMessage("falsche anzahl an Parametern");
    40.                 return true;
    41.             }
    42.             try
    43.             {
    44.                 itemid = Integer.valueOf(args[0]);
    45.                 amount = Integer.valueOf(args[1]);
    46.             } catch (NumberFormatException nfe)
    47.             {
    48.                 cs.sendMessage("Du musst eine Zahl Angeben");
    49.                 return true;
    50.             }
    51.             if (Label.equalsIgnoreCase("buy"))
    52.             {
    53.                 if (pi.firstEmpty() == -1)
    54.                 {
    55.                     cs.sendMessage("Dein Inventar ist voll");
    56.                     return true;
    57.                 } else {
    58.                    
    59.                     if (this.econ.has(p.getName(), preis*amount))
    60.                     {
    61.                         pi.addItem(new ItemStack(itemid, amount));
    62.                         this.econ.withdrawPlayer(p.getName(), preis*amount);
    63.                         p.updateInventory();
    64.                     } else {
    65.                         cs.sendMessage("Du hast nicht genug " +this.econ.currencyNameSingular() + "!");
    66.                         return true;
    67.                 }
    68.             }
    69.  
    70.             } else if (Label.equalsIgnoreCase("sell"))
    71.             {
    72.                
    73.             }
    74.         }
    75.         cs.sendMessage("MultiPlugin");
    76.         return false;
    77.     }
    78.    
    79.  
    80.  
    81. }
    82.  
    und hier der teil mit der config

    Code (Text):
    1. public void loadConfig()
    2.     {
    3.         String path1 = "vipshop.preise.stone";
    4.         this.getConfig().addDefault(path1, "10");
    5.                
    6.         this.getConfig().options().copyDefaults(true);
    7.         this.saveConfig();
    8.     }
    falls ihr fehler / verbesserungen findet sagt es mit bitte
     
    #3
  4. MrFlieder
    Offline

    MrFlieder

    Registriert seit:
    30. Dezember 2011
    Beiträge:
    333
    Ort:
    Österreich
    Minecraft:
    MrFlieder
    In deiner Config gibt es keinen Pfad "vipshop.preise".
    Ich würde die Items in der Config folgendermaßen eintragen:
    Code (Text):
    1. getConfig().set("vipshop.preis.1", 5);
    Somit setzt du für ItemID 1 den Preis 5.

    Dann kannst du, wenn jemand Stein kaufen will, und nicht 1 sondern Stone eingibt deine preise().getItemID("stone"/args[0])-Methode verwenden.

    Improvisierter Code:
    Code (Text):
    1.  
    2. int itemid = 0;
    3. int amount = 0;
    4. int preis = 0;
    5. try
    6. {
    7.     itemid = Integer.parseInt(args[0]);
    8.     amount = Integer.parseInt(args[1]);
    9.     preis = getConfig().getInt("vipshop.preis." + itemid) * amount;
    10. } catch (Exception e)
    11. {
    12.     if(preise().getItemID(args[0]) != null)
    13.     {
    14.         itemid = Integer.parseInt(preise().getItemID(args[0]);
    15.         amount = Integer.parseInt(args[1]);
    16.         preis = getConfig().getInt("vipshop.preis." + itemid) * amount;
    17.     } else
    18.     {
    19.         player.sendMessage("Dieses Item existiert nicht!");
    20.     }
    21. }
    22.  
     
    #4
  5. BlueT3xoN
    Offline

    BlueT3xoN

    Registriert seit:
    13. Februar 2013
    Beiträge:
    15
    weiß nicht wieso aber ich krieg das nicht hin
    es kommt weiterhin dieser fehler

    An internal Error occurred while attempting to perform this command.


    tut mir leid das ich dich noch einmal "belästigen" muss.

    hier mal alle datein des plugins :

    MultiPlugin.java

    Code (Text):
    1. import me.peddi20.MultiPlugin.VipShop.CommandBuy;
    2.  
    3. import net.milkbowl.vault.economy.Economy;
    4.  
    5. import org.bukkit.ChatColor;
    6. import org.bukkit.command.Command;
    7. import org.bukkit.command.CommandSender;
    8. import org.bukkit.configuration.file.FileConfiguration;
    9. import org.bukkit.entity.Player;
    10. import org.bukkit.plugin.RegisteredServiceProvider;
    11. import org.bukkit.plugin.java.JavaPlugin;
    12.  
    13.  
    14. public class MultiPlugin extends JavaPlugin{
    15.    
    16.     public static Economy economy = null;
    17.    
    18.     @Override
    19.     public void onDisable()
    20.     {
    21.         System.out.println("[MultiPlugin] Wurde Deaktiviert");
    22.     }
    23.     @Override
    24.     public void onEnable()
    25.     {
    26.         loadConfig();
    27.         this.setupEconomy();
    28.        
    29.         System.out.println("[MultiPlugin] Aktiviert");
    30.         System.out.println("[MultiPlugin] by peddi20");
    31.         System.out.println("[MultiPlugin] website: http://www.mineyourlife.de/");
    32.        
    33.         this.getCommand("buy").setExecutor(new CommandBuy(this));
    34.     }
    35.     public boolean onCommand(CommandSender Sender, Command cmd, String cmdLabel, String[] args){
    36.         boolean erfolg = false;
    37.        
    38.         Player p = (Player)Sender;
    39.        
    40.         if(cmd.getName().equalsIgnoreCase("multi"))                          
    41.         {
    42.             if(p.hasPermission("multi.help"))                                    
    43.             {
    44.                 if(args.length == 0)                                         
    45.                 {
    46.                     p.sendMessage(ChatColor.GREEN + "============================================");
    47.                     p.sendMessage(ChatColor.GREEN + "============" + ChatColor.GOLD + "  MultiPlugin Hilfe (1/1) " + ChatColor.GREEN + "============");
    48.                     p.sendMessage(ChatColor.GREEN + "============" + ChatColor.GOLD + "         by. peddi20       " + ChatColor.GREEN + "============");
    49.                     p.sendMessage(ChatColor.GREEN + "============================================");
    50.                    
    51.                
    52.                     erfolg = true;
    53.                 } else {
    54.                     erfolg = false;
    55.                 }
    56.             }
    57.         }
    58.         if(cmd.getName().equalsIgnoreCase("multiexp"))                           
    59.         {
    60.             if(p.hasPermission("multi.help.exp"))                                    
    61.             {
    62.                 if(args.length == 0)                                         
    63.                 {
    64.                     p.sendMessage(ChatColor.GREEN + "============================================");
    65.                     p.sendMessage(ChatColor.GREEN + "============" + ChatColor.GOLD + "  MultiPlugin Hilfe EXP.   " + ChatColor.GREEN + "============");
    66.                     p.sendMessage(ChatColor.GREEN + "============" + ChatColor.GOLD + "       by. peddi20         " + ChatColor.GREEN + "============");
    67.                     p.sendMessage(ChatColor.GREEN + "============================================");
    68.                    
    69.                     erfolg = true;
    70.                 } else {
    71.                     erfolg = false;
    72.                 }
    73.             }
    74.         }
    75.                
    76.         return erfolg; 
    77.     }
    78.     private boolean setupEconomy()
    79.     {
    80.         RegisteredServiceProvider<Economy> economyProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class);
    81.         if (economyProvider != null) {
    82.             economy = economyProvider.getProvider();
    83.         }
    84.         return (economy != null);
    85.     }
    86.     public void loadConfig()
    87.     {
    88.         getConfig().set("vipshop.preis.1", 50);
    89.    
    90.         this.getConfig().options().copyDefaults(true);
    91.         this.saveConfig();
    92.     }  
    93.     }
    94.  
    CommandBuy.java

    Code (Text):
    1. package me.peddi20.MultiPlugin.VipShop;
    2.  
    3. import java.text.NumberFormat;
    4. import me.peddi20.MultiPlugin.MultiPlugin;
    5.  
    6. import net.milkbowl.vault.economy.Economy;
    7.  
    8. import org.bukkit.ChatColor;
    9. import org.bukkit.command.Command;
    10. import org.bukkit.command.CommandExecutor;
    11. import org.bukkit.command.CommandSender;
    12. import org.bukkit.entity.Player;
    13. import org.bukkit.inventory.Inventory;
    14. import org.bukkit.inventory.ItemStack;
    15. import org.bukkit.inventory.PlayerInventory;
    16. import org.bukkit.plugin.java.JavaPlugin;
    17.  
    18. public class CommandBuy extends JavaPlugin
    19. {
    20.  
    21.     private Economy econ;
    22.    
    23.     public CommandBuy(MultiPlugin Multiplugin)
    24.     {
    25.         this.econ = MultiPlugin.economy;
    26.     }
    27.     public boolean onCommand(CommandSender cs, Command cmd, String Label, String[] args)
    28.     {
    29.         if (cs instanceof Player)
    30.         {
    31.             Player p = (Player) cs;
    32.             PlayerInventory pi = p.getInventory();
    33.             int itemid = 0;
    34.             int amount = 0;
    35.             int preis = 0;
    36.             if (args.length != 2)
    37.             {
    38.                 p.sendMessage("falsche anzahl an Parametern");
    39.                 return true;
    40.             }
    41.             try
    42.             {
    43.                 itemid = Integer.valueOf(args[0]);
    44.                 amount = Integer.valueOf(args[1]);
    45.                 preis = getConfig().getInt("vipshop.preis." + itemid) * amount;
    46.             } catch (NumberFormatException nfe)
    47.             {
    48.                 cs.sendMessage("Du musst eine Zahl Angeben");
    49.                 return true;
    50.             }
    51.             if (Label.equalsIgnoreCase("buy"))
    52.             {
    53.                 if (pi.firstEmpty() == -1)
    54.                 {
    55.                     cs.sendMessage("Dein Inventar ist voll");
    56.                     return true;
    57.                 } else {
    58.                     if (this.econ.has(p.getName(), preis*amount))
    59.                     {
    60.                         pi.addItem(new ItemStack(itemid, amount));
    61.                         this.econ.withdrawPlayer(p.getName(), preis*amount);
    62.                         p.updateInventory();
    63.                     } else {
    64.                         cs.sendMessage("Du hast nicht genug " +this.econ.currencyNameSingular() + "!");
    65.                         return true;
    66.                 }
    67.             }
    68.             } else if (Label.equalsIgnoreCase("sell"))
    69.             {  
    70.             }
    71.         }
    72.         cs.sendMessage("MultiPlugin");
    73.         return false;
    74.     }
    75. }
    76.  
    VaultAdapter.java

    Code (Text):
    1. package me.peddi20.MultiPlugin.VipShop;
    2.  
    3. import net.milkbowl.vault.economy.Economy;
    4. import net.milkbowl.vault.permission.Permission;
    5.  
    6. import org.bukkit.Bukkit;
    7. import org.bukkit.Server;
    8. import org.bukkit.plugin.RegisteredServiceProvider;
    9.  
    10. public class VaultAdapter {
    11.     private static final String VAULT = "Vault";
    12.  
    13.     private static Economy ecoVault = null;
    14.     private static Permission permVault = null;
    15.     private static boolean vaultLoaded = false;
    16.    
    17.     public static Economy getEconomy(){
    18.         if(!vaultLoaded){
    19.             vaultLoaded = true;
    20.             Server theServer = Bukkit.getServer();
    21.             if (theServer.getPluginManager().getPlugin(VAULT) != null){
    22.                 RegisteredServiceProvider<Economy> rsp = theServer.getServicesManager().getRegistration(Economy.class);
    23.                 if(rsp!=null){
    24.                    ecoVault = rsp.getProvider();
    25.                 }
    26.             }
    27.         }      
    28.         return ecoVault;
    29.     }    
    30.     public static Permission getPermissions(){
    31.         if(!vaultLoaded){
    32.             vaultLoaded = true;
    33.             Server theServer = Bukkit.getServer();
    34.             if (theServer.getPluginManager().getPlugin(VAULT) != null){
    35.                 RegisteredServiceProvider<Permission> rsp = theServer.getServicesManager().getRegistration(Permission.class);
    36.                 if(rsp!=null){
    37.                     permVault = rsp.getProvider();
    38.                 }
    39.             }
    40.         }      
    41.         return permVault;
    42.     }
    43. }
    noch mal sry =(
    bin nen anfänger
     
    #5
  6. games6471
    Online

    games6471

    In der Fehlermeldung stehen immer die Zeilen. Das wäre für die Fehlerfindung besser. Wir könnten schneller den Fehler finden.
     
    #6
  7. BlueT3xoN
    Offline

    BlueT3xoN

    Registriert seit:
    13. Februar 2013
    Beiträge:
    15
    aso ok sry wusste ich nicht
    hier ist server log
    Code (Text):
    1. 2013-02-23 12:13:52 [INFO] Starting minecraft server version 1.4.7
    2. 2013-02-23 12:13:52 [INFO] Loading properties
    3. 2013-02-23 12:13:52 [INFO] Default game type: SURVIVAL
    4. 2013-02-23 12:13:52 [INFO] Generating keypair
    5. 2013-02-23 12:13:52 [INFO] Starting Minecraft server on localhost:25565
    6. 2013-02-23 12:13:52 [INFO] This server is running CraftBukkit version git-Bukkit-1.4.7-R1.0-b2624jnks (MC: 1.4.7) (Implementing API version 1.4.7-R1.0)
    7. 2013-02-23 12:13:53 [INFO] [MultiPlugin] Loading MultiPlugin v0.1
    8. 2013-02-23 12:13:53 [INFO] [Vault] Loading Vault v1.2.23-b301
    9. 2013-02-23 12:13:53 [INFO] [iConomy] Loading iConomy v7.0
    10. 2013-02-23 12:13:53 [INFO] [TagAPI] Loading TagAPI v1.9.3
    11. 2013-02-23 12:13:53 [INFO] [Vault] Enabling Vault v1.2.23-b301
    12. 2013-02-23 12:13:53 [WARNING] iConomy - If you are using Flatfile storage be aware that versions 6, 7 and 8 have a CRITICAL bug which can wipe ALL iconomy data.
    13. 2013-02-23 12:13:53 [WARNING] if you're using Votifier, or any other plugin which handles economy data in a threaded manner your server is at risk!
    14. 2013-02-23 12:13:53 [WARNING] it is highly suggested to use SQL with iCo6 or to use an alternative economy plugin!
    15. 2013-02-23 12:13:53 [INFO] [Vault][Economy] iConomy 6 found: Waiting
    16. 2013-02-23 12:13:53 [INFO] [Vault][Permission] SuperPermissions loaded as backup permission system.
    17. 2013-02-23 12:13:53 [INFO] [Vault] Enabled Version 1.2.23-b301
    18. 2013-02-23 12:13:53 [INFO] [Vault][Economy] iConomy 7 hooked.
    19. 2013-02-23 12:13:53 [WARNING] **** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!
    20. 2013-02-23 12:13:53 [WARNING] The server will make no attempt to authenticate usernames. Beware.
    21. 2013-02-23 12:13:53 [WARNING] While this makes the game possible to play without internet access, it also opens up the ability for hackers to connect with any username they choose.
    22. 2013-02-23 12:13:53 [WARNING] To change this, set "online-mode" to "true" in the server.properties file.
    23. 2013-02-23 12:13:53 [INFO] Preparing level "world"
    24. 2013-02-23 12:13:53 [INFO] Preparing start region for level 0 (Seed: -4750547772315650326)
    25. 2013-02-23 12:13:53 [INFO] Preparing start region for level 1 (Seed: 1709146943286000967)
    26. 2013-02-23 12:13:54 [INFO] Preparing start region for level 2 (Seed: 1709146943286000967)
    27. 2013-02-23 12:13:54 [INFO] Preparing spawn area: 52%
    28. 2013-02-23 12:13:54 [INFO] [MultiPlugin] Enabling MultiPlugin v0.1
    29. 2013-02-23 12:13:54 [INFO] [MultiPlugin] Aktiviert
    30. 2013-02-23 12:13:54 [INFO] [MultiPlugin] by peddi20
    31. 2013-02-23 12:13:54 [INFO] [MultiPlugin] website: http://www.mineyourlife.de/
    32. 2013-02-23 12:13:54 [INFO] [iConomy] Enabling iConomy v7.0
    33. 2013-02-23 12:13:54 [INFO] [iConomy - April Fools] Enabled (18 ms)
    34. 2013-02-23 12:13:54 [INFO] [iConomy] Hello, I'm Nijikokun. Yes, this is an April Fools joke, but '/money top' was fixed! Enjoy :) - Rare Version!
    35. 2013-02-23 12:13:54 [INFO] [iConomy - April Fools] Purged accounts with default balance.
    36. 2013-02-23 12:13:54 [INFO] [TagAPI] Enabling TagAPI v1.9.3
    37. 2013-02-23 12:13:54 [INFO] [TagAPI] Using hooks for CraftBukkit v1_4_R1
    38. 2013-02-23 12:13:54 [INFO] Server permissions file permissions.yml is empty, ignoring it
    39. 2013-02-23 12:13:54 [INFO] Done (1.273s)! For help, type "help" or "?"
    40. 2013-02-23 12:14:01 [INFO] peddi20[/127.0.0.1:61461] logged in with entity id 288 at ([world] -132.865303717659, 70.0, 303.385726003733)
    41. 2013-02-23 12:14:07 [INFO] peddi20 issued server command: /buy 1 3
    42. 2013-02-23 12:14:07 [SEVERE] null
    43. org.bukkit.command.CommandException: Unhandled exception executing command 'buy' in plugin MultiPlugin v0.1
    44.     at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46)
    45.     at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:186)
    46.     at org.bukkit.craftbukkit.v1_4_R1.CraftServer.dispatchCommand(CraftServer.java:514)
    47.     at net.minecraft.server.v1_4_R1.PlayerConnection.handleCommand(PlayerConnection.java:980)
    48.     at net.minecraft.server.v1_4_R1.PlayerConnection.chat(PlayerConnection.java:898)
    49.     at net.minecraft.server.v1_4_R1.PlayerConnection.a(PlayerConnection.java:853)
    50.     at net.minecraft.server.v1_4_R1.Packet3Chat.handle(Packet3Chat.java:44)
    51.     at net.minecraft.server.v1_4_R1.NetworkManager.b(NetworkManager.java:290)
    52.     at net.minecraft.server.v1_4_R1.PlayerConnection.d(PlayerConnection.java:113)
    53.     at net.minecraft.server.v1_4_R1.ServerConnection.b(SourceFile:39)
    54.     at net.minecraft.server.v1_4_R1.DedicatedServerConnection.b(SourceFile:30)
    55.     at net.minecraft.server.v1_4_R1.MinecraftServer.r(MinecraftServer.java:598)
    56.     at net.minecraft.server.v1_4_R1.DedicatedServer.r(DedicatedServer.java:224)
    57.     at net.minecraft.server.v1_4_R1.MinecraftServer.q(MinecraftServer.java:494)
    58.     at net.minecraft.server.v1_4_R1.MinecraftServer.run(MinecraftServer.java:427)
    59.     at net.minecraft.server.v1_4_R1.ThreadServerApplication.run(SourceFile:849)
    60. Caused by: java.lang.IllegalArgumentException: File cannot be null
    61.     at org.apache.commons.lang.Validate.notNull(Validate.java:203)
    62.     at org.bukkit.configuration.file.YamlConfiguration.loadConfiguration(YamlConfiguration.java:170)
    63.     at org.bukkit.plugin.java.JavaPlugin.reloadConfig(JavaPlugin.java:117)
    64.     at org.bukkit.plugin.java.JavaPlugin.getConfig(JavaPlugin.java:111)
    65.     at me.peddi20.MultiPlugin.VipShop.CommandBuy.onCommand(CommandBuy.java:46)
    66.     at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
    67.     ... 15 more
    68. 2013-02-23 12:14:08 [INFO] peddi20 lost connection: disconnect.quitting
    69. 2013-02-23 12:14:08 [INFO] Connection reset
    70. 2013-02-23 12:14:16 [INFO] CONSOLE: Stopping the server..
    71. 2013-02-23 12:14:16 [INFO] Stopping server
    72. 2013-02-23 12:14:16 [INFO] [TagAPI] Disabling TagAPI v1.9.3
    73. 2013-02-23 12:14:16 [INFO] [iConomy] Disabling iConomy v7.0
    74. 2013-02-23 12:14:16 [INFO] [Vault][Economy] iConomy 7 unhooked.
    75. 2013-02-23 12:14:16 [INFO] [iConomy] Closing general data...
    76. 2013-02-23 12:14:16 [INFO] [iConomy] Disabled. (0 ms)
    77. 2013-02-23 12:14:16 [INFO] [Vault] Disabling Vault v1.2.23-b301
    78. 2013-02-23 12:14:16 [INFO] [MultiPlugin] Disabling MultiPlugin v0.1
    79. 2013-02-23 12:14:16 [INFO] [MultiPlugin] Wurde Deaktiviert
    80. 2013-02-23 12:14:16 [INFO] Saving players
    81. 2013-02-23 12:14:16 [WARNING] DSCT: socket closed
    82. 2013-02-23 12:14:16 [INFO] Saving worlds
    83. 2013-02-23 12:14:16 [INFO] Closing listening thread
    84. 2013-02-23 12:14:16 [INFO] Saving chunks for level 'world'/Overworld
    85. 2013-02-23 12:14:17 [INFO] Saving chunks for level 'world_nether'/Nether
    86. 2013-02-23 12:14:17 [INFO] Saving chunks for level 'world_the_end'/The End
    87. 2013-02-23 12:14:17 [INFO] Stopping server
    88.  
     
    #7
  8. games6471
    Online

    games6471

    Hat sich während dem laufendem Plugin eine Configurationdatei erstellt?
     
    #8
  9. BlueT3xoN
    Offline

    BlueT3xoN

    Registriert seit:
    13. Februar 2013
    Beiträge:
    15
    ja hat sich erstellt
    und steht auch alles drin soweit also mit dem vipshop und id1 preis5
    das steht alles wunderbar drin
     
    #9
  10. Smuil
    Online

    Smuil

    Simple Frage: Ist der Command in der plugin.yml eingetragen?
     
    #10
  11. games6471
    Online

    games6471

    ja sonst würde der Befehl gar nicht ausgeführt werden. Es kommt aber diese Exception:
    File cannot be null
     
    #11
  12. Smuil
    Online

    Smuil

    Darauf habe ich garnicht mehr geachtet^^....kann es sein, dass vllt das Format des Files automatisch geändert wird? Ich wüsste zwar nicht wieso, aber das wäre vllt eine Idee...
     
    #12
  13. games6471
    Online

    games6471

    Ich finds auch ziemlich komisch. Denn die Datei wird wirklich beim starten eines Plugins beschrieben, also kann diese nicht Null sein. Darf ich Fragen welche Craftbukkitversion du (BlueT3XoN)?
     
    #13
  14. BlueT3xoN
    Offline

    BlueT3xoN

    Registriert seit:
    13. Februar 2013
    Beiträge:
    15
    ich nutze die craftbukkit-1.4.7-R1.0
    und ja der befehl ist eingetragen
    und nein die config bleibt bei .yml
    ich habe keine ahnung warum dies nicht funktioniert ich bitte um hilfe
     
    #14
  15. sirkarpfen
    Offline

    sirkarpfen

    Registriert seit:
    23. Februar 2013
    Beiträge:
    10
    Also es könnte daran liegen, dass du sowohl MultiPlugin als auch CommandBuy von JavaPlugin erben lässt. Damit hast du eigentlich 2 main-Klassen erstellt. Wenn du in CommandBuy getConfig() aufrufst, rufst du eine Config ab, die es in CommandBuy einfach nicht gibt. Die Config wird erst erstellt, wenn die onEnable()-Methode der jeweiligen Klasse fertig ist.

    Mein Vorschlag ist, dass du erstmal die Deklaration der Klasse CommandBuy auf:

    Code (Text):
    1. public class CommandBuy extends CommandExecutor
    änderst. Dann die Zeile in der MultiPlugin Klasse:

    Code (Text):
    1. this.getCommand("buy").setExecutor(new CommandBuy(this));
    auf das hier änderst:

    Code (Text):
    1. this.getCommand("buy").setExecutor(new CommandBuy(this, getConfig()));
    Somit hast du der CommandBuy-Klasse, die Config überliefert.
    Nun musst du noch den Konstruktor der Klasse CommandBuy abändern:

    Code (Text):
    1. private FileConfiguration config;
    2.  
    3. public CommandBuy(MultiPlugin Multiplugin, FileConfiguration config)
    4.     {
    5.         this.econ = MultiPlugin.economy;
    6.                 this.config = config;
    7.     }
    Anbei bemerke ich noch, dass du mit MultiPlugin.economy einen statischen Zugriff auf die Klasse machst, obwohl du schon als Parameter ein MultiPlugin-Objekt mitlieferst. Richtig wäre hierbei: Multiplugin.economy. Außerdem wäre es der Übersicht halber, angenehmer, wenn du die Java Code Conventions ein wenig beachtest. Variablen immer klein schreiben, Klassen immer groß usw. Gibt sicherlich im Netz, Infos darüber, wie du deinen Code schöner machen kannst :).
     
    #15
  16. BlueT3xoN
    Offline

    BlueT3xoN

    Registriert seit:
    13. Februar 2013
    Beiträge:
    15
    ersteinmal danke für eure antworten
    jedoch besteht der fehle weiterhin

    hat jemand ein selbstgeschriebenes plugin das presie aus einer config liest und könnte mir dies zum anschauen zur verfügung stellen
    damit ich selber noch ein wenig mehr lerne und eventuell finde wo mein fehler ist =(

    // EDIT


    Also wenn ich nun diese zeile rausnehme da das getConfig() rot unterstrichen ist.

    Code (Text):
    1. preis = getconfig().getInt("vipshop.preis." + itemid) * amount;
    und

    Code (Text):
    1. int preis = 0;
    durch

    Code (Text):
    1. int preis = 50;
    ersetze dann kann ich komischerweise kaufen und ein stein kostet tatsächlich 50
    Jedoch wenn ich /buy 1 3 eingebe dann bekomme ich 3 stein und mir werden 150 abgezogen
    aber wenn ich dies eingebe sehe ich im chat "MultiPlugin" und da drunter "/buy" ist zwar nur nen schönheitsfehler aber wenn jemand wieß wies weg geht einfach mal kurz nen kommentar da lassen und ich bitte um hilfe bei dem getConfig
    also diese zeile mit dem getconfig() funktioniert anscheind nicht ganz ich brauch da noch ma hilfe.


    Code (Text):
    1. package me.peddi20.MultiPlugin.VipShop;
    2.  
    3. import java.text.NumberFormat;
    4. import me.peddi20.MultiPlugin.MultiPlugin;
    5.  
    6. import net.milkbowl.vault.economy.Economy;
    7.  
    8. import org.bukkit.ChatColor;
    9. import org.bukkit.command.Command;
    10. import org.bukkit.command.CommandExecutor;
    11. import org.bukkit.command.CommandSender;
    12. import org.bukkit.configuration.file.FileConfiguration;
    13. import org.bukkit.entity.Player;
    14. import org.bukkit.inventory.Inventory;
    15. import org.bukkit.inventory.ItemStack;
    16. import org.bukkit.inventory.PlayerInventory;
    17. import org.bukkit.plugin.java.JavaPlugin;
    18.  
    19. public class CommandBuy implements CommandExecutor
    20. {
    21.  
    22.     private Economy econ;
    23.    
    24.     private FileConfiguration config;
    25.  
    26.     public CommandBuy(MultiPlugin Multiplugin, FileConfiguration config)
    27.         {
    28.             this.econ = MultiPlugin.economy;
    29.                     this.config = config;
    30.         }
    31.  
    32.     public boolean onCommand(CommandSender cs, Command cmd, String Label, String[] args)
    33.     {
    34.         if (cs instanceof Player)
    35.         {
    36.             Player p = (Player) cs;
    37.             PlayerInventory pi = p.getInventory();
    38.             int itemid = 0;
    39.             int amount = 0;
    40.             int preis = 50;
    41.             if (args.length != 2)
    42.             {
    43.                 p.sendMessage("falsche anzahl an Parametern");
    44.                 return true;
    45.             }
    46.             try
    47.             {
    48.                 itemid = Integer.valueOf(args[0]);
    49.                 amount = Integer.valueOf(args[1]);
    50.             } catch (NumberFormatException nfe)
    51.             {
    52.                 cs.sendMessage("Du musst eine Zahl Angeben");
    53.                 return true;
    54.             }
    55.             if (Label.equalsIgnoreCase("buy"))
    56.             {
    57.                 if (pi.firstEmpty() == -1)
    58.                 {
    59.                     cs.sendMessage("Dein Inventar ist voll");
    60.                     return true;
    61.                 } else {
    62.                    
    63.                     if (this.econ.has(p.getName(), preis*amount))
    64.                     {
    65.                         pi.addItem(new ItemStack(itemid, amount));
    66.                         this.econ.withdrawPlayer(p.getName(), preis*amount);
    67.                         p.updateInventory();
    68.                     } else {
    69.                         cs.sendMessage("Du hast nicht genug " +this.econ.currencyNameSingular() + "!");
    70.                         return true;
    71.                 }
    72.             }
    73.  
    74.             } else if (Label.equalsIgnoreCase("sell"))
    75.             {
    76.                
    77.             }
    78.         }
    79.         cs.sendMessage("MultiPlugin");
    80.         return false;
    81.     }
    82.    
    83.  
    84.  
    85. }
     
    #16
  17. sirkarpfen
    Offline

    sirkarpfen

    Registriert seit:
    23. Februar 2013
    Beiträge:
    10
    Also, da du ja jetzt das Config-Objekt über den Konstruktor übernimmst, brauchst du auch kein getConfig() mehr.

    Code (Text):
    1. preis = config.getInt("vipshop.preis." + itemid) * amount;
    ist da der richtige Ansatz.

    So... Nachstehend hab ich mal ein wenig an deiner Klasse rumgebastelt. Ich hoffe die Kommentare dazu helfen dir weiter :). Am besten du kopierst das ganze irgendwo in deinen Eclipse Editor, bzw. den Editor den du benutzt. Damit du die Kommentare besser siehst :).

    Code (Text):
    1. public class CommandBuy implements CommandExecutor {
    2.  
    3.     private Economy econ;
    4.  
    5.     private FileConfiguration config;
    6.    
    7.     // Das hier meinte ich mit klein geschriebenen Variablennamen. Nur klassen sollten groß geschrieben werden,
    8.     // damit die Übersicht gewahrt bleibt
    9.     public CommandBuy(MultiPlugin multiPlugin, FileConfiguration config) {
    10.         this.econ = multiPlugin.economy;
    11.         this.config = config;
    12.     }
    13.  
    14.     public boolean onCommand(CommandSender cs, Command cmd, String label,
    15.             String[] args) {
    16.         // zu allererst abfragen, ob der Sender auch wirklich ein Player ist. Wenn nicht, wirf die message aus, und return.
    17.         if (!(cs instanceof Player)) {
    18.             cs.sendMessage("Nur Spieler können dieses Command ausführen.");
    19.             return true;
    20.         }
    21.        
    22.         // Eleganter als dein Ansatz, weil so die Übersichtlichkeit gewahrt wird. Zu viele verschachtelte If-Abfragen machen es schwer,
    23.         // sich im Code zurecht zu finden.
    24.         Player p = (Player) cs;
    25.        
    26.         // Die Abfrage sollte auch relativ früh vorgenommen werden, damit du dir unnötige Deklarationen oder Berechnungen sparst,
    27.         // falls der User das Command falsch eingegeben hat.
    28.         if (args.length != 2) {
    29.             p.sendMessage("falsche anzahl an Parametern");
    30.             return true;
    31.         }
    32.        
    33.         // erst wenn wirklich /buy eingegeben wird, solltest du anfangen, Berechnungen durchzuführen oder Daten auszulesen.
    34.         if (label.equalsIgnoreCase("buy")) {
    35.             PlayerInventory pi = p.getInventory();
    36.             int itemid = 0;
    37.             int amount = 0;
    38.            
    39.             // das hier meinte ich. Wie oben geschrieben, wird dem Konstruktor dieser Klasse, die Config übergeben. Damit ist
    40.             // jeder weitere Aufruf von getConfig() unnötig geworden.
    41.             int preis = config.getInt("vipshop.preis." + itemid) * amount;
    42.            
    43.             try {
    44.                 itemid = Integer.valueOf(args[0]);
    45.                 amount = Integer.valueOf(args[1]);
    46.             } catch (NumberFormatException nfe) {
    47.                 p.sendMessage("Du musst eine Zahl Angeben");
    48.                 return true;
    49.             }
    50.            
    51.             if (pi.firstEmpty() == -1) {
    52.                 p.sendMessage("Dein Inventar ist voll");
    53.                 return true;
    54.             } else {
    55.                
    56.                 // updateInventory() ist bereits als Deprecated deklariert. Gegebenenfalls musst du die Methode irgendwann austauschen,
    57.                 // Wenn Bukkit eine neue Vergleichbare Methode dazu rausbringt. Ansonsten scheint mir hier kein Fehler vorhanden zu sein.
    58.                 if (this.econ.has(p.getName(), preis * amount)) {
    59.                     pi.addItem(new ItemStack(itemid, amount));
    60.                     this.econ.withdrawPlayer(p.getName(), preis * amount);
    61.                     p.updateInventory();
    62.                 } else {
    63.                     cs.sendMessage("Du hast nicht genug "
    64.                             + this.econ.currencyNameSingular() + "!");
    65.                     return true;
    66.                 }
    67.             }
    68.         }
    69.         // Keine Ahnung wofür das ist...
    70.         p.sendMessage("MultiPlugin");
    71.         return false;
    72.     }
    73. }
     
    #17
  18. BlueT3xoN
    Offline

    BlueT3xoN

    Registriert seit:
    13. Februar 2013
    Beiträge:
    15
    Also erst ma danke für die antwort und das kommentieren meiner datei
    find ich klasse und joa das ganz unten xD habs rausgenommen wusste auch nicht wozu das da ist,

    nu fungtioniert der Buy befehl,

    also :
    wenn ich 1000 € habe
    und ein stein kostet 50
    das währen demnach 20 Steine
    mehr sollte ich eigendlich nicht kriegen
    jedoch wenn ich mit dem kaufpreis über mein budget hinausgehe kommt keine fehlermeldung das ich nciht genügend geld habe
    sondern ich bekomme die anzahl steine die ich eingegeben habe und habe immer noch meine 1000 € auf dem konto ;(
    wenn ich aber 19 eingebe zieht er mir 950 € ab
    es ist nur wenn ich über das vorhandene budget hinausgehe

    ich verzweifel langsam aber sicher, was mache ich falsch ?
    achso und wenn ich /buy 1 20 eingebe dann seh ich den befehl in dem chatfenster was mich ein wenig stört

    mich stört eher das mit dem geld.

    falls du dafür ne lösung hast währe echt super und sry das ich dich wiedr belästige
     
    #18
  19. sirkarpfen
    Offline

    sirkarpfen

    Registriert seit:
    23. Februar 2013
    Beiträge:
    10
    Poste doch der Einfachkeit halber hier deinen kompletten Code. Also aller Klassen. Oder schick mir eine PN mit dem Code, dann kann ich da besser durchschauen.

    PS: Wenn du mich belästigen würdest, hätte ich nimma geantwortet oder? ;)
     
    #19
  20. BlueT3xoN
    Offline

    BlueT3xoN

    Registriert seit:
    13. Februar 2013
    Beiträge:
    15
    //EDIT

    also ich habs selber rausgefunden :D

    habe die zeile
    Code (Text):
    1. int preis = config.getInt("vipshop.preis." + itemid) * amount;
    nur ein wenig runtergesetzt unter das } else {
    und schon klappt alles :D

    //EDIT
    noch ein fehler entdeckt wenn ich mehr als 1 item kaufen wollte hat es komischerweise viel mehr gekostet ^^
    z.b.
    1 stein kostet 10
    ich habe 100 = 10 steine dem nach
    jedoch wenn ich /buy 1 10 eingegen habe kam nun ne fehlermeldung das ich nicht genug geld habe
    die war einfach zu beheben
    undzwar habe ich diese zeile
    Code (Text):
    1. int preis = config.getInt("vipshop.preis." + itemid) * amount;
    in
    Code (Text):
    1. int preis = config.getInt("vipshop.preis." + itemid);
    Geändert
    so kostet tatsächlich alles soviel wie es in der config steht
    und nun kann ich für 100 auch 10 steine kaufen und habe 0 € nach dem kauf
    wenn ich aber 11 kaufen will kommt die meldung ich habe nicht genug geld :D

    wunderbar
    vielen dank an euch alle

    ich melde mich falls ich noch probleme haben sollte
     
    #20