ServerPlugin [BUKKIT]: InventarMenü!

Dieses Thema im Forum "Programmierung" wurde erstellt von MineForce, 22. Januar 2014.

  1. MineForce
    Offline

    MineForce Gesperrt

    Registriert seit:
    17. Oktober 2012
    Beiträge:
    122
    Hallo Leute,

    Ich habe ein Problem:

    Ich möchte ein Shop-Plugin machen.
    Es soll aber kein Schilder Shop oder Befehl Shop sein sondern ein Inventar Shop (Gui Shop).

    Aber wenn ich iConomy/Vault einbaue und die Abfrage wenn er auf Item ... klickt und 20 Geld hat soll das passieren doch irgendwie passiert garnix es wird nichtmal überprüft ob er das Geld hat D:

    Weiß jemand ob das überhaupt funktioniert: InventarGui + Economy?

    Hoffe mir kann jemand schnell helfen.
     
    #1
  2. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Wie wäre es, wenn Du mal Deinen Code hier postest? Ja, wäre gut. Ohne den Code kann Dir kein Mensch weiterhelfen!
     
    #2
  3. MineForce
    Offline

    MineForce Gesperrt

    Registriert seit:
    17. Oktober 2012
    Beiträge:
    122
    Code (Text):
    1.             if(event.getCurrentItem().getType() == Material.BOOK_AND_QUILL && this.econ.has(p.getName(), 100)) {
    2.                     this.econ.withdrawPlayer(p.getName(), 100);
    3.                     p.sendMessage("§aDu hast 9000 §6" + this.econ.currencyNameSingular() + "§a bezahlt!");
    4.                     Bukkit.dispatchCommand(c, "manuaddp" + p.getName() + "essentials.enchant");
    5.                     event.getView().close();
    6.                 }else{
    7.                     p.sendMessage("§cDu hast nicht genug §6" + this.econ.currencyNameSingular() + "§c!");
    8.                
    9.               }
    Normaler Weise müsste es funktionieren!
     
    #3
  4. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    #4
  5. MineForce
    Offline

    MineForce Gesperrt

    Registriert seit:
    17. Oktober 2012
    Beiträge:
    122
    Code (Text):
    1. package Shop;
    2.  
    3. import me.FranTv.DiscoverShop.MainClass;
    4. import net.milkbowl.vault.economy.Economy;
    5.  
    6. import org.bukkit.Bukkit;
    7. import org.bukkit.Material;
    8. import org.bukkit.command.ConsoleCommandSender;
    9. import org.bukkit.entity.Player;
    10. import org.bukkit.event.EventHandler;
    11. import org.bukkit.event.Listener;
    12. import org.bukkit.event.inventory.InventoryClickEvent;
    13.  
    14. public class ShopCommandListener implements Listener {
    15.     private Economy econ;
    16.     private MainClass plugin;
    17.    
    18.     public ShopCommandListener(MainClass plugin) {
    19.         this.plugin = plugin;
    20.     }
    21.  
    22.  
    23.     @EventHandler
    24.     public void Inventory(InventoryClickEvent event) {
    25.         Player p = (Player) event.getWhoClicked();
    26.         ConsoleCommandSender c = this.plugin.getServer().getConsoleSender();
    27.        
    28.         if(event.getInventory().getName().equalsIgnoreCase("§aDiscoverCraft CommandShop:")) {
    29.  
    30.             //Kit 1
    31.             if(event.getCurrentItem().getType() == Material.BOOK_AND_QUILL && this.econ.has(p.getName(), 100)) {
    32.                     this.econ.withdrawPlayer(p.getName(), 100);
    33.                     p.sendMessage("§aDu hast 9000 §6" + this.econ.currencyNameSingular() + "§a bezahlt!");
    34.                     Bukkit.dispatchCommand(c, "manuaddp" + p.getName() + "essentials.enchant");
    35.                     event.getView().close();
    36.                 }else{
    37.                     p.sendMessage("§cDu hast nicht genug §6" + this.econ.currencyNameSingular() + "§c!");
    38.                
    39.               }
    40.            
    41.             }else if(event.getCurrentItem().getType() == Material.FEATHER) {
    42.                 if (this.econ.has(p.getName(), 12000)){
    43.                     this.econ.withdrawPlayer(p.getName(), 12000);
    44.                     p.sendMessage("§aDu hast 12000 §6" + this.econ.currencyNameSingular() + "§a bezahlt!");
    45.                     Bukkit.dispatchCommand(c, "manuaddp" + p.getName() + "essentials.fly");
    46.                     event.getView().close();
    47.                 }else{
    48.                     p.sendMessage("§cDu hast nicht genug Geld!");
    49.            
    50.            
    51.         }
    52.             }   }
    53.    
    54.  
    55.    
    56.     }
    57.  
    58.  
    59.  
    60.  
    kb auf Pastebin
     
    #5
  6. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Hast Du Dir die Seite von Vault angeschaut? Da fehlt was oben in der Klasse:
    Code (Text):
    1. public static Economy economy = null;
    2. private boolean setupEconomy()
    3.     {
    4.         RegisteredServiceProvider<Economy> economyProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class);
    5.         if (economyProvider != null) {
    6.             economy = economyProvider.getProvider();
    7.         }
    8.  
    9.         return (economy != null);
    10.     }
    Natürlich muss die Methode im Konstruktor zuerst aufgerufen werden.
    Die Klasse bei Dir wurde nicht einmal initialisiert und das ganze mit Vault "verbunden". Wie soll das denn dann funktionieren?
     
    #6
  7. MineForce
    Offline

    MineForce Gesperrt

    Registriert seit:
    17. Oktober 2012
    Beiträge:
    122
    Hab noch die alte Version von vault da ist einiges anders!
    Hab Economy in der Main Klasse registriert schon mal daran gedacht?

    Und in Plugin.yml depend: [Vault]
     
    #7
  8. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Trotzdem ist "econ" in Deiner Klasse nicht initialisiert. Schreibe in den Konstruktor Deiner Klasse ShopCommandListener:

    Code (Text):
    1. econ = plugin.econ;
    -
    Oder benutze überall wo Du mit der Klasse ShopCommandListener auf Economy zugreifst, statt "this.econ.methode()" "plugin.econ.methode()".
     
    #8
  9. MineForce
    Offline

    MineForce Gesperrt

    Registriert seit:
    17. Oktober 2012
    Beiträge:
    122
    Hast du oben mal gelesen da steht fasst ganz oben privat econ = ...
     
    #9
  10. games6471
    Online

    games6471

    Wie wäre es, wenn du dann mal selber denken würdest.

    Ich geb dir mal ein zwei Hinweise: Getter oder Sichtbarkeit ändern.
     
    #10
  11. MineForce
    Offline

    MineForce Gesperrt

    Registriert seit:
    17. Oktober 2012
    Beiträge:
    122
    was ist getter und sichtbarkeit?

    Neuer Code:
    Code (Text):
    1. package me.FranTv.DiscoverShop;
    2.  
    3. import java.util.ArrayList;
    4.  
    5. import net.milkbowl.vault.economy.Economy;
    6.  
    7. import org.bukkit.Material;
    8. import org.bukkit.command.Command;
    9. import org.bukkit.command.CommandExecutor;
    10. import org.bukkit.command.CommandSender;
    11. import org.bukkit.entity.Player;
    12. import org.bukkit.event.EventHandler;
    13. import org.bukkit.event.Listener;
    14. import org.bukkit.event.inventory.InventoryClickEvent;
    15. import org.bukkit.inventory.Inventory;
    16. import org.bukkit.inventory.ItemStack;
    17. import org.bukkit.inventory.meta.ItemMeta;
    18.  
    19. public class Shop implements CommandExecutor, Listener {
    20.     private Inventory inv = null;
    21.  
    22.     @Override
    23.     public boolean onCommand(CommandSender cs, Command cmd, String label, String[] args) {
    24.        
    25.         Player p = (Player) cs;
    26.        
    27.         if(cmd.getName().equalsIgnoreCase("blockshop")) {
    28.             inv = p.getPlayer().getServer().createInventory(null, 9, "§aDiscoverCraft BlockShop:");
    29.            
    30.             ItemStack istack = new ItemStack(Material.STONE);
    31.             ItemMeta istackMeta = istack.getItemMeta();
    32.             istackMeta.setDisplayName("§aStein");
    33.             ArrayList<String> lore = new ArrayList<>();
    34.             lore.add("§6Preis: 35");
    35.             istackMeta.setLore(lore);
    36.             istack.setItemMeta(istackMeta);
    37.            
    38.             inv.setItem(0, istack);
    39.            
    40.             p.getPlayer().openInventory(inv);
    41.         }
    42.        
    43.         return false;
    44.        
    45.     }
    46.     @EventHandler
    47.     public void Inventory(InventoryClickEvent event) {
    48.         Player pl = (Player) event.getWhoClicked();
    49.        
    50.         ItemStack Stone = new ItemStack(Material.STONE, 10);
    51.        
    52.         if(event.getInventory().getName().equalsIgnoreCase("§aDiscoverCraft BlockShop:")) {
    53.  
    54.            
    55.             if(event.getCurrentItem().getType() == Material.STONE) {
    56.              if (MainClass.econ.has(pl.getName(), 35)){
    57.                  MainClass.econ.withdrawPlayer(pl.getName(), 35);
    58.                 pl.sendMessage("§aDu hast 35 §6" + MainClass.econ.currencyNameSingular() + "§a bezahlt!");
    59.                 pl.getInventory().addItem(new ItemStack(Stone));
    60.                 event.getView().close();
    61.         }}}
    62.  
    63. }}
    64.  
    Code (Text):
    1. [16:45:35 ERROR]: Could not pass event InventoryClickEvent to DiscoverZone v1.2.
    2. 0
    3. org.bukkit.event.EventException
    4.         at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    5. va:320) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
    6.         at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
    7. a:62) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
    8.         at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
    9. ava:481) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
    10.         at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
    11. ava:466) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
    12.         at net.minecraft.server.v1_7_R1.PlayerConnection.a(PlayerConnection.java
    13. :1351) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
    14.         at net.minecraft.server.v1_7_R1.PacketPlayInWindowClick.a(SourceFile:32)
    15.  [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
    16.         at net.minecraft.server.v1_7_R1.PacketPlayInWindowClick.handle(SourceFil
    17. e:10) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
    18.         at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:146
    19. ) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
    20.         at net.minecraft.server.v1_7_R1.ServerConnection.c(SourceFile:134) [craf
    21. tbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
    22.         at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:6
    23. 55) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
    24.         at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:2
    25. 50) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
    26.         at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:5
    27. 45) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
    28.         at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java
    29. :457) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
    30.         at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:6
    31. 17) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
    32. Caused by: java.lang.NullPointerException
    33.         at me.FranTv.DiscoverShop.Shop.Inventory(Shop.java:56) ~[?:?]
    34.         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0
    35. _45]
    36.         at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0
    37. _45]
    38.         at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1
    39. .7.0_45]
    40.         at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_45]
    41.         at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    42. va:318) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
    43.         ... 13 more
     
    #11
  12. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Zeile 56 in Deiner Klasse Shop hat einen Fehler. Welche Zeile bzw. welcher Code ist das?
     
    #12
  13. games6471
    Online

    games6471

    Sichtbarkeit:

    • private
    • package (besitzt kein Schlüsselwort)
    • protected
    • public

    Getter: Es erlaubt dem Entwickler die Abfragen anzupassen. z.B. das Arbeiten mit locks, Read-only Objekten oder Ähnlichem

    private int variable;

    public int getVariable {
    return variable;
    }

    Achso und deine Variable econ ist null.
     
    #13
  14. MineForce
    Offline

    MineForce Gesperrt

    Registriert seit:
    17. Oktober 2012
    Beiträge:
    122
    Hab in der MainClass ganz folgendes:

    Code (Text):
    1. public static Economy econ;
    Economy Methode:
    Code (Text):
    1.     private void setupEconomy()
    2.     {
    3.       RegisteredServiceProvider<Economy> economyProvider = getServer().getServicesManager().getRegistration(Economy.class);
    4.       if (economyProvider != null)
    5.       {
    6.         economy = (Economy)economyProvider.getProvider();
    7.       }
    8.       else
    9.       {
    10.         getServer().getConsoleSender().sendMessage(ChatColor.RED + "Can not find an economy plugin!");
    11.         getServer().getConsoleSender().sendMessage(ChatColor.RED + "Deactivating shop plugin!");
    12.         getPluginLoader().disablePlugin(this);
    13.       }
    14.     }
    Kann mir einer sagen was an der Zeile 56 in der neuen Klasse (Neuer Code oben) falsch ist?
    Ich versteh es nicht ich bin mit Economy noch nicht so weit hab davon kaum Ahnung.
     
    #14
  15. games6471
    Online

    games6471

    Wird die Methode auch wirklich aufgerufen?
     
    #15
  16. MineForce
    Offline

    MineForce Gesperrt

    Registriert seit:
    17. Oktober 2012
    Beiträge:
    122
    Ja hab das Event und den Befehl registriert. Er öffnet ein Inventar so wie es sein soll nur wenn ich auf das Item drücke.
    1. Ich kann es einfach rausnehmen.
    2. Es kommt eine Fehlermeldung.
    3. Es passiert nix.
     
    #16
  17. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Benutze statt "MainClass.econ..." "plugin.econ...", deklariere MainClass in der Klasse "Shop" als "plugin" und initialisiere dies dann im Konstruktor:
    Code (Text):
    1. private MainClass plugin;
    2. public Shop(MainClass plugin) {
    3. this.plugin = plugin;
    4. }
    -
    Außerdem: Warum benutzt Du in deiner Shop Klasse @Override, obwohl Du gar keine Klasse erweiterst? Bzw. von welcher Klasse willst Du die Methode "onCommand()" überschreiben?
     
    #17
  18. MineForce
    Offline

    MineForce Gesperrt

    Registriert seit:
    17. Oktober 2012
    Beiträge:
    122
    Override ka ist halt drin

    Und du weißt das plugin. und MainClass. keinen Unterschied macht fehler kommt trotzdem.
     
    #18
  19. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Bevor wir hier im Thread weitermachen, bitte ich Dich die Javagrundlagen zu lernen...
     
    #19
  20. MineForce
    Offline

    MineForce Gesperrt

    Registriert seit:
    17. Oktober 2012
    Beiträge:
    122
    Sorry ich hab nicht wirklich viel Zeit für lernen (Schule).
    Aber ich brauch das alles wegen meinen Server.
     
    #20